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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
D-Scan — LLM 내부 상태와 100개 이상의 어텐션/확률 특징을 분석하여 RAG 시스템에서 문서 오염 공격을 탐지하는 분류기를 훈련합니다. | Kitploit
도구/GitHubGitHub/yingtaoren/d-scan
Defensive ToolsMachine LearningAI SecurityAnomaly Detection
GitHubyingtaoren/d-scan

D-Scan

LLM 내부 상태와 100개 이상의 어텐션/확률 특징을 분석하여 RAG 시스템에서 문서 오염 공격을 탐지하는 분류기를 훈련합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

컨텍스트가 물 때: 문서 수준 어텐션 붕괴를 통한 RAG 오염 탐지

D-SCAN은 RAG(Retrieval-Augmented Generation) 시스템에서 문서 오염 공격(document poisoning attack)을 탐지하기 위한 분석 프레임워크입니다. 생성 과정에서 LLM 내부 상태(토큰 확률 및 어텐션 가중치)를 수집하고, 다차원 특징을 추출하여 정상 문서와 오염된 검색 문서를 구분하는 분류기를 학습합니다.

1. 설치 및 요구 사항

사전 요구 사항

  • Python >= 3.9
  • CUDA 호환 GPU(8B 파라미터 모델 추론에는 24GB 이상의 VRAM 권장)

모델 준비

이 프로젝트는 기본적으로 Llama-3.1-8B-Instruct를 사용합니다. 모델을 로컬 경로에 다운로드하고 collect_inner_state.py의 MODEL_ID 변수를 업데이트하세요:

root@kitploit:~
MODEL_ID = "/your/path/to/Llama-3.1-8B-Instruct"

2. 빠른 시작

전체 워크플로우는 세 단계로 구성됩니다: 내부 상태 수집 → 특징 계산 → 분류기 학습. 질문 및 관련 검색 문서는 https://huggingface.co/datasets/An998/D-SCAN 에서 제공됩니다.

1단계: 모델 내부 상태 수집

root@kitploit:~
# Update configuration parameters in collect_inner_state.py, then run
python collect_inner_state.py

2단계: 특징 지표 계산

root@kitploit:~
# Analyze both attack and clean data, compute all features, and save results
python compute_feature.py \
    --attack_dir ./saved_reppl_weights_serial_query1_attack2_2wiki \
    --clean_dir ./saved_reppl_weights_serial_query1_pure1_5_2wiki \
    --output_dir ./analysis_results/2wiki_all \
    --max_attack_samples 3000 \
    --max_clean_samples 3000

3단계: 분류기 학습 및 평가

fit_D-SCAN.ipynb을 열고 셀을 순서대로 실행하여 다음을 수행합니다:

  1. 2단계에서 생성된 특징 데이터 로드
  2. 로지스틱 회귀 / 랜덤 포레스트 분류기 학습(5-Fold CV)
  3. 테스트 세트에서 전이 성능 평가

3. 파이프라인 상세

3.1 데이터 수집(collect_inner_state.py)

각 질문-문서 입력에 대해 LLM은 다중 샘플 생성(기본값: 10개 샘플, temperature=1.0)을 수행하고 다음 내부 상태를 수집합니다:

주요 구성 파라미터

root@kitploit:~
MODEL_ID = "/path/to/model"     # Model path
NUM_SAMPLES = 10                # Number of samples per question
MAX_NEW_TOKENS = 50             # Maximum generated tokens
TEMPERATURE = 1.0               # Sampling temperature
data_type = 'pure1_5'           # Data type: 'pure1_5' (clean) or 'attack2' (attack)
dataset_name = 'hotpotqa'       # Dataset: 'hotpotqa', '2wiki', 'musique'

출력은 data_{batch_id}_reppl.pt 파일 및 results_stats_*.jsonl 통계 파일로 저장됩니다.


3.2 특징 계산(compute_feature.py)

수집된 내부 상태에서 10개 범주, 100차원 이상의 특징을 추출합니다. 분류기는 이러한 특징을 사용하여 주어진 쿼리에 대해 검색된 문서 중 오염된 문서가 존재하는지 판별합니다.

지표 개요

세부 지표 설명

1. PerplexityMetrics(생성 확률 통계)

outer_ppl_probs(각 생성 토큰의 확률)에서 계산됩니다:

  • ppl_mean_prob: 전체 생성 토큰의 평균 확률
  • ppl_std_prob: 확률 표준편차
  • ppl_min_prob: 최소 확률(극단적 불확실성)
  • ppl_low_prob_ratio: 저확률 토큰 비율(<0.1)
  • ppl_cross_sample_var: 샘플 간 평균 확률의 분산
  • ppl_coef_variation: 변동 계수(CV = std/mean)
  • ppl_skewness: 확률 분포 왜도
  • ppl_kurtosis: 확률 분포 첨도

