MarkoMark98/A2MAF-Android-Automotive-Malware-Analysis-Framework
GitHub: MarkoMark98/A2MAF-Android-Automotive-Malware-Analysis-Framework
一个面向 Android Automotive OS 的恶意软件分析与检测实验框架,结合 APK 静态分析与基于硬件性能计数器的动态行为分析两条互补流水线。
Stars: 0 | Forks: 0
# A2MAF – Android Automotive 恶意软件分析框架
A2MAF 是一个用于 **Android Automotive OS (AAOS)** 恶意软件分析和恶意软件检测的实验性框架。该项目实现了两条互补的流水线:一条针对 APK 的**静态分析**流水线,以及一条基于运行时收集的 **Hardware Performance Counters (HPC)** 并通过机器学习模型进行分类的**行为分析**流水线。
该仓库汇集了学位论文中所描述的用于数据集选择、特征收集、CSV 构建、探索性分析和分类器训练的脚本。其目标是提供一个可复现的基础,以便在受轻量级、实时性以及与 AAOS 兼容性等要求限制的车载环境中研究恶意软件检测。
## 项目目标
该学位论文提出将 A2MAF 作为一个概念验证,以解决 Android Automotive 系统上的恶意软件检测问题,与传统 Android 相比,这是一个在文献中仍较少涉及的领域。其核心理念是将从 APK 中提取的静态信号与从 HPC 获取的低开销动态信号相结合,从而同时覆盖结构特征与运行时行为。
在学位论文工作中,该框架是在基于从 AndroZoo 选取并使用 VirusTotal 的 `vt_detection` 字段进行标记的 APK 所构建的数据集上进行开发和评估的。最终数据集包含 7,777 个与模拟器 x86_64 架构兼容的 APK,分为 3,826 个恶意软件和 3,951 个良性软件。
## 架构
A2MAF 由三个主要逻辑模块组成:
- **Static Analyzer**:使用 Androguard 从 APK 中提取静态特征,包括 permission、API calls、opcode 和 manifest 元数据。
- **HPC Analyzer**:在 AAOS 模拟器上运行 APK,并通过 simpleperf 收集硬件计数器 `branch-instructions`、`branch-misses`、`cache-references` 和 `cache-misses`。
- **ML Engine**:为这两条流水线训练和比较多种监督式分类器,并保存模型和实验结果。
这两条流水线是独立的,但设计为互补的。静态分析旨在通过利用大量特征来最大化区分能力,而 HPC 流水线则致力于实现更轻量的检测,更接近在车载环境中可能的实时部署。
## 脚本结构
### 环境设置
- `setup.sh`:准备 AAOS 环境,检查 KVM,激活或创建 Python virtual environment 并安装特征提取所需的主要依赖项。
### 数据集选择
- `select_apk.py`:读取 AndroZoo 的 CSV,根据日期和大小进行过滤,使用 `vt_detection` 标记样本,下载 APK 并丢弃与 x86/x86_64 不兼容的样本。
- `create_static_csv.py`:将静态提取器生成的 CSV 聚合为一个可供训练的单一静态数据集。
- `create_hpc_csv.py`:将 simpleperf 生成的 CSV 转换为一个单一的表格化 HPC 数据集,并移除所有 HPC 值全为零的样本。
### 特征提取
- `extract_static.py`:使用 Androguard 从 APK 中提取静态特征,为每个样本生成 permission、API calls、opcode、activity、service、receiver、provider 的数量以及 SDK 信息。
- `collect_hpc.py`:并行启动多个 AAOS 模拟器,安装并启动 APK,使用 simpleperf 收集 HPC,同时管理进度、错误和模拟器的重启。
### 模型训练
- `static_classifier.py`:执行预处理、特征选择和静态分类器训练,比较包括 Decision Tree、Random Forest、XGBoost、MLP、KNN、SVM、Logistic Regression 和 Gaussian Naive Bayes 在内的多种模型。
- `HPC_Classifier.py`:在 HPC 流水线上训练模型,评估不同的 `vt_detection` 阈值以及 `log1p` 转换对硬件特征的影响。
### 探索性分析
- `analyze_static_dataset.py`:分析静态特征的分布、各类特征的相对权重以及 `log1p` 等转换的效果。
- `analyze_hpc_dataset.py`:对 HPC 特征执行描述性分析,包括分布、skewness、相关性以及恶意软件与良性软件之间的差异。
## 操作流程
项目中使用脚本的逻辑顺序如下:
1. 准备 AAOS 和 Python 环境。
2. 从 AndroZoo 选择并下载 APK。
3. 提取静态特征。
4. 通过模拟器在运行时收集 HPC。
5. 创建最终的 CSV 数据集。
6. 数据集的探索性分析。
7. 分类器的训练与比较。
## 使用的特征
### 静态流水线
项目中使用的静态特征属于四个主要类别:
- manifest 中声明的 **Permission**。
- 从 DEX bytecode 分析中获取的 **API calls**。
- 从方法指令中提取的 Dalvik **Opcode**。
- 结构性 **元数据**,如 activity、service、receiver、provider 的数量、`minSdkVersion` 和 `targetSdkVersion`。
在学位论文工作中,完整的静态数据集拥有超过 1600 万个唯一列,随后通过最低频率过滤将其减少至 62,634 个特征,以使训练变得可控。
### HPC 流水线
动态流水线使用了四个在应用执行期间通过 simpleperf 收集的硬件计数器:
- `branch-instructions`
- `branch-misses`
- `cache-references`
- `cache-misses`
选择这些计数器是因为文献指出它们是基于 HPC 的恶意软件检测方法中最具区分度的计数器之一,并且在项目中,这些计数器是在具有应用进程分析功能的 x86_64 AAOS 模拟器上收集的。
## 机器学习模型
对于这两条流水线,使用 `RandomizedSearchCV` 和 5 折交叉验证比较了几种监督式分类器,并进行了超参数优化。这些脚本包括 Random Forest、XGBoost、Decision Tree、MLP、KNN、SVM、Logistic Regression 和 Gaussian Naive Bayes;学位论文中强调,Random Forest 是在这两种情况下结果最好的模型。
对于静态分类器,预处理包括移除常量特征、对连续特征进行 `log1p` 转换、使用 `SelectKBest` 选择最佳特征以及必要的缩放。相反,对于 HPC 分类器,工作流评估了数据集的平衡性、不同的标记阈值以及对数归一化对四个计数器的影响。
## 结果
在学位论文报告的实验评估中,最佳的 **静态分类器** 达到了 0.9747 的 F1-score 和 0.9955 的 AUC-ROC。最佳的 **HPC 分类器** 在 `vt_detection = 7` 阈值和对数归一化的配置下,达到了 0.7758 的 F1-score 和 0.8555 的 AUC-ROC。
这些结果表明,静态流水线要准确得多,而 HPC 流水线提供的信号较弱,但可能作为轻量级和互补的组件发挥作用。学位论文将这一差距主要归因于可用 HPC 特征的数量极少,以及在虚拟化模拟器而非 ARM bare-metal 硬件上收集数据所引入的失真。
## 系统要求
要运行整个流水线,需要与脚本中描述的环境相一致的软件和硬件组件:
- 支持 KVM 的 Linux。
- 目标为 `sdk_car_x86_64-userdebug` 的 AAOS/AOSP 构建。
- Android SDK 工具,特别是 `adb`、`aapt` 和 Android 模拟器。
- AAOS 环境中可用的 `simpleperf`。
- Python 3。
- Python 库:`pandas`、`numpy`、`scikit-learn`、`xgboost`、`androguard`、`joblib`、`matplotlib`、`tqdm`、`loguru`、`scipy`。
- 访问 AndroZoo 的元数据 CSV 和 AndroZoo API key。
## 工作流示例
以下是与仓库中脚本相一致的使用流程:
```
# 1) 准备 AAOS 与 virtualenv 环境
bash setup.sh
# 2) 选择并下载 APK
python3 select_apk.py
# 3) 提取静态 feature
python3 extract_static.py
# 4) 使用 N 个 emulator 收集 HPC
python3 collect_hpc.py 4
# 5) 创建最终 CSV
python3 create_static_csv.py
python3 create_hpc_csv.py
# 6) 分析 dataset
python3 analyze_static_dataset.py
python3 analyze_hpc_dataset.py
# 7) 训练 classificatori
python3 static_classifier.py
python3 HPC_Classifier.py
```
## 主要贡献
本工作的主要贡献有四点:
- **首个针对 AAOS 的静态 + HPC 混合框架**:A2MAF 代表了首个专为 **Android Automotive OS** 环境设计的混合框架,它基于静态分析和 Hardware Performance Counters (HPC)。该学位论文正是为了填补文献中在具有实时和资源限制的车载领域结合这两种方法的解决方案的空白。
- **车载部署的概念验证**:该工作在架构上定义并验证了专为 **车载** 部署设计的流水线,将离线训练与车载推理阶段分离,并展示了该解决方案在 AAOS 环境中的实际可行性。
- **创建 AAOS 的 HPC 数据集**:在缺乏特定领域公共数据集的情况下,从 AndroZoo 选取的 APK 并在与框架兼容的环境中执行,构建了一个专门针对 AAOS 的 HPC 数据集。这构成了该项目的一项独立贡献,并已在此处发布:[A2MAF (AndroZoo subdataset)](https://www.kaggle.com/datasets/marcomarchionno/a2maf-androzoo-subdataset)。
- **极具竞争力的实验结果**:在最佳配置下,**静态分类器** 达到了 **97.47% 的 F1-score** 和 **99.55% 的 AUC-ROC**,而 **HPC 分类器** 达到了 **77.58% 的 F1-score** 和 **85.55% 的 AUC-ROC**,证实了框架的有效性以及两条流水线的互补价值。
## 当前局限性
该项目作为概念验证起步,并存在学位论文中明确指出的一些局限性。主要问题是缺乏专门针对 AAOS 的公共数据集,此类数据集应带有手动管理的标签、静态特征以及直接在真实车载硬件上收集的 HPC。
此外,HPC 的收集是在带有 KVM 虚拟化的 x86_64 模拟器上进行的,而车载领域的真实目标通常是 ARM bare-metal。这使得收集到的信号不太能代表真实的微架构行为,并可能影响动态分类器的质量。
## 未来发展
学位论文中指出的项目自然演变包括:
- 在 ARM bare-metal 硬件上收集 HPC;
- 构建特定于 AAOS 的公共数据集;
- 校准决策阈值,以便在安全关键场景中优先考虑召回率;
- 针对车载 ARM 架构专门进行经验性的 PMU 事件选择;
- 使用 HPC 时间序列而非仅使用聚合值;
- 与云端后端集成以及模型的持续更新。
## 引用
如果该仓库在学术环境中使用,请引用衍生出该框架的学位论文:
标签:AAOS, Androguard, Android Automotive, Android恶意软件检测, AndroZoo, Apex, APK分析, Ask搜索, DAST, DNS 反向解析, HPC, Proof of Concept, simpleperf, VirusTotal, 云安全监控, 子域名枚举, 恶意软件分析, 机器学习, 毕业论文, 硬件性能计数器, 系统安全, 计算机视觉/数据科学(特征工程), 车联网安全, 车载安卓系统, 静态分析