Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
ethibench — AI 침투 테스트 에이전트를 위한 평가 프레임워크로, LLM 기반 의미 매칭, 이분 그래프 해결, 실제 대상에 대한 누적 분석을 통해 검증된 취약점 발견을 측정합니다. | Kitploit
도구/GitHubGitHub/jd0965199-oss/ethibench
Penetration Testing FrameworksVulnerability AnalysisPenetration TestingMachine LearningPapers & ResearchLearning & EducationAI Security
GitHubjd0965199-oss/ethibench

ethibench

AI 침투 테스트 에이전트를 위한 평가 프레임워크로, LLM 기반 의미 매칭, 이분 그래프 해결, 실제 대상에 대한 누적 분석을 통해 검증된 취약점 발견을 측정합니다.

저장소 보기
54개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

통제된 환경에서 실제 환경으로: 실제 세계에서의 침투 테스트 에이전트 평가

AI 침투 테스트 에이전트는 공격적 보안 시스템으로서 점점 더 신뢰할 수 있게 되고 있지만, 현재의 벤치마크는 실제 대상에서 어떤 시스템이 가장 잘 수행될지에 대한 제한적인 지침만 제공합니다. 대부분의 기존 평가는 플래그 획득, 원격 코드 실행, 익스플로잇 재현, 궤적 유사성과 같은 사전 정의된 목표에 대해 단순화되거나 좁은 설정에서 평가하고 최적화합니다. 이러한 벤치마크는 제한된 능력을 측정하는 데 유용하지만, 실제 침투 테스트에 필요한 복잡성, 개방형 탐색, 전략적 의사 결정을 적절히 포착하지 못합니다. 우리는 평가를 작업 완료에서 검증된 취약점 발견으로 전환하는 실용적인 평가 프레임워크를 제시하며, 이를 통해 여러 공격 표면과 취약점 클래스를 포괄하는 충분히 복잡한 대상에서 평가할 수 있습니다. 이 프레임워크는 구조화된 정답 데이터와 LLM 기반 의미론적 매칭을 결합하여 취약점을 식별하고, 현실적인 모호성 하에서 결과를 점수화하기 위한 이분 매칭(bipartite matching), 지속적인 정답 데이터 유지, 확률적 에이전트의 반복 및 누적 평가, 효율성 메트릭, 지속 가능한 실험을 위한 축소된 스위트 선택을 포함합니다. 이 방법론은 AI 침투 테스트 에이전트의 보다 현실적이고 운영상 유용한 비교를 가능하게 함으로써 최신 기술 수준을 확장합니다. 재현성을 위해, 제안된 평가 프로토콜에 대한 전문가 주석 정답 데이터와 코드를 추가로 공개합니다.

보안 테스트 도구를 위한 평가 파이프라인. LLM 기반 매칭을 사용하여 도구 결과를 정답 데이터셋과 비교하고 정밀도, 재현율, F1, F0.5 메트릭을 생성합니다.

설치

root@kitploit:~
poetry install

Python 3.11+ 및 Poetry가 설치되어 있어야 합니다.

빠른 시작

root@kitploit:~
# 1. Set your LLM API key
export OPENAI_API_KEY="..."

# 2. Run evaluation
ethibench evaluate ./my_experiment --dataset path/to/dataset.yaml

# 3. View results
cat ./my_experiment/evaluation_outputs/summary.md

CLI 명령어

ethibench evaluate

실험 디렉토리에서 전체 평가 파이프라인을 실행합니다.

root@kitploit:~
ethibench evaluate <experiment_dir> --dataset <dataset.yaml> [options]

# Batch: evaluate all experiments in a folder
ethibench evaluate --parent-dir final_experiments/ --dataset <dataset.yaml>

# Force re-evaluation (ignore cached artifacts)
ethibench evaluate <experiment_dir> --dataset <dataset.yaml> --force

인수:

  • experiment_dir — (선택 사항) 대상 하위 디렉토리(또는 각각 대상 하위 디렉토리를 가진 run_* 하위 디렉토리)가 포함된 디렉토리입니다. --parent-dir 사용 시 생략 가능합니다.

