
Escáner de vulnerabilidades de binarios estático que utiliza interpretación abstracta sobre Ghidra Pcode. Detecta clases CWE como desbordamientos de búfer, use-after-free e inyección de comandos mediante ejecución simbólica con Z3.
BinAbsInspector (Binary Abstract Inspector) es un analizador estático para la ingeniería inversa automatizada y el escaneo de vulnerabilidades en binarios, que es un proyecto de investigación a largo plazo incubado en Keenlab. Está basado en interpretación abstracta con el soporte de Ghidra. Funciona sobre el Pcode de Ghidra en lugar de ensamblador. Actualmente soporta binarios en x86,x64, armv7 y aarch64.
z3-${version}-win/binz3-${version}-glibc-${version}/bin/*.so a /usr/local/lib/Compile la extensión usted mismo, si desea desarrollar una nueva funcionalidad, consulte la guía de desarrollo.
gradle buildExtension en la raíz del repositoriodist/${GhidraVersion}_${date}_BinAbsInspector.zipPuede ejecutar BinAbsInspector en modo headless, modo GUI, o con docker.
$GHIDRA_INSTALL_DIR/support/analyzeHeadless <projectPath> <projectName> -import <file> -postScript BinAbsInspector "@@<scriptParams>"
<projectPath> -- Ruta del proyecto Ghidra.
<projectName> -- Nombre del proyecto Ghidra.
<scriptParams> -- El argumento para nuestro analizador, proporciona las siguientes opciones:
Con la GUI de Ghidra
Window -> Script Manager y busque BinAbsInspector.javaBinAbsInspector.java, configure los parámetros en la ventana de configuración y haga clic en AceptarCon Docker
git clone [email protected]:KeenSecurityLab/BinAbsInspector.git
cd BinAbsInspector
docker build . -t bai
docker run -v $(pwd):/data/workspace bai "@@<script parameters>" -import <file>
Hasta ahora, BinAbsInspector admite los siguientes verificadores:
La estructura de este proyecto es la siguiente; consulte los detalles técnicos o el artículo en versión china para más detalles.
├── main
│ ├── java
│ │ └── com
│ │ └── bai
│ │ ├── checkers implementación de verificadores
│ │ ├── env
│ │ │ ├── funcs modelado de funciones
│ │ │ │ ├── externalfuncs modelado de funciones externas
│ │ │ │ └── stdfuncs modelado de std de cpp
│ │ │ └── region modelado de memoria
│ │ ├── solver módulo de análisis central y de grafos
│ │ └── util utilidades
│ └── resources
└── test
También puede compilar el javadoc con gradle javadoc; la documentación de la API se generará en ./build/docs/javadoc.
Empleamos Ghidra como nuestra base y con frecuencia aprovechamos JImmutable Collections para un mejor rendimiento.
Aquí nos gustaría agradecerles por su gran ayuda!
| Parámetro | Descripción |
|---|
[-K <kElement>] | Límite de tamaño de KSet K |
[-callStringK <callStringMaxLen>] | Longitud máxima de la cadena de llamada K |
[-Z3Timeout <timeout>] | Tiempo de espera de Z3 |
[-timeout <timeout>] | Tiempo de espera de análisis |
[-entry <address>] | Dirección de entrada |
[-externalMap <file>] | Configuración del modelo de funciones externas |
[-json] | Salida en formato json |
[-disableZ3] | Deshabilitar Z3 |
[-all] | Habilitar todos los verificadores |
[-debug] | Habilitar salida de registro de depuración |
[-check "<cweNo1>[;<cweNo2>...]"] | Habilitar verificadores específicos |