Kam1n0 v2.x 는 확장 가능한 어셈블리 관리 및 분석 플랫폼입니다. 이를 통해 사용자는 먼저 (대규모) 바이너리 컬렉션을 다양한 저장소로 인덱싱하고 클론 검색 및 분류와 같은 다양한 분석 서비스를 제공할 수 있습니다. Application 개념을 사용하여 어셈블리 저장소의 다중 테넌트 액세스 및 관리를 지원합니다. 애플리케이션 인스턴스는 자체적인 전용 저장소를 포함하며 특화된 분석 서비스를 제공합니다. 리버스 엔지니어링 작업의 다양성을 고려하여 Kam1n0 v2.x 서버는 현재 Asm-Clone , Sym1n0 및 Asm2Vec 의 세 가지 유형의 클론 검색 애플리케이션과 Asm2Vec 기반의 실행 가능한 분류를 제공합니다. 플랫폼에 새로운 애플리케이션 유형을 추가할 수 있습니다.
사용자는 여러 애플리케이션 인스턴스를 생성할 수 있습니다. 애플리케이션 인스턴스는 특정 사용자 그룹 간에 공유될 수 있습니다. 애플리케이션 저장소 읽기-쓰기 액세스 및 켜짐-꺼짐 상태는 애플리케이션 소유자가 제어할 수 있습니다. Kam1n0 v2.x 서버는 여러 공유 리소스 풀을 사용하여 동시에 애플리케이션을 제공할 수 있습니다.
Kam1n0은 캐나다 McGill 대학교 데이터 마이닝 및 보안 연구소의 Benjamin CM Fung 감독하에 Steven HH Ding과 Miles Q. Li가 개발했습니다. Hex-Rays Plug-In Contest 2015에서 2등상을 수상했습니다. Kam1n0이 유용하다고 생각하시면 다음 논문을 인용해 주세요.
SHH Ding, BCM Fung, P. Charland. Kam1n0: 리버스 엔지니어링을 위한 MapReduce 기반 어셈블리 복제 검색. 지식 발견 및 데이터 마이닝에 관한 제22회 ACM SIGKDD 국제 컨퍼런스(SIGKDD) 진행 , 461-470페이지, 캘리포니아주 샌프란시스코: ACM Press, 2016년 8월.
SHH Ding, BCM Fung, P. Charland. Asm2Vec: 코드 난독화 및 컴파일러 최적화에 대한 바이너리 복제 검색을 위한 정적 표현 견고성을 강화합니다. 보안 및 개인 정보 보호에 관한 제40회 IEEE 심포지엄(S&P) 진행 중, 18페이지, 캘리포니아주 샌프란시스코: IEEE 컴퓨터 협회, 2019년 5월.
Asm-Clone 애플리케이션은 어셈블리 함수(평균 쿼리 시간 <1.3초 및 2.3M 함수의 평균 인덱스 시간 <30ms)에 대한 효율적인 하위 그래프 검색 문제(예: 그래프 동형 문제)를 해결하려고 합니다. 대상 함수(아래 표시된 왼쪽에 있는 함수)가 주어지면 저장소의 다른 함수(아래 표시된 오른쪽에 있는 함수) 중에서 복제된 하위 그래프를 식별할 수 있습니다.
차별화된 퍼즈 테스팅과 제약 조건 해결을 통한 의미론적 클론 검색. 효율적이고 확장 가능한 동적-정적 하이브리드 접근 방식(1.5M 함수의 평균 쿼리 시간 <1초 및 평균 인덱스 시간 <100ms). 대상 함수(아래 표시된 왼쪽에 있는 함수)가 주어지면 저장소의 다른 함수(아래 표시된 오른쪽에 있는 함수) 중에서 복제된 하위 그래프를 식별할 수 있습니다. 추상 구문 그래프의 시각화를 지원합니다.
Asm2Vec은 표현 학습을 활용합니다. 어셈블리 코드의 어휘 의미 관계를 이해합니다. 예를 들어, xmm*
레지스터는 의미론적으로 addps
와 같은 벡터 연산과 관련되어 있습니다. memcpy
strcpy
와 유사합니다. 아래 그래프는 libgmp에 있는 gmpz_tdiv_r_2exp
의 동일한 소스 코드에서 컴파일된 다양한 어셈블리 함수를 보여줍니다. 왼쪽부터 GCC O0 옵션, GCC O3 옵션, O-LLVM obfuscator Control Flow Graph, Flattening 옵션, LLVM obfuscator Bogus Control Flow Graph 옵션으로 어셈블리 함수를 컴파일합니다. Asm2Vec은 이를 클론으로 정적으로 식별할 수 있습니다.
이 애플리케이션에서 사용자는 기능 관련성을 기반으로 하는 소프트웨어 클래스 세트를 정의하고 각 클래스에 속하는 바이너리를 제공합니다. 그런 다음 시스템은 기능이 직접 또는 복제 관계에 의해 간접적으로 연결되는 클러스터로 기능을 자동으로 그룹화합니다. 분류를 구별하는 클러스터는 유지되어 해당 클래스의 시그니처 역할을 합니다. 대상 바이너리가 주어지면 시스템은 각 소프트웨어 클래스에 속하는 정도를 표시합니다.
Asm2Vec을 함수 유사성 계산 모델로 사용
아래 그림은 Kam1n0 v2.x의 주요 UI 구성요소와 기능을 보여줍니다. 머티리얼 디자인을 채용하고 있습니다. 일반적으로 각 사용자는 애플리케이션 목록, 실행 중인 작업 목록, 결과 파일 목록을 가지고 있습니다.
Kam1n0의 현재 릴리스는 코어 서버와 IDA Pro 플러그인이라는 두 가지 설치 프로그램으로 구성됩니다.
설치자 | 포함된 구성 요소 | 설명 |
---|---|---|
Kam1n0-Server.msi | 코어 엔진 | 인덱싱 및 검색 서비스를 제공하는 메인 엔진입니다. |
작업대 | 리포지토리 및 실행 중인 서비스를 관리하는 사용자 인터페이스입니다. | |
웹 사용자 인터페이스 | 바이너리 파일 및 어셈블리 기능을 검색/인덱싱하기 위한 웹 사용자 인터페이스입니다. | |
VS 15용 Visual C++ 재배포 가능 | z3에 대한 종속성. | |
Kam1n0-IDA-Plugin.msi | 플러그인 | 커넥터 및 사용자 인터페이스. |
Cefpython용 PyPI 휠 | 사용자 인터페이스를 위한 렌더링 엔진입니다. | |
PyPI 및 종속 휠 | Python용 패키지 관리. IDA 6.8 및 6.9에 포함됩니다. |
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이 있는지 확인하세요. (적절한 경우 default-jdk가 아님)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found
)가 발생하는 경우 프록시를 사용하는 경우 http_proxy
및 https_proxy
환경 변수를 설정하고 내보낸 다음 sudo에서 -E
옵션을 사용하여 다시 시도하십시오. 또한 'add-apt 저장소 명령을 찾을 수 없음' 오류가 발생하는 경우 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
Kam1n0-Community에서 Linux용 최신 릴리스(Kam1n0-IDA-Plugin.tar.gz 및 Kam1n0-Server.tar.gz)를 다운로드합니다.
두 개의 타르볼(예: 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 관련 데이터를 기록할 위치로 설정하십시오. 우리는 server
보관하는 장소와 동일한 위치에 이를 배치하기로 결정했습니다. 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 사용 방법을 모르는 경우 Kam1n0-Community 저장소의 튜토리얼을 따르십시오.
이전 버전(<2.0.0)에서 사용된 어셈블리 코드 저장소 및 구성 파일은 최신 버전에서 더 이상 지원되지 않습니다. 이전 리포지토리를 마이그레이션해야 하는 경우 당사에 문의하세요.
최신 안정 브랜치를 복제합니다( --recursive
잊지 마세요!):
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
IntelliJ: 루트 /kam1n0/kam1n0/을 Maven 프로젝트로 가져옵니다. 그에 따라 모든 하위 모듈이 로드됩니다. EclipseEE: 복제된 git 저장소를 git 보기에 추가합니다. git 저장소에서 모든 Maven 프로젝트를 가져옵니다. 오류를 해결하려면 클래스 경로를 수정해야 할 수도 있습니다. 모든 리소스 경로는 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
라는 환경 변수에 절대 경로를 추가해야 합니다. 또한 시스템에 크롬 브라우저가 설치되어 있어야 합니다. 테스트 코드는 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
이 명령은 사전 컴파일된 libvex 및 z3 휠을 사용하여 Java만 컴파일합니다. 기본적으로 작동합니다. libvex 및 z3의 빌드는 플랫폼에 따라 다릅니다. 우리는 Angr의 libvex 포크를 사용합니다. 더 심각한 빌드 스크립트와 Windows/Linux용 설치 프로그램은 /kam1n0-builds/에서 찾을 수 있습니다.
지속적인 개발과 전달을 위한 Jenkin 서버를 보유하고 있습니다. 최신 안정 릴리스는 여기에 게시됩니다. 주기적으로 우리는 내부 실험 분기를 이 저장소와 동기화합니다.
이 소프트웨어는 캐나다 McGill 데이터 마이닝 및 보안 연구소와 Queen의 L1NNA 연구소의 Steven HH Ding, Miles Q. Li 및 Benjamin CM Fung이 개발했습니다. 이는 Apache 라이센스 버전 2.0에 따라 배포됩니다. 자세한 내용은 LICENSE.txt를 참조하세요.
저작권 2014-2021 McGill University 및 연구원. 모든 권리 보유.