옵션:

  • --dataset, -d — (필수) 데이터셋 YAML 파일 경로.
  • --gt-dir, -g — 정답 데이터 디렉토리. 기본값은 데이터셋 YAML 옆의 gt/입니다.
  • --output-dir, -o — 출력 디렉토리. 기본값은 실험 디렉토리 내의 evaluation_outputs/입니다. 배치 모드에서는 무시됩니다.
  • --replicates, -n — LLM 매칭 복제 횟수(기본값: 1).
  • --force, -f — 캐시된 아티팩트를 무시하고 모든 단계를 다시 실행합니다. 기본적으로 기존 중간 결과(원시 매칭, 이분 매칭, 메트릭)가 재사용됩니다.
  • --parent-dir, -p — 여러 실험 디렉토리를 배치로 평가할 상위 폴더. 모든 직계 하위 디렉토리가 실험으로 처리됩니다.

기능:

  1. 결과 수집 — 대상 하위 디렉토리(폴더 이름 = target_id)를 스캔하고 각 findings.jsonl을 로드한 후 데이터셋 YAML에서 subset_name을 할당합니다.
  2. 원시 LLM 매칭 — LLM을 사용하여 모든 결과를 모든 정답 항목과 비교합니다.
  3. 이분 매칭 — 최적의 1:1 할당을 위한 헝가리안 알고리즘.
  4. 메트릭 — 하위 집합별 TP, FP, FN, 중복, 정밀도, 재현율, F1, F0.5, 심각도 점수를 계산합니다.
  5. 집계 — 복제 및 실행 간 평균을 내고 가중/비가중 전체를 계산합니다.
  6. 비용 메트릭 — 각 대상의 metrics.json이 있는 경우 로드하여 비용/토큰/기간을 집계합니다.
  7. 그래프 — evaluation_outputs/plots/에 PNG 차트를 생성합니다.
  8. 요약 — evaluation_outputs/summary.md를 작성합니다.

ethibench analyze

기존 평가 출력에 대한 분석 도구를 실행합니다.

root@kitploit:~
ethibench analyze <experiment_dir> --dataset <dataset.yaml> [options]

# Batch: analyze all experiments and produce aggregated results
ethibench analyze --parent-dir final_experiments/ --dataset <dataset.yaml>

인수:

  • experiment_dir — (선택 사항) 분석할 실험 디렉토리. --parent-dir 사용 시 생략 가능합니다.

옵션:

  • --dataset, -d — (필수) 데이터셋 YAML 파일 경로.
  • --gt-dir, -g — 정답 데이터 디렉토리. 기본값은 데이터셋 YAML 옆의 gt/입니다.
  • --output-dir, -o — 평가 출력 디렉토리. 기본값은 실험 디렉토리 내의 evaluation_outputs/입니다.
  • --parent-dir, -p — 배치로 분석할 여러 실험 디렉토리가 포함된 상위 폴더. 실험별 분석과 집계 결과를 생성합니다.

실험별 출력 (evaluation_outputs/analysis/):

  • duplicates.json — 원시 매칭에서 일치했지만 이분 최적화로 제거된 결과.
  • unmatched.json — 정답 데이터와 일치하지 않는 결과(거짓 양성).
  • statistics.json — GT 적용 범위 통계, 결과별 GT 분포.

집계 출력 (--parent-dir 사용 시에만, <parent-dir>/aggregated_analysis/에 위치):

  • all_duplicates.jsonl — 모든 실험의 모든 중복 결과(JSONL, experiment 필드가 포함된 전체 결과 객체).
  • all_false_positives.jsonl — 모든 실험의 모든 일치하지 않는/거짓 양성 결과(JSONL 형식).
  • gt_statistics_avg.json — 하위 집합별 평균 GT 적용 범위 및 실험별 적용 범위 요약.

ethibench compare

여러 실험 간의 평가 결과를 비교하여 나란히 놓인 그래프와 요약 보고서를 생성합니다. 각 실험에는 이미 평가 출력이 있어야 합니다(먼저 ethibench evaluate 실행). 레이블은 항상 디렉토리 이름입니다.

