
바이너리 프로그램을 위한 자동화된 정적 분석 도구
Pharos 정적 바이너리 분석 프레임워크는 카네기 멜론 대학교 소프트웨어 공학 연구소의 프로젝트입니다. 이 프레임워크는 바이너리 프로그램의 자동 분석을 용이하게 하기 위해 설계되었습니다. 이 프레임워크는 로렌스 리버모어 국립 연구소에서 개발한 ROSE 컴파일러 인프라를 사용하여 디스어셈블리, 제어 흐름 분석, 명령어 의미론 등을 수행합니다. 이 소프트웨어는 BSD 라이선스 하에 배포됩니다.
현재 배포판은 이전 버전에 비해 상당히 업데이트되었으며, OOAnalyzer 도구 개선, 실험적 경로 분석 코드, 파티셔너 개선, 멀티스레딩 및 기타 많은 작은 기능들을 추가했습니다.
Pharos 프레임워크는 연구 프로젝트이며, 코드는 활발히 개발 중입니다. 어떤 목적에 대한 적합성에 대한 보증도 제공되지 않습니다. 이 릴리스는 빌드 지침, 단위 테스트 및 일부 문서를 제공하지만, 아직 해야 할 일이 많습니다. 몇 가지 선택된 빌드 구성을 테스트했지만, 소스 코드의 이식성을 적극적으로 테스트하지는 않았습니다. 자세한 내용은 설치 지침을 참조하십시오.
이 코드를 공개하는 주된 목적은 연구의 투명성을 제공하고 다른 바이너리 정적 분석 연구자들과의 대화를 촉진하기 위한 것이므로, 이 작업에 대한 질문이 있으면 Cory Cohen [email protected]에게 자유롭게 연락해 주십시오. 제때 답변을 드리지 못할 수도 있지만, 최선을 다하겠습니다.
ApiAnalyzer는 지정된 데이터 및 제어 관계를 가진 API 호출 시퀀스를 찾는 도구입니다. 이 기능은 파일 열기, 쓰기, 닫기와 같은 일반적인 운영 체제 상호작용 패러다임을 탐지하는 데 사용됩니다.
OOAnalyzer는 객체 지향 구조를 분석하고 복구하는 도구입니다. 이 도구는 2018년 ACM 컴퓨터 및 통신 보안 컨퍼런스에서 발표된 "Using Logic Programming to Recover C++ Classes and Methods from Compiled Executables"라는 논문의 주제였습니다. 이 도구는 프로그램 내 함수 간 객체 포인터를 추적하여 객체 멤버와 메서드를 식별합니다. 이 도구의 이전 구현은 "Objdigger"라고 불렸으나, 객체 속성을 복구하기 위해 Prolog 규칙을 사용하는 실질적인 재설계를 반영하여 이름이 변경되었습니다. 현재 버전의 도구는 Microsoft Visual C++로 컴파일된 32비트 x86 실행 파일만 지원합니다. 매우 큰 실행 파일에서 OOAnalyzer를 실행하는 방법에 대한 자세한 지침은 이 노트를 참조하십시오.
Pharos 배포판에는 OOAnalayzer에서 내보낸 OO 정보를 Ghidra 리버스 엔지니어링 도구 세트로 가져오는 플러그인이 포함되어 있었습니다. 지금과 미래에 그 기능을 사용하려면 OOAnalayzer 플러그인이 제공했던 기능을 포함하는 Kaiju Ghidra 플러그인을 설치하십시오.
CallAnalyzer는 바이너리 프로그램 내 API 호출의 정적 매개변수를 보고하는 도구입니다. 이 도구는 주로 현재의 호출 규칙, 매개변수 분석 및 유형 탐지 기능을 보여주지만, 프로그램 코드의 유용한 분석도 제공합니다.
FN2Yara는 실행 프로그램 내 함수를 매칭하기 위한 YARA 시그니처를 생성하는 도구입니다. 상당한 수의 함수를 공유하는 프로그램은 공통된 동작을 가질 가능성이 높습니다.
FN2Hash는 실행 프로그램 내 함수에 대한 다양한 해시 및 기타 설명 속성을 생성하는 도구입니다. FN2Yara와 마찬가지로 바이너리 유사성 분석을 지원하거나 머신 러닝 알고리즘에 기능을 제공하는 데 사용될 수 있습니다.
DumpMASM은 다른 도구와 동일한 스타일로 Pharos 프레임워크를 사용하여 실행 파일에서 디스어셈블리 목록을 덤프하는 도구입니다. 이 도구는 적극적으로 유지 관리되지 않았으므로 대신 ROSE의 표준 recursiveDisassemble을 사용하는 것을 고려하십시오 http://rosecompiler.org/ROSE_HTML_Reference/rosetools.html.