-
Notifications
You must be signed in to change notification settings - Fork 16
Home
Esta herramienta le brinda la capacidad a desarrolladores, investigadores y empresas, de analizar librerías de diferentes lenguajes de programación, que están siendo o van a ser usadas en sus códigos, entregando información que les permite conocer de antemano si esta librería cumple con procesos de desarrollo seguro, si actualmente tiene soporte, el histórico de versiones y vulnerabilidades reportadas de dicha librería.
Este análisis se realiza a todas las versiones de una librería, a la última versión de una librería, a una librería local o a todas las librerías de un lenguaje de programación, entregando al usuario la respuesta en su consola de ejecución o a través de un sitio web, donde el analista va a poder obtener toda la información separada por tipo de análisis y por archivo contenido en la librería.
El análisis inicia con la solicitud de definir si se realiza a todas las librerías de un lenguaje de programación, a todas las versiones de una librería, a la última versión de una librería o a una librería local. Una vez se indica esto, el sistema solicita que se indique el lenguaje de programación, donde se tiene la opción de Python o Ruby. Por último, la herramienta solicita que se indique el nombre de la librería, el cual debe ser exactamente igual a como esta publicado en el repositorio de PyPI para el lenguaje de Python, o en el repositorio de RubyGems para el lenguaje de Ruby.
Con esto la herramienta realiza la ejecución del proceso, que inicia con la validación del HASH publicado en el sitio web del repositorio y con el calculado sobre el archivo descargado. Tras esto se realiza la extracción de metadatos, detección de funciones peligrosas en el paquete, cálculo de hash de todos los archivos que están contenidos en el paquete, extracción de HASH, URL’s, IP’s y correos electrónicos que están en los archivos del paquete y por último la comprobación de la existencia de algún reporte de vulnerabilidad en CVE.
Entregando al analista la información suficiente para validar si el paquete cumple con los requisitos de mantenimiento y seguridad que el desarrollador tiene establecido en su proceso de desarrollo, o al investigador los datos de las relaciones del paquete y de su desarrollo.
Prerequisitos
La herramienta funciona en Python 3 y tiene una lista de librerías que son necesarias, las cuales están en el archivo requirements.txt, que contiene:
- iocextract
- parsel
- urllib3
- colorama
- flake8
- tqdm
- pymongo
Los cuáles serán instalados o validados automáticamente en el proceso de instalación que se recomienda.
Instalación
La herramienta posee un código que permite instalar todos los paquetes necesarios para el funcionamiento de la herramienta, por lo que solo es necesario ejecutar:
python3 setup.py install
Funcionamiento
Una vez instalado el usuario debe desde consola ejecutar el script central de la herramienta, que desplegara el menú de opciones como se ve en la ilustración 1.
Ilustración 1 Primer menú de opciones de análisis para el usuario.
Una vez el usuario ingresa la selección, la herramienta en las tres primeras opciones despliega un nuevo menú para que se seleccione el lenguaje de programación del paquete a analizar, como se ve en la ilustración 2. Si la selección es la opción 5 se le solicita al usuario que ingrese la ruta local donde se encuentra el paquete a analizar, como se ve en la ilustración 3. El paquete que se ingrese debe ser de alguno de los lenguajes de programación disponibles para el análisis, en este momento Python y Ruby.
En las opciones de análisis de un paquete, sin importar si es todas las versiones o la última versión, el sistema solicita que se ingrese el nombre del paquete, que debe ser exactamente igual a como esta publicado en el administrador de paquetes de PyPI o de RubyGems, según la librería a analizar. Para lo que se despliega la opción que el usuario ingrese el nombre del paquete, como se ve en la ilustración 4.
Ilustración 2. Menú de opciones de lenguajes de programación disponibles para el análisis.
Ilustración 3. Opción para ingresar la ubicación del paquete local a analizar.
Ilustración 4. Opción para cargar el nombre del paquete a analizar.
Una vez se dan estos pasos la herramienta inicia el proceso de análisis y publicación de la información por consola, donde lo primero que muestra es la ruta exacta de donde se descarga el archivo y el hash en SH256 que publica el administrador de paquetes y que es validado para continuar con el análisis. Como se ve en la ilustración 5.
Ilustración 5. Información inicial del paquete que se analizara.
Posterior a esto se muestran los metadatos de las versiones del paquete que se va a analizar, donde se entregan los datos del autor, correo electrónico del autor, sitio web del desarrollo, tipo de licencia con la que se publicó y fecha en la que se publicó en el administrador de paquetes. Como se ve en la ilustración 6.
Ilustración 6. Metadatos detectados en un paquete de Python.
A continuación, se entregan los HASH en SHA256 calculados de cada uno de los archivos contenidos en el paquete, como se ve en la ilustración 7.
Ilustración 7. HASH de los archivos del paquete Diario en Python.
Después de esto la herramienta muestra las detecciones de URL’s, HASH, IP’s y correos electrónicos detectados en cada uno de los archivos del paquete, como se ve en la ilustración 8.
Ilustración 8. Información recolectada en el paquete de Diario en Python.
Después se realiza búsqueda en los reportes de CVE, para determinar si del paquete que se está analizando se ha realizado algún reporte en esta base de datos y si existe se reporta al analista los detalles de este. Como se ve en la ilustración 9.
Ilustración 9. Reporte de vulnerabilidad del paquete Alexandra en Python.
Para los paquetes de Python se adiciona el análisis estático de código, con el cumplimiento de fluke8, lo que permite validar la existencia de funciones obsoletas, innecesarias o peligrosas, en cada uno de los archivos contenidos en el paquete. Como se visualiza en la imagen 9.
Ilustración 10. Análisis de código estático en Python.
Licencia
La herramienta se libera bajo los lineamiento de licenciamiento de GNUv3.0, que se establecen en el archivo denominado