1 研究背景
1.1 问题
Android软件由于其来源特性容易受到hacker攻击
现有的基于传统机器学习的apk检测方法在挖掘软件行为语义信息方面存在局限性,且检测结果缺乏可解释性
1.2 传统机器学习方法
- 基于字符串
方法:将提取的特征表示成字符串序列,然后编码成向量
优点:易于理解和实现
缺点:未能捕捉特征之间的深层语义关系 - 基于图像
方法:将APK转换为图像并应用图像识别技术进行分类
优点:简单高效
缺点:容易忽视应用内的关键语义信息 - 基于图的方法
方法:构建图结构以捕捉特征之间的语义关系
优点:能更有效地表示复杂的应用行为
缺点:构建复杂的图结构会带来较大计算负担和资源消耗
一般流程:
反编译APK->提取多种不同的特征->以不同方式组合和处理,获得所应用的表示向量->将表示向量用于训练分类器以检测恶意软件
2 方法论
2.1 特征提取
方法:静态特征提取
文件:Manifest.xml、class.dex
特征:permission、API、URL、uses-feature
三视图:permission view、API view、URL & uses-feature view
URL、uses-feature的数量较少,因此合并
工具:
- Androguard:反编译apk,提取特征
- PScout:建立apk及其使用的权限的映射
2.2 多视图文本生成
使用:gpt-4-1106-preview
2.2.1 功能描述模板
生成键值对形式的功能描述
例如:
[“android.permission.WRITE_SMS”: “allows sending and editing SMS”]
存储机制:
若某个permission、API、URL、uses-feature之前生成过对应的功能描述,则直接使用先前的描述而不再生成
显著提升了LLM生成效率并减少token消耗
2.2.2 视图总结模板
2.3 检测分类
使用OpenAI 的嵌入模型text-embedding-ada-002,将文本描述转化为向量
使用向量训练DNN模型进行二分类
2.4 获取诊断报告
结合多视图文本描述与DNN检测结果生成检测结果诊断报告,为检测结果提供可解释性分析
3 实验
3.1 实验数据
来源:AndroZoo
良性样本:11189
恶意样本:12128
3.2 基准实验
3.3 消融实验
去除其中一个视图,或者去除功能描述、视图总结后检测效果对比
API视图对结果的影响最大
4 改进方向
- 引入更多静态特征,丰富视图种类
- 采用交互式动态与静态组合特征检测方法
- 建立有效的错误检查和纠正机制,预防LLM幻觉
- 调用远程LLM易受到网络波动影响,导致巨大token开销。可以本地部署LLM并使用Android安全领域的知识微调
- 基于开源LLM结合检索增强生成(RAG)进一步设计思维链,以确保输出的质量和稳定性
原文链接:
AppPoet: Large Language Model based Android malware detection via multi-view prompt engineering