root@kitploit:~
# Explicit experiment directories
ethibench compare exp-gpt4o/ exp-claude/ --output-dir comparison/

# Auto-discover all experiments under a parent folder
ethibench compare --parent-dir all-experiments/ --output-dir comparison/

# Mix: explicit dirs + auto-discovery
ethibench compare exp-extra/ --parent-dir all-experiments/ --output-dir comparison/

인수:

  • experiment_dirs — (선택 사항) 명시적으로 포함할 하나 이상의 실험 디렉토리.

옵션:

  • --output-dir, -o — (필수) 비교 결과를 위한 출력 디렉토리.
  • --parent-dir, -p — 실험을 자동 검색할 상위 폴더. evaluation_outputs/ 폴더가 포함된 직계 하위 디렉토리가 알파벳 순서로 포함됩니다. 명시적 experiment_dirs와 결합 가능합니다.

출력 (--output-dir 내):

  • comparison.json — 모든 실험의 원시 비교 데이터.
  • plots/ — 나란히 놓인 PNG 차트.
  • comparison.md — 마크다운 요약.
  • pairwise_comparison.md — 쌍별 A/B 통계 비교(F1 기준 상위 4개 실험).
  • pairwise_comparison.tex — 쌍별 테이블의 LaTeX 버전.
  • cumulative-analysis/ — (누적 데이터가 있는 경우) 평균 F1과 누적 F1 간의 델타 분석 및 누적 비교 그래프.

파일 형식

결과 (findings.jsonl)

한 줄에 하나의 JSON 객체. 필수 필드: title, description. 선택 사항: url, cwe, severity, score, steps, evidence, metadata 등.

각 findings.jsonl은 대상 디렉토리 안에 있습니다. 디렉토리 이름이 결과가 속한 대상을 결정합니다.

root@kitploit:~
{"title": "SQL Injection in Login", "description": "User input not sanitized", "cwe": "89"}

정답 데이터 (*_gt.jsonl)

한 줄에 하나의 JSON 객체.

root@kitploit:~
{"id": "gt-001", "name": "SQL Injection", "subset_name": "MyApp", "target_id": "app", "category": "CWE-89", "description": "Database query vulnerability", "cvss": 9.8}

데이터셋 YAML

root@kitploit:~
- subset: "MyApp"
  weight: 1.0
  targets:
    - target_id: "app"

target_id는 각 실행 폴더 아래의 디렉토리 이름과 일치해야 합니다. 평가 시 ethibench는 실행 디렉토리에서 알려진 target_id 값과 일치하는 하위 디렉토리를 스캔하고 findings.jsonl을 로드한 후 해당 하위 집합에 할당합니다. 선택적 gt_file 필드는 사용자 지정 GT 파일 경로를 지정합니다.

구성

모든 구성은 환경 변수를 통해 수행됩니다:

변수기본값설명
ETHIBENCH_LLM_PROVIDERopenaiLLM 제공자: openai, anthropic, ollama, gemini
ETHIBENCH_LLM_MODELgpt-5.4-mini모델 이름
ETHIBENCH_TEMPERATURE0.3샘플링 온도
ETHIBENCH_API_URL—사용자 지정 API 엔드포인트(Ollama 또는 호환 API용)
ETHIBENCH_CONCURRENCY50최대 동시 LLM 호출 수
ETHIBENCH_MAX_RETRIES5LLM 호출당 최대 재시도 횟수
ETHIBENCH_MAX_PARALLEL_RUNS3실험 내에서 병렬로 평가되는 최대 실행 수
ANTHROPIC_API_KEY—Anthropic API 키
OPENAI_API_KEY—OpenAI API 키
GEMINI_API_KEY—Google Gemini API 키

디렉토리 구조

입력

단일 실행:

root@kitploit:~
my_experiment/
├── app.example.com/         # target_id를 디렉토리 이름으로 사용
│   ├── findings.jsonl       # 이 대상의 결과
│   └── metrics.json         # 선택 사항: 비용/토큰 정보
├── api.example.com/
│   ├── findings.jsonl
│   └── metrics.json

여러 실행:

