ledunguit/tweb25-malware-benchmark
GitHub: ledunguit/tweb25-malware-benchmark
该项目提供了一个针对 Chrome 扩展恶意软件检测的基准测试流水线,支持在 tweb25 数据集上训练、对比 mELM 与传统机器学习模型,并对单个扩展文件进行预测评分。
Stars: 0 | Forks: 0
# tweb25 恶意软件基准测试
本项目用于在 `tweb25` 数据集上运行 Chrome-extension 恶意软件检测任务的基准测试。当前范围不再仅限于 mELM:项目支持数据准备、训练 `mELM`、与 `Random Forest`、`Logistic Regression`、`Torch MLP` 等基线进行比较,并提供分步分析 notebook。
## 目标与运作方式
Pipeline 按以下主要步骤组织:
1. `download`:下载 `tweb25` 的公共 artifact,或使用已手动下载的 CSV 文件。
2. `crawl-extension`:根据 `extension_id` 下载一个 `.crx`,并为 pipeline 论文从 Chrome-Stats 爬取辅助 metadata。
3. `extract-extension`:桥接到论文 pipeline 以解包 `.crx`、运行 JaSt,并生成一行符合 `feature_updated.csv` schema 的 feature。
4. `score-extension`:从 `.crx` 或已爬取的 extension 中提取临时 feature,然后使用已训练的模型预测 `benign/malware`。
5. `prepare`:过滤有标签的子集,选择 feature 组,将数据转换为 `dataset.npz` 和 `metadata.json`。
6. `train` 和 `train-baselines`:在同一 `prepared` 集上训练 mELM 和基线。
7. `train-ensemble`:从 `Random Forest`、`Logistic Regression` 和 `Torch MLP` 训练 soft voting 集成。
8. `compare`:生成 Markdown 报告,以将当前结果与 [1-s2.0-S0167404825001543-main.pdf](/Users/zed/Documents/Master/mELM/1-s2.0-S0167404825001543-main.pdf) 中的参考基线进行对比。
项目的默认设置遵循当前实验建议:
- 数据源:`feature_updated.csv`
- 有监督子集:`dataset == 'L'`
- 标签:`status`,其中 `benign -> 0`,`malware -> 1`
- 默认 feature 集合:`metadata`
- 默认 mELM:`dilation`、`erosion`,分别包含 `100` 和 `500` 个隐藏神经元
- 默认基线:`Random Forest`、`Logistic Regression`、`Torch MLP`
## 目录结构
```
tweb25_malware_benchmark/
├── data/raw/ # CSV gốc hoặc file zip đã tải về
├── data/prepared/ # dataset.npz, metadata.json, train/test metadata
├── notebooks/ # notebook step-by-step cho từng model
├── reports/ # báo cáo Markdown
├── runs/default/ # kết quả huấn luyện, JSON/CSV, best model
└── src/tweb25_malware_benchmark/
```
如果您已手动下载数据集,建议位置为 [feature_updated.csv](data/raw/feature_updated.csv)。
## 安装
```
cd /Users/zed/Documents/Master/mELM/tweb25_malware_benchmark
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
```
安装完成后,您可以通过以下两种等效方式运行:
- console script:`tweb25-benchmark ...`
- module mode:`python -m tweb25_malware_benchmark.cli ...`
检查 CLI 的示例:
```
tweb25-benchmark --help
```
## 端到端运行
如果您已有 `feature_updated.csv`:
```
tweb25-benchmark run \
--csv-path ./data/raw/feature_updated.csv \
--workspace ./workspace \
--feature-set metadata \
--device cpu
```
上述命令将自动创建:
- `workspace/prepared/`:已准备的数据
- `workspace/runs/default/`:mELM 结果
- `workspace/runs/default/baselines/`:基线结果
- `workspace/runs/default/comparison_report.md`:比较报告
如果您希望项目自动从 Mega 下载数据:
```
tweb25-benchmark run --workspace ./workspace
```
## 分步运行
准备数据:
```
tweb25-benchmark prepare \
--input-csv ./data/raw/feature_updated.csv \
--output-dir ./data/prepared \
--subset dataset-l \
--feature-set metadata
```
下载某个 extension 的 `.crx` 及辅助 metadata:
在项目根目录创建 `.env` 文件:
```
TWEB25_CHROME_STATS_API_KEY=your_api_key_here
```
然后运行:
```
tweb25-benchmark crawl-extension \
--extension-id hfebajohpclnfhfnlhgndbmcdnlchjjd \
--output-dir ./data/crawled
```
CLI 将按以下顺序读取 key:
- `--chrome-stats-api-key`
- 环境变量 `TWEB25_CHROME_STATS_API_KEY`
- 仓库根目录下的 `.env` 文件
此命令将创建目录 `./data/crawled//`,其中包含如 `.crx`、`details.json`、`reviews.json`、`same_dev_count.json`、`related_permissions.json` 和 `crawl_manifest.json` 等文件。
从 `.crx` 提取 feature:
```
tweb25-benchmark extract-extension \
--crx-path ./data/crawled/hfebajohpclnfhfnlhgndbmcdnlchjjd/hfebajohpclnfhfnlhgndbmcdnlchjjd.crx \
--output-dir ./data/extracted/hfebajohpclnfhfnlhgndbmcdnlchjjd \
--details-json ./data/crawled/hfebajohpclnfhfnlhgndbmcdnlchjjd/details.json \
--reviews-json ./data/crawled/hfebajohpclnfhfnlhgndbmcdnlchjjd/reviews.json \
--same-dev-count-json ./data/crawled/hfebajohpclnfhfnlhgndbmcdnlchjjd/same_dev_count.json \
--related-permissions-json ./data/crawled/hfebajohpclnfhfnlhgndbmcdnlchjjd/related_permissions.json \
--status benign \
--dataset U
```
此命令将创建一行严格按照 `feature_updated.csv` 列顺序的 CSV/JSON。如果您跳过 `crawl-extension` 或未提供 Chrome-Stats API key,extractor 仍会运行,但需要 metadata store 的 feature 组将填充 `0`/默认值,且该状态将被记录在 `extraction_manifest.json` 中。
直接从已爬取的 extension 进行预测:
```
tweb25-benchmark score-extension \
--extension-id hfebajohpclnfhfnlhgndbmcdnlchjjd \
--crawl-root ./data/crawled \
--model-path ./runs/default/best_model.npz
```
或直接从 `.crx` 文件进行预测:
```
tweb25-benchmark score-extension \
--crx-path ./sample/my_extension.crx \
--model-path ./runs/default/best_model.npz
```
端到端示例 notebook 位于 [06_extension_end_to_end_demo.ipynb](/Users/zed/Documents/Master/mELM/tweb25_malware_benchmark/notebooks/06_extension_end_to_end_demo.ipynb)。
如果您想在无 metadata store 的情况下使用更强的基线对 `.crx` 进行评分,请在 `combined` 或 `sourcecode` 上重新训练基线。从现在起,`train-baselines` 将保存最佳 sklearn artifact,例如:
```
PYTHONPATH=./src python -m tweb25_malware_benchmark.cli train-baselines \
--prepared-file ./data/prepared_combined/dataset.npz \
--metadata-file ./data/prepared_combined/metadata.json \
--output-dir ./runs/combined/baselines \
--models logistic-regression \
--seeds 42
```
之后可以使用该 artifact 进行评分:
```
PYTHONPATH=./src python -m tweb25_malware_benchmark.cli score-extension \
--crx-path ./data/crawled/example.crx \
--model-path ./runs/combined/baselines/logistic_regression_best.pkl
```
训练 mELM:
```
tweb25-benchmark train \
--prepared-file ./data/prepared/dataset.npz \
--metadata-file ./data/prepared/metadata.json \
--output-dir ./runs/default \
--activations dilation erosion \
--hidden-neurons 100 500 \
--device cpu
```
训练基线:
```
tweb25-benchmark train-baselines \
--prepared-file ./data/prepared/dataset.npz \
--metadata-file ./data/prepared/metadata.json \
--output-dir ./runs/default/baselines \
--models random-forest logistic-regression torch-mlp \
--device cpu \
--mlp-hidden-dims 512 128 \
--mlp-epochs 15 \
--mlp-batch-size 512
```
生成比较报告:
```
tweb25-benchmark compare \
--train-results ./runs/default/results.json \
--prepared-metadata ./data/prepared/metadata.json \
--baseline-results ./runs/default/baselines/baseline_results.json \
--output-file ./reports/comparison_report.md
```
训练集成模型:
```
tweb25-benchmark train-ensemble \
--prepared-file ./data/prepared/dataset.npz \
--metadata-file ./data/prepared/metadata.json \
--output-dir ./runs/default/ensemble \
--device cpu
```
## 主要输出含义
- `data/prepared/dataset.npz`:矩阵 `X_train`、`X_test`、`y_train`、`y_test`
- `data/prepared/metadata.json`:描述子集、feature 集合、样本数量、feature 列表的 manifest
- `runs/default/results.csv` 和 `results.json`:汇总 mELM 配置
- `runs/default/best_model.npz`:已保存的最佳 mELM 模型
- `runs/default/baselines/baseline_results.csv` 和 `baseline_results.json`:基线结果
- `runs/default/baselines/baseline_report.md`:基线专用报告
- `runs/default/ensemble/ensemble_results.csv` 和 `ensemble_results.json`:soft voting 集成结果
- `runs/default/ensemble/ensemble_report.md`:集成专用报告
- `reports/comparison_report.md`:与参考论文的对比报告
## Notebook
[notebooks](/Users/zed/Documents/Master/mELM/tweb25_malware_benchmark/notebooks) 目录包括:
- `00_raw_to_prepared_and_statistics.ipynb`:从原始 CSV 到 prepared 及数据集统计
- `01_melm_step_by_step.ipynb`:mELM 分步说明
- `02_random_forest_step_by_step.ipynb`:Random Forest 分步说明
- `03_logistic_regression_step_by_step.ipynb`:Logistic Regression 分步说明
- `04_torch_mlp_step_by_step.ipynb`:Torch MLP 分步说明
- `05_ensemble_three_models_step_by_step.ipynb`:3 个基线的 soft voting 集成(不使用 mELM)分步说明
Notebook 设计为独立运行,只要 `data/raw` 或 `data/prepared` 中已有数据即可。
## 重要提示
- 与参考论文的对比仅是方向性对比,并非公平的 head-to-head reproduction。
- `tweb25` 中的 `dataset == 'U'` 在默认有监督设置中不被视为具有真实标签的 benign。
- 对于 `tweb25`,仅看 accuracy 是不够的;应结合 `recall`、`FPR`、`F1` 以及 `degenerate_prediction` 状态一起阅读。
- 如果 mELM 将全部预测为 benign 或全部预测为 malware,pipeline 将明确记录 `all_benign` 或 `all_malware`,而不是留用模糊的 `NaN`。
- 如果您将 `feature-set` 切换到 `combined`,训练时间和 RAM 使用量将显著增加(相比于 `metadata`)。
标签:Apex, BSD, Caido项目解析, Chrome扩展恶意软件检测, CRX文件解析, DAST, JaSt, mELM, Python, PyTorch, tweb25, 云安全监控, 凭据扫描, 多层感知机, 恶意软件分析, 数据挖掘, 数据预处理, 无后门, 机器学习, 极限学习机, 模型训练, 深度学习, 特征提取, 网络安全, 自定义DNS解析器, 自定义脚本, 逆向工具, 逻辑回归, 随机森林, 隐私保护, 集成学习, 静态分析