近两天对Android漏洞检测的基础知识进行了初步了解,现总结如下:
程序正确性证明
对于程序的正确性证明,有公理证明、静态分析、动态分析、符号执行等方法。从公理角度证明程序的正确性就是想通过某种公理系统对程序进行描述,判断程序能否转移到正确状态或满足某种安全性质。而对于静态分析或动态分析方法则是从检测程序的执行路径角度对程序的正确性进行检验。静态分析方法由于执行方便,覆盖面广,可以广泛地检验程序执行路径,但误报率较高;而动态分析方法由于对程序进行执行,针对性强,误报率较低,但由于检验的路径覆盖面小,故漏报率较高。具体内容参见参考文献【1】。
漏洞与缺陷
首先明确一下漏洞的概念。在软件设计开发过程中,由于软件开发人员的疏漏或失误,必然存在使软件运行失效的缺陷。如果软件缺陷可以被攻击者利用,进而产生安全问题,则称为漏洞。
漏洞检测与恶意软件检测的概念也是不同的。漏洞的存在应该是无意的,而恶意软件是黑客为达到某种明确的目的而开发的危害用户安全的软件。目前,由于恶意软件与正常软件具有显著不同的行为,可通过分析软件是否具有恶意行为,如是否申请了过多的权限,对恶意软件进行检测。
漏洞的分类
对于漏洞的分类目前了解不多,还需进一步了解。虽然文献【7】中有提到漏洞的分类问题,但感觉该分类不适用于目前课题的研究。文献【4】把常见的Android漏洞分为:组件权限暴露漏洞、WebView远程代码执行漏洞、弱随机数漏洞、Intent注入漏洞、SQL注入漏洞、敏感数据泄露漏洞、运行时动态代码加载漏洞。
Android安全机制
针对Android平台的漏洞检测,首先应对Android操作系统的系统架构以及安全机制进行了解。Android是一款基于Linux系统的开源操作系统,其系统自下向上分为四层:Linux内核层、系统库层、应用框架层、应用层。系统架构如图1所示。由于智能手机具有隐私数据较多,运算能力有限等特点,Android设置了应用签名、权限审核和沙箱运行3项重要的安全机制。具体内容见参考文献【2】。
图1 Android系统架构
Android漏洞检测研究现状
由于特定的漏洞具有特定的特征,一般可以通过构造漏洞的检测规则,查找Android应用是否满足相应的规则,如若满足,则可能存在相应的漏洞。通过查找文献,发现Android漏洞检测研究目前采用的主要方法是结合动静态分析方法,通过提取相应漏洞的特征,进行模式匹配。而且一般来说,只能检测Android应用是否存在某一类特定的漏洞,即二分类问题,要做到多分类似乎有点困难。
Android应用与传统的java程序不同,不存在唯一的main函 数,其运行是基于组件的生命周期和事件响应机制的,组件之间的调用可以通过intent对象来显示指定或者通过intent filter来隐式指定,组件之间的调用关系较为复杂。
由于Android系统是以Activity、Service、Broadcast Reciver 、Content Provider四大组件作为应用程序构建的基础,所以组件之间的信息交流或权限赋值经常出现漏洞,如组件劫持漏洞、权限提升漏洞,故经常以敏感API函数调用、应用代码实际使用权限信息、危险API函数调用信息等作为Android漏洞检测的特征。
目前,漏洞检测的一般的流程为:
(1)反编译APK文件,得到应用的smali代码文件、resources资源文件和AndroidManifest.xml文件;
(2)对得到的Manifest文件和资源文件进行解析,获取应用的权限申请、组件声明和回调函数定义等相关信息;
(3)对得到的smali文件进行语法 和 词 法 分 析,构 建 对 应 的smali类 和 方 法;
(4)对smali类和方法进行危险函数的扫描和分析,获取应用关于危险函数调用的信息;
(5)采用程序控制流和数据流分析的方式对程序代码进行分析,获取应用关于敏感数据的使用和传播情况.
相关内容可见参考文献【3-6】
问题:
1、会有漏洞的通用表示模式吗?可以提取出用于机器学习的通用特征吗?
2、目前对于恶意软件的检测有采用机器学习方法的,而对于漏洞检测适用于机器学习方法吗?值得考虑。
后记:
对课题的研究现状了解还是太浅薄,很多概念模棱两可,表述还是逻辑混乱,无法准确地表达想法。继续加油吧。
参考文献:
【1】李舟军, 张俊贤, 廖湘科,等. 软件安全漏洞检测技术[J]. 计算机学报, 2015, 38(4):717-732.
【2】张玉清,王凯,杨欢,方喆君,王志强,曹琛. Android安全综述[J/OL]. 计算机研究与发展,2014,51(07):1385-1396. (2014-07-04)[2017-08-23
【3】龚明明, 吴汉, 孙知信. 基于SVM的Android应用程序安全检测综述[J]. 计算机应用研究, 2017, 34(4):965-971.
【4】董国伟, 王眉林, 邵帅,等. 基于特征匹配的Android应用漏洞分析框架[J]. 清华大学学报(自然科学版), 2016(5):461-467.
【5】汤俊伟, 刘家帧, 李瑞轩,等. Android 应用软件漏洞静态挖掘技术[J]. 华中科技大学学报(自然科学版), 2016, 44(s1):20-24.
【6】李凤龙. 面向Android平台动静态结合的洞挖掘引擎的设计与实现[D]. 山东大学, 2016.
【7】牛国芬. 基于CVE的漏洞检测系统的设计与实现[D]. 电子科技大学, 2014.