root@kitploit:~
my_experiment/
├── run_001/
│   ├── app.example.com/
│   │   ├── findings.jsonl
│   │   └── metrics.json
│   └── api.example.com/
│       └── findings.jsonl
├── run_002/
│   ├── app.example.com/
│   │   └── findings.jsonl
│   └── api.example.com/
│       └── findings.jsonl

출력

root@kitploit:~
my_experiment/
└── evaluation_outputs/
    ├── findings_parsed.jsonl  # target_id/subset_name이 포함된 통합 결과
    ├── raw_matchings/         # 1단계: LLM 비교 결과
    │   └── matchings_MyApp.json
    ├── matchings/             # 2단계: 최적 1:1 할당
    │   └── matchings_MyApp.json
    ├── results/               # 3단계: 하위 집합별 메트릭
    │   └── evaluation_results_MyApp.json
    ├── results_avg/           # 복제 간 평균
    ├── results_avg_all/       # 실행 간 평균(다중 실행 전용)
    ├── metrics_summary.json   # 집계된 비용/토큰 메트릭
    ├── plots/                 # PNG 차트
    │   ├── metrics_per_subset.png
    │   ├── counts_per_subset.png
    │   ├── overall_unweighted.png
    │   ├── per_target_costs.png
    │   └── per_target_duration.png
    ├── cumulative-analysis/   # 다중 실행 전용: 병합된 결과 + 중복
    │   ├── findings_parsed.jsonl
    │   ├── raw_matchings/
    │   ├── matchings/
    │   ├── results/
    │   ├── results_avg/
    │   ├── run_overlap.json   # 실행 간 GT 수준 중복
    │   └── plots/
    │       ├── metrics_per_subset.png
    │       ├── counts_per_subset.png
    │       ├── overall_unweighted.png
    │       ├── jaccard_similarity.png
    │       └── vulnerability_frequency.png
    ├── analysis/              # `ethibench analyze`에서 생성
    │   ├── duplicates.json
    │   ├── unmatched.json
    │   └── statistics.json
    └── summary.md

배치 분석 출력 (--parent-dir 사용 시):

root@kitploit:~
parent_dir/
├── experiment_a/
│   └── evaluation_outputs/analysis/  # 실험별 분석
├── experiment_b/
│   └── evaluation_outputs/analysis/
└── aggregated_analysis/              # 실험 간 집계
    ├── all_duplicates.jsonl          # 모든 중복(JSONL 형식)
    ├── all_false_positives.jsonl     # 모든 거짓 양성(JSONL 형식)
    └── gt_statistics_avg.json        # 평균 GT 적용 범위 통계

누적 분석

여러 실행(run_* 하위 디렉토리)이 있는 실험의 경우, ethibench는 자동으로 누적 분석을 생성하여 모든 실행을 단일 결합 데이터셋으로 병합하고 병합된 데이터에 대해 이분 매칭과 메트릭을 다시 계산합니다. 이는 다중 실행 실험에 대한 ethibench evaluate의 마지막 단계로 실행됩니다.

기능

  1. 결과 병합 — 모든 실행의 findings_parsed.jsonl을 연결합니다(중복 제거 없음).
  2. 원시 매칭 병합 — 실행별 원시 LLM 매칭을 결합합니다. 추가 LLM 호출이 필요하지 않습니다.
  3. 이분 매칭 재계산 — 병합된 데이터에 대해 헝가리안 알고리즘을 실행하여 모든 실행을 통틀어 최적의 1:1 할당을 찾습니다.
  4. 메트릭 계산 — 결합 데이터셋에 대해 TP/FP/FN/중복 및 파생 점수를 계산합니다.
  5. 실행 중복 분석 — 각 실행이 찾은 GT 취약점을 분석하여 실행 간 자카드 유사도와 발견 빈도를 계산합니다.
  6. 그래프 생성 — 누적 결과에 대한 표준 평가 그래프와 두 개의 중복 관련 차트를 생성합니다.

실행 중복 분석

중복 분석(run_overlap.json)은 *서로 다른 실행이 동일한 취약점을 발견하고 있는가?*라는 질문에 답합니다. 각 개별 실행의 이분 매칭(권위적인 TP 할당)을 사용합니다.

