Minhash 기반 코드 관계 및 조사 툴킷 (MCRIT)
MCRRIT는 코드 유사성의 맥락에서 Minhash 알고리즘의 적용을 단순화하기 위해 생성 된 프레임 워크입니다. 이는 "Shinglers"를 신속하게 구현하는 데 사용될 수 있으며, 즉 분해 된 함수의 특성을 인코딩하는 방법을 사용하여 Minhash 알고리즘을 통해 유사성 추정에 사용됩니다. SMDA가 방출 한 분해 보고서를 사용하도록 조정됩니다.
용법
Dockerized 사용
사소한 배치 및 사용에 완전히 포장 된 Docker-McRit을 사용하는 것이 좋습니다.
무엇보다도, 지속 가능한 데이터베이스 및 편리한 상호 작용을위한 웹 프론트 엔드를 포함하여 모든 구성 요소에서 완전히 호환 가능한 버전을 보장합니다.
독립형 사용
자체적으로 MCRIT를 설치하려면 더 많은 단계가 필요합니다.
다음의 경우 우분투를 호스트 운영 체제로 가정합니다.
Python 설치 요구 사항은 requirements.txt 에 나열되어 다음을 사용하여 설치할 수 있습니다.
# install python and MCRIT dependencies
$ sudo apt install python3 python3-pip
$ pip install -r requirements.txt
기본적으로 MongoDB 5.0은 백엔드로 사용되며, 이는 지속적인 데이터 저장을 제공하므로 권장 작동 모드이기도합니다. 다음 명령은 우분투의 예제 설치를 간략하게 설명합니다.
# fetch mongodb signing key
$ sudo apt-get install gnupg
$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
# add package repository (Ubuntu 22.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 20.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# OR add package repository (Ubuntu 18.04)
$ echo " deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse " | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
# install mongodb
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
# start mongodb as a service
$ sudo systemctl start mongod
# optionally configure to start the service with system startup
$ sudo systemctl enable mongod
독립형 설치를 수행 할 때는 복제 된 저장소를 기반으로 MCRIT 모듈을 설치할 수 있습니다.
이 초기 설치 후 및 원하는 경우 인터넷 연결없이 MCRIT를 사용할 수 있습니다.
작업
MCRRIT 백엔드는 일반적으로 두 개의 구성 요소로 나뉘어져 있으며, 작업 할 API 인터페이스를 제공하는 서버와 한 명 이상의 작업자가 대기열 작업을 처리합니다. 다음을 사용하여 별도의 껍질로 시작할 수 있습니다.
그리고
기본적으로 REST API 서버는 http://127.0.0.1:8000/에서 듣습니다.
상호 작용
설치 선택에 관계없이 일단 실행되면 MCRIT 백엔드와 상호 작용할 수 있습니다.
MCRIT 클라이언트
우리는 서버의 사용 가능한 모든 엔드 포인트로 작동 할 수있는 Python 클라이언트 모듈을 만들었습니다.
이 클라이언트 모듈에 대한 문서가 현재 개발 중입니다.
Mcrit Cli
이 클라이언트 패키지를 기반으로하는 CLI도 있습니다.
# query some stats of the data stored in the backend
$ python -m mcrit client status
{ ' status ' : { ' db_state ' : 187, ' storage_type ' : ' mongodb ' , ' num_bands ' : 20, ' num_samples ' : 137, ' num_families ' : 14, ' num_functions ' : 129110, ' num_pichashes ' : 25385}}
# submit a malware sample with filename sample_unpacked, using family name "some_family"
$ python -m mcrit client submit sample_unpacked -f some_family
1.039s - > (architecture: intel.32bit, base_addr: 0x10000000): 634 functions MCRIT CLI에 대한보다 광범위한 문서가 여기에서 제공됩니다.
MCRIT IDA 플러그인
IDA 플러그인도 현재 개발 중입니다. 사용하려면 먼저 자신의 config.py를 만들고 mcrit 인스턴스의 배포에 따라 필요한 변경 사항을 작성하십시오.
cp ./plugins/ida/template.config.py ./plugins/ida/config.py
nano ./plugins/ida/config.py
그런 다음 단순히 발견 된 스크립트를 실행하십시오
./plugins/ida/ida_mcrit.py
Ida에서.
참조 데이터
2023 년 7 월, 우리는 공통 컴파일 및 라이브러리에 대한 즉시 사용 가능한 참조 데이터를 포함하는 Github 저장소를 채우기 시작했습니다.
버전 역사
- 2024-06-20 v1.3.17 : 작업 삭제 및 정리는 이제 더 강력하며 실수로 샘플을 원치스럽게 제거하지 않습니다 - @yankovs -thx !!
- 2024-05-10 v1.3.16 : 큐 정리가 3 가지 유형의 쿼리 (매핑, 미확인, SMDA) 동안 업로드 된 파일을 제거하기 위해 확장되었습니다.
- 2024-04-17 v1.3.15 : Worker Type
spawningworker 이제 queeeconfig.queue_spawningworker_children_timeout 초 후에 어린이를 종료하게됩니다. - 2024-04-02 v1.3.14 : 실험 : 신입 사원 유형
spawningworker 소개-이 변형은 평소와 같이 대기열에서 일자리를 소비하지만 실제 작업 실행을 별도의 (하위) 프로세스로 연기하여 잠금 된 메모리 할당과 관련된 문제를 줄여야합니다. - 2024-04-02 v1.3.13 : 대기열을 청소할 때 이제 실패한 모든 작업 @yankovs-thx !!
- 2024-03-06 v1.3.12 : Queue Cleanup으로부터 최근 샘플을 보호하는 버그를 수정했습니다. @yankovs-thx !!
- 2024-02-21 v1.3.10 : SMDA를 1.13.16으로 범프로, 더 나은 탈출 카테고리 (Minhashes에 영향)에서 200 개의 지침을 포함합니다.
- 2024-02-16 v1.3.9 : @yankovs가 제안한 완성 및 통합 자동 큐 정리 기능 (기본적으로 비활성화) -THX !!
- 2024-02-15 v1.3.8 : 범프 SMDA SmdaFunction에서 버전 인식 문제를 해결하기위한 SMDA, IDA 플러그인의 McRitinterface (thx to @MalwareFrank !!)의 고정 예외 인쇄.
- 2024-02-12 v1.3.5 : 재 계산 Minhashes는 이제 올바른 백분율을 나타냅니다 (thx to @malwarefrank !!).
- 2024-02-02 v1.3.4 : 잠재적으로 초기화되지 않은 객체 (thx to @r0ny123 !!)를 참조하지 않도록 IDA 플러그인의 미니 수정.
- 2024-02-01 v1.3.2 : 수정 : 비 합금 일치는 이제 동일한 데이터 형식을 출력합니다 (thx to @dannyquist !!).
- 2024-01-30 v1.3.1 : MongoDB와의 연결은 이제 완전히 구성 가능합니다 (thx to @dannyquist !!).
- 2024-01-24 v1.3.0 : Breaking : Pichash 및 Minhash의 인덱싱 개선이있는 이정표 릴리스. 전체 역 호환성을 보장하기 위해 모든 해시의 재 계산이 권장됩니다. 이 마이그레이션 가이드를 확인하십시오.
- 2024-01-23 v1.2.26 : 고정 된 SMDA가 호환되도록하기 위해 LIEF를 0.13.2로 고정합니다.
- 2024-01-09 V1.2.25 :
db_state 및 db_timestamp 가 있는지 여부에 관계없이 시스템 상태를 제공 할 수 있는지 확인하십시오. - 2024-01-05 V1.2.24 : 이제 CLI의 "쿼리"인수를 지원하고 파일 풋 프린트를 줄이기 위해 컴팩트 한 매칭 소송 (기능 일치 정보가 없음).
- 2024-01-03 v1.2.23 : OOM 충돌로부터 시스템을 보호하기 위해 최대 수출 크기 제한.
- 2024-01-02 v1.2.22 : 편의 기능을 갖춘 고유하게 BlocksResult를위한 데이터 클래스가 소개되었습니다.
- 2023-12-28 v1.2.21 : mcritclient는 이제 바이너리 쿼리 일치에 대한 패스 스루를 수행합니다.
- 2023-12-28 v1.2.20 : 상태는 이제 마지막 DB 업데이트의 타임 스탬프를 제공합니다.
- 2023-12-13 v1.2.18 : 바운드 점검 대 Sample_IDS가 GetUniqueBlocks로 전달되었습니다.
- 2023-12-05 v1.2.15 : 작업 대상에 편의 기능이 추가되어 McRitweb와 정렬 된 버전 번호.
- 2023-11-24 v1.2.11 : SMDA는 SMDA를 업그레이드하기 전에 버전 1.12.7에 고정되었습니다. Generalization 개선 된 PIC + PICBLOCK 해시를 재 계산하기 위해 데이터베이스 마이그레이션을 도입했습니다.
- 2023-11-17 v1.2.10 : 헤더 필드를 통해 서버에 대한 인증 토큰을 설정하는 기능이 추가되었습니다 :
apitoken ; 작업 그룹별로 필터링 할 수있는 추가 기능; 고아 작업에 실패 할 수있는 능력이 추가되었습니다. - 2023-10-17 v1.2.8 : 작업 그룹의 사소한 수정.
- 2023-10-16 V1.2.6 : 요약 된 대기열 통계, 정제 된 작업 분류.
- 2023-10-13 v1.2.4 : 노출 된 대기열/작업 삭제에 대한 작업 삭제, 인덱싱 및 매개 변수화 된 MongoDB 쿼리를 통한 다양한 큐 조회의 개선 된 Query 속도.
- 2023-10-13 v1.2.3 : 근로자는 이제 충돌하는 경우 (코드 템플릿의 경우 thx로 @yankovs) 진행중인 작업에서 등록 할 것입니다.
- 2023-10-03 v1.2.2 : 최소/최대 수 샘플에 대한 매칭 리그 필터링 (수정).
- 2023-10-02 V1.2.0 : 바이러스 게시판 2023에 대한 이정표 방출.
- 2023-09-18 v1.1.7 : 버그 픽스 : 0 밴드와 일치하는 작업은 이제 이전과 마찬가지로 Minhash 매칭을 비활성화합니다. 또한 일치하는 작업 진행률 비율이 고정되었습니다.
- 2023-09-15 v1.1.6 : 블록 매칭의 버그 픽스, 작업 객체와 상호 작용하기위한 편의 기능.
- 2023-09-14 V1.1.5 : Compute-Heaver Call을 처리 할 때 회복되지 않은 통화 문제로 인해 당분간 기본 WSGI 핸들러로 Gunicorn을 비활성화했습니다.
- 2023-09-14 v1.1.4 : 버그 픽스 :
setup.py 의 data_files 에 requirements.txt 추가되어 패키지에 사용할 수 있도록합니다. - 2023-09-13 v1.1.3 : MinhashConfig 및 StorageConfig에서 구성 가능한 매개 변수로 일부 성능 상수 상수를 추출했으며, 일치 일치에 대한 고정 진전보고, 버그 픽스 : GunicornConfig의 적절한 데이터 클래스 사용.
- 2023-09-13 v1.1.1 : 간소화 된 요구 사항 / 설정, Windows 용
gunicorn (thx to @yankovs !!). - 2023-09-12 v1.1.0 : Linux 배포의 경우 MCRIT는 이제 훨씬 더 나은 성능으로 인해 WSGI 서버로
waitress 대신 gunicorn 사용합니다. Gunicorn은 자체 구성이 필요하기 때문에 마이너 버전 (thx to @yankovs !!)을 충돌해야했습니다. - 2023-09-08 v1.0.21 : 이제 mcritclient의 모든 방법은 이제 Apitokens/사용자 이름을 백엔드로 전달합니다.
- 2023-09-05 v1.0.20 : 샘플 멘트리에서 주소를 나타내려면 2 가지 상보를 사용하여 MongoDB에 저장할 때 BSON 제한 (thx to @yankovs).
- 2023-09-05 v1.0.19 : 통계는 이제 얼마 전에 생성 된 내부 카운터를 사용하고 있습니다 (thx to @yankovs).
- 2023-08-30 v1.0.18 : ICFG 관계를 통한 결과의 정제 된 링크 헌트 점수 및 클러스터링.
- 2023-08-24 v1.0.15 : 매칭 링크에서 링크 헌팅 기능에 대한 첫 번째 시도.
- 2023-08-24 V1.0.13 : Minhash 밴드 재건은 더 이상 RAM 사용을 폭발시키지 않습니다. 중복 경로 점검을 제거했습니다 (thx to @yankovs).
- 2023-08-23 V1.0.12 : 인덱싱에 사용되는 Minhash 대역을 재건하는 기능이 추가되었습니다.
- 2023-08-22 v1.0.11 : 벌크 데이터를 가져올 때
function_name 도 function_label 로 추가되지 않은 버그를 수정했습니다. - 2023-08-11 v1.0.10 : 벌크 데이터를 가져올 때 BUNG을 밴드에 추가하기 전에 function_id를 조정하지 않아서 존재하지 않는 function_ids로 이어질 수있는 버그를 수정했습니다.
- 2023-08-02 v1.0.9 : IDA 플러그인은 이제 블록 크기 및 Minhash 점수, 최적화 된 레이아웃 및 사용자 경험으로 필터링 할 수 있습니다 ( @r0ny123에 대한 피드백을위한 THX !!).
- 2023-07-28 v1.0.8 : IDA 플러그인은 이제 원격 함수 용 색상 그래프를 표시하고 현재 보이는 기능을 위해 Picblockhashes (기본 블록의 경우)에 대한 쿼리를 수행 할 수 있습니다.
- 2023-06-06 V1.0.7 : MatchingResult의 확장 필터링 기능.
- 2023-06-02 v1.0.6 : IDA 플러그인은 이제 작업 일치 작업, 결과를 표시하며 배치 가져 오기 라벨을 일치시킬 수 있습니다. Matchingresult의 조화.
- 2023-05-22 v1.0.3 : Malpedia Repo 폴더에서 mcrit CLI를 사용할 때 경로 검증에 대한 견고성.
- 2023-05-12 v1.0.1 : IDA 플러그인의 레이블 가져 오기 진행 상황. mcritclient에서 mcritweb의 API 확장을 반영했습니다.
- 2023-04-10 v1.0.0 : Botconf 2023에 대한 이정표 릴리스.
- 2023-04-10 V0.25.0 : IDA 플러그인은 이제 현재 보이는 기능에 대한 기능 쿼리를 수행 할 수 있습니다.
- 2023-03-24 V0.24.2 : McRitclient는 사용자 이름/Apitoken을 전달할 수 있습니다. AddJsonReport는 이제 전달할 수 있습니다.
- 2023-03-21 V0.24.0 : 기능 중심은 이제 사용자/날짜 제출과 함께 추가 기능 labelentries를 저장할 수 있습니다.
- 2023-03-17 V0.23.0 : 이제 단일 smdafinctions (동시에)에 대한 일치를 쿼리 할 수 있습니다.
- 2023-03-15 V0.22.0 : mcritclient는 이제 기능의 하위 집합에 대한 Apitokens 및 원시 응답을 지원합니다.
- 2023-03-14 V0.21.0 : 더 미세한 입자 필터링에 대한 백엔드 지원.
- 2023-03-13 V0.20.6 : MatchResult에서 점수별로 패밀리/샘플 필터링에 대한 백엔드 지원.
- 2023-02-22 V0.20.4 : 고유 한 점수를 계산하고 이러한 결과에 액세스하기위한 버그 픽스.
- 2023-02-21 V0.20.3 : 결과 프레젠테이션을 통한 프론트 엔드 기능 지원.
- 2023-02-17 V0.20.2 : 프론트 엔드 개선을 지원하기위한 확장 경기 보고서 개체.
- 2023-02-14 V0.20.0 : 백엔드와의 쉘 기반 상호 작용을 단순화하기 위해 콘솔 클라이언트를 정비했습니다.
- 2023-01-12 V0.19.4 : 매칭 소재를위한 추가 필터링 기능.
- 2022-12-13 V0.19.1 : 후보자들에게 특정 (더 높은) 양의 밴드 매치가 필요할 수 있습니다 (즉, 매칭의 퍼지를 줄입니다).
- 2022-12-13 V0.18.x : 임의의 기능 ID와 일치 시합을 활성화합니다.
- 2022-11-25 V0.18.9 : 가속 쿼리 일치.
- 2022-11-18 V0.18.8 : 삭제 및 수정의 조화 된 처리, 사소한 수정.
- 2022-11-13 V0.18.7 : 샘플 삭제를 크게 가속화했습니다.
- 2022-11-13 V0.18.6 : 기존 샘플 및 가족 정보를 수정하는 기능이 추가되었습니다.
- 2022-11-11 v0.18.2 : 일치 절차 업그레이드, 이제 더 큰 바이너리를보다 강력하고 효율적으로 처리 할 수 있어야합니다.
- 2022-11-03 V0.18.1 : 사소한 수정.
- 2022-11-03 V0.18.0 : 고유 한 블록 격리는 이제 야라 규칙, 재구성 된 결과 출력에 대한 제안을 생성합니다.
- 2022-10-24 V0.17.4 : 요구 사항이있는 조화 된 setup.py 크로스 작업 처리를위한 메모리 효율이 향상되었습니다.
- 2022-10-18 V0.17.3 : 반 구조화 된 폴더에서 SMDA 보고서를 재귀 적으로 생성하는 편의 스크립트를 추가했습니다.
- 2022-10-13 V0.17.2 : 더 작은 배치로 해시 될 기능을 처리하여 Minhash 계산 중에 잠재적 OOM 문제를 고정했습니다.
- 2022-10-12 V0.17.1 : 모든 샘플/기능에 대해 Minhashes가 계산되었는지 확인하는 작업을 예약하는 기능을 추가했습니다.
- 2022-10-11 V0.17.0 : 고유 한 블록 검색은 이제 작업자를 통한 기발한 일입니다.
- 2022-10-11 V0.16.0 : MatchQuery 작업의 샘플은 이제 샘플/기능 중심에 저장되어 더 나은 사후 처리를 허용합니다.
- 2022-10-04 V0.15.4 : 서버는 이제 버전을 표시 할 수 있습니다.
- 2022-09-28 V0.15.3 : 더 큰 인스턴스에 대한 성능 문제 해결, 고유 한 블록에 대한 빠진 명령 시퀀스를 생성합니다.
- 2022-09-26 V0.15.0 : Crossjobs는 이제 백엔드에서 샘플에서 고유 한 기본 블록을 식별하는 기능을 제공하기 시작했습니다.
- 2022-08-29 V0.14.2 : 배포를위한 사소한 수정.
- 2022-08-22 V0.14.0 : 직업은 이제 다른 작업 (크로스 조브를 백엔드로 이동하기위한 준비), QOL 작업 처리에 의존 할 수 있습니다.
- 2022-08-17 V0.13.1 : 프로파일 링을위한 명령 선 옵션이 추가되었습니다 (Crprofile 필요).
- 2022-08-09 V0.13.0 : 이제 Pichash 및 Picblockhash 경기에 대한 효율적인 직접 쿼리를 수행 할 수 있습니다.
- 2022-08-09 V0.12.3 : FamilyEntry의 버그
- 2022-08-08 V0.12.2 : XCFG 데이터를 전달하기위한 버그 픽스, 누락 된 종속성이 추가되었습니다.
- 2022-08-08 V0.12.0 : 통합 고급 검색 구문.
- 2022-08-03 V0.11.0 : (Breaking) 가족은 이제 FamilyEntry로 대표됩니다.
- 2022-08-03 V0.10.3 : 이제 DB에서 기본적으로 함수 XCFG 데이터를 남겨두고 REST API 및 MCRITCLIENT를 통해 액세스를 노출 시켰습니다.
- 2022-07-29 V0.10.2 : 가족 삭제 기능 추가-이제 모든 기능에 대한 XCFG 정보를 기본적으로 유지하십시오.
- 2022-07-12 V0.10.1 : 성능 향상.
- 2022-07-12 V0.10.0 : (Breaking) 작업 처리 단순화.
- 2022-05-13 V0.9.4 : 제출 된 파일 수신을위한 버그 수정.
- 2022-05-13 V0.9.3 : 매칭 소식에 대한 추가 업데이트.
- 2022-05-13 V0.9.2 : 더 나은 액세스를 위해 MatchingResult에 다른 필드와 더 많은 편의 기능을 추가했습니다. 이전에 생성 된 매칭 소재의 변경 사항을 깨뜨리고 있습니다.
- 2022-05-05 V0.9.1 : 이진 제출 처리, Minhash 대기열에 대한 사소한 수정-초기 릴리스.
- 2022-02-09 V0.9.0 : MCRIT에 Picblocks를 추가했습니다.
- 2022-01-19 V0.8.0 : 클라이언트와 예제를 기본 MCRIT 저장소로 마이그레이션했습니다.
- 2021-12-16 V0.7.0 : 초기 개인 릴리스.
크레딧 및 메모
이 프로젝트의 내부 연구 프로토 타입에 기여한 Steffen Enders와 Paul Hordiienko에게 감사드립니다! Manuel Blatt 덕분 에이 프로젝트에 대한 광범위한 공헌과 클라이언트 모듈에 대한 리팩토링에 감사드립니다!
요청을 당기는 것을 환영합니다! :)
특허
MinHash-based Code Relationship & Investigation Toolkit (MCRIT)
Copyright (C) 2022 Daniel Plohmann, Manuel Blatt
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Some plug-ins and libraries may have different licenses.
If so, a license file is provided in the plug-in's folder.