mrphrazer/agentic-malware-analysis
요약
AI 에이전트를 활용하여 악성코드 역공학(Reverse Engineering) 과정을 자동화하는 오픈소스 프로젝트입니다. Kali Linux 기반의 Docker 환경에서 MCP(Model Context Protocol)를 통해 Binary Ninja 또는 Ghidra와 같은 도구를 연결하며, 원시 바이너리를 구조화된 분석 보고서와 가설로 변환합니다. Claude Code 및 Codex CLI와 즉시 연동되어 반복적인 초기 분석 단계를 효율적으로 수행할 수 있습니다.
핵심 포인트
- MCP(Model Context Protocol)를 통해 디스어셈블러(Binary Ninja, Ghidra)와 50개 이상의 분석 도구를 에이전트에 연결
- 해시 수집, 문자열 추출, YARA 실행 등 반복적인 초기 악성코드 분석 워크플로우 자동화
- 단순 분류를 넘어 증거 기반 가설 생성 및 우선순위가 지정된 심층 분석 계획 수립 가능
- Claude Code 및 Codex CLI 환경에서 즉시 사용 가능한 전용 스킬 및 래퍼 스크립트 제공
- PE, ELF, Mach-O 형식을 모두 지원하며 컨테이너 재빌드 시에도 인증 상태 유지
AI 에이전트(AI agents)에 의해 구동되는 자동화된 심층 악성코드 역공학 (Reverse Engineering). Kali 기반의 Docker 환경은 50개 이상의 RE 도구들을 MCP(Model Context Protocol)로 연결된 디스어셈블러 (Disassembler) 백엔드 (Binary Ninja 또는 Ghidra) 및 구조화된 다단계 오케스트레이터 (Orchestrator) 스킬과 결합하여, 인간의 개입 없이도 원시 바이너리 (Raw binary)를 순위가 매겨진 증거, 검증된 가설, 컴포넌트 맵 (Component maps), 그리고 우선순위가 지정된 심층 분석 계획이 담긴 케이스 디렉토리로 변환합니다. Claude Code 및 Codex CLI에서 즉시 사용 가능합니다.
배경 지식, 사례 연구 및 평가를 확인하려면 동반 블로그 포스트인 'Building a Pipeline for Agentic Malware Analysis'를 참조하십시오.
초기 악성코드 분석에는 해시 (Hashes) 및 컴파일러 아티팩트 (Compiler artifacts) 수집, 문자열 (Strings) 추출, 임포트 (Imports) 검사, YARA 및 capa 실행, 결과 상관관계 분석, 정밀 조사를 위한 코드 영역 식별 등 다수의 일상적인 단계가 포함됩니다. 이러한 단계들은 더 깊은 분석을 위한 기초를 제공하지만, 종종 반복적이고 시간이 많이 소요됩니다.
이 저장소는 해당 워크플로우의 상당 부분을 자동화합니다. 오케스트레이터 (Orchestrator) 스킬은 분석 아티팩트를 수집 및 정리하고, 관련 신호를 강조하며, 증거에 기반한 가설을 생성하고, 기본적인 컴포넌트 모델을 구축하며, 우선순위가 지정된 심층 분석 계획을 준비합니다. 모든 중간 결과는 디스크 상의 샘플별 케이스 디렉토리에 저장되어 워크플로우를 더 쉽게 재개하고 검토할 수 있습니다.
MCP를 통해 에이전트는 Binary Ninja 또는 Ghidra를 사용하여 함수를 검사하고, 교차 참조 (Cross-references)를 추적하며, 발견된 내용을 구체적인 코드 위치와 연결할 수 있습니다. 그 결과, 단순한 임시 분류 (Ad hoc triage)를 넘어 후속 분석을 위한 구조화된 시작점을 제공합니다.
- 50개 이상의 RE 및 악성코드 분석 도구가 포함된 Kali Linux 컨테이너
- 자동 MCP 백엔드 선택 (Binary Ninja 또는 Ghidra)
malware-analysis-orchestrator
Claude Code 및 Codex CLI를 위한 스킬 - strings, imports, YARA, capa, signal ranking, 가설 생성 (hypothesis generation)을 위한 헬퍼 스크립트
-
번들링된 YARA 규칙 (crypto, anti-debug/anti-VM, capabilities, packer -- Yara-Rules/rules 출처, GPL-2.0)
-
공격적인 기본값 (aggressive defaults)이 적용된 Claude Code 및 Codex용 래퍼 (Wrapper) 스크립트
-
컨테이너 재빌드 시에도 유지되는 영구 상태 (Binary Ninja 라이선스, Claude 인증, Codex 인증)
-
PE, ELF 및 Mach-O 지원
-
콘텐츠 해시 (Content-hash) 기반의 이미지 캐싱
-
buildx를 포함한 Docker -
Anthropic API 키 또는 Claude 계정 (Claude Code용) 또는 OpenAI API 키 (Codex용)
-
권장 사항: 헤드리스 (headless) 사용이 가능한 라이선스가 포함된 Binary Ninja Linux zip 파일 (아래 Setup 섹션 참조)
중요: run_docker.sh는 현재 작업 디렉토리를 컨테이너 내의 /agent 경로에 마운트 (mount)합니다.
에이전트 래퍼 (agent wrappers)는 설계상 모든 권한(--dangerously-skip-permissions / --dangerously-bypass-approvals-and-sandbox)을 가지고 실행되므로, 에이전트가 해당 디렉토리 내의 모든 것을 읽고, 쓰고, 실행할 수 있습니다. 저장소를 전용 디렉토리에 클론 (clone)하고, 에이전트가 접근하기를 원하는 파일만 그곳에 두십시오.
git clone https://github.com/mrphrazer/agentic-malware-analysis.git
cd agentic-malware-analysis
cp /path/to/binaryninja_linux.zip ./binaryninja.zip # 권장 사항; 이 파일이 없으면 대신 Ghidra가 사용됩니다
...
수행되는 작업:
- Docker Buildx 빌더 준비
binaryninja.zip이 있는 경우 Binary Ninja와 해당 MCP 서버를 설치하며, 그렇지 않은 경우 대체 수단으로 Ghidra와 해당 MCP 서버를 설치합니다.- 선택된 MCP 서버 저장소를
mcp/로 클론합니다. - 이미지를 빌드합니다 (또는 콘텐츠 해시에 기반하여 캐시된 이미지를 재사용합니다).
- 호스트 디렉토리로부터 BN 라이선스, Claude 자격 증명 및 Codex 자격 증명을 주입 (seed)합니다.
- 현재 디렉토리가
/agent에 마운트된 상태로 컨테이너를 실행합니다.
컨테이너 내부:
claude # 또는: codex
포함된 예시 샘플을 추출하고 오케스트레이터 (orchestrator) 스킬로 분석을 시작하십시오:
cd examples && unzip -P infected samples.zip && cd ..
그 다음 에이전트에게 프롬프트 (prompt)를 입력하십시오:
examples/samples/mfc42ul.dll에 있는 악성코드(malware)를 분석하십시오 -- 해당 샘플의 기능 및 특징에 대한 상세한 개요와 그에 상응하는 코드 위치를 제공하십시오. /agent/agent_helpers/claude/skills/malware-analysis-orchestrator/ 스킬을 사용하십시오.
...
샘플의 상세 정보 및 배경은 examples/README.md를 참조하십시오.
Binary Ninja는 헤드리스 (headless) MCP 서버를 통해 Ghidra보다 실질적으로 더 나은 분석 결과를 제공하며, 권장되는 디스어셈블러 (disassembler) 백엔드입니다. Binary Ninja zip 파일이 없는 경우, 환경은 자동으로 Ghidra로 폴백 (fallback) 됩니다.
Binary Ninja를 사용하려면 run_docker.sh를 실행하기 전에 리포지토리 루트에 Linux 헤드리스 zip 파일을 배치하십시오:
cp /path/to/binaryninja_linux.zip ./binaryninja.zip
파일 이름은 반드시 binaryninja.zip이어야 합니다. 또는, 다음과 같이 명시적으로 지정할 수 있습니다:
BINARY_NINJA_ZIP=/path/to/binaryninja.zip ./run_docker.sh
Binary Ninja는 유효한 license.dat가 필요합니다. 처음 실행할 때, run_docker.sh는 ~/.binaryninja/license.dat에 있는 기존 라이선스를 컨테이너의 /home/agent/.binaryninja에 마운트(mount)되는 Docker 전용 디렉토리(~/.binaryninja-docker/)로 복사합니다. 라이선스는 이미지에 절대 포함(baked)되지 않습니다. 다른 호스트 디렉토리를 사용하려면 다음과 같이 입력하십시오:
BINARY_NINJA_USER_DIR=/path/to/binaryninja-user-dir ./run_docker.sh
run_docker.sh는 호스트의 ~/.claude-docker/에 지속적인 Claude 상태 디렉토리를 유지하며, 이는 컨테이너의 /home/agent/.claude에 마운트됩니다. 처음 실행할 때, 사용 가능한 경우 ~/.claude/.credentials.json에서 자격 증명 (credentials)을 시딩 (seed) 합니다. 컨테이너 내부에서 claude auth로 로그인할 수도 있으며, 자격 증명은 마운트된 디렉토리를 통해 컨테이너 재빌드 시에도 유지됩니다. 다른 호스트 디렉토리를 사용하려면 다음과 같이 입력하십시오:
CLAUDE_USER_DIR=/path/to/claude-dir ./run_docker.sh
run_docker.sh는 호스트의 ~/.codex-docker/에 지속적인 Codex 상태 디렉토리를 유지하며, 이는 컨테이너의 /home/agent/.codex에 마운트됩니다. 처음 실행할 때, ~/.codex/auth.json에서 자격 증명을 시딩 (seed) 합니다.
사용 가능한 경우입니다. 또한 컨테이너 내부에서 codex login 명령어로 로그인할 수 있습니다.
; 자격 증명은 마운트된 디렉토리에 저장되어 컨테이너를 다시 빌드해도 유지됩니다. 다른 호스트 디렉토리를 사용하려면 다음과 같이 실행하세요:
CODEX_USER_DIR=/path/to/codex-dir ./run_docker.sh
핑거프린팅 (Fingerprinting): file, sha256sum, md5sum, ssdeep, die/diec, yara, capa
문자열 추출 (String extraction): strings, floss (FLARE-FLOSS), rabin2
역어셈블 및 분석 (Disassembly and analysis): radare2, binwalk, gdb/gdb-multiarch, capstone (Python)
바이너리 유틸리티 (Binary utilities): objdump, readelf, nm, patchelf, elfutils
헥스 에디터 (Hex editors): hexedit, bvi, xxd, ht, hexwalk
동적 분석 (Dynamic analysis): strace, ltrace, qemu-user
빌드 도구 (Build tools): gcc, g++, clang, lldb, lld, llvm, cmake, nasm
Python: Python 3, pip, venv, ipython, ipdb, uv
데이터 처리 (Data processing): jq, yq
추출 (Extraction): upx, unblob, ropper
Node.js: Node.js 22
에이전트 CLI (Agent CLIs): Claude Code, Codex CLI
조건부 (Conditional): Binary Ninja headless + Python API (zip 파일 제공 시) 또는 Ghidra + pyghidra
-
작업 디렉토리 (Working directory):
/agent -
사용자 (User):
agent(비루트(non-root), 비밀번호 없는 sudo) - 권한 (Capabilities):
SYS_PTRACE,seccomp=unconfined -
볼륨 마운트 (Volume mounts):
-
호스트
.→/agent -
BN 사용자 디렉토리 →
/home/agent/.binaryninja -
Claude 상태 디렉토리 →
/home/agent/.claude -
Codex 상태 디렉토리 →
/home/agent/.codex -
호스트
환경은 자동으로 하나의 MCP 백엔드를 선택하고 구성합니다. Binary Ninja를 권장하며, Binary Ninja zip 파일이 제공되지 않을 경우 Ghidra를 대체제로 사용합니다.
Binary Ninja 설치됨 → binary-ninja-headless-mcp (binary_ninja_headless_mcp로 등록)
Binary Ninja 없음 → ghidra-headless-mcp (ghidra_headless_mcp로 등록)
선택된 저장소는 런타임 시 run_docker.sh에 의해 mcp/ 디렉토리로 클론됩니다. 컨테이너 시작 시, configure-agent-mcp.sh가 프로젝트 범위의 .mcp.json 파일을 작성합니다.
올바른 MCP 서버 엔트리를 포함한 (Claude Code) 및 Codex 설정.
업스트림 리포지토리(upstream repos)를 재정의합니다:
BINJA_MCP_REPO_URL=https://github.com/mrphrazer/binary-ninja-headless-mcp.git ./run_docker.sh
GHIDRA_MCP_REPO_URL=https://github.com/mrphrazer/ghidra-headless-mcp.git ./run_docker.sh
malware-analysis-orchestrator 스킬은 구조화된 다단계 악성코드 분석 워크플로우 (workflow)를 구동합니다. 이 스킬은 Claude Code와 Codex CLI 모두에서 사용할 수 있습니다.
입력 및 핑거프린팅 (Intake and fingerprinting)-- 해시 (hashes), 파일 유형, 패커/컴파일러 탐지, YARA 스캔, capa 스캔
원시 문자열 수집 (Raw strings collection)-- 소스 태그를 포함한 strings, rabin2, floss 사용
원시 API/임포트 수집 (Raw API/import collection)-- rabin2, 포맷별 특화 도구 (PE/ELF/Mach-O)
시그널 필터링 및 순위 지정 (Signal filtering and ranking)-- 기능(capability)에 따라 흥미로운 문자열 및 임포트의 점수를 매기고 순위를 지정
가설 생성 (Hypothesis generation)-- 증거 간 교차 연결, 신뢰도 및 증거를 바탕으로 한 동작 가설 생성
구성 요소 인벤토리 및 상호작용 모델링 (Component inventory and interaction modeling)-- 구성 요소 추론, 데이터/제어 흐름 (data/control flow) 매핑
심층 분석 계획 및 우선순위 지정 (Deep analysis planning and prioritization)-- 대상 함수, 예상 결과, 중단 기준이 포함된 순차적 작업
보고 (Reporting)-- 요약 보고서 (executive summary), 기술적 발견 사항, IOC, 미결 질문
각 분석은 status/<NNN>-<filename>/ 경로에 샘플별 영구 디렉토리를 생성하며, 여기에는 13개의 필수 아티팩트 (artifact) 파일이 포함됩니다:
| # | 파일 (File) | 내용 (Content) |
|---|---|---|
| 1 | 00_sample_profile.md | 해시 (Hashes), 파일 유형 (file type), 패커 (packer), YARA, capa 결과 |
| 2 | 01_strings_raw.txt | 소스 태그가 포함된 모든 추출된 문자열 (strings) |
| 3 | 02_strings_interesting.md | 카테고리별로 순위가 매겨진 흥미로운 문자열 (interesting strings) |
| 4 | 03_imports_raw.txt | 소스 태그가 포함된 전체 임포트 테이블 (import tables) |
| 5 | 04_imports_interesting.md | 기능 (capability)별 의심스러운 API 클러스터 (clusters) |
| 6 | 05_behavior_hypotheses.md | 신뢰도 및 증거를 포함한 가설 (hypotheses) |
| 7 | 06_component_inventory.md | 역할 및 증거가 포함된 추론된 구성 요소 (components) |
| 8 | 07_interaction_model.md | 구성 요소 간의 데이터 및 제어 흐름 (data and control flow) |
| 9 | 08_deep_analysis_plan.md | 순서가 지정된 심층 분석 (deep-analysis) 작업 |
| 10 | 09_priority_queue.md | 근거 및 차단 요소 (blockers)가 포함된 우선순위 큐 (priority queue) |
| 11 | 10_reporting_draft.md | 요약 보고서 (executive summary) 및 기술적 조사 결과 (technical findings) |
| 12 | INDEX.md | 아티팩트 (artifact) 목록, 타임스탬프 (timestamps), 누락된 항목 |
| 13 | CURRENT_STATE.json | 기계 판독이 가능한 단계 및 진행 상태 |
이러한 외부화된 상태 (externalized state)는 워크플로우를 컨텍스트 윈도우 압축 (context-window compaction)에 대해 탄력적으로 만들어 줍니다. 즉, 에이전트가 대화 기록 (conversation history)에 의존하는 대신 디스크에서 케이스 파일 (case files)을 다시 읽어옵니다.
| 스크립트 (Script) | 목적 (Purpose) |
|---|---|
init_status_tree.sh | 샘플에 대한 케이스 디렉토리 (case directory) 생성 또는 재사용 |
collect_strings.sh | strings, rabin2 -zz, floss를 실행하고 원시 출력 (raw output) 기록 |
collect_imports.sh | rabin2 -i 및 형식 지정 임포트 도구 실행 |
scan_yara.sh | 번들된 YARA 규칙으로 샘플 스캔 |
scan_capa.sh | ATT&CK/MBC 기능 식별을 위해 capa 실행 |
rank_signals.py | 흥미로운 문자열 및 임포트의 점수 산정 및 순위 지정 |
build_hypothesis.py | 기본 동작 가설 (baseline behavior hypotheses) 생성 (선택 사항) |
update_state.py | 단계 전환에 따른 CURRENT_STATE.json 업데이트 |
resolve_case.sh | 샘플에 대한 최신 케이스 디렉토리 확인 |
Yara-Rules/rules (GPL-2.0)에서 가져온 4개의 규칙 세트:
crypto_signatures.yar
-- 암호화 알고리즘 및 상수 탐지
antidebug_antivm.yar
-- 안티 디버깅 (anti-debug) 및 안티 VM (anti-VM) 기술 탐지
capabilities.yar
-- 악성 기능 (malicious capability) 탐지
packer_compiler_signatures.yar
-- 패커 (packer) 및 컴파일러 시그니처 탐지
Orchestrator (오케스트레이터)
-- 단계 구동, 아티팩트 (artifact) 완전성 강제, 병렬 수집 스케줄링
Planner (플래너)
-- 중간 증거 소비, 가설 생성, 심층 분석 우선순위 정의
Reporter (리포터)
-- 추적 가능한 증거를 포함한 경영진 및 기술 요약 보고서 생성
-
기본 모델:
opus -
기본 노력 수준:
high -
기본 권한:
--dangerously-skip-permissions -
관리 명령 (
auth,doctor,mcp,update등)은 기본값 없이 그대로 전달됩니다 - 자격 증명 설정은 Claude Code Authentication을 참조하십시오. -
기본 모델:
gpt-5.4 -
기본 추론 수준:
xhigh -
기본 권한:
--dangerously-bypass-approvals-and-sandbox -
기능:
multi_agent,child_agents_md -
관리 명령 (
login,logout,mcp,features등)은 기본값 없이 그대로 전달됩니다 - 자격 증명 설정은 Codex CLI Authentication을 참조하십시오.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Codex tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기