2. AttentionEntropyMetrics(어텐션 엔트로피)

inner_ppl_matrix(각 단계의 어텐션 가중치)에서 계산됩니다:

  • attn_entropy_mean/std/max: 어텐션 분포 엔트로피의 평균, 표준편차, 최대값
  • attn_entropy_cv: 어텐션 엔트로피의 변동 계수

3. AttentionConcentrationMetrics(어텐션 집중도)

  • attn_top5/10/20_ratio_mean/std: Top-K% 토큰이 차지하는 어텐션 비중
  • attn_gini_mean/std: 어텐션 분포의 지니 계수(불평등 지표)

4. DocumentAttentionDensityMetrics(문서 어텐션 밀도)

  • doc_attn_dens_std/range/max/min: 문서 간 어텐션 밀도의 표준편차, 범위, 최대값, 최소값
  • doc_attn_dens_entropy: 문서 어텐션 밀도 분포의 엔트로피
  • doc_attn_dens_temporal_var_mean: 문서 어텐션 밀도의 평균 시간적 분산

5. SampleConsistencyMetrics(다중 샘플 일관성)

  • sample_attn_consistency/std: 토큰 수준 어텐션의 샘플 간 코사인 유사도
  • sample_doc_consistency: 문서 수준 어텐션의 샘플 간 코사인 유사도
  • sample_doc_js_divergence: 문서 수준 어텐션의 샘플 간 JS 발산

6. AttentionDynamicsMetrics(어텐션 역학)

  • attn_doc_switch_mean/max: 지배적 문서 스위치 횟수
  • attn_entropy_change_mean/std: 단계별 어텐션 엔트로피 변화

7. TokenLevelAttentionMetrics(토큰 수준 어텐션 변동)

  • tla_std_mean/std/max/median/p90/p99/high_ratio/cv: 생성 단계 전반에 걸친 토큰별 어텐션 표준편차 통계량
  • tla_ent_mean/std/max/median/p90/p99/high_ratio/cv: 생성 단계 전반에 걸친 토큰별 어텐션 엔트로피 통계량

8. AnswerProbabilityMetrics(답변 확률 심층 통계)

  • aprob_p10/p25/p50/p75/p90/iqr: 확률 분위수
  • aprob_high_ratio_05/08: 고확률 토큰 비율
  • aprob_low_ratio_01/001: 저확률 토큰 비율
  • aprob_log_mean/std/min: 로그 확률 통계량
  • aprob_ppl_mean/std/max: 시퀀스 수준 퍼플렉서티
  • aprob_geometric_mean: 확률의 기하 평균
  • aprob_distribution_entropy: 확률 히스토그램의 정보 엔트로피

9. ProbabilityDynamicsMetrics(확률 역학)

  • pdyn_diff_mean/abs_diff_mean/abs_diff_std/abs_diff_max: 확률 차분 통계량
  • pdyn_max_drop/max_jump: 최대 단일 단계 하락/상승
  • pdyn_volatility_mean/std: 변동성
  • pdyn_trend_slope_mean/std: 선형 추세 기울기
  • pdyn_autocorr_mean/std: 자기상관 계수
  • pdyn_spike_ratio_01/03: 스파이크(변이 지점) 비율

10. CrossSampleProbabilityConsistencyMetrics(교차 샘플 확률 일관성)

  • cspc_mean_prob_std/cv/range: 샘플 간 평균 확률의 일관성
  • cspc_ppl_std/cv/range: 샘플 간 퍼플렉서티의 일관성
  • cspc_min_prob_std/range: 샘플 간 최소 확률의 일관성
  • cspc_seq_cosine_mean/std: 확률 시퀀스의 샘플 간 코사인 유사도
  • cspc_seq_pearson_mean: 확률 시퀀스의 샘플 간 피어슨 상관
  • cspc_seq_mse_mean: 확률 시퀀스의 샘플 간 MSE
  • cspc_divergence_index: 샘플 간 발산 지수

compute_feature.py 명령줄 인자

root@kitploit:~
python compute_feature.py \
    --attack_dir <attack_data_directory> \
    --clean_dir <clean_data_directory> \
    --output_dir <output_directory> \
    --max_attack_samples 3000 \
    --max_clean_samples 3000 \
    --min_correct_count 0 \
    --min_attack_target_count 0 \
    --num_use_samples 10 \
    --model_path /path/to/model    # Optional: load tokenizer for accuracy calculation

출력 파일

FilenameDescription
single_metric_analysis.json각 지표에 대한 AUC, p-value, Cohen's d 등
full_analysis_results.json

3.3 분류기 학습(fit_D-SCAN.ipynb)

