
Herramientas automatizadas de análisis estático para programas binarios
El framework de análisis estático de binarios Pharos es un proyecto del Software Engineering Institute de la Carnegie Mellon University. El framework está diseñado para facilitar el análisis automatizado de programas binarios. Utiliza la infraestructura del compilador ROSE desarrollada por el Lawrence Livermore National Laboratory para desensamblado, análisis de flujo de control, semántica de instrucciones y más. Este software se publica bajo una licencia BSD.
La distribución actual es una actualización sustancial de la versión anterior y añade una variedad de características, incluyendo mejoras en la herramienta OOAnalyzer, código experimental de análisis de rutas, mejoras en el particionador, múltiples hilos y muchas otras características menores.
El framework Pharos es un proyecto de investigación, y el código está en desarrollo activo. No se proporcionan garantías de idoneidad para ningún propósito. Si bien esta versión incluye instrucciones de compilación, pruebas unitarias y algo de documentación, queda mucho trabajo por hacer. Hemos probado algunas configuraciones de compilación seleccionadas, pero no hemos probado activamente la portabilidad del código fuente. Consulte las instrucciones de instalación para más detalles.
Dado que el objetivo principal de publicar este código es proporcionar transparencia sobre nuestra investigación y estimular la conversación con otros investigadores de análisis estático de binarios, no dude en contactar a Cory Cohen [email protected] si tiene preguntas sobre este trabajo. Puede que no pueda responder de manera oportuna, pero haré todo lo posible.
ApiAnalyzer es una herramienta para encontrar secuencias de llamadas a la API con las relaciones de datos y control especificadas. Esta capacidad está destinada a ser utilizada para detectar paradigmas comunes de interacción con el sistema operativo, como abrir un archivo, escribir en él y cerrarlo.
OOAnalyzer es una herramienta para el análisis y recuperación de construcciones orientadas a objetos. Esta herramienta fue el tema de un artículo titulado "Using Logic Programming to Recover C++ Classes and Methods from Compiled Executables" que se publicó en la ACM Conference on Computer and Communications Security en 2018. La herramienta identifica miembros y métodos de objetos mediante el seguimiento de punteros a objetos entre funciones del programa. Una implementación anterior de esta herramienta se llamaba "Objdigger", pero se renombró para reflejar un rediseño sustancial utilizando reglas Prolog para recuperar los atributos de los objetos. La versión actual de la herramienta solo admite el análisis de ejecutables x86 de 32 bits compilados por Microsoft Visual C++. Para obtener instrucciones más detalladas sobre cómo ejecutar OOAnalyzer en ejecutables muy grandes, consulte estas notas.
La distribución de Pharos solía incluir un complemento que importaba la información OO exportada por OOAnalayzer al conjunto de herramientas de ingeniería inversa Ghidra. Para obtener esa funcionalidad ahora y en el futuro, instale el complemento Kaiju de Ghidra, que incluye la funcionalidad que proporcionaba el complemento OOAnalayzer.
CallAnalyzer es una herramienta para informar los parámetros estáticos de las llamadas a la API en un programa binario. Es en gran medida una demostración de nuestras capacidades actuales de convención de llamadas, análisis de parámetros y detección de tipos, aunque también proporciona un análisis útil del código de un programa.
FN2Yara es una herramienta para generar firmas YARA para emparejar funciones en un programa ejecutable. Es probable que los programas que comparten un número significativo de funciones tengan comportamientos en común.
FN2Hash es una herramienta para generar una variedad de hashes y otras propiedades descriptivas de las funciones de un programa ejecutable. Al igual que FN2Yara, se puede utilizar para apoyar el análisis de similitud binaria, o proporcionar características para algoritmos de aprendizaje automático.
DumpMASM es una herramienta para volcar listados de desensamblado de un ejecutable utilizando el framework Pharos en el mismo estilo que las otras herramientas. No ha sido mantenida activamente, y debería considerar usar el recursiveDisassemble estándar de ROSE en su lugar http://rosecompiler.org/ROSE_HTML_Reference/rosetools.html.