
여러 아키텍처에 걸쳐 정적, 동적 및 머신러닝 기법을 사용하는 인덱싱, 클론 검색 및 실행 파일 분류를 위한 확장 가능한 어셈블리 분석 플랫폼입니다.
Kam1n0 v2.x는 확장 가능한 어셈블리 관리 및 분석 플랫폼입니다. 사용자는 먼저 (대량의) 바이너리 모음을 다양한 저장소로 인덱싱하고 클론 검색 및 분류와 같은 다양한 분석 서비스를 제공할 수 있습니다. 애플리케이션 개념을 사용하여 어셈블리 저장소의 다중 테넌트 액세스 및 관리를 지원합니다. 애플리케이션 인스턴스는 고유한 전용 저장소를 포함하며 특화된 분석 서비스를 제공합니다. 리버스 엔지니어링 작업의 다양성을 고려하여, Kam1n0 v2.x 서버는 현재 세 가지 유형의 클론 검색 애플리케이션을 제공합니다: Asm-Clone, Sym1n0, Asm2Vec, 그리고 Asm2Vec 기반의 실행 파일 분류. 새로운 애플리케이션 유형을 플랫폼에 추가할 수 있습니다.
사용자는 여러 애플리케이션 인스턴스를 생성할 수 있습니다. 애플리케이션 인스턴스는 특정 사용자 그룹 간에 공유될 수 있습니다. 애플리케이션 저장소의 읽기-쓰기 액세스 및 온-오프 상태는 애플리케이션 소유자가 제어할 수 있습니다. Kam1n0 v2.x 서버는 여러 공유 리소스 풀을 사용하여 애플리케이션을 동시에 서비스할 수 있습니다.
Kam1n0는 캐나다 McGill 대학의 Data Mining and Security Lab 소속인 Benjamin C. M. Fung 교수의 지도 하에 Steven H. H. Ding과 Miles Q. Li가 개발했습니다. Hex-Rays Plug-In Contest 2015에서 2등을 수상했습니다. Kam1n0가 유용하다고 생각하신다면, 다음 논문을 인용해 주십시오:
S. H. H. Ding, B. C. M. Fung, and P. Charland. Kam1n0: MapReduce-based Assembly Clone Search for Reverse Engineering. In Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (SIGKDD), pages 461-470, San Francisco, CA: ACM Press, August 2016.
S. H. H. Ding, B. C. M. Fung, and P. Charland. Asm2Vec: boosting static representation robustness for binary clone search against code obfuscation and compiler optimization. In Proceedings of the 40th IEEE Symposium on Security and Privacy (S&P), 18 pages, San Francisco, CA: IEEE Computer Society, May 2019.
Asm-Clone 애플리케이션은 어셈블리 함수에 대한 효율적인 부분 그래프 검색 문제(즉, 그래프 동형 문제)를 해결하려고 합니다(230만 개 함수 기준 평균 쿼리 시간 <1.3초, 평균 인덱스 시간 <30ms). 대상 함수(아래 왼쪽에 표시됨)가 주어지면 저장소의 다른 함수들 중에서 클론된 부분 그래프를 식별할 수 있습니다(아래 오른쪽에 표시됨).
차별화된 퍼지 테스팅과 제약 조건 해결을 통한 의미론적 클론 검색. 효율적이고 확장 가능한 동적-정적 하이브리드 접근 방식입니다(150만 개 함수 기준 평균 쿼리 시간 <1초, 평균 인덱스 시간 <100ms). 대상 함수(아래 왼쪽에 표시됨)가 주어지면 저장소의 다른 함수들 중에서 클론된 부분 그래프를 식별할 수 있습니다(아래 오른쪽에 표시됨). 추상 구문 그래프 시각화를 지원합니다.
Asm2Vec은 표현 학습을 활용합니다. 어셈블리 코드의 어휘적 의미 관계를 이해합니다. 예를 들어, xmm* 레지스터는 addps와 같은 벡터 연산과 의미적으로 관련됩니다. memcpy는 strcpy와 유사합니다. 아래 그래프는 libgmp의 gmpz_tdiv_r_2exp 동일한 소스 코드에서 컴파일된 다양한 어셈블리 함수를 보여줍니다. 왼쪽부터 GCC O0 옵션, GCC O3 옵션, O-LLVM 난독화기 제어 흐름 그래프 평탄화 옵션, LLVM 난독화기 가짜 제어 흐름 그래프 옵션으로 컴파일된 어셈블리 함수입니다. Asm2Vec은 이를 정적으로 클론으로 식별할 수 있습니다.
이 애플리케이션에서 사용자는 기능적 관련성을 기반으로 한 소프트웨어 클래스 집합을 정의하고 각 클래스에 속하는 바이너리를 제공합니다. 그러면 시스템이 자동으로 함수를 클러스터로 그룹화하며, 클러스터 내 함수는 클론 관계로 직간접적으로 연결됩니다. 분류에 판별적인 클러스터는 유지되어 해당 클래스의 서명 역할을 합니다. 대상 바이너리가 주어지면 시스템이 각 소프트웨어 클래스에 속하는 정도를 보여줍니다.
함수 유사도 계산 모델로 Asm2Vec 사용
아래 그림은 Kam1n0 v2.x의 주요 UI 구성 요소와 기능을 보여줍니다. 우리는 머티리얼 디자인을 채택했습니다. 일반적으로 각 사용자는 애플리케이션 목록, 실행 중인 작업 목록, 결과 파일 목록을 가지고 있습니다.
현재 Kam1n0 릴리스는 두 가지 설치 프로그램으로 구성됩니다: 코어 서버와 IDA Pro 플러그인.
| 설치 프로그램 | 포함된 구성 요소 | 설명 |
|---|---|---|
| Kam1n0-Server.msi | 코어 엔진 | 인덱싱 및 검색 서비스를 제공하는 메인 엔진. |
| 워크벤치 | 저장소 및 실행 중인 서비스를 관리하기 위한 사용자 인터페이스. | |
| 웹 사용자 인터페이스 | 바이너리 파일 및 어셈블리 함수를 검색/인덱싱하기 위한 웹 사용자 인터페이스. | |
| Visual C++ 재배포 가능 패키지 (VS 15) | z3 종속성. | |
| Kam1n0-IDA-Plugin.msi | 플러그인 | 커넥터 및 사용자 인터페이스. |
| Cefpython용 PyPI 휠 | 사용자 인터페이스용 렌더링 엔진. | |
| PyPI 및 종속 휠 | Python용 패키지 관리. IDA 6.8 및 6.9 용으로 포함됨. |
Kam1n0 코어 엔진은 순수 Java로 작성되었습니다. 다음 종속성이 필요합니다: