
Scanner estático de vulnerabilidades binárias usando interpretação abstrata no Ghidra Pcode. Detecta classes CWE como estouros de buffer, use-after-free e injeção de comandos via execução simbólica com Z3.
BinAbsInspector (Binary Abstract Inspector) é um analisador estático para engenharia reversa automatizada e varredura de vulnerabilidades em binários, que é um projeto de pesquisa de longo prazo incubado no Keenlab. É baseado em interpretação abstrata com suporte do Ghidra. Ele trabalha com o Pcode do Ghidra em vez de assembly. Atualmente, suporta binários em x86, x64, armv7 e aarch64.
z3-${version}-win/binz3-${version}-glibc-${version}/bin/*.so para /usr/local/lib/Compile a extensão por conta própria; se quiser desenvolver um novo recurso, consulte o guia de desenvolvimento.
gradle buildExtension na raiz do repositóriodist/${GhidraVersion}_${date}_BinAbsInspector.zipVocê pode executar o BinAbsInspector no modo headless, no modo GUI ou com Docker.
$GHIDRA_INSTALL_DIR/support/analyzeHeadless <projectPath> <projectName> -import <file> -postScript BinAbsInspector "@@<scriptParams>"
<projectPath> -- Caminho do projeto Ghidra.
<projectName> -- Nome do projeto Ghidra.
<scriptParams> -- O argumento para nosso analisador, fornece as seguintes opções:
| Parameter | Description |
|---|---|
[-K <kElement>] | Limite de tamanho do KSet K |
[-callStringK <callStringMaxLen>] | Comprimento máximo da string de chamada K |
[-Z3Timeout <timeout>] | Timeout do Z3 |
[-timeout <timeout>] | Timeout da análise |
[-entry <address>] | Endereço de entrada |
[-externalMap <file>] | Configuração do modelo de função externa |
[-json] | Saída em formato json |
[-disableZ3] | Desabilitar Z3 |
[-all] | Habilitar todos os verificadores |
[-debug] | Habilitar saída de log de depuração |
[-check "<cweNo1>[;<cweNo2>...]"] | Habilitar verificadores específicos |
Com a GUI do Ghidra
Window -> Script Manager e encontre BinAbsInspector.javaBinAbsInspector.java, defina os parâmetros na janela de configuração e clique em OKCom 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>
Até o momento, o BinAbsInspector suporta os seguintes verificadores:
A estrutura deste projeto é a seguinte; consulte os detalhes técnicos ou o artigo em chinês para mais detalhes.
├── main
│ ├── java
│ │ └── com
│ │ └── bai
│ │ ├── checkers implementação de verificador
│ │ ├── env
│ │ │ ├── funcs modelagem de função
│ │ │ │ ├── externalfuncs modelagem de função externa
│ │ │ │ └── stdfuncs modelagem padrão cpp
│ │ │ └── region modelagem de memória
│ │ ├── solver núcleo de análise e módulo de gráfico
│ │ └── util utilitários
│ └── resources
└── test
Você também pode compilar o javadoc com gradle javadoc; a documentação da API será gerada em ./build/docs/javadoc.
Utilizamos o Ghidra como nossa base e frequentemente recorremos ao JImmutable Collections para melhor desempenho.
Aqui gostaríamos de agradecê-los pela grande ajuda!