╔═╗ ╔═╗ ╔╦╗ ╔╦╗ ╔═╗ ╦ ╦ ╦ ╔═╗ ╦═╗ ╔═╗ ╔═╗ ╦ ╔═╗ ╔═╗ ╔═╗ ╦ ╔═╗ ╦ ╔═╗ ╔═╗ ╔╦╗ ╦ ╔═╗ ╔╗╔
╠═╣ ╠═╝ ║ ║║║ ╠═╣ ║ ║║║ ╠═╣ ╠╦╝ ║╣ ║ ║ ╠═╣ ╚═╗ ╚═╗ ║ ╠╣ ║ ║ ╠═╣ ║ ║ ║ ║ ║║║
╩ ╩ ╩ ╩ ╩ ╩ ╩ ╩ ╩═╝ ╚╩╝ ╩ ╩ ╩╚═ ╚═╝ ╚═╝ ╩═╝ ╩ ╩ ╚═╝ ╚═╝ ╩ ╚ ╩ ╚═╝ ╩ ╩ ╩ ╩ ╚═╝ ╝╚╝
利用 tf-idf 和 xgboost 对恶意样本的 API 调用序列进行数据分析,形成机器学习模型,自动判定恶意样本所属 APT 组织。
全部数据集都在 Cuckoo Report.zip 里面,以各 APT 组织分类,各 APT 组织的分析报告从 VirusTotal 获取。由于 VirusTotal api 有限制,所以考虑我的另外一个项目 基于 sha256 使用 selenium 爬取 Virustotal 获得文件类型与行为特征文件 。
APT_MALWARE_CLASSIFICATION
│ All_Windows_API.json # 所有 windows api
│ Cuckoo Report.zip # 所有从 VirusTotal 爬取的行为特征文件
│ feature_engineering.py # 将行为特征文件转化为 pkl 文件
│ overview.csv # 恶意样本对应的 sha256
│ README.md
│ test.py
│ xgboost_model.py # 训练程序
│
└─API Sequence # 所有 pkl 文件
将数据集转化为 pkl 文件。
python feature_engineering.py
运行后将自动创建 API Sequence 文件夹,生成 pkl 文件。开始训练:
python xgboost_model.py
采用五折交叉验证方法对模型进行评估,对于部分 APT 组织的聚类结果如表所示。
APT Group | precision | recall | F1-score | 报告数 |
---|---|---|---|---|
APT1 | 0.87 | 0.90 | 0.89 | 252 |
APT29 | 0.97 | 0.80 | 0.88 | 128 |
APT30 | 0.90 | 0.88 | 0.89 | 149 |
Dark Hotel | 0.84 | 0.86 | 0.85 | 196 |
Gorgon Group | 0.93 | 0.97 | 0.95 | 208 |
Winnti | 0.92 | 0.91 | 0.91 | 162 |