19121A05A4/Android-Malware-Detection

GitHub: 19121A05A4/Android-Malware-Detection

一个基于机器学习与静态权限分析的Android恶意软件Web检测系统,解决传统签名防病毒难以应对新型变种的问题。

Stars: 0 | Forks: 0

# CyberGuard - Android恶意软件检测系统 一个用于检测Android恶意软件的机器学习Web应用程序,使用静态权限分析和APK二进制扫描。构建在TUANDROMD数据集上,包含四种机器学习分类器。最佳模型(随机森林)达到98.92%的准确率。 在线演示:[android-malware-detection-xahi.onrender.com](https://android-malware-detection-xahi.onrender.com) ## 简介 Android占据了全球移动操作系统市场的70%以上,使其成为恶意软件的主要目标。基于签名的防病毒工具难以应对新的或经过混淆的恶意软件变种。基于机器学习的检测通过从应用程序行为中学习模式,而不是依赖已知签名,使其更具适应性。 本项目专注于Android权限分析。每个Android应用程序在安装时都会在AndroidManifest.xml中声明其所需权限。恶意应用程序通常会请求远超其声称用途的权限组合,这种过度特权的权限行为是检测的基础。 系统具有两种检测模式: - 手动检测:手动选择Android权限并使用四种训练好的机器学习模型之一进行分类 - APK扫描器:上传APK文件进行自动化分析,包括权限提取、API扫描、签名检测和风险评分 ## 数据集 TUANDROMD(Tezpur大学Android恶意软件数据集)- Borah & Bhattacharyya, 2020 | 属性 | 值 | |----------|-------| | 样本总数 | 4,464(清洗后) | | 恶意软件 | 3,565 | | 良性软件 | 899 | | 总特征数 | 242 | | 使用的特征 | 23(统计选择的权限) | 数据集存储在`model/`文件夹下。 数据集的类别不平衡比例约为4:1(恶意软件对良性软件)。SMOTE仅在训练集上应用,在训练/测试分割之后进行,以在训练前平衡类别。在分割前应用SMOTE会导致测试集信息泄露。 ## 特征选择 使用互信息与点二列相关系数的组合得分,从241个可用特征中选择了23个权限特征。API调用签名被排除,仅保留Android权限名称。 ``` RECEIVE_BOOT_COMPLETED SEND_SMS RECEIVE_SMS READ_SMS SYSTEM_ALERT_WINDOW GET_TASKS KILL_BACKGROUND_PROCESSES MODIFY_AUDIO_SETTINGS READ_PHONE_STATE ACCESS_FINE_LOCATION WRITE_EXTERNAL_STORAGE BLUETOOTH_ADMIN WAKE_LOCK DISABLE_KEYGUARD USE_FINGERPRINT CHANGE_NETWORK_STATE BLUETOOTH CHANGE_WIFI_STATE ACCESS_COARSE_LOCATION VIBRATE ACCESS_NETWORK_STATE READ_OWNER_DATA DOWNLOAD_WITHOUT_NOTITIFICATION ``` ## 训练流程 ``` 1. Load TUANDROMD (4,464 samples, 242 features) 2. Feature selection - 23 permission features via MI + Point-Biserial 3. 75/25 stratified train/test split (random_state=42) 4. SMOTE on training set only - balanced to 50/50 5. Train 4 ML models 6. Evaluate on original unbalanced test set 7. 5-fold stratified cross-validation 8. Save models as .pkl files + risk_weights.json ``` 选择75/25的训练/测试分割,而不是80/20,是因为数据集较小(4,464个样本),额外的测试样本可以提高评估可靠性,特别是对于少数类。SMOTE通过生成合成样本来弥补较小的训练集。 ## 模型结果 | 模型 | 测试准确率 | 宏F1 | ROC-AUC | 交叉验证均值 | 交叉验证标准差 | |-------|-------------|---------|---------|---------|--------| | 逻辑回归 | 97.58% | 0.9624 | 0.9840 | 97.40% | +/-0.78% | | XGBoost(调优) | 98.57% | 0.9776 | 0.9987 | 98.36% | +/-0.30% | | 随机森林 | 98.92% | 0.9833 | 0.9989 | 98.66% | +/-0.26% | | 朴素贝叶斯 | 95.70% | 0.9365 | 0.9868 | 96.06% | +/-0.58% | 随机森林被选为主要模型。它具有最高的准确率、最佳的宏F1分数以及最低的交叉验证标准差,表明其在各折中表现一致。 XGBoost使用GridSearchCV进行调优: ``` param_grid = { 'n_estimators': [100, 200], 'max_depth': [3, 6, 9], 'learning_rate': [0.01, 0.1, 0.3], 'subsample': [0.8, 1.0], } ``` ## 每类指标(随机森林) | 类别 | 精确率 | 召回率 | F1 | 支持数 | |-------|-----------|--------|-----|---------| | 良性 | 0.97 | 0.97 | 0.97 | 225 | | 恶意软件 | 0.99 | 0.99 | 0.99 | 891 | | 宏平均 | 0.98 | 0.98 | 0.98 | 1116 | ## 混淆矩阵 | 模型 | TN | FP | FN | TP | |-------|----|----|----|----| | 逻辑回归 | 211 | 14 | 13 | 878 | | XGBoost | 215 | 10 | 6 | 885 | | 随机森林 | 219 | 6 | 6 | 885 | | 朴素贝叶斯 | 217 | 8 | 40 | 851 | 朴素贝叶斯具有最高的假阴性计数(40),意味着它漏掉了最多的实际恶意软件。随机森林在两侧错误数最少(6个FP,6个FN),使其成为最平衡的选项。 ## 为什么选择这四种模型 **逻辑回归** - 线性基线。易于解释,并提供校准的概率估计。由于逻辑回归对特征幅度敏感,训练前应用StandardScaler。 **XGBoost** - 梯度提升,每个树纠正前一个树的错误。使用GridSearchCV进行超参数调优。在安全机器学习研究中广泛使用。 **随机森林** - 由100个决策树组成的集成,每个树在数据的随机子集上训练。对噪声具有鲁棒性。最终预测基于所有树的多数投票。 **朴素贝叶斯(BernoulliNB)** - 针对二进制特征(权限存在与否)设计。假设特征之间相互独立,这在实践中并不总是成立,因为权限经常共同出现。这解释了其准确率低于基于树的模型的原因。 ## APK静态分析引擎 APK扫描器在不运行应用程序的情况下分析应用。APK文件是ZIP归档文件,因此扫描器直接读取其内容。 **步骤1 - Androguard解析** 使用Androguard解析二进制AndroidManifest.xml并提取包名和声明的权限。 **步骤2 - 基于规则的评分** 根据TUANDROMD训练数据中恶意软件与良性软件的频率比率计算权限风险评分,并存储在`risk_weights.json`中。 **步骤3 - ML分类** 提取的权限与23个训练特征进行匹配,并传递给随机森林模型,输出恶意软件置信度百分比。 **步骤4 - 最终判决** ``` ML confidence > 50% -> MALWARE Rule score >= 80, ML Benign -> MALWARE (rule override) Rule score 35-79, ML Benign -> SUSPICIOUS Rule score < 35, ML Benign -> SAFE ``` ## 测试APK 为演示目的本地保留四个APK文件: | 文件 | 判决 | 风险评分 | ML置信度 | 备注 | |------|---------|------------|--------------|-------| | GPA_calculator.apk | 安全 | 15/100 | 7.7% | 干净应用,无危险权限 | | test_suspicious2.apk | 可疑 | 36/100 | 27% | 隐私侵犯权限 | | test_malware.apk | 恶意 | 100/100 | 73% | SMS木马权限模式 | | test_malware2.apk | 恶意 | 100/100 | 83% | 间谍软件/RAT权限模式 | ## 项目结构 ``` CyberGuard/ | |-- app.py # Flask backend and APK scanner |-- train_models.py # ML training script |-- verify_metrics.py # Metric verification script |-- risk_weights.json # Permission risk scores from training data |-- features_selected.txt # 23 selected permission features |-- scaler.pkl # StandardScaler for Logistic Regression |-- requirements.txt # Python dependencies |-- Accuracy.txt # Model accuracy summary | |-- model/ | └── TUANDROMD.csv # Dataset | |-- static/ | |-- download.png # LR confusion matrix | |-- download1.png # XGBoost confusion matrix | |-- download2.png # RF confusion matrix | └── download3.png # Naive Bayes confusion matrix | |-- templates/ | |-- index.html # Landing page | |-- login.html # Login page | |-- first.html # Detection mode selection | |-- prediction.html # Manual permission input | |-- result.html # Classification result | |-- apk_scanner.html # APK upload and scan | |-- performance.html # Model metrics dashboard | └── chart.html # Charts | └── uploads/ # Temporary APK storage (deleted after scan) ``` ## 安装 要求:Python 3.10+ ``` git clone https://github.com/19121A05A4/Android-Malware-Detection.git cd Android-Malware-Detection pip install -r requirements.txt python train_models.py python app.py ``` 打开 http://localhost:5000 默认登录:admin / admin ## 依赖项 ``` flask==2.3.2 pandas==2.2.2 numpy==1.26.4 scikit-learn==1.5.0 imbalanced-learn==0.12.3 matplotlib==3.8.4 seaborn==0.13.2 werkzeug==2.3.7 openpyxl==3.1.2 xgboost==2.0.3 androguard ``` ## 后续工作 - 在更新的数据集上重新训练以提高现代APK的ML性能 - 添加SHAP值以解释哪些权限驱动了每个预测 - 扩展权限之外的特性,包括API调用和意图过滤器 - 用适当的身份验证替换硬编码登录 - 跟踪模型性能随时间的变化以测量概念漂移 ## 参考文献 - Borah, P. & Bhattacharyya, D. (2020). TUANDROMD (Tezpur University Android Malware Dataset). Available at: https://www.kaggle.com/datasets/joebeachcapital/tuandromd - Arp, D., et al. (2014). DREBIN: Effective and Explainable Detection of Android Malware in Your Pocket. NDSS.- Felt, A. P., et al. (2011). Android Permissions Demystified. ACM CCS. - Pedregosa et al. (2011). Scikit-learn: Machine Learning in Python. JMLR, 12, 2825-2830. - Yerima, S. Y., et al. (2014). Analysis of Bayesian Classification-Based Approaches for Android Malware Detection. IET Information Security, 8(1), 25-36. - Chen, T. and Guestrin, C. (2016). XGBoost: A Scalable Tree Boosting System. KDD. ## 作者 Sai Katari GitHub: https://github.com/19121A05A4 ## 许可证 MIT License
标签:AMSI绕过, AndroidManifest.xml, Android安全, Android恶意软件检测, Apex, APK静态分析, Flask Web应用, SMOTE过采样, XGBoost, 后端开发, 威胁检测, 数据集TUANDROMD, 朴素贝叶斯, 机器学习, 权限分析, 权限声明, 模型部署, 特征选择, 移动端安全, 网络应用, 逆向工具, 逻辑回归, 随机森林, 静态检测, 风险评分