近两天对Android漏洞检测的基础知识进行了初步了解,现总结如下:
程序正确性证明
对于程序的正确性证明,有公理证明、静态分析、动态分析、符号执行等方法。从公理角度证明程序的正确性就是想通过某种公理系统对程序进行描述,判断程序能否转移到正确状态或满足某种安全性质。而对于静态分析或动态分析方法则是从检测程序的执行路径角度对程序的正确性进行检验。静态分析方法由于执行方便,覆盖面广,可以广泛地检验程序执行路径,但误报率较高;而动态分析方法由于对程序进行执行,针对性强,误报率较低,但由于检验的路径覆盖面小,故漏报率较高。具体内容参见参考文献【1】。
漏洞与缺陷
首先明确一下漏洞的概念。在软件设计开发过程中,由于软件开发人员的疏漏或失误,必然存在使软件运行失效的缺陷。如果软件缺陷可以被攻击者利用,进而产生安全问题,则称为漏洞。
漏洞检测与恶意软件检测的概念也是不同的。漏洞的存在应该是无意的,而恶意软件是黑客为达到某种明确的目的而开发的危害用户安全的软件。目前,由于恶意软件与正常软件具有显著不同的行为,可通过分析软件是否具有恶意行为,如是否申请了过多的权限,对恶意软件进行检测。
漏洞的分类
对于漏洞的分类目前了解不多,还需进一步了解。虽然文献【7】中有提到漏洞的分类问题,但感觉该分类不适用于目前课题的研究。文献【4】把常见的Android漏洞分为:组件权限暴露漏洞、WebView远程代码执行漏洞、弱随机数漏洞、Intent注入漏洞、SQL注入漏洞、敏感数据泄露漏洞、运行时动态代码加载漏洞。
Android安全机制
针对Android平台的漏洞检测,首先应对Android操作系统的系统架构以及安全机制进行了解。Android是一款基于Linux系统的开源操作系统,其系统自下向上分为四层:Linux内核层、系统库层、应用框架层、应用层。系统架构如图1所示。由于智能手机具有隐私数据较多,运算能力有限等特点,Android设置了应用签名、权限审核和沙箱运行3项重要的安全机制。具体内容见参考文献【2】。