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解析器, 自定义脚本, 逆向工具, 逻辑回归, 随机森林, 隐私保护, 集成学习, 静态分析