luongnc2k/trafficav

GitHub: luongnc2k/trafficav

该项目使用 Python 对学术论文中的 TrafficAV 系统进行复现,通过分析网络流量中的 HTTP 和 TCP 行为特征来检测 Android 恶意软件。

Stars: 0 | Forks: 0

# TrafficAV — 通过网络流量分析检测 Android Malware 使用 Python 对论文中发布的 **TrafficAV** 系统进行的重新实现: ## 概述 TrafficAV 不再分析应用程序的代码(因为代码很容易被 obfuscation 绕过),而是监控 Android 设备的**实际网络行为**。该系统构建了两个独立的分类模型,并通过 union rule 将它们结合起来: ``` PCAP ──▶ HTTP Feature Extractor ──▶ C4.5 HTTP Model ─┐ ──▶ TCP Flow Extractor ──▶ C4.5 TCP Model ─┴─▶ Verdict + Score ``` | 模型 | 特征 | Detection Rate | |---------|-----------|---------------| | HTTP Model | Host, URI, Method, User-Agent | 96.38% | | TCP Model | duration, pkt_count, byte_count, avg_pkt_size, pkt_interval, dst_port | 91.31% | | **Combined (Union)** | — | **97.89%** | ## 项目结构 ``` trafficav/ ├── trafficav_pipeline.ipynb # TOÀN BỘ code: feature extraction, C4.5 model, pipeline, │ # evaluate, và 3 bước chuẩn bị dataset / huấn luyện / dự đoán │ ├── data/ # Dataset PCAP thô CIC-AndMal2017 (xem docs/dataset_guide.md) │ ├── Benign//*.pcap # Benign/2015, Benign/2016, Benign/2017 │ ├── Adware//*.pcap # Dowgin, Ewind, Feiwo, Gooligan, ... │ ├── Ransomware//*.pcap # Charger, Jisut, Koler, ... │ ├── Scareware//*.pcap # FakeAV, AndroidDefender, ... │ ├── SMSMalware//*.pcap # Plankton, Beanbot, Zsone, ... │ ├── http_features.csv # Features HTTP đã trích xuất từ PCAP (build_dataset_from_folder) │ └── tcp_features.csv # Features TCP đã trích xuất từ PCAP, gộp theo file (build_dataset_from_folder) │ ├── models/ # Trained models (joblib) │ ├── http_model.pkl # Train từ data/http_features.csv (host/uri/method/ua trích xuất từ PCAP) │ └── tcp_model.pkl # Train từ data/tcp_features.csv │ ├── results/ # Biểu đồ và metrics CSV │ ├── docs/ │ ├── methodology.md # Giải thích thuật toán chi tiết │ ├── dataset_guide.md # Hướng dẫn tải và chuẩn bị dataset │ ├── usage_guide.md # Hướng dẫn chạy từng phần trong notebook: trích xuất / train / dự đoán │ └── api_reference.md # Tham chiếu các hàm/class định nghĩa trong notebook │ └── requirements.txt # Tham khảo (notebook có cell %pip install riêng, đọc cùng danh sách) ``` ## 安装 **环境要求:** Python 3.10+,Jupyter(或安装了 Jupyter 扩展的 VS Code) ``` cd trafficav pip install -r requirements.txt ``` 或者打开 `trafficav_pipeline.ipynb` 并运行第一个代码块(“0. 安装依赖库”部分)——该代码块 会自动使用 `%pip install` 安装同一列表中的依赖库。 主要依赖库: | 库 | 用途 | |----------|----------| | `dpkt` / `scapy` | 读取和解析 PCAP 文件 | | `scikit-learn` | Decision Tree(C4.5 近似算法) | | `pandas` / `numpy` | 处理表格数据 | | `matplotlib` / `seaborn` | 绘制结果图表(在 notebook 中 inline 显示) | | `joblib` | 保存/加载训练好的模型 | | `tqdm` | 处理多个 PCAP 时显示进度条 | ## 使用 CIC-AndMal2017 数据集(原始 PCAP)的工作流程 本项目直接使用 CIC-AndMal2017 的**原始 PCAP**,并按照 `data///*.pcap` 和 `data/Benign//*.pcap` 的目录结构进行组织——这与 CIC 网站上数据集的原始布局完全一致。两个提取器(`extract_http_features` 和 `extract_tcp_features`,定义在 notebook 的“2. 提取特征”部分中)均使用 `dpkt` 直接在 PCAP 上运行,因此**无论是 HTTP model 还是 TCP model 都能从该数据源中进行训练**。 在 Jupyter/VS Code 中打开 `trafficav_pipeline.ipynb`,并**从第一个代码块开始按顺序运行**—— 定义函数/类的代码块(0-5 部分)必须在运行下文 6-8 部分的代码块之前执行。 ### 1. 准备 PCAP 下载原始的 CIC-AndMal2017 PCAP 数据(https://www.unb.ca/cic/datasets/andmal2017.html,需要通过邮箱注册获取 链接)或者使用自行抓取的 PCAP,然后将其按以下结构组织到 `data/` 目录中: ``` data/ ├── Benign/2015|2016|2017/*.pcap ├── Adware//*.pcap # Dowgin, Ewind, Feiwo, Gooligan, ... ├── Ransomware//*.pcap # Charger, Jisut, Koler, ... ├── Scareware//*.pcap # FakeAV, AndroidDefender, ... └── SMSMalware//*.pcap # Plankton, Beanbot, Zsone, ... ``` `infer_label_from_path()` 会自动从文件夹名称中识别标签(路径中任何名为 `benign` 的部分 → 标签为 `"benign"`,否则直接取上一级父文件夹的名称作为 family),因此这种布局 无需重命名或扁平化结构即可直接使用。 ### 2. 提取特征 — notebook 中的“6. 步骤 1 — 准备数据集”部分 修改变量并运行代码块(相当于以前的 CLI 参数 `--data`/`--output`/`--mode`/`--scan`): ``` DATA_DIR = os.path.join(BASE_DIR, "data") OUTPUT_DIR = os.path.join(BASE_DIR, "data") EXTRACT_MODE = "both" # "http" | "tcp" | "both" SCAN_ONLY = False # True = chỉ quét thống kê nhanh, không trích xuất ``` 运行该代码块将递归遍历 `data/` 下的所有 `*.pcap`/`*.pcapng` 文件,在每个 文件上同时运行两个提取器,然后输出保存为 `data/http_features.csv` 和 `data/tcp_features.csv`。 ### 3. 训练 — notebook 中的“7. 步骤 2 — 训练”部分 ``` HTTP_CSV = os.path.join(BASE_DIR, "data", "http_features.csv") TCP_CSV = os.path.join(BASE_DIR, "data", "tcp_features.csv") TRAIN_DATA_DIR = None # đặt = DATA_DIR để tự trích xuất PCAP nếu chưa có CSV ``` 然后依次运行 “Load” → “Train” → “Evaluate” → “报告 + 保存模型” 代码块。 ### 4. 预测 — notebook 中的“8. 步骤 3 — 预测”部分 ``` PCAP_PATH = "suspicious.pcap" # một file BATCH_PATTERNS = None # hoặc: [os.path.join(BASE_DIR, "data", "test", "*.pcap")] ``` ## 在 notebook 中使用库 不再需要 `import src...` ——在运行定义相关的代码块(“1. 导入”到“5. 评估和 绘图”部分)后,所有函数/类都已经可以直接在 notebook 的 kernel 中使用,可直接在下一个代码块中调用: ``` # 加载已 train 的 models av = TrafficAV.load(os.path.join(BASE_DIR, "models")) # 从 PCAP 文件预测 result = av.predict_pcap("suspicious.pcap") print(result.verdict) # "malware" | "benign" print(result.confidence) # "high" | "medium" | "low" print(result.http_label) # "Gappusin" | "benign" | None print(result.explanation) # Giải thích tại sao # 从已提取的 features 预测 result = av.predict_features( http_feat={"host": "app.wapx.cn", "uri": "/update", "method": "GET", "ua": "Apache-HttpClient/UNAVAILABLE (java 1.4)"}, tcp_feat={"duration": 1.2, "pkt_count": 10, "byte_count": 450, "avg_pkt_size": 45.0, "pkt_interval": 0.15, "dst_port": 8080}, ) ``` 完整的 API(了解哪个函数定义在 notebook 的哪个部分)请参见 [`docs/api_reference.md`](docs/api_reference.md)。 ## 复现结果 原论文中的数据(13,872 个样本 — Drebin 数据集): | 方法 | Detection Rate | |-------------|---------------| | TrafficAV (论文) | **97.89%** | | DREBIN (静态分析) | 93.90% | | AntiVir | 96.41% | | AVG | 93.71% | | BitDefender | 84.66% | 在原始 CIC-AndMal2017 PCAP 数据集上的实际结果(`data/` — 包含 2,126 个 PCAP 文件,42 个 malware 家族以及 Benign,特征由 `dpkt` 直接提取 — 见 `results/metrics.csv`): | 模型 | Accuracy | Detection Rate | FPR | Precision | F1 | |-------|---------:|---------------:|----:|----------:|---:| | HTTP | 95.59% | 82.11% | 2.22% | 85.71% | 83.87% | | TCP | 81.79% | 63.16% | 15.19% | 40.27% | 49.18% | | **Combined** | **84.73%** | **96.84%** | **17.24%** | **47.67%** | **63.89%** | 各模型与原论文的对比: | 模型 | Detection Rate — 原论文 (Drebin) | Detection Rate — 实际结果 (CIC-AndMal2017) | |-------|---------------------------------------:|-------------------------------------------:| | HTTP | 96.38% | 82.11% | | TCP | 91.31% | 63.16% | | **Combined (Union)** | **97.89%** | **96.84%** | 由于原始 PCAP 包含了充足的 HTTP 和 TCP 数据,这次成功对两个模型都进行了训练。Union Rule 清晰地 展现了其设计初衷所带来的折中:Combined 的 Detection Rate (96.84%) 明显高于任何单一的 模型(因为它捕获了另一个模型遗漏的样本——95 个测试样本中仅剩 3 个 malware 未被检测到), 代价是 FPR 也会相应上升(17.24% 对比单一模型的 2.22–15.19%)——即优先考虑 recall 而非 precision,这完全符合原始设计的安全意图。 尽管使用了截然不同的数据源(CIC-AndMal2017 与论文中的 Drebin 数据集),Combined Detection Rate (96.84%) 已经非常接近原论文的数据 (97.89%)。剩余的差异主要来自: (1) `sklearn.DecisionTreeClassifier` 仅支持二叉分裂(CART),而不是原始 C4.5 的多路分裂;(2) 样本的规模和分布存在差异——由于 CIC-AndMal2017 包含更多样化的 HTTPS/benign 流量,而 HTTP model 无法读取这些 header,导致 FPR (17.24%) 明显高于论文水平。 在你的本地机器上重新运行 `trafficav_pipeline.ipynb` 中的 “6. 步骤 1”和“7. 步骤 2”部分即可复现上述数据。 ## 参考文献 - Wang et al. (2019). *A Mobile Malware Detection Method Using Behavior Features in Network Traffic.* JNCA. https://doi.org/10.1016/j.jnca.2018.10.009 - Quinlan, J. R. (1993). *C4.5: Programs for Machine Learning.* Morgan Kaufmann. - Arp, D. et al. (2014). *DREBIN: Effective and Explainable Detection of Android Malware in Your Pocket.* NDSS. - CIC-AndMal2017 Dataset: https://www.unb.ca/cic/datasets/andmal2017.html
标签:Android, Apex, C4.5决策树, DSL, Python, 安全, 无后门, 机器学习, 网络流量分析, 自定义DNS解析器, 超时处理, 逆向工具