Python como lenguaje de Hacking y Defensa (III)



Continuamos con la tercera y ultima entrega del trabajo trabajo sobre python como lenguaje de Ataque y Defensa, realizado por Fernando Crespo Ingeniero de Telecomunicaciones como proyecto fin del Curso Experto Seguridad TIC. Ahora convertido en Máster de Seguridad TIC.

INDICE

Como ya os contaba en el artículo anterior Fernando decidió realizar un trabajo sobre de Hacking tras finalizar el Curso Exp, y decidió aplicar y ampliar algunos de los conceptos adquiridos en el modulo de Hacking y pentesting impartido por mi (@rhodius - @ST2Labs - @seguridadparatodos), ahora convertido en un Máster de Seguridad TIC (+Info).

Hemos visto que Python puede convertirse en una potentísima suite para hacking con su fácil integración con poderosas herramientas como nmap y exploitdb. Pero, ¿podemos defendernos también con Python? La respuesta es que sí. Ya se ha mencionado que una de las mayores ventajas de Python es la enorme cantidad de librerías que posee y su integración con APIs de terceros.

Así, puede ser usado cómo herramienta de análisis forense (extracción de metadatos, extracción de datos del registro de Windows, bases de datos sqlite, etc.) según se propone en [O’Connor, 2012], o firewalls (https://pypi.python.org/pypi/firewall) pero no es la única forma de defenderse con Python.

En esta sección mostraré cómo implementar la API de VirusTotal con la que se ha construido un antivirus con funcionalidad de escaneo de directorios y capacidad para generar reportes en texto y excel. Empezaremos introduciendo al lector en VirusTotal, su historia y el modo de empleo habitual.

Introducción a VirusTotal. Un poco de historia

VirusTotal [https://www.virustotal.com, 2013] es un servicio online gratuito que realiza análisis de virus en ficheros de hasta 64MB comparándolo con 46 sistemas diferentes de antivirus. También permite escaneo de urls sospechosas aunque en el scanner desarrollado en python para este trabajo sólo se hará de ficheros.
Creado por la empresa malagueña Hispasec Sistemas, en 2007 fue seleccionado por PC World como uno de los mejores 100 productos. Su éxito lo llevó a que fuera adquirido por Google en 2012.

La API de VirusTotal. Implementación con Python

La API de VirusTotal (https://www.virustotal.com/es/documentation/public-api/) permite la creación de scripts para acceder a la información recogida por VirusTotal de los 46 motores de antivirus. El formato de las peticiones es HTTP(S) POST y las respuestas tienen formato JSON. Se permiten hasta cuatro peticiones (escaneo, re-escaneo, o recoger informe) por minuto (a menos que se vaya a aportar recursos a VirusTotal y no sólo recoger los informes).

La API es gratuita y para empezar a usarla hay que registrarse en la VirusTotal Community y al crear la cuenta tendremos una clave con la que podremos implementar la API.

VirusTotal Python Scanner (vtps). Un antivirus en Python

En este apartado mostraremos al lector la estructura, código fuente y modo de uso de VirusTotal Python Scanner, el antivirus creado para este proyecto. Cómo ya se ha comentado, para implementar la API además de la clave que obtenemos al registrarnos, necesitamos el host y la url para escanear, re-escanear y solicitar resultados (en la documentación de la API puede consultarse). Dado que se recomienda no
hacer scanning de archivos ya escaneados (el re-escaneo se hace sobre el hash del fichero, no sobre éste entero), guardaremos éstos últimos en un fichero (hará de base de datos), de forma que si ya se escaneó, sólo permitirá un re-escaneo o la solicitud de informes. Toda esta configuración más la necesaria para generar logs y la localización de la base de datos, es almacenada en un fichero xml y contrastada con un esquema.

Es por ello que lo primero que necesitamos es una clase para parsear XML, la cual se encuentra en textitxmlreader.py, otra para guardar la configuración, config.py y otra para crear los logs (vtpslogger.py). Por otro lado, los métodos para guardar y obtener información de la base de datos (fichero con formato JSON), usaremos database.py y target.py.

Por otro lado, las funciones propias del antivirus las encontraremos en scan.py, scanningwd.py (modo de escaneo en el que se observa una carpeta hasta que un fichero nuevo es creado en ella), rescan.py y report.py. Éstos llamarán a los métodos de la API encapsulados en vtapi.py que realizará los HTTP POST a VirusTotal mediante postlib.py (éste fichero hay que descagárselo de la página).

Para presentar un un simple menú de las acciones a realizar se ha creado menu.py. Elscript que carga toda la configuración inicial y llama a las clases anteriores es vtps.py. El contenido de los ficheros de configuración y el código fuente del programa puede verse en el Anexo I.

Ejemplos de uso

En esta sección se muestra distintos modos de empleo del programa creado, el escaneo simple y en modo watchdog, el re-escaneo y la generación de informes en texto y excel.

Menú de opciones

Tras ejecutar vtps.py se mostrará un menú con las opciones a elegir tal y como muestra la siguiente ilustración. La primera es para un escaneo del fichero, la segunda para el modo wathdog, la tercera para hacer un re-escaneo, las opciones cuarta y quinta son para la obtención de informes en textto y excel (respectivamente) y la última para salir del menú.

Ejemplo - VirtusTotal con python.

Escaneo simple, watchdog y re-escaneo

Para hacer un escaneo sólo es necesario que el fichero no haya sido escaneado antes (no debe estar en la base de datos). Si en el menú anterior elegimos la primera opción, nos pedirá un nombre de fichero o directorio. En este caso, debemos elegir un fichero para que no nos devuelva un error (no se hace un escaneo simple de un directorio). Para hacer la prueba usaré un troyano que he descargado de una web que contiene virus para descargar y probar: http://vx.netlux.org

Ejemplo - Escanear archivo con virtustotal y python
En la base de datos habrá añadido una entrada mientras hacía la correspondiente llamada a al API de VirusTotal con el fichero.


Si ahora elegimos el modo watchdog, Vtps se quedará esperando nuevos ficheros en ese directorio.

Ejemplo - VirusTotal con python
Si probamos con el mismo troyano con otro nombre, detectará que ese fichero ya fue escaneado por que tiene el mismo hash que el escaneado anteriormente (al cotejarlo con la base de datos) y nos dirá que o bien re-escaneemos (no actualiza la base de datos) o bien solicitemos un informe. Si probamos con otro fichero hará el escaneo y lo añadirá a la base de datos.


En la base de datos del nuevo fichero aparece:


Para hacer un re-escaneo, seleccionamos la opción tres. Si el fichero no ha sido previamente escaneado (no está en la base de datos) dará error (si no existe también aunque no se muestra aquí). Hay que aclarar que lo que busca no es el nombre del fichero, sino su hash. De hecho, si probamos con el troyano con otro nombre:

Ejemplo - VirusTotal con python - rescan
Generación de informes en texto y xls

Cuando se seleccionan las opciones 4 y 5 se solicita al usuario el nombre del ficherodel que se quiere obtener un informe. Vtps buscará su hash en la base de datos y si lo encuentra realizará la llamada a la API de VirusTotal para generar informes que contendrá el análisis de 46 sistemas de antivirus. Una vez obtenido el resultado (JSON), Vtps lo transformará en un fichero de texto o xls (Microsoft Excel) según la opción elegida.

Ejemplo - VirusTotal generación informes
En la carpeta reports se habrá creado un fichero con nombre la fecha y la hora de la solicitud del informe y extensión .txt. La siguiente captura muestra algunos de los resultados obtenidos

Ejemplo - VirusTotal reporting text python
Ahora probamos el reporte en excel:

Ejemplo - VirusTotal exportando a Excel

Hasta aquí! el artículo espero que os haya gustado.
Si alguien quiere el documento completo puede ponerse en contacto a través de info@seguridadparatodos.es

#ST2Labs
@st2labs

1 comentario: