Datasets¶
Nothing in this table is committed to git. scripts/download_data.py fetches every item into ../../datasets/occam (or $OCCAM_DATA), pinned to immutable commits and verified by checksum. The total is about 400 MB. The counts below are written to results/datasets.json by scripts/dataset_stats.py.
| Dataset | What OCCAM uses it for | Size | Pinned at | Licence / terms |
|---|---|---|---|---|
| MITRE ATT&CK Enterprise 19.2 (STIX 2.1) | 697 techniques, 176 groups, 825 software, 56 campaigns, 18,457 uses relationships. Used for actor profiles, rarity statistics, classifier training (17,376 procedure examples) and the leave-one-report-out attribution benchmark |
54 MB | 6cda5ad8, sha256 dc1639ca… |
ATT&CK Terms of Use: royalty-free, attribution required |
CTID TRAM2 annotations (multi_label.json, single_label.json) |
19,178 sentences from 151 real CTI reports, labelled with 50 ATT&CK techniques. Used for the TTP-extraction benchmark and extra classifier training | 7 MB | f29793d8 |
Apache-2.0 |
| MITRE ATT&CK Enterprise 12.1 and 15.1 | Older releases (released Nov 2022 and May 2024) for the temporal split | 39 + 43 MB | same commit, sha256 pinned | ATT&CK Terms of Use |
| rcATT training data | 1,490 ATT&CK-cited reports with tactic and technique labels, to reproduce Legoy et al. (2020) | 33 MB | f82f7fd4, sha256 pinned |
MIT |
| APTnotes index + kbandla/APTnotes PDFs | 76 public APT reports (2010-2015) from 33 groups whose file name or title names exactly one ATT&CK group or attributed campaign. 75 are scored; 1 is excluded (see Safety). Used for end-to-end text-to-attribution and clustering. Each PDF is checked against its git blob SHA-1 | ~210 MB | 8595fbde / 586aaa5e |
Reports are © their publishers and publicly released. They are not redistributed here: only the fetch script is committed |
Safety¶
- No malware binaries are downloaded. The only file types are JSON, CSV and PDF reports.
- PDFs are parsed as text only (pypdf, in a child process with a 60 s timeout and a 40-page cap). They are never rendered or opened in a viewer.
- Some report texts quote webshell code or IOCs, so local antivirus may quarantine them. On the author's machine Windows Defender blocked one converted text (
h12756-wp-shell-crew).bench_aptnotes.pytherefore excludes that report in every run (itsEXCLUDElist), so local and CI runs score the same reports, and records it inresults/aptnotes*.jsonunderskipped. - Text extraction has a 60 s limit per PDF. On the author's laptop (pypdf 6.14) three reports timed out (
Cylance_Operation_Cleaver_Report,putter-panda,rpt-apt30), so an older local run scored 72 reports. The committed results come from a GitHub-hosted runner (pypdf 6.19), where all 76 converted and 75 were scored.
Labels and their limits¶
- ATT&CK incidents are reported slices of activity, not raw telemetry, and the attribution is MITRE's reading of public reporting.
- APTnotes labels come from the file name and title, e.g.
Operation_Moleratsbecomes G0021 Molerats; attributed ATT&CK campaign names are a second vocabulary. Files matching zero or several groups are dropped, and aliases under 5 characters are ignored. Labels from "software used by only one ATT&CK group" were tried and rejected: they are circular (the label-defining tool is also evidence) and wrong for commercial tools (FinFisher would have been labelled Dark Caracal). - ATT&CK group profiles are partly built from reports like the APTnotes ones.
bench_aptnotes.pytherefore also reports leak-controlled numbers that hold out ATT&CK citations of the true group whose source name matches the report (a heuristic; 23 of 75 matched). The fully leak-free estimate is the leave-one-report-out benchmark.