Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
D-Scan — LLMの内部状態と100以上のアテンション/確率特徴量を分析し、RAGシステムにおけるドキュメントポイズニング攻撃を検出する分類器を訓練します。 | Kitploit
ツール/GitHubGitHub/yingtaoren/d-scan
防御ツール機械学習AIセキュリティ異常検知
GitHubyingtaoren/d-scan

D-Scan

LLMの内部状態と100以上のアテンション/確率特徴量を分析し、RAGシステムにおけるドキュメントポイズニング攻撃を検出する分類器を訓練します。

リポジトリを見る
124ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

コンテキストが噛みつくとき:文書レベルのアテンション崩壊によるRAGポイズニング検出

D-SCANは、RAG(検索拡張生成)システムにおける文書ポイズニング攻撃を検出するための分析フレームワークです。生成中の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. クイックスタート

ワークフロー全体は3つのステップで構成されています:内部状態の収集 → 特徴量の計算 → 分類器の訓練。 質問と関連する取得文書は 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分割交差検証)
  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: 1ステップあたりの最大下落/跳躍
  • 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

出力ファイル

ファイル名説明
single_metric_analysis.json各メトリクスのAUC、p値、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分割交差検証:AUC、Accuracy、Precision、Recall、F1を報告する
  5. 特徴量重要度の分析:Top-10の重要特徴量を出力する
  6. テストセット評価:訓練済みスケーラーと分類器を使用して、独立したテストセットでの転移性能を評価する
  7. 可視化:ROC曲線、特徴量重要度の棒グラフ、学習 vs テストの比較

分類器のための特徴量選択

ノートブックの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の実行中に表示されます:

ツールをダウンロード
フィールド型説明
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生成ステップ全体にわたる各入力トークン位置でのアテンションの安定性(標準偏差、エントロピー)
8回答確率の詳細統計AnswerProbabilityMetrics18確率の分位数、高/低確率トークン比率、対数確率、パープレキシティなど
9確率動態ProbabilityDynamicsMetrics14生成シーケンスにおけるトレンドの傾き、自己相関、ボラティリティ、スパイク比率
10サンプル間確率一貫性CrossSampleProbabilityConsistencyMetrics13サンプル間のコサイン類似度、ピアソン相関、MSE、ダイバージェンス指標
引数デフォルト説明
--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_*