サイバー脅威インテリジェンスのためのマルチソース・CVE連携コーパスと将来予測ベンチマーク
HackerSignal は、ハッカーがアンダーグラウンドおよびセキュリティコミュニティで議論する内容を、その議論が関わる脆弱性に結び付けるサイバー脅威インテリジェンス (CTI) データセットおよびベンチマークです。ハッカーフォーラムやエクスプロイトアーカイブから NVD CVE の説明、セキュリティアドバイザリ、バグバウンティレポート、修正コミット、CISA Known Exploited Vulnerabilities に至るまで、8つのソースレイヤーにわたる 64の公開フォーラムおよびソース識別子から厳密に重複排除された 7,447,646 件のドキュメントを集約しています。このコーパスの上に、時間的な train/validation/test 分割を伴う3つのベンチマークタスクを定義しています。すなわち、CVE リンケージ検索、8クラスのエクスプロイト種別分類、そして学習後に公開された脆弱性への CVE 非重複の時間的一般化です。
HackerSignal は NeurIPS 2026 Evaluations & Datasets Track で発表されています。プレプリント: arXiv:2605.03158。
| ドキュメント数 | 7,447,646 (厳密に重複排除済み) |
| ソース数 | 8つのソースレイヤーにわたる64の公開フォーラム / ソース識別子 |
| ハッカーコミュニティレイヤー | 6,966,014 件の投稿 (最大のフォーラム: Gayanku、Antichat、Evolution、AntiOnline、HackForums) |
| 脆弱性リファレンス | 340,536 件の NVD CVE 説明 (タスク1および3の検索コーパス) |
| その他のレイヤー | エクスプロイトアーカイブ、エクスプロイトQ&A、アドバイザリ、バグバウンティ開示、修正コミット、CISA KEV |
| 言語 | 英語に加え、相当量の非英語コンテンツ: ロシア語 (antichat、182万件の投稿)、ペルシア語 (persiantools、28万件)、その他。CVE にリンクされたフォーラム投稿の 30.2% はキリル文字が主体 |
| 期間 | 1988年–2026年 |
| 分割 | 時間的: すべてのタスクでテストデータは学習データより後の日付 |
| メタデータ | Croissant JSON-LD、Datasheet for Datasets、ソースリリースマニフェスト |
| ライセンス | データは CC BY 4.0 (LICENSE-DATA)、コードは MIT (LICENSE)。ソースごとの条件はリリースガバナンスを参照 |
| タスク | 種類 | 訓練 | 検証 | テスト | コーパス / 合計 | 指標 |
|---|---|---|---|---|---|---|
| 1. CVE リンク検索 (CVE-R) | 検索 | 56,692 | 2,584 | 1,990 | 340,536 | R@1, R@5, R@10, MRR |
| 2. エクスプロイト種別分類 (ETC) | 8クラス分類 | 64,413 | 4,735 | 1,735 | 70,883 | Macro-F1, クラス別 F1 |
| 3. 時間的一般化 (TG) | CVE 非重複検索 | 56,833 | 2,535 | 1,898 | 340,536 | R@1, R@5, R@10, MRR |
ベースラインの段階的比較には、検索用として BM25、4 つの密なバイエンコーダ (all-MiniLM-L6-v2、all-mpnet-base-v2、BGE-base-en-v1.5、E5-base-v2)、および BM25 + 密なハイブリッドを、分類用として Decision Tree、TF-IDF + ロジスティック回帰、線形 SVM、RNN、GRU、LSTM、BiLSTM、SecBERT、SecureBERT、CySecBERT を対象とする。スコアは下記のベースライン結果および論文 (表 5–7) に記載している。
Camera-ready の数値は、公開データから 1 台の Apple M5 Pro (PyTorch 2.14.1、MPS) 上でエンドツーエンドで再構築したものである。以下のすべての値は results/camera_ready/results.csv から生成されている。実行ごとのシード、モデルのリビジョン、データハッシュは results/camera_ready/provenance.json に記載している。検索は 340,536 件の NVD 説明文すべてに対するゼロショットエンコーダを使用し、MRR は MRR@10 である。フォーラム投稿パイロットでは、CVE にリンクされた 1,964 件のハッカーコミュニティ投稿に含まれるすべての CVE 文字列をマスクし、同じコーパスから引用された CVE を検索する。
| モデル | タスク 1 R@1 | タスク 1 MRR | タスク 3 R@1 | タスク 3 MRR | フォーラム投稿パイロット MRR |
|---|---|---|---|---|---|
| BM25 | 0.595 | 0.636 | 0.620 | 0.660 | 0.064 |
| all-MiniLM-L6-v2 | 0.655 | 0.709 | 0.670 | 0.722 | 0.073 |
| all-mpnet-base-v2 | 0.626 | 0.682 | 0.647 | 0.703 | 0.065 |
| BGE-base-en-v1.5 | 0.653 | 0.714 | 0.667 | 0.726 | 0.078 |
| E5-base-v2 | 0.649 | 0.710 | 0.663 | 0.721 | 0.072 |
| Hybrid BM25 + mpnet | 0.679 | 0.711 | 0.698 | 0.730 | – |
上位 2 モデルは両タスクで統計的に同等である (ペア付きブートストラップ、タスク 1 ΔMRR 0.003、95% CI [-0.013, 0.019]、タスク 3 ΔMRR 0.004、95% CI [-0.012, 0.020])。
タスク 2 (エクスプロイト種別分類、テストエクスプロイト 1,735 件)。Transformer は 15K の訓練サブサンプルでファインチューニングしている。
| モデル | Macro-F1 (平均 ± SD、3 シード) | 95% CI |
|---|---|---|
| Decision Tree | 0.702 ± 0.007 | [0.677, 0.727] |
| TF-IDF + LR | 0.772 ± 0.000 | [0.744, 0.795] |
| SVM | 0.799 ± 0.000 | [0.773, 0.822] |
| RNN | 0.436 ± 0.031 | [0.415, 0.455] |
| GRU | 0.858 ± 0.001 | [0.840, 0.874] |
| LSTM | 0.824 ± 0.013 | [0.804, 0.841] |
| BiLSTM | 0.856 ± 0.003 | [0.837, 0.872] |
| SecBERT | 0.852 ± 0.007 | [0.833, 0.870] |
| SecureBERT | 0.892 ± 0.008 | [0.875, 0.907] |
| CySecBERT | 0.898 ± 0.003 | [0.882, 0.913] |
CySecBERT と SecureBERT に有意差はない (ペア付き Δ 0.006、95% CI [-0.003, 0.016])。
テスト分割は data/benchmark_v2/ にコミットされている。訓練・検証分割および完全なコーパスは Hugging Face Hub 上に JSONL ファイルとして公開されている:
from datasets import load_dataset
base = "hf://datasets/BenAmpel/HackerSignal/benchmark_v2"
task1 = load_dataset("json", data_files={
"train": f"{base}/task1_cve_linkage/train.jsonl",
"validation": f"{base}/task1_cve_linkage/val.jsonl",
"test": f"{base}/task1_cve_linkage/test.jsonl",
})
corpus = load_dataset("json", data_files=f"{base}/task1_cve_linkage/corpus.jsonl", split="train")
print(task1["test"][0]["text"][:200], "->", task1["test"][0]["cve_id"])
他のタスクでは、task1_cve_linkage を task2_exploit_type(フィールド text、label)または task3_temporal_generalization(フィールド text、cve_id)に置き換えてください。
git clone https://github.com/BenAmpel/hackersignal.git
cd hackersignal
pip install -e ".[sentence-transformers]"
Hub の train、validation、corpus ファイルを data/benchmark_v2/<task>/ の下に配置し、次を実行します:
# all three tasks; --task 1|2|3 runs one task, --skip-dense / --skip-neural shorten the run
PYTHONPATH=src python3 -m etg.benchmark.run_baselines_v2 \
--data-dir data/benchmark_v2 \
--output data/benchmark_v2/results.json
ニューラルモデルは Apple MPS が利用可能な場合はそれを使用し、利用できない場合は CPU にフォールバックします。340K ドキュメントのコーパスの密なエンコーディングは、最近の GPU または Apple Silicon マシン上で、モデルごとに数分(MiniLM)から数十分(base サイズのエンコーダ)かかります。