PackageDNA, nuestro framework de análisis de paquetes de desarrollo que debutó en BlackHat

Diego Samuel Espitia    30 agosto, 2021
PackageDNA

Tras varios meses de investigación y desarrollo, durante el evento BlackHat USA 2021 Arsenal, presentamos nuestra herramienta de análisis profundo de paquetes de desarrollo que llamamos PackageDNA. Se pudo ver durante la charla “Scanning DNA to detect malicious packages in your code”, cuyo objetivo era mostrar el framework de análisis de librerías que se programó para ayudar a los desarrolladores y empresas a validar la seguridad de los paquetes que se están usando en sus códigos.

Esta herramienta surgió cuando nos planteamos, en el equipo de Innovación y Laboratorio, analizar el malware que se oculta dentro de las librerías para desarrolladores. Cada cierto tiempo se hacía público que algunas de ellas suplantaban a las originales, como a finales de 2018, cuando se alertó de un par de librerías en PyPi. La historia se repetiría a menudo desde entonces, ¿pero cómo hacer la investigación sin una herramienta que nos facilitara la búsqueda?

Nuestra idea inicial era tomar los paquetes de PyPi únicamente, pero nos propusimos un reto mayor y la idea evolucionó hasta tomar las librerías de los principales lenguajes de programación. Así se convirtió en un framework, que debería mostrar cada paquete que analizaba en PyPi, RubyGems, NPM y Go, los siguientes datos:

  • Metadatos del paquete
  • HASH de todos los archivos que contiene
  • Detección de posibles IoC, como son IP’s, Hash, URL’s y correos electrónicos
  • Análisis estático del código, con una herramienta open source para cada lenguaje
  • Análisis usando AppInspector, la herramienta open source de Microsoft para identificación de componentes maliciosos
  • Validación de archivos sospechosos contra Virustotal
  • Validación de reporte de CVE en GitHub, teniendo en cuenta la versión específica del paquete
  • Validación de paquetes generados por el mismo usuario dentro de la librería y en otros lenguajes de programación
  • Comprobar los posibles typosquatting del paquete en la misma librería

Todo esto terminó en un poderoso framework que permite un análisis profundo de las librerías que se están usando en el código que se analiza o que se está creando, pero que además entrega a los analistas de seguridad una visión estática de la seguridad del código, una visión del comportamiento de atacante y datos para inteligencia de amenazas.

¿Cómo utilizar PackageDNA?

El framework está desarrollado en Python3 con una consola interactiva que le permite al usuario ir seleccionando de forma simple lo que desea hacer. La primera pantalla que ve el usuario es la siguiente:

Desde aquí se debe iniciar con la opción 7 la configuración de todas las herramientas externas que se tienen asociadas al uso del framework (todas son de uso libre o desarrollos de código abierto). Como se puede ver en la siguiente imagen es solo cargar correctamente cada valor.

Una vez se tiene todo configurado, el usuario puede realizar sobre las librerías PyPI, RubyGems, NPM y Go, lo siguiente:

  1. Analizar la última versión de un paquete
  2. Analizar todas las versiones de un paquete y comparar resultados entre las versiones
  3. Cargar una lista de paquetes con versiones específicas
  4. Cargar un paquete local para su análisis

Para el análisis de inteligencia de amenazas, el usuario selecciona la opción 4 en el panel inicial y le permite entrar a otro panel donde puede realizar:

  1. Búsquedas de los paquetes generados en cada una de las librerías y desarrollos cargados en github usando el nombre de usuario que desee investigar.
  2. Analizar los «typosquatting» y «brandsquiatting» que se encuentren en una librería especifica de un paquete.
  3. Hacer búsquedas de segmentos de código dentro de un paquete especifico.

Aunque la herramienta está diseñada sin una base de datos que almacene todas las búsquedas, se dispone de una opción que permite revisar los resultados de los análisis realizados y almacenados localmente en la máquina.

Teniendo la información inicialmente en la consola, pero con la opción de verlo en el navegador a través de Flask, como se ve en las siguientes imágenes.

Ataques a la cadena de suministro, el mejor banco de pruebas

Durante el desarrollo, los ataques a la cadena de suministro de software tomaron una gran relevancia en el mundo, llegando reportes de varios paquetes que se habían detectado como maliciosos en muchas librerías que estaban dentro de nuestro alcance. No podíamos tener mejor escenario de pruebas.

De hecho, logramos poder analizar las versiones de maratlib, un paquete de PyPI que se desplegó para hacer minería de criptomonedas de forma maliciosa y que suplantaba a un paquete comúnmente usado en matemáticas llamado matplotlib.

Al ejecutar la herramienta y usar la comparación en las dos versiones, pudimos ver claramente el segmento de código malicioso que es detectado por AppInspector y que está presente en una sola de las versiones cargadas en la librería.

Pero además, podemos observar los otros paquetes que aparecen el reporte y que son generados usando técnicas de typosquatting.

Así que, con este framework, esperamos poder aportar a la comunidad de desarrolladores y de analistas de seguridad en código, un mecanismo simple pero muy poderoso para cumplir con sus objetivos. Lo pueden descargar de forma libre en https://github.com/telefonica/packagedna y quedamos abiertos a sus comentarios y aportes para mejorar la herramienta.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *