____ __ __ _ _
| _ __ _ _ __ ___ _ __ | / | __ _ ___| |__ ___| |_ ___ ________
| |_) / _` | '_ / _ '__| | |/| |/ _` |/ __| '_ / _ __/ _ /_______/
| __/ (_| | |_)| __/ | | | | | (_| | (__| | | | __/ || __/ _______
|_| __,_| .__/___|_| |_| |_|__,_|___|_| |_|___|_____| /_______/
|_| @==|;;;;;;>
Paper Machete (PM)는 소프트웨어에서 버그를 찾기위한 정적 이진 분석을 지원하기 위해 Binary Ninja 및 Grakn.ai를 오케스트레이션합니다. PM은 바이너리 닌자 Mlil SSA를 활용하여 개별 지침, 운영, 레지스터/가변 상태 및 전체 제어 흐름에 대한 의미 론적 의미를 추출합니다.
PM 은이 데이터를 Grakn으로 마이그레이션합니다. 데이터에 대한 도메인 별 온톨로지를 정의하고 강력한 추론 규칙을 작성하여 명시 적으로 저장할 수없는 데이터 간의 관계를 형성 할 수있는 강력한 추론 규칙을 작성하는 지식 그래프입니다. Heeh, 얼마나 깔끔한가요?
이 프로젝트는 "정적 분석 지원 : 지식 그래프 추론을 통해 이진 목표에서의 취약성 발견"이라는 Derbycon 2017 토크와 함께 발표되었습니다. 여기서 그 이야기를 볼 수 있습니다.
Paper Machete의 초기 프로토 타입 및 공공 코드베이스는 Battelle Memorial Institute의 보안 연구원들에 의해 개발되었습니다. 이 프로젝트가 성숙함에 따라 자신의 연구에 유용하고 프로젝트에 기여하는 것을 고려할 수 있기를 바랍니다.
BNIL ILS 스위트는 작업하기 쉽고 유쾌하게 장황하며 인간이 읽을 수 있습니다. 어느 시점에서 우리는 개발 노력이 거의없이 다른 수준과 IL의 형태를 활용하기로 결정할 수 있습니다. 여러 아키텍처를 들어 올리고 맞춤형 리프터를 작성하는 기능을 추가하면 Bnil을 사용하지 않을 이유가 거의 없습니다.
Grakn의 쿼리 언어 (GRAQL)는 배우기 쉽고 직관적이며,이 연구의 초기 단계에서는 매우 중요합니다.이 연구자들은 여전히 정적 분석을 수행 할 때 찾는 패턴 취약성을 모델링하기 위해 손으로 쓰는 쿼리를 여전히 작성합니다.
우리 자신의 도메인 별 온톨로지를 작성하는 능력을 통해 새로운 쿼리 아이디어와 쿼리를 덜 복잡하게 만드는 방법을 신속하게 실험 할 수 있습니다. 우리가 "gee, 내가 방금 관계에 접근 할 수 있다면 ..."라고 생각하는 사례가 들어올 때 우리는 온톨로지와 추론 규칙을 수정하여 해당 정보를 얻을 수 있습니다.
PM의 최종 게임은 인간이 작성한 쿼리의 필요성을 제거하는 것이지만, 우리는 Square One에서 시작하는 것입니다. 이는 인간 취약성 연구자들이 버그 사냥 할 때 찾는 패턴을 모델링하기 위해 많은 쿼리를 손으로 깎는 것을 의미합니다.
Paper Machete에는 Binaryninja v1.1, Grakn v1.4.2, Grakn Python Driver 및 Java Jre가 필요합니다.
PM과 함께 놀고 싶다면 시작하기위한 몇 가지 기본 쿼리가 포함되어 있습니다. 당신이 상상할 수 있듯이, 특정 취약점 클래스의 모든 표현을 찾을 수있는 "Silver Bullet"쿼리는 없습니다. 이로 인해 각 CWE 쿼리에 대한 버전이 포함되었습니다. 동일한 CWE를 찾는 새로운 방법을 추가하면 버전 번호가 증가하여 차별화 된 스크립트를 추가합니다.
cwe_120_v1.py 안전하지 않은 'gets ()'기능 (CWE -1220)의 사용 테스트
cwe_121_v1.py 버퍼 오버플로 테스트 (CWE -121)
cwe_129_v1.py 누락 된 경계 검사 테스트 (CWE -129)
cwe_134_v1.py 형식 문자열 취약점 테스트 (CWE -134)
cwe_788_v1.py 배열 인덱스에 대한 누락 된 경계 검사 테스트 (CWE -788)
기본적으로 사용하려면 paper_machete.py 스크립트를 실행하고 프롬프트를 따르십시오. 보다 고급 사용하려면 위키를 읽으십시오.
일반적으로 옵션 [1] 으로 시작하여 옵션 [3] 으로 내려갑니다. Grakn 사용 옵션 [4] 과 관련된 문제가 발생하면 Grakn을 깨끗한 상태로 재설정하고 다시 시도하십시오.
... banner ...
[1] Analyze a binary file
[2] Migrate a JSON file into Grakn
[3] Run all CWE queries
[4] Clean and restart Grakn
[5] Quit
옵션 [1] /analysis 디렉토리에 모든 실행 파일을 나열합니다. 따라서 분석하려는 실행 파이브를 /analysis 하려는 모든 실행 파일을 배치하십시오. 이 옵션은 pmanalyze.py 실행하고 /analysis 디렉토리에서 JSON 파일을 생성합니다.
[1] 으로 파일을 분석하고 결과 JSON 파일을 생성 한 후에는 옵션 [2] 에서 선택으로 나타납니다. 옵션 [2] 에서 JSON 파일을 선택하면 데이터가 grakn으로 마이그레이션됩니다.
Grakn에 데이터가 있으므로 옵션을 사용할 수 있습니다 [3] . 그러면 선택한 키에 대한 모든 스크립트 /queries 시작됩니다. 자신의 쿼리 패턴을 작성하면 /queries 버리면 옵션 [3] 도 실행됩니다.