
정적 분석 증거에 LLM 취약점 감사자가 어떻게 의존하는지를 연구하는 재현 패키지로, tree-sitter C/C++ 프런트 엔드, 통제된 증거 조건, 통계 분석 코드를 포함합니다.
ZhiHong Liu의 동명 논문을 위한 재현 패키지.
LLM 취약점 감사자에게 PrimeVul의 취약한 및 패치된 C/C++ 함수에 관한 정적 분석 증거가 제공되었다. 증거는 참이거나 조작되었으며, 코드와 모델은 고정되었다. 거짓 보증(누락된 검사가 존재한다고 주장)은 실제 취약점 탐지를 낮췄다. 거짓 경보(추가된 검사가 누락되었다고 주장)는 정확도를 낮추지 않았으며, 모델은 이에 훨씬 더 자주 이의를 제기했다. 일곱 개의 새로운 모델에 대한 사전 등록된 재현은 이 비대칭성을 확인했다. 별도의 호출에서 각 주장을 검증하고 반박된 주장을 보여주는 것(verify-show)은 사전 등록된 테스트에서 순응을 감소시켰다.
이 저장소에는 분석기, 실험 및 분석 코드, 사전 등록, 주석 및 요약 보고서가 포함되어 있다. 전체 실행 기록(모든 증거 노트와 모델 응답)과 LLM 응답 캐시는 별도로 보관되어 있다(전체 결과 참조).
| 경로 | 내용 |
|---|---|
sgv/cfront.py | 절차 내 C/C++ 프런트 엔드(tree-sitter): 민감한 연산, 지배적 가드, 증명 의무 |
sgv/evidence.py | 통제된 연구: 증거 조건 C0–C5, 제시 전략, 모델 구성, 러너 |
sgv/vuln.py | 감사 프롬프트, 판정 파싱 및 PrimeVul 로딩(예비 취약점 연구 포함) |
sgv/contrasts.py | 버전별 정확도 및 매칭된 대조(C4 vs C2, C5 vs C2, …) |
sgv/direction.py | 방향 인식 순응 측정(H3) |
sgv/deference.py | 순응 및 어휘적 "이의" 단서 |
sgv/mitigation.py | 쌍별 McNemar 검정과 Holm 보정을 통한 제시 전략 비교 |
sgv/pooled.py | H2 및 데이터셋 기술 통계의 사후 통합 분석 |
sgv/annotate.py | 행동 코딩을 위한 주석 시트 및 일치도(Cohen's kappa) |
sgv/figures.py, sgv/diagrams.py | 실행 기록에서 계산된 논문의 모든 그림 |
sgv/stats.py | Wilson 구간, 정확 McNemar 검정, 쌍별 부트스트랩 |
sgv/llm.py | SQLite 응답 캐시가 있는 OpenAI 호환 클라이언트 |
sgv/analysis.py, claims.py, verifier.py, methods.py, run.py, trace.py, labeling.py, … | Python(CRUXEval, REval)에 대한 예비 연구: 주장 추출 및 구조 기반 검증 |
preregistration/ | H3의 사전 등록 및 실행 전에 고정된 분석 코드의 해시 |
annotation/ | 주석 가이드, 두 LLM 주석자의 시트, 저자의 20개 항목 점검 |
results/*.md | 연구, 홀드아웃, 개발, 테스트 및 H3 세트의 요약 보고서 |
tests/ | 단위 테스트 (python -m unittest discover -s tests -t .) |
Python 3.12 이상(3.14로 개발됨).
pip install -r requirements.txt
PrimeVul은 여기에서 재배포되지 않습니다. PrimeVul 저장소에서 쌍을 이룬 분할을 다운로드하여 다음과 같이 배치하십시오.
data/primevul/primevul_train_paired.jsonl
data/primevul/primevul_valid_paired.jsonl
data/primevul/primevul_test_paired.jsonl
쌍 선택은 파일, --pairs, --max-lines 및 --seed가 주어지면 결정적입니다. 예비 연구를 위한 데이터는 python -m sgv.data --dest data/cruxeval.jsonl 및 python -m sgv.reval --dest data/reval로 다운로드됩니다.
각 실행에 대한 evidence.jsonl(모든 조건 아래에 표시되는 노트)과 records.jsonl(모든 모델 응답 및 판정), 그리고 llm_cache.sqlite(모든 API 응답)가 포함된 전체 결과 디렉터리는 Zenodo에 아카이브되어 있습니다. 저장소 루트에서 압축을 풀면 results/가 생성됩니다. 캐시가 준비되면 아래의 모든 실행은 API 호출 없이 캐시에서 재생되며, 모든 분석은 논문의 수치를 재현합니다.
python -m sgv.contrasts results/evidence_full_a # RQ1/RQ2 on the study set
python -m sgv.deference results/evidence_full_a # RQ3: deference and dispute cue
python -m sgv.mitigation results/evidence_full_a results/mitig_quote results/mitig_alarms \
results/mitig_reframe results/mitig_provenance --model flash # RQ4 on the study set
python -m sgv.direction results/h3_* --pooled # H3 (registered)
python -m sgv.pooled # post-hoc pooled H2
python -m sgv.annotate score annotation/sheet_claude.csv annotation/sheet_deepseek.csv
python -m sgv.figures --out figures # data figures
python -m sgv.diagrams --out figures # schematic figures
모델은 OpenAI 호환 API(DeepSeek 및 Alibaba Cloud Bailian/DashScope)를 통해 호출됩니다. 모델 이름, 고정된 스냅샷 및 요청 설정은 sgv/evidence.py의 MODELS에 있습니다. API 키는 환경 변수(DeepSeek의 경우 SGV_API_KEY, DashScope의 경우 SGV_QWEN_KEY) 또는 /.sgv_deepseek_key/.sgv_qwen_key`에서 읽어옵니다. 이 키들은 저장소에 절대 기록되지 않습니다./
# Build and inspect the evidence of every condition without calling a model
python -m sgv.evidence --pairs 0 --dry-run --out results/evidence_dry
# One run: conditions, presentation strategy and models are arguments
python -m sgv.evidence --data data/primevul/primevul_test_paired.jsonl --pairs 0 \
--models flash --conditions C2,C4,C5 --presentation plain --out results/my_run
주요 옵션: --conditions (C0–C5), --presentation (plain, quote, alarms, reframe, provenance,
verify, verify-show, commit, commit-verify), --heldout (연구 세트와 분리된 쌍),
--max-lines, --seed. 논문의 데이터 세트는 다음과 같다
| 세트 | 소스 분할 | 선택 |
|---|---|---|
| Study | primevul_test_paired | 구조적 CWE, ≤150줄, 모든 적격 쌍 |
| Held-out | primevul_test_paired | --heldout --max-lines 300 (모든 CWE, 연구 세트와 분리) |
| Development | primevul_valid_paired | 모든 적격 쌍 |
| Test (등록됨) | primevul_train_paired | --pairs 300 --seed 7 |
run_h3.ps1은 등록된 H3 복제(일곱 개 모델, C2/C4/C5, plain 프레젠테이션)를 실행한다.
행동 코딩은 두 개의 LLM(Claude 및 deepseek-v4-pro)이 주석을 달았다. 저자는 20개 항목을 직접 확인했다.
논문은 이를 보고한다.
코드: MIT (LICENSE 참조). PrimeVul 및 예비 연구 데이터 세트는 자체 라이선스를 유지한다.
@misc{liu2026trusting,
title = {Trusting the Tool: Asymmetric Deference of {LLM} Vulnerability Auditors to Static-Analysis Evidence},
author = {Liu, ZhiHong},
year = {2026},
note = {Preprint}
}