苏圣魁 刘树发 王婷
摘 要:智能终端的普及促进了各种APP应用的快速发展,这些应用极大地方便了人们的工作生活,但是在APP应用快速发展的同时由于其自身存在的一些安全问题也给民众造成了巨大的危害:个人隐私信息泄露、银行账户被窃取等。只有及时地发现存在的安全问题,才能更好地提高APP应用的安全性。该文从基于Android的APP应用开始入手,对当前常见的几类安全问题进行了分析,提出了对这些安全问题的检测方法和思路。
关键词:Android APP 安全检测
中图分类号:TP393.08 文献标识码:A 文章编号:1674-098X(2016)05(a)-0081-02
随着智能终端的大量普及,各种APP应用应运而生,金融类APP、生活类APP,以及娱乐类APP应用程序数量众多,这些APP应用极大地方便了人们的生活,足不出户即可实现购物、订餐、金融等服务。但是这些APP应用在极大地便利了人们的同时还带来了一系列的安全问题,这些安全问题都可能造成个人信息泄露、财产损失等。如何对APP应用程序进行安全检测,提高APP的安全性成为目前一个亟需解决的问题。
1 当前APP应用程序常见安全问题
在当前众多的APP应用中面临一系列的安全威胁,这些安全威胁都可能给民众造成巨大的损失,APP存在的主要安全问题有以下几方面。
1.1 程序安全
1.1.1 反编译二次打包安全
由于大部分基于Android的APP应用程序没有进行加壳保护,导致APP可以被攻击者反编译,反编译后植入广告、恶意代码、病毒等重新打包。二次打包后虽然从性能、用户体验、外观都与正规APP一模一样,但后台却在悄悄地进行着窃取用户信息、界面劫持、偷窥隐私、广告骚扰等恶意行为。
1.1.2 Android组件安全
APP应用程序的后台服务、Content Provider、第三方调用和广播等组件权限的设置存在安全问题,导致数据失窃密等。
1.2 数据安全
1.2.1 Log日志安全
Log日志是APP运行期间自身产生的,是对程序运行情况的记录和监控,通过Log日志可以详细了解APP内部的运行状况。
1.2.2 本地储存数据安全
本地文件存储经常会使用以下方式,同样也会遇到一些安全问题。
SharedPreferences:通过一个key-Value(键值对)来存储一些轻量级的数据,用于保存一些软件配置信息等小型数据。黑客破解后可以读取和修改value值。
文件存储:是文件(I/O)存储方案,用于存储大数量的数据。内容提供者:也称ContentProvider,是指能实现所有应用程序共享的一种数据存储方式。
SQLite数据库:是一种嵌入式的、关系型的数据库,黑客可以修改一些SQL语句或者读取数据库中的数据信息,导致APP用户的信息泄露。
1.3 数据传输安全
1.3.1 网络监听与攻击
APP运行时,可以通过特定的工具对APP和外界之间发送或接收的网络包进行抓取。获取网络包后,可以分析APP自身的网络协议,从而针对服务器进行攻击,或逆向分析网络包的加密算法。
1.3.2 登录请求重发攻击
大部分APP使用的是HTTP的传输,这样在网络请求时很容易被嗅探到数据,如果对登录过程中的网络封包进行重放攻击测试,攻击者可能会登录到系统,从而获取用户敏感信息。
2 APP应用程序漏洞安全检测技术
和传统的PC程序安全检测相比对APP应用程序漏洞的安全检测也分为动态检测和静态检测两部分。
2.1 静态检测
静态检测主要通过检测工具对APP应用程序的权限配置、程序代码进行检测。最常用的方法就是反编译,dex2jar和apktool分别代有两种反编译方式,dex2jar反编译出java源代码,apktool反编译出来的是java汇编代码。
2.1.1 dex2jar反编译
工具:dex2jar+jdgui。
方法:
(1)修改apk为zip扩展名。
(2)解压出classes.dex文件。
(3)使用dex2jar反编译(dex2jar.bat classes.dex)。
2.1.2 apktool反编译
工具:apktool。
这个工具比较简单,直接(apktool d apkfile)就可以反编译apk文件,反编译出来的东西为smali反汇编代码、res资源文件、assets配置文件、lib库文件,人们可以直接搜索smali文件和资源文件来查找链接等(图1)。
通过静态反编译可以分析APP应用程序组件的配置与权限,检查APP代码的安全性。同时通过对源码的分析了解APP加密机制和数据存储位置。采用静态反编译方法对APP应用程序进行安全检测可以最大限度地对APP的安全性进行分析。
2.2 动态检测
除了静态对APP应用程序进行检测外,由于检测内容和APP自身安全加固的问题还可以利用动态方式对APP应用程序进行安全检测。
2.2.1 brupsuite
利用brupsuite工具设置代理服务器,可以对APP应用程序中的http协议内容进行检测和分析,利用这种方法可以检测APP是否采用加密传输机制、登陆重放攻击等安全检测。
2.2.2 IDA Pro
IDA Pro从6.1版本开始,支持动态调试Android原生程序。调试一般的Android原生程序可以采用远程运行与远程附加两种方式来调试。
采用动态调试的方法可以对一些采用了加壳技术的APP程序进行检测,这样可以发现嵌入APP应用程序中的恶意程序,是一种比较深入的安全检测方式。
3 APP应用程序安全检测内容
3.1 組件安全检测
对Activity安全、Broadcast Receiver安全、Service安全、Content Provider安全、Intent安全和WebView的规范使用检测分析,发现因为程序中不规范使用导致的组件漏洞。
3.2 代码安全检测
对代码混淆、Dex保护、SO保护、资源文件保护以及第三方加载库的代码的安全处理进行检测分析,发现代码被反编译和破解的漏洞。
3.3 内存安全检测
检测APP运行过程中的内存处理和保护机制进行检测分析,发现是否存在被修改和破坏的漏洞风险。
3.4 数据安全检测
对数据输入、数据存储、存储数据类别、数据访问控制、敏感数据加密、内存数据安全、数据传输、证书验证、远程数据通信加密、数据传输完整性、本地数据通讯安全、会话安全、数据输出、调试信息、敏感信息显示等过程进行漏洞检测,发现数据存储和处理过程中被非法调用、传输和窃取漏洞。
3.5 业务安全检测
对用户登录,密码管理,支付安全,身份认证,超时设置,异常处理等进行检测分析,发现业务处理过程中的潜在漏洞。
3.6 应用管理检测
(1)下载安装:检测是否有安全的应用发布渠道供用户下载。检测各应用市场是否存在二次打包的恶意应用。
(2)应用卸载:检测应用卸载是否清除完全,是否残留数据。
(3)版本升级:检测是否具备在线版本检测、升级功能。检测升级过程是否会被第三方劫持、欺骗等漏洞。
参考文献
[1]柯元旦.Android内核刨析[M].电子工业出版社,2011.
[2]丰生强.Android软件安全与逆向分析[M].人民邮电出版社,2013.
[3]Chris Eagle.IDA Pro权威指南[M].2版.人民邮电出版社,2012.