노트북 워크플로우:

  1. 데이터 로드: compute_feature.py의 출력인 full_analysis_results.json 읽기
  2. 특징 선택: 전체 특징 사용 또는 범주별 필터링(예: 어텐션 전용 특징)
  3. 분류기 학습:
    • 로지스틱 회귀(L2 정규화): 선형 분류기, 특징 수가 적을 때 적합
    • 랜덤 포레스트(트리 100개, max_depth=5): 비선형 분류기, 특징 간 상호작용 포착
  4. 5-Fold 교차 검증: AUC, Accuracy, Precision, Recall, F1 보고
  5. 특징 중요도 분석: 상위 10개 중요 특징 출력
  6. 테스트 세트 평가: 학습된 스케일러와 분류기를 사용하여 독립 테스트 세트에서 전이 성능 평가
  7. 시각화: ROC 곡선, 특징 중요도 막대 차트, Train vs Test 비교

분류기용 특징 선택

노트북의 use_features 변수는 분류기가 사용하는 특징 부분집합을 유연하게 제어합니다:

root@kitploit:~
# Use all features
use_features = [f for f in feature_names if f not in exclude_cols]

# Use only attention-related features
use_features = [f for f in use_features if 'attn' in f]

# Combine by metric category (example)
use_features = [f for f in feature_names if f.startswith(('ppl_', 'doc_', 'sample_'))]

또한 compute_feature.py 실행 중 범주별 분류기 성능도 출력됩니다:

도구 다운로드
FieldTypeDescription
outer_ppl_probsList[Tensor]각 샘플의 토큰 생성 확률
inner_ppl_matrixList[List[Tensor]]각 생성 단계에서 입력 시퀀스에 대한 어텐션 가중치(레이어 평균)
doc_rangesDict[str, List[int]]입력 시퀀스에서 각 문서의 토큰 위치 범위
generated_sequencesList[List[int]]각 샘플의 생성된 토큰 ID 시퀀스
#범주클래스 이름# 특징핵심 아이디어
1생성 확률 통계PerplexityMetrics8오염된 문서는 생성 중 모델 불확실성을 증가시킬 수 있으며, 이는 확률 분포 변화에 반영됨
2어텐션 엔트로피AttentionEntropyMetrics4높은 엔트로피 = 분산된 어텐션 = 잠재적 정보 충돌; 낮은 엔트로피 = 집중된 어텐션
3어텐션 집중도AttentionConcentrationMetrics8Top-K 비율과 지니 계수를 통해 어텐션이 소수의 토큰에 집중되는지 측정
4문서 어텐션 밀도DocumentAttentionDensityMetrics6어텐션 합을 문서 길이로 나누어 어텐션 할당의 길이 편향 제거
5다중 샘플 일관성SampleConsistencyMetrics4오염 상태에서는 샘플 간 어텐션 패턴이 불일치할 수 있음(코사인 유사도, JS 발산)
6어텐션 역학AttentionDynamicsMetrics4생성 중 지배적 문서 스위치 빈도 및 엔트로피 변화 크기
7토큰 수준 어텐션 변동TokenLevelAttentionMetrics16생성 단계 전반에 걸친 각 입력 토큰 위치의 어텐션 안정성(std, 엔트로피)
8답변 확률 심층 통계AnswerProbabilityMetrics18확률 분위수, 고/저 확률 토큰 비율, 로그 확률, 퍼플렉서티 등
9확률 역학ProbabilityDynamicsMetrics14생성 시퀀스의 추세 기울기, 자기상관, 변동성, 스파이크 비율
10교차 샘플 확률 일관성CrossSampleProbabilityConsistencyMetrics13샘플 간 코사인 유사도, 피어슨 상관, MSE, 발산 지수
ArgumentDefaultDescription
--attack_dir-공격 데이터 디렉터리(data_*_reppl.pt 파일 포함)
--clean_dir-정상 데이터 디렉터리
--output_dir-출력 디렉터리
--max_attack_samples3000최대 공격 샘플 수
--max_clean_samples3000최대 정상 샘플 수
--min_correct_count0정상 데이터의 최소 정답 수(필터링용)
--min_attack_target_count0공격 데이터의 최소 타깃 답변 적중 횟수
--num_use_samplesNone지표 계산에 사용할 질문당 샘플 수(기본값: 전체)
--model_pathNone모델 경로(생성된 시퀀스 디코딩을 위해 토크나이저 로드용)
전체 특징 행렬 + 레이블
document_detailed_metrics.json문서별 상세 지표(JSON 요약)
document_detailed_metrics_full.pkl전체 문서 수준 지표(단계별 어텐션 포함)
특징 그룹접두어 / 키워드
perplexityppl_*
attention_entropy*entropy* (doc 및 aprob 제외)
attention_concentration*top*, *gini*
document_attentiondoc_*
sample_consistency*sample*, *consistency*
attention_dynamics*switch*, *change*
token_level_attentiontla_*
answer_probabilityaprob_*
probability_dynamicspdyn_*
cross_sample_prob_consistencycspc_*