
Ghidra Pcode에 대한 추상 해석을 사용하는 정적 바이너리 취약점 스캐너입니다. Z3를 이용한 심볼릭 실행을 통해 버퍼 오버플로, use-after-free, 명령어 삽입과 같은 CWE 클래스를 탐지합니다.
BinAbsInspector(바이너리 추상 검사기)는 바이너리에서 자동 역공학 및 취약점 스캔을 위한 정적 분석기로, Keenlab에서 인큐베이팅된 장기 연구 프로젝트입니다. Ghidra의 지원을 받아 추상 해석(abstract interpretation)을 기반으로 합니다. 어셈블리 대신 Ghidra의 Pcode에서 작동합니다. 현재 x86, x64, armv7 및 aarch64 바이너리를 지원합니다.
z3-${version}-win/bin을 가리키는 PATH 환경 변수를 추가합니다.z3-${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> -- 분석기 인수로, 다음 옵션을 제공합니다:
Ghidra GUI 사용
Window -> Script Manager를 열고 BinAbsInspector.java 찾기BinAbsInspector.java 항목을 더블 클릭하고 설정 창에서 매개변수를 설정한 후 확인 클릭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 검사기 구현
│ │ ├── env
│ │ │ ├── funcs 함수 모델링
│ │ │ │ ├── externalfuncs 외부 함수 모델링
│ │ │ │ └── stdfuncs cpp std 모델링
│ │ │ └── region 메모리 모델링
│ │ ├── solver 분석 코어 및 그래프 모듈
│ │ └── util 유틸리티
│ └── resources
└── test
gradle javadoc으로 javadoc을 빌드할 수도 있으며, API 문서는 ./build/docs/javadoc에 생성됩니다.
저희는 Ghidra를 기반으로 사용하고 있으며, 더 나은 성능을 위해 JImmutable Collections를 자주 활용합니다.
이에 대해 큰 도움을 주신 분들께 감사드립니다!
| 매개변수 | 설명 |
|---|
[-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>...]"] | 특정 검사기 활성화 |