赞
踩
近些年来随着移动互联网的大力发展,智能手机和移动通信变得越来越普及,移动安全显得越来越重要,所以移动安全测试变成了一个不可或缺的步骤。
测试应用程序客户端是否对自身完整性进行签名校验。攻击者能否通过反编译的方法获取应用的代码和应用资源,修改部分代码及文件后是否可以重新编译、签名并安装。
测试应用程序文件及文件夹的权限、应用数据库的存储、日志文件的存储等是否存在不安全的情况。即重要文件及文件夹是否权限配置不合理、数据库的重要字段数据是否明文显示、日志文件对用户的输入、输出,应用程序运行时敏感数据的存储是否以明文的方式显示。
Android应用程序有各种组件组成,其中Activity(活动组件)、Service(服务组件)、Broadcast Receiver(广播组件)、Content Provider(内容组件)四大组件是应用程序的重要组件。通过反编译应用程序后,查看AndroidManifest.xml文件中的android:exported的属性值是否为True,并通过相应的工具来尝试启动组件判断组件是否可以导出。
在使用Content Provider时,提供了query接口。由于query传入的参数直接或间接由接口调用者传入,攻击者构造sql injection语句,也可通过接口遍历文件,造成信息的泄漏甚至是应用私有数据的恶意改写和删除。
检测AndroidManifest.xml文件中的android:allowBackup的属性值是否为false。如果该值true,攻击者可通过adb backup对应用的所有数据进行备份,从而导致数据泄露。
Apktool
Apktool是一个开源的Java工具,用于对Android应用程序进行逆向工程。用Apktool将应用程序反编译后,可以在其输出的结果上进一步加工,如修改资源文件或改变程序行为。例如,可以翻译其中的资源字符串,或者修改资源文件以改变该程序的主题。
在命令行模式下使用说明。
反编译:java –jar apktool.jar d apk文件名 -o 生成的路径位置
回编译:java –jar apktool.jar b –f 反编译后存放的文件夹名-o 生成新apk的文件名
SignApk
SignApk.jar是Android源码包中的一个签名工具SignApk.jar是一个已包含在Android平台源码包中的工具。如果要使用SignApk.jar,你需要创建一个带有对应证书公钥和私钥。
在命令行模式下使用说明。
签名命令:java –jar signapk.jar 公钥证书 私钥证书 签名之前的apk名字 签名之后的apk名字
Adb
adb(Android Debug Bridge),是一款Android开发和测试的工具,能与Android设备相连并且操控执行相关的命令。
adb常用命令列表
adb devices
查看当前连接的设备
adb start-server
开启ADB服务
adb kill-server
关闭ADB服务
adb connect [ip]
远程连接设备
adb disconnect [ip]
断开远程连接设备
adb push
上传文件到设备
adb pull
从设备上下载文件
adb logcat
显示打印设备运行日志
adb forward
端口转发
adb install [apk包名字]
安装apk
adb uninstall [apk包名字]
卸载apk
adb shell
进入设备的命令行界面
adb backup
备份应用数据
Drozer
Drozer是一款Android安全测试的框架,可以实现Android的一些公共的漏洞的检测,而且还可以生成shellcode,进行设备的远程exploit。
drozer常用命令列表
run app.package.attacksurface [apk包名]
确定安装包的可攻击面
run http://app.package.info [apk包名]
列出已安装包的信息
run http://app.activity.info [apk包名]
获取activity信息
run http://app.service.info [apk包名]
获取services信息
run http://app.broadcast.info [apk包名]
获取broadcast receivers信息
run http://app.provider.info [apk包名]
获取content providers信息
run app.activity.start [apk的activity组件名]
启动应用某activity组件
run scanner.provider.injection [apk包名]
检测SQL注入
run scanner.provider.traversal [apk包名]
检测遍历文件
Sqlite
许多Android应用程序使用SQLite数据库引擎来管理其私有的数据库或通过content provider暴露的接口来存储数据。因此,如果设备上有一个SQLite3二进制文件,以命令行的方式访问这些数据库就会变得很方便。在审计一些使用了 SQLite数据库的应用程序时,研究人员可以执行原始的SQL语句来检查或操作数据库。
sqlite常用命令列表
.databases
列出数据库的名称及其所依附的文件。
.quit
退出 SQLite 提示符
.help
显示消息。
.exit
退出 SQLite 提示符
.schema [表名]
显示数据库表结构
.dump [表名]
导出某个表的数据
.mode
设置显示模式
select * from table_name
查询输出所有数据记录
安卓模拟器
安卓模拟器是一款能运行在Windows、MacOs、Linux下的安卓设备仿真软件,可以模拟运行应用在真实的安卓设备中的运行状态。
使用Apktool工具对test.apk进行反编译,得到相应应用的反编译文件夹。
随后对文件夹resdrawable-hdpi-v4下的deb_logo.png的进行修改替换。
替换前
替换后
替换完成后进行回编译文件,并进行签名,
签名完成后,进行安装运行,但是应用无法正常运行,故判断应用达到完整性标准。
随后将原来的test.apk文件安装到模拟器中运行。
借助adb工具进行查看应用安装文件夹的文件权限分配及运行日志信息。借助adb devices命令查看可连接的安卓设备。
并执行adb shell进入安卓设备的命令行界面
找到应用所在的安装目录,并进入应用安装存放的所在目录
执行命令ls –lR
并查找一些敏感的目录,图中databases是一个存放数据文件的敏感目录,进入该目录查看数据的存储方式。
使用sqlite3命令查看了ijm_db.db文件,结果提示file is encrypted or is not a database,说明数据库文件是加密的,是符合数据存储的标准的。
但是在权限分配的地方存在两处问题:
1、数据库的权限可被其他用户读取。
2、某些xml结尾的文件也可被其他用户读取。
接下来执行adb logcat命令查看应用运行时的日志是否存在敏感的信息泄露问题。
观察了应用输入地方产生的日志,未发现敏感的信息显示出来。
接着进入drozer控制台界面,执行drozer console connect命令可连接安卓设备。
执行run app.package.attacksurface cn.com.htjc.pay查询下应用的攻击面,可查到应用有4个活动组件可导出,6个广播组件可导出。
另外也可以通过查询应用反编译后的AndroidManifest.xml文件中的android:exported字段值为true得到可导出的组件信息。
接下来进一步获取activity可导出组件的名称,执行run http://app.activity.info –a cn.com.htjc.pay
执行命令run app.activity.start –commponent cn.com.htjc.pay [activity组件的名字],依次执行运行每个活动组件,发现一处查询activity组件未授权访问。
查询是否存在本地SQL注入,执行命令run scanner.provider.injection –a cn.com.htjc.pay
工具drozer未查询到可注入的地方。
查询是否存在遍历文件的漏洞,执行命令run scanner.provider.traversal –a cn.com.htjc.pay
工具drozer也未查询到存在遍历的地方。
接着检查应用反编译包中的AndroidMainfest.xml的值是否为false,打开该文件,通过查找关键字android:allowBackup,发现该值为false。
判断该应用未存在allowbackup漏洞。
结合实际的操作演示,能让安全测试人员有效的理解每个Android测试标准,也具备判断某应用APP是否存在相应的漏洞。本文只是举例了几种常见类型的漏洞及其判断标准进行描述说明,实际工作环境中,安全测试人员应该发散思维去测试应用APP,要不断地在移动安全测试的道路上探索成长。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。