KartikeyAhiwar/Android-Threat-Intelligence-System
GitHub: KartikeyAhiwar/Android-Threat-Intelligence-System
基于机器学习的Android恶意软件检测系统,通过提取APK权限特征实现高准确率的恶意应用分类。
Stars: 0 | Forks: 0
# 使用机器学习进行 Android 恶意软件检测
本节详细介绍了我们提出的分类系统。本研究引入了一个使用更新数据源并旨在实现高性能的 Android 恶意软件检测系统。该系统分为两个主要阶段:首先是数据收集和模型训练,其次是使用 Streamlit 测试训练好的模型。
图展示了本研究中使用的数据收集系统和模型训练的图表。该架构分为四个主要部分:(1) 数据集 —— 由收集用于分析的良性 APK 和恶意 APK 组成;(2) 特征提取 —— 使用 Androguard 从 APK 中提取静态特征(如权限)。这些特征被格式化并存储在逗号分隔值 (CSV) 文件中以用于训练。最后,(3) 数据被输入到不同的机器学习分类器中以获得评估结果。

训练阶段完成后,模型使用 Streamlit 部署,以执行图中所示的步骤。首先,(A) 通过 Streamlit 界面上传一个 APK 文件作为输入数据。(B) 系统使用 Androguard 工具提取相关信息并返回一个特征向量。接下来,(C) 该向量被传递给训练好的模型进行预测。最后,(D) 显示预测结果。在我的实现中,我没有将模型部署到移动设备上,而是在训练阶段后使用 Streamlit 进行测试和评估。

