____ __ __ _ _
| _ __ _ _ __ ___ _ __ | / | __ _ ___| |__ ___| |_ ___ ________
| |_) / _` | '_ / _ '__| | |/| |/ _` |/ __| '_ / _ __/ _ /_______/
| __/ (_| | |_)| __/ | | | | | (_| | (__| | | | __/ || __/ _______
|_| __,_| .__/___|_| |_| |_|__,_|___|_| |_|___|_____| /_______/
|_| @==|;;;;;;>
Paper Machete (PM) orquesta Ninja y Grakn.ai para ayudar al análisis binario estático con el fin de encontrar errores en el software. PM aprovecha el Ninja Mlil SSA binario para extraer un significado semántico sobre instrucciones individuales, operaciones, registro/estado variable y flujo de control general.
PM migra estos datos a GRAKN: un gráfico de conocimiento que nos brinda la capacidad de definir ontologías específicas de dominio para los datos y escribir reglas de inferencia poderosas para formar relaciones entre los datos que no queremos (o no podemos) almacenar explícitamente. Heeh, ¿qué tan ordenado es eso?
Este proyecto se lanzó junto con una charla DerbyCon 2017 titulada "Ayudando el análisis estático: descubrir vulnerabilidades en objetivos binarios a través de inferencias de gráficos de conocimiento". Puedes ver esa charla aquí.
Investigadores de seguridad del prototipo inicial de Paper Machete fueron desarrollados por investigadores de seguridad en el Battelle Memorial Institute. A medida que este proyecto madura, esperamos que lo encuentre útil en su propia investigación y considere contribuir al proyecto.
El conjunto de ILS BNIL es fácil de trabajar, agradablemente detallado y legible por el ser humano. En cualquier momento podemos decidir aprovechar otros niveles y formas de IL con poco esfuerzo de desarrollo de nuestra parte. Cuando agrega a eso la capacidad de levantar múltiples arquitecturas y escribir levantadores personalizados, tenemos pocas razones para no usar BNIL.
El lenguaje de consulta de Grakn (GRAQL) es fácil de aprender e intuitivo, lo cual es extremadamente importante en las primeras etapas de esta investigación, mientras que todavía somos consultas de escritura a mano para modelar los patrones que buscan los investigadores de vulnerabilidad cuando realizan un análisis estático.
La capacidad de escribir nuestras propias ontologías específicas de dominio nos permite experimentar rápidamente con nuevas ideas de consultas y formas de hacer que nuestras consultas sean menos complejas. Cuando nos encontramos con un caso en el que pensamos "Gee, si acabo de tener acceso a la relación entre ...", podemos modificar nuestras reglas de ontología e inferencia para obtener esa información.
Si bien el juego final para PM es eliminar la necesidad de consultas escritas por humanos, el hecho es que estamos comenzando desde el cuadrado uno. Lo que significa que la mano de manualización muchas consultas para modelar los patrones que los investigadores de vulnerabilidades buscan cuando la caza de errores.
Paper Machete requiere Binaryninja V1.1, Grakn V1.4.2, el conductor de Grakn Python y el Java JRE
Hemos incluido algunas consultas básicas para comenzar si quieres jugar con PM. Como puede imaginar, no hay una consulta de "bala de plata" que encuentre todas las manifestaciones de una clase de vulnerabilidad específica. Debido a esto, hemos incluido versiones para cada consulta de CWE. A medida que agregamos nuevos métodos para encontrar el mismo CWE, agregaremos scripts con los números de versión incrementados para diferenciar.
cwe_120_v1.py : pruebas para el uso de la función 'gets ()' inseguro (CWE -120)
cwe_121_v1.py : pruebas para desbordamientos del búfer (CWE -121)
cwe_129_v1.py : pruebas para verificaciones de límites faltantes (CWE -129)
cwe_134_v1.py - Prueba para las vulnerabilidades de cadena de formato (CWE -134)
cwe_788_v1.py - Prueba para los límites faltantes Verifique los índices de matriz (CWE -788)
Para uso básico, ejecute el script paper_machete.py y siga las indicaciones. Para un uso más avanzado, lea el wiki.
Por lo general, comenzará con la opción [1] y avanzará a la opción [3] . Si tiene algún problema con Grakn, use la opción [4] para restablecer Grakn a un estado limpio e intente nuevamente.
... banner ...
[1] Analyze a binary file
[2] Migrate a JSON file into Grakn
[3] Run all CWE queries
[4] Clean and restart Grakn
[5] Quit
La opción [1] enumera todos los archivos ejecutables en el directorio /analysis . Así que coloque los ejecutables que desee analizar en /analysis . Esta opción ejecutará pmanalyze.py y generará un archivo JSON en el directorio /analysis .
Una vez que haya analizado archivos con [1] y haya producido archivos JSON resultantes, aparecerán como una opción en la opción [2] . Seleccionar un archivo JSON en la opción [2] migrará los datos a GRAKN.
Ahora que tiene datos en Grakn, puede usar la opción [3] . Esto comenzará todos los guiones en /queries contra el espacio de teclas de su elección. Si escribe sus propios patrones de consulta, simplemente tírelos /queries y la opción [3] también los ejecutará.