하위 집합 및 전체에 대해:

  • GT 적용 범위 매트릭스 — 각 실행이 발견한 GT 항목.
  • 쌍별 자카드 유사도 — 각 실행 쌍의 TP 집합 간 유사도와 모든 쌍의 평균.
  • 발견 빈도 — 정확히 0, 1, 2, ..., N개의 실행에 의해 발견된 GT 항목 수. 모든 실행이 발견한 취약점은 "쉬운" 것이고, 하나의 실행만 발견한 것은 "어려운" 것입니다.
  • 집합 분할 — found_by_all, found_by_some, found_by_one, found_by_none.

중복 그래프

  • jaccard_similarity.png — 실행 간 쌍별 자카드 유사도의 막대 그래프(점선은 평균).
  • vulnerability_frequency.png — 정확히 N개의 실행이 발견한 GT 취약점 수를 보여주는 막대 그래프(빨간색 0부터 노란색을 거쳐 초록색(모두)까지 색상 코드).

출력 구조

root@kitploit:~
evaluation_outputs/cumulative-analysis/
├── findings_parsed.jsonl   # 모든 실행에서 병합됨
├── raw_matchings/          # 모든 실행에서 병합됨
├── matchings/              # 병합된 데이터에 대한 이분 매칭
├── results/                # 하위 집합별 메트릭
├── results_avg/            # 평균 + 가중/비가중 전체
├── run_overlap.json        # 실행 간 GT 수준 중복
└── plots/
    ├── metrics_per_subset.png
    ├── counts_per_subset.png
    ├── overall_unweighted.png
    ├── jaccard_similarity.png
    └── vulnerability_frequency.png

매칭 작동 방식

  1. 원시 매칭: 각 결과를 LLM이 각 정답 항목과 비교합니다. LLM이 각 쌍에 대해 YES/NO를 결정합니다. 이는 다대다 매핑을 생성합니다.

  2. 이분 매칭: 헝가리안 알고리즘 (scipy.optimize.linear_sum_assignment)이 일치하는 쌍의 수를 최대화하는 최적의 일대일 할당을 찾습니다.

  3. 분류:

    • TP (진양성): 결과가 최종 1:1 할당에서 일치하는 항목이 있음.
    • FP (거짓 양성): 결과가 원시 매칭에서도 일치하는 항목이 없음.
    • 중복: 결과가 원시 매칭에서 일부 GT와 일치했지만 이분 최적화 중에 제거됨(다른 결과가 해당 GT에 더 적합한 일치였음).
    • FN (거짓 음성): 어떤 결과와도 일치하지 않은 GT 항목.
  4. 메트릭:

    • 정밀도 = TP / (TP + FP)
    • 재현율 = TP / (TP + FN)
    • F1 = 2 × P × R / (P + R)
    • F0.5 = 1.25 × P × R / (0.25 × P + R)
    • 심각도 점수 = 각 TP에 대한 CVSS 기반 점수의 합(없음/0→0, ≤3.9→3, ≤6.9→15, ≤8.9→30, >8.9→50)

아키텍처

root@kitploit:~
src/ethibench/
├── cli.py              # Click CLI 진입점(evaluate, convert-report, analyze, compare)
├── config.py           # 환경 변수 구성
├── models.py           # Pydantic 데이터 모델
├── datasets.py         # 데이터셋/대상 YAML 관리
├── llm.py              # LLM 제공자 팩토리
├── evaluate.py         # 핵심 3단계 평가 파이프라인
├── results.py          # 결과 집계 및 평균
├── metrics.py          # 대상별 비용/토큰/기간 메트릭
├── convert_report.py   # 보고서 → 결과 변환
├── cumulative_analysis.py  # 실행 간 누적 분석 + 중복
├── pairwise.py         # 쌍별 A/B 통계 비교(t-검정, Cohen's d)
├── plots.py            # PNG 차트 생성(평가, 누적, 비교)
├── report.py           # 마크다운 요약 생성
└── analysis/
    ├── duplicates.py   # 중복 결과 탐지
    ├── unmatched.py    # 일치하지 않는 결과 추출
    └── statistics.py   # GT 적용 범위 통계
도구 다운로드