## 项目结构
项目目录组织如下:
```
Android-malware-detection/
│
├── File apk test/ # Folder containing APK files for testing
│ ├── Benign/ # APK files classified as benign
│ └── Malware/ # APK files classified as malware
│
├── ML_Model_Final/ # Trained machine learning models
│ ├── Random Forest.joblib # Saved Random Forest model
│
├── apk_permissions_analysis.csv # CSV file containing extracted permissions
├── data.csv # Processed dataset for training/testing
│
├── extracted_features_permission.py # Extracts permissions from APK files using Androguard
├── features.py # Defines a list of permissions to extract as features
├── malware-detection-android.ipynb # Model training
├── predict.py # Predicts whether an APK file is malicious or benign
│
├── venv/ # Virtual environment for Python dependencies
└── External Libraries # Python libraries required for the project
```
## 数据集信息
本项目使用 **NATICUSdroid (2022)** 数据集的增强版本,并结合了额外的应用程序样本:
- **NATICUSdroid 数据集**:
- 包含 **29,333 个应用程序样本**:
- **15,169** 个恶意应用程序
- **14,175** 个良性应用程序
- 提取了 **85 个权限**
- 数据以二进制格式编码:**1**(权限存在),**0**(权限不存在)。
- **额外的应用程序**:
- 增加了 **2,500 个未提取的应用程序**:
- **1,000 个良性应用程序**:
- 300 个来自 ApkPure 的应用程序(2024 年 8 月)
- 700 个来自 CICMalDroid (2020) 数据集的应用程序
- **1,500 个恶意应用程序**:
- 获取自 **Maloid-DS (2024)** 数据集。
### 最终数据集统计:
- **15,175 个良性应用程序**
- **16,669 个恶意应用程序**
- 提取了 **85 个权限**。
## 关键组件
### 1. 提取特征权限 (`extracted_features_permission.py`)
此脚本使用 **Androguard** 库从 APK 文件中提取权限。它处理存储在 `File apk test/` 文件夹中的 APK 文件。
### 2. 特征定义 (`features.py`)
此文件包含用于恶意软件分类的权限(特征)列表。示例权限包括:
```
features = [
'android.permission.GET_ACCOUNTS',
'com.sonyericsson.home.permission.BROADCAST_BADGE',
'android.permission.READ_PROFILE',
'android.permission.MANAGE_ACCOUNTS',
...
]
```
### 3. 恶意软件预测 (`predict.py`)
此脚本将 APK 文件作为输入,并使用训练好的模型(Random Forest 和 SVC)预测它是 **恶意** 的还是 **良性** 的。
### 4. 训练好的模型 (`ML_Model_Final/`)
- **Random Forest.joblib**:用于恶意软件检测的训练好的 Random Forest 模型。
- **SVC.joblib**:训练好的 Support Vector Classifier 模型。
### 5. 测试 APK 文件 (`File apk test/`)
包含用于测试模型的 APK 文件:
- `Benign/`:标记为良性的 APK。
- `Malware/`:标记为恶意软件的 APK。
## 依赖项
该项目使用 Python 3 和以下库:
- **Androguard**:用于从 APK 文件中提取权限。
- **scikit-learn**:用于机器学习模型训练和预测。
- **joblib**:用于保存和加载训练好的模型。
- **pandas**:用于数据操作和分析。
### 安装依赖项
设置虚拟环境并安装所需的库:
```
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
source venv/bin/activate # On macOS/Linux
venv\Scripts\activate # On Windows
# 安装所需库
pip install androguard scikit-learn pandas joblib
```
## 如何运行项目
在开始之前,请运行以下命令安装所有必要的依赖项:
```
pip install -r requirements.txt
```
1. **提取权限**:
- 运行 `extracted_features_permission.py` 从位于 `File apk test/` 中的 APK 文件提取权限。
python extracted_features_permission.py
2. **定义特征**:
- 如有必要,修改或更新 `features.py` 中的权限列表。
3. **预测恶意软件**:
- 预测系统是使用 Streamlit 实现的。运行以下命令以启动 Streamlit 应用程序:
streamlit run predict.py
4. **模型训练**(可选):
- 使用文件 `malware-detection-android.ipynb` 训练机器学习模型。在 Google Colab 或 Jupyter Notebook 上打开此文件以:
- 预处理来自 `data.csv` 的数据。
- 训练模型,如 Random Forest 和 SVC。
- 使用 **joblib** 将训练好的模型保存在 `ML_Model_Final/` 目录中。
## 结果
结果表显示,机器学习算法在检测 Android 恶意软件方面都取得了很高的效果,准确率和 F-measure 范围在 96.7% 到 97.3% 之间。这些数据令人印象深刻,表明算法在此任务中具有良好的分类能力。其中,CatBoost 取得了最好的性能,准确率和 F-measure 最高,为 97.3%。Random Forest 也表现非常好,以 97.2% 位居第二。其他算法如 SVM、Decision Tree 和 XGBoost 表现相当一致,准确率和 F-measure 在 96.7% 和 96.8% 之间。
在考虑执行时间时,算法之间的差异变得更加明显。Decision Tree 是最快的算法,仅耗时 0.28 秒。Random Forest 和 XGBoost 的执行时间分别为 4.30 秒和 1.02 秒,明显快于 CatBoost(16.95 秒)和 SVM(17.64 秒)。总体而言,虽然 CatBoost 和 Random Forest 在准确率方面表现出色,但如果优先考虑准确率,CatBoost 是最佳选择,而在需要快速处理速度时,Decision Tree 是合适的选择。
| Metrics | CatBoost | Random Forest | XGBoost | Decision Tree | SVM |
|---------------|----------|---------------|---------|---------------|-------|
| Accuracy | 97.3% | 97.2% | 96.8% | 96.7% | 96.7% |
| F-measure | 97.3% | 97.2% | 96.8% | 96.7% | 96.7% |
| Time (second) | 16.95s | 4.30s | 1.02s | 0.28s | 17.64s|
## 结论
恶意软件应用程序对智能手机构成严重风险,因为它们可以窃取个人数据并导致经济损失。该方法使用 Android 应用程序的权限作为特征来识别恶意软件,并将其与安全应用程序区分开来。权限是使用 Androguard 提取的,以生成特征向量。测试了不同的机器学习模型,例如 Support Vector Machine、Decision tree algorithm、CatBoost、XGBoost 和 Random forest。结果表明,Random Forest 算法是最平衡的模型,达到了 97.2% 的准确率和 F1 分数,时间为 4.30。
## 参考文献
1. **NATICUSdroid Dataset (2022)**
2. **CICMalDroid Dataset (2020)**
3. **Maloid-DS Dataset (2024)**
4. APK samples sourced from ApkPure.
标签:Androguard, Android恶意软件检测, Apex, APK分析, Kubernetes, NoSQL, Python, Streamlit, 云安全监控, 人工智能, 分类算法, 无后门, 机器学习, 权限分析, 样本分析, 特征提取, 用户模式Hook绕过, 病毒检测, 目录枚举, 移动安全, 网络安全, 良性样本, 访问控制, 逆向工具, 隐私保护, 静态分析