
여러 아키텍처에 걸쳐 정적, 동적 및 머신러닝 기법을 사용하는 인덱싱, 클론 검색 및 실행 파일 분류를 위한 확장 가능한 어셈블리 분석 플랫폼입니다.
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 코어 엔진은 순수 Java로 작성되었습니다. 다음 종속성이 필요합니다:
릴리스 페이지에서 Kam1n0-Server.msi 파일을 다운로드하십시오. 지침에 따라 서버를 설치하십시오. 설치 경로를 선택하라는 메시지가 표시됩니다. 서버가 디스어셈블을 처리할 필요가 없는 경우 IDA Pro는 선택 사항입니다. 즉, 클라이언트 측에서 IDA Pro용 Kam1n0 플러그인을 사용합니다. Kam1n0 서버와 함께 IDA Pro를 설치하는 것이 좋습니다. Kam1n0 서버는 .i64 파일을 여는 데 사용하는 기본 애플리케이션을 찾아 IDA Pro를 자동으로 감지합니다.
Kam1n0 IDA Pro 플러그인은 로직 부분은 Python으로, 렌더링 부분은 HTML/JavaScript로 작성되었습니다. 설치를 위해 다음 종속성이 필요합니다:
다음으로 릴리스 페이지에서 Kam1n0-IDA-Plugin.msi 설치 프로그램을 다운로드하십시오. 지침에 따라 플러그인과 런타임을 설치하십시오. 플러그인은 $IDA_PRO_PATH$/plugins에 있는 IDA Pro 플러그인 폴더에 설치되어야 합니다. 예를 들어 Windows에서 경로는 C:/Program Files (x86)/IDA 6.95/plugins일 수 있습니다. 설치 프로그램이 경로를 감지하고 확인합니다.
Oracle 버전의 Java 11이 있는지 확인하십시오. (apt의 default-jdk가 아닙니다.)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found), 프록시를 사용 중이라면 http_proxy 및 https_proxy 환경 변수를 설정하고 내보낸 후 sudo에 -E 옵션을 사용하여 다시 시도하십시오. 또한 'add-apt repository command not found' 오류가 발생하면 sudo apt install -y software-properties-common을 시도하십시오.sudo apt-get update, sudo apt-get install oracle-java8-installer
java -version으로 Java 버전을 확인하십시오. JAVA_HOME 환경 변수(/etc/environment에서)를 수동으로 설정해야 할 수 있습니다. JAVA_HOME=/usr/lib/jvm/java-11-oracle이전 버전(<2.0.0)에서 사용된 어셈블리 코드 저장소 및 구성 파일은 최신 버전에서 더 이상 지원되지 않습니다. 이전 저장소를 마이그레이션해야 하는 경우 당사에 문의하십시오.
최신 안정 브랜치를 클론하세요(--recursive 잊지 마세요!):```bash
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
## 프로젝트 가져오기.
IntelliJ: 루트 /kam1n0/kam1n0/를 메이븐 프로젝트로 가져옵니다. 모든 서브모듈이 그에 따라 로드됩니다.
EclipseEE: 클론한 git 저장소를 git 뷰에 추가합니다. git 저장소에서 모든 메이븐 프로젝트를 가져옵니다.
오류를 해결하기 위해 클래스패스를 수정해야 할 수도 있습니다.
IDE 내에서 실행할 때 모든 리소스 경로는 동적으로 수정됩니다
(kam1n0-resources 서브모듈을 통해).
프로젝트를 빌드하려면:```
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
결과 바이너리는 /kam1n0/build-bins/에서 찾을 수 있습니다.
테스트 코드를 실행하려면 먼저 http://chromedriver.chromium.org/에서 chromedriver.exe를 다운로드하고 해당 파일의 절대 경로를 webdriver.chrome.driver라는 환경 변수에 추가해야 합니다. 또한 시스템에 Chrome 브라우저가 설치되어 있어야 합니다. 테스트 코드는 브라우저 인스턴스를 실행하여 UI 인터페이스를 테스트합니다. 전체 테스트 절차는 약 3시간이 소요됩니다.```
cd /kam1n0/kam1n0
mvn -DskipTests clean package # you can skip this one if you already built the package
mvn -DskipTests package # you can skip this one if you already built the package
mvn -DforkMode=never test
These commands only compiles java with pre-compiled wheels of libvex and z3. It works out-of-the-box.
The build of libvex and z3 is platform-dependent. We use a fork of libvex from Angr.
More serious build scripts as well as installers for windows/linux can be found under /kam1n0-builds/
* kam1n0: 서버의 소스 코드.
* kam1n0-builds: 설치 프로그램 소스 코드 및 배포판 빌드 스크립트.
* kam1n0-clients: 클라이언트의 소스 코드.
## 바이너리 릴리스
지속적인 개발 및 제공을 위한 Jenkin 서버가 있습니다. 최신 안정 릴리스는 여기에 게시됩니다. 주기적으로 내부 실험 브랜치를 이 저장소와 동기화할 것입니다.
## 라이선스
이 소프트웨어는 [Steven H. H. Ding](http://stevending.net/), [Miles Q. Li](http://milesqli.github.io/), [Benjamin C. M. Fung](http://dmas.lab.mcgill.ca/fung/)이 캐나다의 [McGill Data Mining and Security Lab](http://dmas.lab.mcgill.ca/) 및 [Queen's L1NNA Research Laboratory](https://l1nna.com/)에서 개발했습니다. Apache License Version 2.0에 따라 배포됩니다. 자세한 내용은 [LICENSE.txt](https://github.com/mcgill-dmas/kam1n0-community/blob/HEAD/LICENSE.txt)를 참조하세요.
Copyright 2014-2021 McGill University and the Researchers. All rights reserved.
## 감사의 말
-orange.svg?style=for-the-badge)





