安全测试
如果平时不接触安全测试,安全测试就像一个盲区,我也是有一个同事负责项目预置版本需要对安全方面进行测试,利用空余时间,琢磨了一二,其中看到了一些不错的博客,能对安全测试有个系统了解,我觉得这是有必要的。
移动安全测试的一些总结:http://blog.51cto.com/laoyinga/2155341
常见的安全漏洞 :https://blog.csdn.net/zhangcanyan/article/details/51347629
在自己的项目测试中,安全测试就是利用一些安全辅助平台对被测应用进行测试,主要用到两个安全辅助平台:腾讯哈勃分析系统 和 VirusTotal(一个可疑文件分析服务的网站)以及drozer(安全测试工具)。
测试方法:
1、将app在 https://www.virustotal.com/ 扫描,获取报告
2、将app在 https://habo.qq.com/ 扫描,获取报告
******* 如果有报错日志,给开发看,他们会分析的是否需要修复还是忽略 *******
(以下是我项目组的测试报告中的安全测试~~)~)
3、利用drozer进行安全渗透测试
drozer是一款综合的安全评估和攻击的android框架,全面评估app的安全性,并帮助团队把app的安全风险保持在可控范围内。安卓组件是构成安卓应用的基础,其中有四大组件是我们安全渗透测试的关注点。
四大组件:
1)、activities ---- 控制用户UI,处理用户在智能手机屏幕上的交互
2)、services ----无须可视化界面,提供后台长时间运行的功能
3)、Broadcast Receivers ---- 处理安卓应用程序与安卓系统之间的通信
4)、Content Providers ---- 处理数据与数据库之间的管理问题
测试步骤:
(安装drozer, drozerAgent.apk, 配置java, jdk,adb,这里我就不阐述了
1、手机和PC端相连,在PC上使用adb命令进行端口转发,到drozer使用的端口:31415
adb forward tcp:31415 tcp:31415
2、在手机上打开drozer agent.apk,选择embedded server ---->enable
3、cmd命令窗口切到drozer安装路径,开启drozer console
在开始使用测试之前,首先得熟悉一些drozer命令:
https://blog.csdn.net/cch139745/article/details/53519900 (drozer命令大全)
以下就只介绍用的多的drozer命令哒~
a、list -----列出所有模块
附录:(APP模块的作用说明)
APP模块
模块名 ------------------------ 作用
app.activity.forintent : 通过intent查找它的activity
app.activity.info : 获取activities信息
app.activity.start : 开启 Activity
app.broadcast.info : 获取broadcast receivers信息
app.broadcast.send : 发送广播
app.broadcast.sniff : 嗅探广播中intent的数据
app.package.attacksurface :确定安装包的可攻击面
app.package.backup : 列出可备份的包
app.package.debuggable: 列出可debug的包
app.package.info : 获取已安装包的信息
app.package.launchintent: 获取程序启动的activity信息
app.package.list : 手机已安装的程序包
app.package.manifest : 获取程序manifest文件信息
app.package.native : 列出Native libraries 信息
app.package.shareduid : 查找拥有共同uid的包和他们所有的权限
app.provider.columns : 展示content provider URI的各列
app.provider.delete : 删除content provider URI的内容
app.provider.download : 使用openInputStream读取指定uri的内容,并下载在电脑中
app.provider.info : 获取 content providers信息
app.provider.insert : 插入数据到content provider
app.provider.query : 查询content provider 内容
app.provider.read : 使用openInputStream读取指定uri的内容
app.provider.update : 更新content provider的内容
app.service.info : 获取services的信息
app.service.send : 使用 Message攻击暴露的service,其service实现了handleMessage
app.service.start : 开启服务
app.service.stop : 停止服务
b、run 模块名 -h ----查看某个模块的参数
c、run app.package.list ----- 列出手机上安装了的应用
run app.package.list -f 筛选字 ----搜索特定的包名
d、run app.package.info -a 包名 -----获取包名的详细信息
测试步骤:
1、确定攻击面
安全渗透测试在我的浅薄的理解中,就是看能不能对暴露组件进行攻击,导致敏感数据泄漏到安装在同一设备上的其他应用程序上。一般来说,应用程私有组件只能被当前应用启动,不能被其他应用启动相对是安全的。当一个应用程序的组件暴露,就可以被第三方的应用任意调用,可能导致敏感信息泄露、拒绝服务、权限提升绕过,界面劫持、远程代码执行等安全漏洞。
run app.package.attacksurface packageName
还是存在很多的潜在风险的。接下来就是对这些暴露的组件进行攻击。
补充:组件暴露漏洞检测规则
每一个组件在Manifest.xml定义,都有一个android:exported属性,满足以下两种情况都认为是有组件暴露漏洞的:1、显式设置exported属性为true;2、没有显式设定exported值,但组件下面有intent filter,这样组件exported默认值也为true。
2、对暴露的组件进行攻击
1)、Activities
应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。暴露的activity意味着可以被导出。
查看暴露的activities:
run app.activites.info -a packageName
启动暴露的activity:
run app.activity.start --component packageName activityName
2)、Service
service是一个没有用户界面的程序,可以用来开发后台服务或者监控类的程序和执行比较耗时的后台任务。例如,当音乐播放器退出用户界面之后,还需要继续播放,通常会使用Context.startService()来启动一个后台服务,来保持音乐的持续播放
查看暴露的service:
run app.service.info -a packageName
提升权限:
run app.service.start
(平时没有用到这一块,有兴趣的可以自己研究下~~~~~)
3)、Content Providers
每个应用程序都会有些数据存储,Content Provider使一个应用程序的指定数据集提供给其他应用程序,例如通讯录、信息和通话记录等。
查看暴露的provider:
run app.provider.info -a packageName
浏览可以访问的Uri:
run scanner.provider.finduris -a packageName
获取Uri的数据:
run app.provider.query 可以访问的Uri
如果查询到数据,就说明存在漏洞。就可以对数据进行SQL注入,获取表中的数据等。
(这些可以访问的uri是facebook对外暴漏的,也是无法获取到其数据的,根据自己应用的uri,可以排查,后面就只是介绍下常用的操作哒~)
SQL注入:(指利用现有应用程序,将恶意的SQL命令注入到后台数据库执行一些恶意的操作)
可以根据这些参数的使用尝试着对可访问的Uri进行操作。当你SQL注入的时候,如果报错就证明存在SQL注入。
检测sql注入和目录遍历:
run scanner.provider.injection -a packageName
run scanner.provider.traversal -a packageName
4)、Broadcast Receivers
应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息,或者用NotificationManager 来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
利用intent对组件的触发一般有两类漏洞,一类是拒绝服务(broadcast),一类的权限提升(service)。拒绝服务危害性比较低,更多的只是影响应用服务质量;而权限提升将使得没有该权限的应用可以通过intent触发拥有该权限的应用,从而帮助其完成越权行为。
查看暴漏的broadcast:
run app.broadcast.info -a packageName
尝试拒绝服务攻击检测,向广播组件发送不完整intent:
1)、空action
run app.broadcast.send --component com.hatsune.eagleee ReceiverName
2)、空extras
run app.broadcast.send --action android.intent.action.xxx
总的来说,使用drozer做安卓安全渗透测试需要对drozer命令和android组件比较熟悉。