logo资料库

论文研究-Android源代码安全静态检测技术研究 .pdf

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
中国科技论文在线 http://www.paper.edu.cn Android 源代码安全静态检测技术研究# 高晓梦,郭燕慧** (北京邮电大学计算机学院,北京市 100876) 10 5 摘要:针对 Android 终端日益猖獗的恶意攻击,本文提出一种 Android 源代码安全静态检测 技术,本技术利用已有的 Java 源代码静态分析技术,同时加入对 Android 隐式方法调用的 处理,得到基于 Android 源代码且无断点的控制流图和数据流图。在此信息流图基础上对 Android 源代码进行恶意行为分析,最终得到 Android 工程中存在的主要漏洞缺陷。利用本 技术对多个开源 Android 工程进行检测,实验结果表明,本技术能有效检测出 Android 源代 码中的漏洞缺陷,另外本技术可将漏洞的完整攻击路径可视化展示,方便开发者对工程进 行修改维护,具有较高的实用价值。 关键词:Android 终端;恶意攻击;静态分析; Android 隐式方法调用;恶意行为分析 中图分类号:TP309 15 A detection technology of Android platform source code security based on static analysis Gao Xiaomeng, Guo Yanhui 20 25 30 (School of Computer Science, Beijing University of Posts and Telecommunications, Beijing 100876) Abstract: With the increasingly rampant malicious attacks of Android terminal, this paper proposes a detection technology of Android platform source code security based on static analysis.The technology uses the existing static analysis technology of Java source code, and joins Android implicit methods invocation processing, at last gets the control flow graph and data flow graph, which are based on Android source code and have no breakpoint.The tech-nology analyses the malicious behavior of Android source code depending on the information flow graph, and then get the main loophole and flaw existing in Android project.Using this technology to detect multiple open source Android projects, the experimental results show that this technology can effectively detect the main loophole and flaw existing in Android source code. What's more, the technology can display complete attack path, which is convenient for developers to modify and maintain the project. Therefore, this technology has high practical value. Key words: android intelligent terminal; malicious attacks; static analysis; android implicit methods invoca-tion;malicious behavior analysis 35 0 引言 面对日益严重的移动互联网信息安全威胁,Android 智能终端安全问题也日益加剧,恶 意软件的数量出现前所未有的爆发式增长。腾讯移动安全实验室 2015 年第一季度手机安全 报告[1]显示,2015 年第一季度 Android 手机病毒包新增 1829188 个,相对去年同期,同比增 长 1200%,即 2015 年第一季度新增 Android 病毒包是 2014 年第一季度的 13 倍,是 2014 年 40 全年新增手机病毒包的 1.82 倍。2015 年第一季度,手机染毒用户人次达到 6819.5 万,同比 增长 60%,是上一季度的 1.21 倍。因此,帮助 Android 终端用户尽早发现并有效处理恶意 程序显得十分紧迫。通过对 OWASP Mobile Top 10 Risks[2]、wooyun 网[3]等进行分析,可发 现大多数 Android 应用软件的漏洞由 Android 软件自身引起。因此对 Android 软件自身编码 基金项目:国家自然科学基金(No.61401038);国家发改委信息安全专项资助项目 作者简介:高晓梦(1990-),女,硕士研究生,移动互联网安全 通信联系人:郭燕慧(1974-),女,副教授,移动互联网安全. E-mail: yhguo@bupt.edu.cn - 1 -
中国科技论文在线 http://www.paper.edu.cn 进行安全性分析是发现和防范 Android 平台安全漏洞的重要手段。Android 以 Java 语言开 45 发,基于 Java 应用软件的静态检测已取得了一定的成果,而 Android 相对于 Java 语言拥有 自己的特点,存在大量隐式方法调用和特有的系统 API,若不考虑这些特点而直接利用 Java 静态检测技术对 Android 代码进行检测,扫描结果会产生大量的漏报和误报,针对上述问题, 本文提出一种针对 Android 源代码的安全静态检测技术,并开发出相应检测工具。 1 相关工作 50 目前国内外针对 Android 应用程序的安全问题进行了大量研究,如文献[4]中通过深入研 究 Android 应用程序源代码权限,设计开发一款 Android 静态扫描引擎——“Stowaway”, 利用该引擎生成 Android 权限匹配图,分析 Android 应用程序源代码申请的权限和需要的权 限是否匹配,进而判断该 Android 应用代码是否符合最小权限原则;文献[5]综合 Android 敏 感 API,Linux 命令行,Android 权限,对 Android 应用程序源代码进行安全分析,进而得到 55 该 Android 应用代码中存在的漏洞缺陷等。上述研究基本针对 Android 某些代码特征进行研 究,如 Android 权限,Android 敏感 API 等,并没有涉及到控制流图和数据流图流分析,因 此会存在一定的误报率和漏报率。 本文在针对 Android 某些方面进行研究的基础之上加入 Android 控制流图分析和数据流 图分析,从而可以降低扫描结果的误报率和漏报率。Android 使用 Java 语言作为其主要开发 60 工具,Android SDK 引用大部分的 Java SDK,故可利用比较完善的 Java 语言静态检测技术 对 Android 源代码进行检测。国内外对 Java 应用软件源代码安全性已进行了大量研究,并 构造了相应的软件安全性分析工具,主要有简单文本,词法分析,信息流分析,污染分析, 调用图分析,模型检验与验证分析[6]等。但由于 Android 引进了一些新的 API 和拥有一些 Android 系统特有机制,如 Android 四大组件及其生命周期回调方法, Intent 显示和隐式组 65 件通信以及各种事件触发机制,使得信息流分析中的方法间调用关系图出现大量断点,进而 仅使用基于 Java 语言的静态检测技术进行分析会使得检测结果产生大量漏报。因此,可利 用比较完善的 Java 静态分析技术结合 Android 特有的机制进行分析,进而得到 Android 源代 码中的编码缺陷。 本文利用已有的 Java 源代码静态分析系统[7],通过代码解析对 Android 源代码进行词法、 语法、语义等解析,将得到的信息生成特定的语法树结构(AST);利用代码解析结果,遍 70 历 AST,对应用程序进行控制流分析,从源程序中抽取控制流信息,生成对应的程序控制 依赖图;在代码解析和控制流分析基础上,对程序进行数据流分析,通过遍历 AST,提取 出内存块,常量,函数结构等数据信息。通过上述分析,可得到基于 Java 语言的精确的控 制流图和数据流图[8][9][10],但由于 Android 语言特有机制使得 Android 语言存在大量隐式方 法调用,导致基于 Java 语言的信息流分析得到的方法调用关系图存在大量断点,使得 Android 75 恶意行为进行分析时无法进行数据流追踪,从而影响检测结果准确度。因此,本文针对 Android 语言特点,加入基于 Android 的信息流分析,即对 Android 隐式调用进行分析以得 到完善的信息流,进而为 Android 恶意行为分析提供完善的信息流追踪服务,使得 Android 恶意行为可得到完整的攻击路径,有效检测 Android 源代码中的漏洞缺陷,降低检测结果的 80 漏报率。完善后系统总体结构如图 1 所示。 - 2 -
中国科技论文在线 http://www.paper.edu.cn 图 1 Android 源代码安全静态检测系统图 Fig. 1 the system chart of Android source code security static detection 总之,由于本系统在 Java 信息流分析基础上扩展了 Android 信息流分析,同时在 Java 85 庞大的漏洞库基础上添加了 Android 编码漏洞,因此本系统可大大降低扫描结果的误报率和 漏报率。 2 关键技术设计与实现 本系统利用 Android 方法调用关系图分析技术和 Android 组件间通信关系分析技术对基 于 Java 语言的信息流图进行断点补充,得到基于 Android 语言的完整的控制流图和数据流 90 图,同时在 Java 庞大的漏洞库基础上扩充了 Android 编码漏洞,之后利用漏洞库和完善的 信息流图,对 Android 代码进行恶意行为分析,最终得到精确的基于 Android 源代码的检测 结果,因此相比于仅对 Android 某方面进行安全分析,可降低漏报率和误报率。 2.1 Android 方法调用关系图分析 Android 应用程序由 Activity, Service, Broad-castReceiver 和 ContentProvider 四大组件[11] 95 构成,它们拥有自己的生命周期和回调方法,如 Activity 被部署到 Android 应用程序中之后, 随着应用程序的运行,Activity 会在不同状态之间不断地切换,该 Activity 中相应的方法就 会被反复调用,在启动 Activity 时,系统会先调用 onCreate 方法,然后调用 onStart 方法, 最后调用 onResume,使得当前 Activity 进入运行状态;若当前 Activity 被其他 Activity 覆盖 其上失去焦点时,系统会调用 onPause 方法,暂停当前 Activity 的执行;若当前 Activity 由 100 被覆盖状态回到前台再次获得焦点时,系统会调用 onResume 方法,再次进入运行状态等等, 整个过程都是系统自动完成,均为隐式方法调用,其他组件类似。另外,Android 应用程序 存在大量事件处理,如按钮对象 Button.OnClickListen 中的 onClick()处理 Button 点击之后的 操作,但当用户点击 Button 后的路径由回调机制完成,也属于隐式方法调用。而已有的 Java 源代码静态检测技术未对此隐式调用进行处理,因此导致控制流图中的方法间调用关系图存 105 在大量断点,影响检测结果准确度。因此需根据隐式方法调用点所在的上下文信息动态添加 完善实际的方法间调用关系图。 解决回调事件导致的方法间调用关系图的断点问题,需要建立一张回调方法关系表,遍 历含断点的方法间调用关系图,若该方法是回调方法,根据回调方法关系表将该方法与其他 方法之间的调用关系关联起来。同理,对事件触发机制导致的断点问题,需要建立一张触发 110 方法关系表,根据该表,遍历含断点的方法调用关系图,遍历方法内部是否含有控件监听处 理操作,如果有,将该方法与相应的监听操作方法(如 onTouch(),onKey(),onClick()方法 等)连接起来,最后得到一张不含断点的、完整的方法间调用关系图。 为了后续方便地分析 Android 组件之间的通信,因此对 Android 方法调用关系图进行完 善时也需要对 Android 各个组件的起点方法进行分析记录,如 Activity 组件的起点方法是 - 3 - Android 源代码代码解析控制流分析数据流分析Android信息流分析用户接口安全规则库结果数据库安全分析Android恶意行为分析安全风险报告代码分析引擎
中国科技论文在线 http://www.paper.edu.cn 115 onCreate()和 onStart()方法,BroadCastReceiver 组件的起点方法为 onReceiver()等,各个组件 起点方法如表 1 所示。 表 1 Android 组件回调方法起点表 Tab. 1 the table of start point to Android component callback method 组件名称 Activity 起点方法 onCreate() onStart() Service onCreate() onStart() Receiver onReceiver() onStartCommand() 本部分流程图如图 2 所示。 120 图 2 Android 方法调用关系分析流程图 Fig. 2 the flowchart of Android method invocations analysis 2.2 Android 组件间通信关系分析 在 Android 应用程序中存在大量组件之间的相互通信,同时也伴随着大量信息流的产 125 生,本部分主要分析 Activity、Service 和 BroadcastReceiver 这三大组件[11]之间的通信。由于 Android 配置文件 AndroidManifest.xml 会对这三大组件进行声明,因此本部分首先需要解析 AndroidManifest.xml,提取上述三大组件的名字及组件 Intent 过滤器属性,存入组件表中。 Activity、Service 和 Broadcast Receiver 这三大组件通过 Intent 进行显式调用或隐式调用进行 通信,如 Intent 可作为 startActivity(Intent)或 startActivityForResult(Intent, int)的参数启动一个 130 新的 Activity,可作为 bindService((Intent,ServiceConnection, int)或 startService(Intent)的参数 绑定或启动一个 Service,也可作为 sendBroadcast(Intent)的参数发送广播被感兴趣的广播接 收器接收等,因此第二步需要遍历组件表内的方法调用关系表,对于 Intent 显示调用启动其 他组件,将该 Intent 所在方法与被调用组件的起点方法相连接,对于 Intent 隐式调用启动其 他组件,通过将该 Intent 属性(Action、Data、Category 等)与组件表中的组件及其 Intent 135 过滤器属性匹配,若匹配成功,将该隐式 Intent 所在方法与匹配成功的组件起点相连接。本 部分流程图如图 3 所示。 - 4 - 含断点的方法调用关系图联系该方法与回调方法回调方法关系表为NULL?结束是回调方法?是否是否读取下一个方法内部含控件监听?监听操作方法关系表联系该方法和监听操作方法否为起点方法?是否记录到组件起点方法中是
中国科技论文在线 http://www.paper.edu.cn 图 3 Android 组件间通信关系分析流程图 Fig. 3 the flowchart of Android component communication analysis 140 2.3 Android 恶意行为分析 Android 应用程序通过系统 API 调用与手机相互作用,通过系统 API,可以获取用户个 人信息,拦截短信电话等等,这些都可能被恶意程序利用,因此需要对 Android 恶意行为进 行分析,以降低检测结果的漏报率。通过对 Android 方法调用关系分析和组件通信分析,可 以得到完整的组件间方法调用关系以及各个组件内完整的方法调用关系,为 Android 恶意行 145 为分析提供完整的流追踪服务,在此基础上,本文针对 Android 源代码的不同特征进行分析 得到 Android 漏洞编码库,对 Android 源代码进行恶意行为分析。 2.3.1 Android Intent 敏感行为分析 对程序中 Intent 设置的行为进行分析,分析其是否为某些敏感行为,如自动拨打电话行 为 Intent 行为为 ACTION_CALL 等,将敏感行为信息以 xml 文件格式存入漏洞库,通过分 150 析程序中的每个 Intent,对 Intent 的行为进行追踪,根据漏洞库中的敏感行为文件,分析该 Intent 是否为敏感行为。 2.3.2 Android 权限分析 通过分析 Android 恶意软件,统计其使用较高的权限,如大部分恶意软件均含有 SEND_SMS 发送短信权限,因此将恶意软件常用权限信息以 xml 文件格式存入漏洞库。通 155 过对工程代码中的 AndroidManifest.xml 文件中的 uses-permission 标签项中的权限声明进行 分析,得到项目所使用的权限信息,根据漏洞库中的恶意软件常用权限[12][13][14],判断是否 含有过多权限或者某些高危权限。表 2 列举出恶意软件常用权限部分列表。 表 2 恶意软件常用权限部分列表 Tab. 2 the partial list of commonly used permissions for malware 权限 RECEIVE_SMS WRITE_SMS READ_SMS - 5 - 权限描述 接收短信 编写短信 读取短信 读取下一个方法是否组件表为NULL?结束当前组件方法调用图为NULL?存在Intent调用?显式调用?联系该方法与被调组件起点方法通过Intent属性匹配组件表匹配成功读取下一个组件是否否是是否是否
中国科技论文在线 http://www.paper.edu.cn INTERNET WRITE_EXTERNAL_STORAGE RECEIVE_BOOT_COMPLETED 访问网络 写入外部存储 开机自启动 160 2.3.3 Android 敏感 API 行为分析 Android 应用程序中的恶意行为通过调用某些系统高危敏感 API,可以拦截短信、电话, 获取手机信息、用户个人隐私等信息,将这些高危敏感 API 信息[12][13][14]以 xml 格式添加到 漏洞库。通过遍历 Android 组件中的各个方法,确定其是否有相关高危 API 调用。另外,还 有一些敏感 API 的行为依赖于其参数,可分为两组,一种为“定值分析”,一种为“污染 165 分析”。该分析主要解决如恶意扣费,SQL 注入,命令注入等高危漏洞。 如一些 Android 恶意应用具有扣费等恶意行为,它们在执行这些恶意行为时,调用某些 相关 API 获取用户信息(如用户手机号码),利用后台服务程序在用户不知情情况下发送 这些信息到远程服务器,在远程服务器接收到这些信息后,恶意程序会发送短信注册远程服 务且拦截远程服务器发回的扣费信息,从而在用户不知情的情况下发送恶意扣费。处理这类 170 恶意扣费程序,首先需要查找高危 API,追踪该 API 中对应的参数数据是否是某些固定号码, 如果是则标记,并记录传播路径,这类漏洞分析属于“定值分析”。对于一些注入类漏洞也 属于此类,处理方法和“定值分析”类似,只是此处分析高危 API 参数是否是某些外来且 未进行任何过滤的“污染数据”,如果是则标记,并记录传播路径,这类漏洞分析属于“污 染分析”。Android 敏感 API 与参数关系漏洞可利用流分析结果对信息进行关键数据传播分 175 析进行分析,如图 4 所示。恶意软件常用敏感 API 部分列表如表 3 所示。 图 4 Android 敏感 API 与参数分析 Fig. 4 the flowchart of Android Sensitive API and parameter analysis 表 3 Android 敏感 API 部分列表 Tab. 3 the partial list of Android sensitive API 180 敏感API getDeviceId() getSubscriberId() 描述 泄露 IMEI 泄露 IMSI getSimSerialNumber() 获取 SIM 卡号 sendDataMessage() sendTextMessage() rawQuery() 发送 MMS 发送 SMS SQL 注入 - 6 - 3 实验评估 实验一: Android敏感API返回传播路径,标记该参数数据为对应关键数据该参数是否对应关键数据该参数数据依赖集合 遍历数据依赖集合,得到分析数据参数否是
中国科技论文在线 http://www.paper.edu.cn 为验证评估本技术可对 Android 源代码[15][16]进行编码缺陷检测,利用添加了 Android 信 息流分析和 Android 恶意行为分析模块后的系统对多个 Android 开源项目进行检测,其中包 185 括 IMDeveloper、android_auto_sendsms、MyAppWeixin(仿微信界面)工程源代码、 oschina-android-app(开源中国)工程源代码、Android 中监听电话状态工程源代码等等,其 中 IMDeveloper 和 android_auto_sendsms 两个工程源代码扫描结果部分截图如图 5 所示。由 于本系统是在原 Java 平台源代码静态检测系统基础上添加相应模块开发而来,为验证系统 是通过添加 Android 信息流分析和 Android 恶意行为分析模块使得系统具有更强的针对 190 Android 源代码的检测能力,利用原 Java 静态扫描系统进行扫描结果部分截图如图 6 所示。 扫描对比结果如图 7 和表 4 所示。通过对比可发现,添加 Android 相应模块后系统相对于原 系统,由于通过 Android 信息流分析可以弥补普通流分析导致的中断问题,为 Android 恶意 行为分析提供完善的流追踪。通过对 Android 源代码进行 Android Intent 敏感行为分析和敏 感 API 行为分析,结合完善的流信息,可准确检测出输入验证与表示、敏感 API、代码质量、 195 封装导致的编码缺陷,通过 Android 权限分析可检测到当前工程中使用的高危权限,提示开 发者消除不必要的安全隐患。 图 5 Android 平台源代码静态系统检测结果部分截图 Fig. 5 the several interfaces of Android source code static detection system result 200 图 6 Java 源代码静态系统检测结果部分截图 Fig. 6 the several interfaces of Java source code static detection system result 图 7 Android 项目扫描结果对比图 205 Fig. 7 the comparison of detection result to Android Applications 表 4 Android 项目扫描结果对比表 Tab. 4 the comparison list of detection result to Android Applications 漏洞名称 Java 静态扫描系统 本系统 备注 - 7 - 020406080100Input …Danger API(„Code Quality„Encapsulation„Privilege …Password …Java静态扫描系统添加Android分析模块系统
中国科技论文在线 http://www.paper.edu.cn Input Validation 10 29 本系统添加了方法调用关系分析和组件通信关系分 and Representation (输入验证与 表示) Danger API(敏 感 API) Code Quality (代码质量) Encapsulation (封装) Privilege Management (权限管理) Password Management (密码管理) 总计 析,修复了控制流图中的断点,使得数据流可成功追 溯,故可通过 Android 敏感 API 行为分析检测出原系 统检测不出的注入类漏洞。 43 89 本系统添加了 Android 敏感 API 行为分析和 Intent 敏 感行为分析,同时通过添加方法调用关系分析和组件 通信关系分析,修复了控制流图中的断点,使得数据 流可成功追溯,因此本系统除可检测原系统可检测的 缺陷之外,还可检测针对 Android 语言的敏感 API 或 敏感 API 与参数关系缺陷,如自动开启蓝牙,自动定 位等。 27 36 本系统除可检测原系统可检测的缺陷之外,通过添加 Android 敏感 API 行为分析还可以检测 Android 自身 的编码缺陷,如 AndroidSQLite 数据库、媒体、相机 等资源使用释放情况。 12 本部分主要针对 Android 外部存储进行 Android 敏感 API 行为分析,原系统无此功能。 89 本系统通过添加 Android 权限分析,可列出项目所使 用敏感权限,如拨打电话权限、接收短信权限等,原 4 由于加密方式对于 Java 和 Android 相同,因此检测结 系统无此功能。 果相同 0 0 4 84 259 由于本系统加入 Android 信息流分析和新的漏洞库, 使得可检测漏洞结果数增加,降低 Android 源代码漏 报率。 从检测结果可得,完善后系统可针对 Android 源代码进行恶意行为分析,同时,本系统 能精确定位缺陷代码位置,方便开发者修复代码,如对检测结果“Android sensitive behavior: 210 sendTextMessage 进行分析”,详细分析结果如图 8 和图 9 所示,根据流分析定位到的文件 “D:\oschina\android_auto_sendsms\src\com\easymorse\autosendsms\MainActivity.java”部分代 码截图如图 10 所示。 215 Fig. 8 the detail of Android source code static detection system result 图 8 Android 平台源代码静态系统详细描述图 - 8 -
分享到:
收藏