


CWE_CHECKER es un conjunto de cheques para detectar clases comunes de errores, como las dererencias de puntero nulo y los desbordamientos de búfer. Estas clases de errores se conocen formalmente como enumeraciones de debilidad común (CWE). Los controles se basan en una variedad de técnicas de Anaylsis que van desde la heurística simple hasta el análisis de flujo de datos basado en la interpretación abstracta. Su objetivo principal es ayudar a los analistas a encontrar rápidamente rutas de código potencialmente vulnerables.
Su enfoque principal son los binarios de elfos que se encuentran comúnmente en los sistemas operativos Linux y Unix. El CWE_CHECKER utiliza ghidra para desmontar binarios en una representación intermedia común e implementa sus propios análisis en este IR. Por lo tanto, los análisis se pueden ejecutar en la mayoría de las arquitecturas de CPU que Ghidra puede desmontar, lo que hace que el CWE_CHECKER sea una herramienta valiosa para el análisis de firmware.
Los siguientes argumentos deben convencerlo de que pruebe CWE_CHECKER :

La forma más simple es extraer la última imagen de Docker del Registro de contenedores GitHub:
docker pull ghcr.io/fkie-cad/cwe_checker:latest produce una imagen basada en la rama maestra actual.docker pull ghcr.io/fkie-cad/cwe_checker:stable produce una imagen basada en la última versión de lanzamiento estable.docker pull ghcr.io/fkie-cad/cwe_checker:v0.9 produce una imagen basada en la versión de lanzamiento estable V0.9. Sin embargo, se recomienda cambiar a nuevas versiones estables más pronto como se publican, ya que las mejoras entre versiones estables pueden ser bastante significativas.Si quieres construir la imagen de Docker tú mismo, simplemente ejecuta
docker build -t cwe_checker .
De esta manera, también puede construir imágenes de Docker nativas para PC basadas en ARM (por ejemplo, Apple Macs más recientes). Las imágenes de Docker prebuilt actualmente solo se basan en x86.
Se deben instalar las siguientes dependencias para construir e instalar el CWE_CHECKER localmente:
Ejecutar make all GHIDRA_PATH=/path/to/ghidra_folder (con la ruta correcta a la instalación local de Ghidra insertada) para compilar e instalar el cwe_checker. Si omite el argumento GHIDRA_PATH , el instalador buscará en su sistema de archivos una instalación local de Ghidra.
El CWE_CHECKER toma un binario como entrada, ejecuta varias comprobaciones basadas en el análisis estático en el binario y luego genera una lista de advertencias de CWE que se han encontrado durante el análisis.
Si usa la imagen oficial de Docker, simplemente ejecute
docker run --rm -v /PATH/TO/BINARY:/input ghcr.io/fkie-cad/cwe_checker /inputSi instaló el cwe_checker localmente, ejecute
cwe_checker BINARYSi usa nix flakes, corre
nix run github:fkie-cad/cwe_checker -- BINARY Puede ajustar el comportamiento de la mayoría de las verificaciones a través de un archivo de configuración ubicado en src/config.json . Si lo modifica, agregue el indicador de línea de comando --config=src/config.json para decirle al cwe_checker que use el archivo modificado. Para obtener información sobre otros indicadores de línea de comandos disponibles, puede pasar el indicador --help al CWE_CHECKER .
Existe un soporte experimental para el análisis de los módulos de núcleo cargables de Linux (LKMS). CWE_CHECKER reconocerá si pasa un LKM y ejecutará un subconjunto de las verificaciones de CWE disponibles para programas de espacio de usuario. Los análisis son configurables a través de un archivo de configuración separado.
Si usa la versión estable, también puede ver la documentación en línea para obtener más información.
El CWE_CHECKER ofrece apoyo experimental para analizar binarios de metal desnudo. Para eso, se necesita proporcionar un archivo de configuración de metal desnudo a través de la opción de línea de comandos --bare-metal-config . Se puede encontrar un ejemplo de dicho archivo de configuración en bare_metal/stm32f407vg.json (que fue creado y probado para un MCU STM32F407VG).
Para obtener más información, eche un vistazo a la documentación en línea.
Los binarios de prueba para nuestro conjunto de pruebas se pueden construir con make compile_test_files (¡necesita instalarse Docker!). La suite de prueba se puede ejecutar con make test .
La documentación del código fuente se puede construir con make documentation . Para la versión estable, la documentación se puede encontrar aquí.
Hasta ahora se implementan los siguientes análisis:
Tenga en cuenta que se esperan tanto falsos positivos como falsos negativos debido a los atajos y la naturaleza del análisis estático, así como la sobrecargación. Puede encontrar información sobre el funcionamiento interno de cada cheque, así como razones conocidas de falsos positivos y falsos negativos en las páginas de documentación específicas de cheques.
CWE_CHECKER viene con un guión para Ghidra, que analiza la salida del CWE_CHECKER y anota los CWE encontrados en el desensamblador para un análisis manual más fácil. El script se encuentra en ghidra_plugin/cwe_checker_ghidra_plugin.py , las instrucciones de uso están contenidas en el archivo.

El CWE_CHECKER también está integrado como un complemento de hecho. Si desea integrar el CWE_CHECKER en su propia cadena de herramientas de análisis, puede usar el indicador de línea de comandos --json (en combinación con las opciones de línea de comandos --quiet o --out=... ) para generar las advertencias de CWE en un formato de salida JSON fácilmente parsable.
Construyendo la documentación utilizando cargo doc --open --document-private-items --no-deps le dará más información sobre la estructura interna del CWE_CHECKER. Sin embargo, la mejor documentación sigue siendo el código fuente en sí. Si tiene preguntas, ¡asegúrese de hacerlas en nuestra página de discusiones! ¡Nos esforzamos constantemente por mejorar la extensibilidad y la documentación y sus preguntas nos ayudarán a lograrlo!
Para obtener una descripción rápida/inicial de sus partes internas, también puede ver las diapositivas de las presentaciones de la conferencia en el CWE_CHECKER en la carpeta DOC . Presentamos CWE_CHECKER en las siguientes conferencias hasta ahora:
Las contribuciones siempre son bienvenidas. ¡Solo bifurca y abre una solicitud de extracción!
Este proyecto está financiado en parte por la Oficina Federal Alemana de Seguridad de la Información (BSI).
Un agradecimiento especial a la comunidad BAP (especialmente al Gitter oficial) por responder preguntas y discutir soluciones.
Copyright (C) 2018 - 2024 Fraunhofer FKIE ([email protected])
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 3 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.