
Análisis automático de archivos SWF basado en algunas heurísticas. Extensible mediante complementos.
NOTA: Las siguientes instrucciones son para Python3.
Si necesitas instalar FLASHMINGO en Python2.7, puedes revisar la versión 1.0 en la pestaña releases. Los pasos de instalación son esencialmente los mismos.
Instala los paquetes de Python3 listados en requirements.txt.
Puedes usar el siguiente comando: pip3 install -r requirements.txt
Si deseas usar la funcionalidad de descompilación necesitas instalar Jython. Los usuarios de Ubuntu/Debian pueden ejecutar apt install jython
Clona el proyecto o descarga el archivo zip.
FLASHMINGO es un framework de análisis para archivos SWF. La herramienta clasifica automáticamente archivos Flash sospechosos y guía el proceso de análisis posterior, liberando recursos valiosos en tu equipo. Puedes incorporar fácilmente los módulos de análisis de FLASHMINGO en tu flujo de trabajo.
Hasta el día de hoy, los investigadores forenses y analistas de malware deben lidiar con archivos SWF sospechosos. Si la historia se repite, la amenaza de seguridad incluso podría aumentar más allá del fin de vida de Flash en 2020. Los sistemas seguirán soportando un formato de archivo heredado que ya no recibirá parches de seguridad. La automatización es la mejor manera de abordar este problema y aquí es donde FLASHMINGO puede ayudarte. FLASHMINGO es un framework de análisis para procesar automáticamente archivos SWF que te permite marcar muestras Flash sospechosas y analizarlas con mínimo esfuerzo. Se integra en varios flujos de trabajo de análisis como aplicación independiente o como una potente biblioteca. Los usuarios pueden extender fácilmente la funcionalidad de la herramienta mediante plugins personalizados en Python.
FLASHMINGO está diseñado con la simplicidad en mente. Lee un archivo SWF y crea un objeto (SWFObject) que representa su contenido y estructura. Luego, FLASHMINGO ejecuta una serie de plugins que actúan sobre este SWFObject y devuelven sus valores al programa principal.
A continuación, un diagrama de flujo obligatorio en ASCII art:
+----------+
| |
+------------+----------->+ PLUGIN 1 +------------+
| | | | |
| | +----------+ |
| | |
| | +----------+ |
| | | | |
+---------+ | +----------->+ PLUGIN 2 +--------+ |
|SWF FILE +----------->+ FLASHMINGO | | | | |
+---------+ | | +----------+ | |
| | | |
| | | |
| | | |
| | +-----v---v-+
| | | |
| | | |
+-----+------+------------------------->+ SWFOBJECT |
^ | |
| | |
| +-----+-----+
| |
| |
| |
+---------------------------------------+
Cuando uses FLASHMINGO como biblioteca en tus propios proyectos, solo necesitas ocuparte de dos tipos de objetos:
SWFObject, que representan las muestrasFlashmingo. Este actúa esencialmente como un arnés que conecta plugins y SWFObject.Los plugins de FLASHMINGO se almacenan en sus propios directorios bajo... lo adivinaste: plugins
Cuando se instancia un objeto Flashmingo, recorre este directorio y procesa los manifiestos de todos los plugins. Si esto indica que el plugin está activo, se registra para uso posterior. A nivel de código, esto significa que un pequeño diccionario plugin_info se añade a la lista plugins.
Los plugins se invocan mediante la API run_plugin con dos argumentos:
SWFObjectOpcionalmente, la mayoría de los plugins te permiten pasar tus propios datos de usuario. Esto depende del plugin (lee la documentación) y se puede explicar más fácilmente con un ejemplo.
El plugin por defecto SuspiciousNames buscará en todos los pools de constantes cadenas que contengan subcadenas sospechosas (por ejemplo: 'overflow', 'spray', 'shell', etc.) Ya hay una lista de subcadenas comunes codificada en el plugin para que pueda usarse tal cual. Sin embargo, puedes pasar una lista de subcadenas definidas por ti mismo, en este caso mediante el parámetro names.
Ejemplo de código:
fm = Flashmingo()
print fm.run_plugin('DangerousAPIs', swf=swf)
print fm.run_plugin('SuspiciousNames', swf=swf, names=['spooky'])
FLASHMINGO incluye algunos plugins útiles de serie:
Se proporciona un plugin de plantilla para facilitar el desarrollo. Extender FLASHMINGO es bastante sencillo. Sigue estos simples pasos:
run¡Estás listo para empezar :)
docs para obtener documentación autogenerada$ pip install sphinxcontrib-napoleon
Después de configurar Sphinx para construir tu documentación, habilita napoleon en el archivo conf.py de Sphinx:
En conf.py, agrega napoleon a la lista de extensiones
extensions = ['sphinxcontrib.napoleon']
Usa sphinx-apidoc para construir tu documentación de API:
$ sphinx-apidoc -f -o docs/source projectdir
Esto crea archivos .rst para que Sphinx los procese.
$ make html
¡Eso es todo! :)