
Статический сканер уязвимостей бинарных файлов, использующий абстрактную интерпретацию на Ghidra Pcode. Обнаруживает классы CWE, такие как переполнение буфера, использование после освобождения и внедрение команд, с помощью символьного выполнения с Z3.
BinAbsInspector (Binary Abstract Inspector) — это статический анализатор для автоматического реверс-инжиниринга и поиска уязвимостей в бинарных файлах, который является долгосрочным исследовательским проектом, разрабатываемым в Keenlab. Он основан на абстрактной интерпретации с поддержкой Ghidra. Работает с Pcode от Ghidra вместо ассемблера. В настоящее время поддерживает бинарные файлы на архитектурах x86, x64, armv7 и aarch64.
z3-${version}-win/binz3-${version}-glibc-${version}/bin/*.so в /usr/local/lib/Соберите расширение самостоятельно, если вы хотите разработать новую функцию, обратитесь к руководству разработчика.
gradle buildExtension в корне репозиторияdist/${GhidraVersion}_${date}_BinAbsInspector.zipВы можете запустить BinAbsInspector в безголовом режиме, режиме GUI или с помощью Docker.
$GHIDRA_INSTALL_DIR/support/analyzeHeadless <projectPath> <projectName> -import <file> -postScript BinAbsInspector "@@<scriptParams>"
<projectPath> -- Путь к проекту Ghidra.
<projectName> -- Имя проекта Ghidra.
<scriptParams> -- Аргументы для нашего анализатора, предоставляющие следующие параметры:
| Parameter | Description |
|---|---|
[-K <kElement>] | Лимит размера KSet K |
[-callStringK <callStringMaxLen>] | Максимальная длина строки вызова K |
[-Z3Timeout <timeout>] | Тайм-аут Z3 |
[-timeout <timeout>] | Тайм-аут анализа |
[-entry <address>] | Адрес входа |
[-externalMap <file>] | Конфигурация модели внешних функций |
[-json] | Вывод в формате JSON |
[-disableZ3] | Отключить Z3 |
[-all] | Включить все проверки |
[-debug] | Включить вывод отладочного журнала |
[-check "<cweNo1>[;<cweNo2>...]"] | Включить конкретные проверки |
В графическом интерфейсе Ghidra
Window -> Script Manager и найдите BinAbsInspector.java.BinAbsInspector.java, установите параметры в окне конфигурации и нажмите OK.С помощью 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>
На данный момент BinAbsInspector поддерживает следующие проверки:
Структура этого проекта следующая. Пожалуйста, обратитесь к техническим деталям или статье на китайском языке для получения более подробной информации.
├── main
│ ├── java
│ │ └── com
│ │ └── bai
│ │ ├── checkers checker implementatiom
│ │ ├── env
│ │ │ ├── funcs function modeling
│ │ │ │ ├── externalfuncs external function modeling
│ │ │ │ └── stdfuncs cpp std modeling
│ │ │ └── region memory modeling
│ │ ├── solver analyze core and grpah module
│ │ └── util utilities
│ └── resources
└── test
Вы также можете собрать javadoc с помощью gradle javadoc; документация API будет сгенерирована в ./build/docs/javadoc.
Мы используем Ghidra в качестве основы и часто прибегаем к JImmutable Collections для улучшения производительности.
Здесь мы хотели бы поблагодарить их за огромную помощь!