
VulnAgent-X: 저장소 수준의 취약점 탐지를 위한 계층적 에이전트 기반 프레임워크
VulnAgent-X는 논문 재현을 위한 멀티 에이전트 취약점/결함 탐지 프로토타입입니다. 로컬 저장소 또는 diff를 입력하면 구조화된 findings, 증거 체인, 위치 결과, 신뢰도 및 실험 로그를 출력합니다.
repo path 또는 unified diffscreening -> context expansion -> scheduler -> router -> experts -> sceptic -> verification(stub) -> evidence fusionissue_typelocation(file + line range)evidence_summaryconfidenceseverityoptional_cwefix_hintevidence_chaincounter_evidencescreening: 의심 영역 빠른 선별 (규칙 + 메타데이터 신호)context_expansion: "최소 충분 컨텍스트" 가져오기 (의심 위치 기준 창 추출)scheduler: 신뢰도와 위험에 따른 에스컬레이션 전략 (early_exit / expert_review / verification)router_agent: 각 의심 영역에 전문가 Agent 선택semantic/security/logic: 서로 다른 관점에서 구조화된 주장과 증거 제시sceptic_agent: 반증과 페널티 신호 생성verification: 선택적 동적 검증 (현재는 안전한 플레이스홀더 구현)evidence_fusion: 통합 융합 후 최종 findings 출력요구 사항: Python 3.11+ (현재는 더 높은 버전에서도 실행 가능)
cd /Users/xiaolu/Documents/Python_code/vulnAgentX
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'
전체 저장소 분석:
.venv/bin/vulnagentx analyze --repo /path/to/repo --output json
diff 파일 분석:
.venv/bin/vulnagentx analyze --diff-file /path/to/patch.diff --output json
요약 출력:
.venv/bin/vulnagentx analyze --repo /path/to/repo --output summary
서비스 시작:
.venv/bin/uvicorn vulnagentx.app.api:app --reload
상태 확인:
curl http://127.0.0.1:8000/health
분석 요청:
curl -X POST http://127.0.0.1:8000/analyze \
-H "Content-Type: application/json" \
-d '{"repo_path":"/path/to/repo"}'
docker compose -f docker/docker-compose.yml up --build
.venv/bin/ruff check src tests
.venv/bin/mypy src
.venv/bin/pytest
{
"run_id": "...",
"findings": [
{
"issue_type": "command_injection",
"location": {"file_path": "app.py", "start_line": 42, "end_line": 42},
"evidence_summary": "Command execution surface detected...",
"confidence": 0.87,
"severity": "critical",
"optional_cwe": "CWE-78",
"fix_hint": "Avoid shell command composition...",
"source_agents": ["security_agent", "semantic_agent"],
"evidence_chain": [],
"counter_evidence": []
}
],
"metrics": {
"runtime_seconds": 0.07
},
"logs": []
}
src/vulnagentx)tests)| 파일 | 용도 |
|---|---|
tests/test_agents.py | 단위 테스트: 각 Agent의 구조화된 출력 및 반증 로직. |
tests/test_end_to_end.py | 엔드투엔드 테스트: 입력 저장소에서 최종 findings까지의 메인 흐름. |
tests/test_research_modules.py | 신규 모듈 테스트: Tree-sitter 그래프 구축, verification 실행 체인, 평가 지표. |
OpenAI + 로컬 Ollama + 자동 팩토리 전환| 파일 | 용도 |
|---|
.env.example | 환경 변수 템플릿 (로그 레벨 등 선택적 설정). |
pyproject.toml | 프로젝트 빌드, 의존성, 스크립트 진입점, pytest/ruff/mypy 설정. |
README.md | 메인 README (언어 전환 버튼 포함, 기본 중국어). |
README.zh.md | 중국어 전체 버전 문서. |
README.en.md | 영어 전체 버전 문서. |
docker/Dockerfile | API 서비스 컨테이너 이미지 빌드 파일. |
docker/docker-compose.yml | 로컬에서 한 번에 컨테이너 서비스 실행. |
rules/semgrep/vulnagentx-rules.yml | 내장 Semgrep 규칙 세트 (명령 주입/SQL 주입/역직렬화/안전하지 않은 C API). |
scripts/run_experiment.py | 데이터셋 배치 실험 실행 스크립트, 예측 JSONL 출력. |
scripts/evaluate.py | 실험 출력을 읽고 탐지/위치/효율 지표 계산. |
scripts/run_ablation.py | 소거(ablation) 실험 스크립트 (no_semgrep/no_treesitter/no_sceptic/no_verification). |
| 파일 | 용도 |
|---|
src/vulnagentx/__init__.py | 패키지 버전 및 패키지 내보내기 정의. |
src/vulnagentx/app/__init__.py | app 하위 패키지 초기화. |
src/vulnagentx/app/cli.py | CLI 진입점 (vulnagentx analyze). |
src/vulnagentx/app/api.py | FastAPI 서비스 진입점 (/health, /analyze). |
src/vulnagentx/app/schemas.py | API 요청/응답 Pydantic 스키마. |
src/vulnagentx/core/__init__.py | core 하위 패키지 초기화. |
src/vulnagentx/core/state.py | 전역 상태 모델: 영역, 증거, Agent 출력, Finding, 로그, 지표. |
src/vulnagentx/core/screening.py | 1단계 빠른 선별, 의심 영역 추출. |
src/vulnagentx/core/context_expansion.py | 컨텍스트 확장: 위치 기준 최소 코드 창 추출. |
src/vulnagentx/core/scheduler.py | 신뢰도 인지 에스컬레이션 전략 (early_exit/expert_review/verification). |
src/vulnagentx/core/verification.py | 선택적 동적 검증 모듈 (현재는 안전한 플레이스홀더 버전). |
src/vulnagentx/core/evidence_fusion.py | 다중 Agent 증거 융합, 최종 findings 출력. |
src/vulnagentx/core/workflow.py | 엔드투엔드 오케스트레이션 진입점 VulnAgentWorkflow. |
src/vulnagentx/agents/__init__.py | Agent 내보내기 집계. |
src/vulnagentx/agents/base.py | Agent 추상 기본 클래스 및 컨텍스트 획득 도구. |
src/vulnagentx/agents/router_agent.py | 라우팅 Agent: 각 의심 영역에 전문가 Agent 할당. |
src/vulnagentx/agents/semantic_agent.py | 시맨틱 Agent: 의미론적 계층 위험 (예: 널 포인터, 역직렬화, 예외 삼킴). |
src/vulnagentx/agents/security_agent.py | 보안 Agent: 보안 취약점 규칙 (명령 주입, SQL 주입, 경계 초과 등). |
src/vulnagentx/agents/logic_bug_agent.py | 로직 Agent: 비즈니스/제어 흐름 결함 (경계, 0으로 나누기, 인가 누락 등). |
src/vulnagentx/agents/sceptic_agent.py | 회의론자 Agent: 반증 생성, 충돌 페널티, 신뢰도 하향. |
src/vulnagentx/adapters/__init__.py | 어댑터 하위 패키지 초기화. |
src/vulnagentx/adapters/sandbox_adapter.py | 제한된 서브프로세스 샌드박스 실행기 (타임아웃, 셸 없음)로 verification에 사용. |
src/vulnagentx/adapters/semgrep_adapter.py | Semgrep CLI 어댑터 (선택적 활성화). |
src/vulnagentx/adapters/treesitter_adapter.py | 실제 Tree-sitter 어댑터 (사용 가능 시 AST와 호출/import 관계 파싱, 불가능 시 폴백). |
src/vulnagentx/adapters/llm/__init__.py | LLM 어댑터 내보내기 집계. |
src/vulnagentx/adapters/llm/base.py | LLM 어댑터 프로토콜 인터페이스. |
src/vulnagentx/adapters/llm/mock_adapter.py | 오프라인 테스트 가능한 Mock LLM. |
src/vulnagentx/adapters/llm/openai_adapter.py | OpenAI 공식 SDK 어댑터. |
src/vulnagentx/adapters/llm/local_adapter.py | 로컬 모델 어댑터 (Ollama HTTP API). |
src/vulnagentx/adapters/llm/factory.py | 설정에 따라 LLM 어댑터 자동 선택, 최후 수단으로 Mock 폴백. |
src/vulnagentx/retrieval/repo_graph.py | 코드 그래프 인덱스 및 이웃 파일 검색 (AST 기호 중첩 기반). |
src/vulnagentx/datasets/base.py | 공용 데이터셋 샘플 구조 및 JSONL/CSV 읽기. |
src/vulnagentx/datasets/devign.py | Devign 데이터 로드 진입점. |
src/vulnagentx/datasets/bigvul.py | Big-Vul 데이터 로드 진입점. |
src/vulnagentx/datasets/primevul.py | PrimeVul 데이터 로드 진입점. |
src/vulnagentx/datasets/jit.py | JIT 데이터 로드 진입점. |
src/vulnagentx/eval/detection_metrics.py | 탐지 지표 (Precision/Recall/F1/Accuracy). |
src/vulnagentx/eval/localization_metrics.py | 위치 확인 지표 (Top-1/Top-3/MRR). |
src/vulnagentx/eval/efficiency_metrics.py | 효율 지표 (평균 소요 시간, P95, 평균 findings). |
src/vulnagentx/eval/ablations.py | 소거 실험 실행 로직. |
src/vulnagentx/utils/config.py | 워크플로우 설정 센터 (env/CLI/API 스위치). |