
해커 포럼, 익스플로잇 및 권고문 텍스트를 340K NVD CVE와 연결하는 745만 문서 규모의 사이버 위협 인텔리전스 코퍼스 및 벤치마크로, 검색 및 익스플로잇 유형 분류를 위한 시간적 분할을 제공합니다.
사이버 위협 인텔리전스를 위한 다중 소스, CVE 연계 코퍼스 및 전향적 벤치마크
HackerSignal은 해커들이 지하 및 보안 커뮤니티에서 논의하는 내용을 그 논의가 다루는 취약점과 연결하는 사이버 위협 인텔리전스(CTI) 데이터셋이자 벤치마크입니다. 이는 해커 포럼과 익스플로잇 아카이브부터 NVD CVE 설명, 보안 권고, 버그 바운티 보고서, 수정 커밋, CISA 알려진 악용 취약점(Known Exploited Vulnerabilities)에 이르기까지 8개 소스 계층에 걸쳐 64개 공개 포럼 및 소스 식별자에서 정확히 중복 제거된 7,447,646개 문서를 집계합니다. 코퍼스 위에 시간적 학습/검증/테스트 분할을 갖춘 세 가지 벤치마크 태스크를 정의합니다: 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, 네 개의 밀집 바이인코더(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를 포함합니다. 점수는 아래의 베이스라인 결과와 논문(Tables 5–7)에 있습니다.
카메라 레디 수치로, 하나의 Apple M5 Pro(PyTorch 2.14.1, MPS)에서 공개된 데이터로부터 처음부터 끝까지 재구축되었습니다. 아래의 모든 값은 results/camera_ready/results.csv에서 생성됩니다. 실행별 시드, 모델 리비전 및 데이터 해시는 results/camera_ready/provenance.json에 있습니다. 검색은 전체 340,536개의 NVD 설명에 대해 제로샷 인코더를 사용하며, MRR은 MRR@10입니다. 포럼 게시물 파일럿은 1,964개의 CVE-연결 해커 커뮤니티 게시물에서 모든 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 | – |
상위 두 모델은 두 작업 모두에서 통계적으로 동등합니다(대응 부트스트랩, 작업 1 ΔMRR 0.003, 95% CI [-0.013, 0.019]; 작업 3 ΔMRR 0.004, 95% CI [-0.012, 0.020]).
작업 2 (익스플로잇 유형 분류, 1,735개 테스트 익스플로잇). 트랜스포머는 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 크기 인코더)이 소요됩니다.