GhidrAssist
저자: Jason Tang
고급 LLM 기반 플러그인으로, Ghidra 내 인터랙티브 리버스 엔지니어링 지원을 제공합니다.
설명
GhidrAssist는 대규모 언어 모델(LLM)을 Ghidra에 통합하여 바이너리 탐색 및 리버스 엔지니어링을 위한 지능형 지원을 제공합니다. 로컬 모델(Ollama, LM-Studio, Open-WebUI)과 클라우드 제공자(OpenAI, Anthropic, Azure)를 포함한 모든 OpenAI v1 호환 API를 지원합니다.
주요 기능
핵심 기능:
- 코드 설명 - 디스어셈블리 및 디컴파일된 의사 C에서 함수와 명령어를 설명합니다.
- 위험 수준, 활동 프로필, API 사용량을 표시하는 보안 분석 패널
- 사용자가 편집 가능한 요약, 자동 덮어쓰기로부터 보호
- 대화형 채팅 - 지속적인 채팅 기록이 있는 다중 턴 대화형 질의
- 사용자 정의 질의 - 현재 함수/위치의 선택적 컨텍스트와 함께 직접 LLM 질의
Graph-RAG 지식 시스템:
- 의미론적 지식 그래프 - 바이너리 분석의 계층적 표현
- 5단계 의미 계층: 명령문 → 블록 → 함수 → 모듈 → 바이너리
- 미리 계산된 LLM 요약으로 LLM 없이 빠른 질의 가능
- JGraphT 그래프 알고리즘을 사용한 SQLite 영구 저장
- 요약 및 보안 주석에 대한 전체 텍스트 검색(FTS5)
- 커뮤니티 탐지 - Leiden 알고리즘을 통한 자동 모듈 발견
- 관련 함수들을 논리적 모듈로 그룹화
- 요약이 포함된 계층적 커뮤니티 구조
- 구성 가능한 깊이로 시각적 그래프 탐색
- 보안 기능 추출 - 종합적인 보안 분석
- 네트워크 API: POSIX 소켓, WinSock, DNS, SSL/TLS, WinHTTP, WinINet
- 파일 I/O API: POSIX, Windows, C 라이브러리 함수
- 암호화 API: OpenSSL, Windows 암호화, 플랫폼별
- 문자열 패턴: IP 주소, URL, 도메인, 파일 경로, 레지스트리 키
- 위험 수준 분류(LOW/MEDIUM/HIGH) 및 활동 프로파일링
- 의미 그래프 탭 - 시각적 지식 그래프 인터페이스
- N-홉 깊이 탐색이 가능한 그래프 보기
- 모든 인덱싱된 함수의 목록 보기
- 요약 전체에 대한 의미 검색
- 원클릭 재인덱싱 및 보안 분석
고급 기능:
- 확장된 사고/추론 제어 - 품질과 속도 간의 균형을 위해 LLM 추론 깊이 조정
- OpenAI o1/o3/o4, 확장된 사고를 지원하는 Claude, 로컬 추론 모델 지원
- 구성 가능한 노력 수준: 낮음(빠름), 중간(균형), 높음(철저)
- 프로그램별 영속성 - 다른 바이너리에서 다른 추론 수준 사용 가능
- 제공자에 구애받지 않는 구현(Anthropic, OpenAI, Azure, LiteLLM, LMStudio, Ollama)
- ReAct 에이전트 모드 - 구조화된 추론(Think-Act-Observe)을 사용하는 자율 조사
- LLM이 사용자의 질의에 기반하여 조사 단계를 제안
- 할 일 목록을 통한 진행 상황 추적으로 체계적인 도구 실행
- 모든 조사 단계를 보여주는 반복 기록 보존
- 포괄적인 답변과 주요 발견 사항을 포함한 최종 종합
- 정확한 지표(반복 횟수, 도구 호출 횟수, 소요 시간)
- MCP 통합 - 도구 기반 분석을 위한 Model Context Protocol 클라이언트
- Ghidra 특정 도구를 위해 GhidrAssistMCP와 함께 작동
- 자동 함수 실행이 가능한 대화형 도구 호출
- SSE(Server-Sent Events) 전송 지원
- 함수 호출 - LLM이 바이너리 탐색 및 분석 수정을 자율적으로 수행
- 함수 및 변수 이름 변경
- 주소 및 교차 참조로 이동
- Ghidra 명령 실행
- 액션 탭 - 대량 분석 개선 제안 및 적용
- 보안 취약점 탐지
- 코드 품질 분석
- 자동 리팩토링 제안
- RAG(Retrieval Augmented Generation) - 컨텍스트 문서로 질의 강화
- 사용자 정의 문서, 익스플로잇 노트, 아키텍처 참조 추가
- Lucene 기반 전체 텍스트 검색
- 질의에 컨텍스트 주입
- RLHF 데이터셋 생성 - 모델 파인튜닝을 위한 피드백 수집
아키텍처
이 플러그인은 모듈식 서비스 지향 아키텍처를 사용합니다:
핵심 서비스:
- 질의 모드: 일반 질의, MCP 강화 질의, 또는 완전 에이전트 조사
- ReAct 오케스트레이터: 할 일 추적 및 발견 사항 누적을 통한 자율 조사 루프 관리
- 대화형 도구 핸들러: 다중 턴 도구 호출 세션 관리
- MCPToolManager: 특수 도구를 위한 외부 MCP 서버와 인터페이스
Graph-RAG 백엔드:
- BinaryKnowledgeGraph: 의미 지식을 위한 하이브리드 SQLite + JGraphT 저장소
- GraphRAGEngine: 미리 계산된 요약을 사용하는 LLM 없는 질의 엔진
- SemanticExtractor: 배치 처리를 통한 LLM 기반 함수 요약
- SecurityFeatureExtractor: 네트워크, 파일 I/O, 암호화 API에 대한 정적 분석
- CommunityDetector: 모듈 발견을 위한 Leiden 알고리즘 구현
데이터 계층:
- AnalysisDB: 채팅 기록, RLHF 피드백 및 지식 그래프를 위한 SQLite 데이터베이스
- SchemaMigrationRunner: 투명한 업그레이드를 위한 버전 관리 데이터베이스 마이그레이션
- RAGEngine: 사용자 정의 컨텍스트 주입을 위한 Lucene 기반 문서 검색
UI 구성 요소:
- 탭 기반 인터페이스: 설명, 질의, 액션, 의미 그래프, RAG 관리, MCP 서버
- TabController를 통한 서비스 오케스트레이션
향후 로드맵:
- 수집된 RLHF 데이터셋을 사용한 모델 파인튜닝
- 추가 MCP 도구 통합
- 향상된 에이전트 기능, 다중 에이전트 협업
- 임베딩 기반 유사도 검색
스크린샷
Screenshot
https://github.com/user-attachments/assets/bd79474a-c82f-4083-b432-96625fef1387
빠른 시작
- 필요한 경우, 바이너리 릴리즈 ZIP 아카이브를 Ghidra_Install/Extensions/Ghidra 디렉토리에 복사합니다.
- Ghidra 실행 -> 파일 -> 확장 기능 설치 -> GhidrAssist 활성화.
- 바이너리 로드 및 CodeBrowser 실행.
- CodeBrowser -> 파일 -> 구성 -> 기타 -> GhidrAssist 활성화.
- CodeBrowser -> 창 -> GhidraAssistPlugin.
- RLHF 및 RAG 데이터베이스 경로가 사용자 환경에 적합한지 확인합니다.
- API 호스트를 원하는 API 제공자로 지정하고 API 키를 설정합니다.
- (선택 사항) 분석 옵션 탭에서 확장된 사고를 지원하는 모델의 경우 추론 노력 수준(없음/낮음/중간/높음)을 설정합니다.
- Windows 메뉴의 GhidrAssist 옵션으로 GhidrAssist를 열고 탐색을 시작합니다.
LLM 설정
GhidrAssist는 모든 OpenAI v1 호환 API와 함께 작동합니다. 설정 세부 사항은 제공자별로 다릅니다. 다음은 유용한 리소스입니다:
로컬 LLM 제공자:
- LM Studio - GUI를 통한 쉬운 로컬 모델 호스팅
- Ollama - 명령줄 로컬 모델 관리
- Open-WebUI - 로컬 모델을 위한 웹 인터페이스
클라우드 제공자:
LiteLLM 프록시(다중 제공자 게이트웨이):
- LiteLLM - 100개 이상의 LLM 제공자를 위한 통합 API
- AWS Bedrock, Google Vertex AI, Azure 등 지원
- GhidrAssist 설정에서 제공자 유형으로 "LiteLLM" 선택
- 올바른 메시지 형식을 위한 자동 모델 패밀리 감지
권장 모델
에이전트 모드용(강력한 추론 및 도구 사용 필요):
- 클라우드: GPT-5.1, Claude Sonnet 4.5
- 로컬: GPT-OSS, Llama 3.3 70B, DeepSeek-R1 70B, Qwen2.5 72B
확장된 사고/추론 지원 모델:
- OpenAI: o1-preview, o1-mini, o3-mini, o4-mini, gpt-5(
reasoning_effort 매개변수 사용)
- Anthropic: Claude Sonnet 4.5, Claude Opus 4.5, Claude Haiku 4.5, Claude Opus 4.1/4, Claude Sonnet 4(
thinking.budget_tokens 매개변수 사용)
- 로컬: openai/gpt-oss-20b (Ollama/LMStudio를 통해, 노력 수준 지원)
추론 노력 지침:
- 낮음: 빠른 분석, 최소 추론 토큰(~5-10초, 저비용)
- 중간: 균형 잡힌 추론 깊이(~15-30초, 중간 비용)
- 높음: 심층 보안 분석(~30-60초, 2배 비용, 취약점 헌팅에 권장)
참고: 에이전트 모드는 강력한 함수 호출 및 다단계 추론 기능을 갖춘 모델이 필요합니다. 작은 모델은 복잡한 조사에 어려움을 겪을 수 있습니다. 확장된 사고는 선택 사항이지만 복잡한 리버스 엔지니어링 작업에 대한 분석 품질을 크게 향상시킬 수 있습니다.
도구 기반 분석에 GhidrAssistMCP 사용하기
GhidrAssistMCP는 LLM이 Ghidra의 분석 기능과 직접 상호 작용할 수 있는 MCP 도구를 제공합니다.
설정
-
MCP 서버 시작
-
GhidrAssist 구성:
- 도구 → GhidrAssist 설정 → MCP 서버 탭 열기
- 전송 유형
SSE로 서버 추가: http://127.0.0.1:8081 (GhidrAssistMCP)
-
질의에 MCP 활성화:
- 사용자 정의 질의 탭에서 "MCP 사용" 체크
- 선택적으로 자율 조사 모드를 위해 "에이전트" 활성화
사용 모드
일반 MCP 질의:
- "MCP 사용" 체크박스 활성화
- "현재 함수는 무엇을 합니까?"와 같은 질문
- LLM이 디컴파일, 교차 참조 등을 얻기 위해 도구 호출 가능
에이전트 모드(권장):
- "MCP 사용" 및 "에이전트" 체크박스 모두 활성화
- "이 함수에서 취약점 찾기" 또는 "호출 그래프 분석"과 같은 복잡한 질문
- ReAct 에이전트가 수행:
- 할 일 목록으로 조사 단계 제안
- 정보 수집을 위해 체계적으로 도구 실행
- 진행 상황 추적 및 발견 사항 누적
- 증거와 함께 포괄적인 답변 종합
예시 질의:
- "이 함수에 존재하는 보안 취약점은 무엇입니까?"
- "사용자 입력에서 이 호출까지의 데이터 흐름을 추적하십시오."
- "전역 변수 X를 수정하는 모든 함수를 찾으십시오."
- "현재 함수의 오류 처리를 분석하십시오."
의미 그래프(Graph-RAG) 사용하기
의미 그래프 탭은 모든 질의에 LLM 호출 없이 바이너리 분석 결과를 탐색할 수 있는 지식 그래프 인터페이스를 제공합니다.
시작하기
-
바이너리 인덱싱:
- 의미 그래프 탭 열기
- "바이너리 재인덱싱" 클릭하여 구조적 관계 추출
- "의미 분석" 클릭하여 LLM 요약 생성(API 필요)
- 진행 상태는 상태 표시줄에 표시됨
-
그래프 탐색:
- 목록 보기: 요약 및 보안 플래그와 함께 모든 인덱싱된 함수 찾아보기
- 그래프 보기: 구성 가능한 N-홉 깊이로 호출 관계 시각화
- 검색 보기: 요약 및 보안 주석 전체에 대한 전체 텍스트 검색
-
보안 분석:
- "보안 분석" 클릭하여 보안 관련 기능 스캔
- 결과: 네트워크 API, 파일 I/O, 암호화 사용, 문자열 패턴
- 감지된 기능에 따라 위험 수준(LOW/MEDIUM/HIGH) 할당
설명 탭 통합
설명 탭에서 함수를 볼 때:
- 함수가 인덱싱된 경우, 미리 계산된 요약이 즉시 표시됨
- 보안 패널 표시: 위험 수준, 활동 프로필, 사용된 API
- "편집" 클릭하여 요약 수정(자동 덮어쓰기로부터 보호됨)
- "새로고침" 사용하여 LLM으로 요약 재생성
이점
- 빠른 질의: 미리 계산된 요약으로 반복 질의에서 LLM 지연 시간 제거
- 오프라인 분석: API 연결 없이 인덱싱된 데이터 탐색
- 보안 초점: 보안 관련 코드 패턴 자동 감지
- 모듈 발견: 커뮤니티 탐지가 관련 함수를 자동으로 그룹화
홈페이지
https://symgraph.ai
최소 버전
이 플러그인은 다음 최소 버전의 Ghidra가 필요합니다:
라이선스
이 플러그인은 MIT 라이선스 하에 배포됩니다.