| 설치 프로그램 | 포함된 구성 요소 | 설명 |
|---|---|---|
| Kam1n0-Server.msi | 코어 엔진 | 인덱싱 및 검색 서비스를 제공하는 메인 엔진. |
| 워크벤치 | 저장소 및 실행 중인 서비스를 관리하기 위한 사용자 인터페이스. | |
| 웹 사용자 인터페이스 | 바이너리 파일 및 어셈블리 함수를 검색/인덱싱하기 위한 웹 사용자 인터페이스. | |
| Visual C++ 재배포 가능 패키지 (VS 15) | z3 종속성. | |
| Kam1n0-IDA-Plugin.msi | 플러그인 | 커넥터 및 사용자 인터페이스. |
| Cefpython용 PyPI 휠 | 사용자 인터페이스용 렌더링 엔진. | |
| PyPI 및 종속 휠 | Python용 패키지 관리. IDA 6.8 및 6.9 용으로 포함됨. |
Kam1n0-Community에서 최신 Linux 릴리스(Kam1n0-IDA-Plugin.tar.gz 및 Kam1n0-Server.tar.gz)를 다운로드하십시오.
두 개의 tarball을 추출하십시오(예: tar –xvzf Kam1n0-IDA-Plugin.tar.gz 및 tar –xvzf Kam1n0-Server.tar.gz)
Kam1n0-Server.tar.gz 파일은 서버 디렉터리를 생성합니다.
server 디렉터리 안에 kam1n0.properties라는 파일이 있어야 합니다. 여기서 kam1n0의 다양한 구성을 설정합니다. 매우 중요합니다.
kam1n0.data.path를 kam1n0 관련 데이터를 기록할 위치로 설정하십시오. 우리는 서버와 동일한 위치에 두는 것을 선택합니다. kam1n0.ida.home은 IDA 설치 위치를 나타냅니다. IDA가 없고 디스어셈블리에 kam1n0를 사용하지 않을 경우 이 줄(및 다음 줄 kam1n0.ida.batch)을 주석 처리하십시오. kam1n0.properties 파일에 대한 더 정확한 정보는 kam1n0.properties.explained 파일을 참조하십시오.
kam1n0-server-workbench 실행: java -jar kam1n0-server-workbench.jar. 이렇게 하면 창이 나타나면서 실제로 kam1n0를 시작하라는 메시지가 표시됩니다. 또는 kam1n0-server 실행: java -jar kam1n0-server.jar --start. 이렇게 하면 창 없이 콘솔에서 서버가 시작됩니다.
연결하여 사용하려면 브라우저에서 127.0.0.1:8571(기본 포트는 8571이지만 kam1n0.properties에서 변경 가능)로 이동하십시오. 깔끔한 kam1n0 웹 UI가 표시됩니다. 사용 방법을 모르는 경우 Kam1n0-Community 저장소의 튜토리얼을 따르십시오.