原文链接:http://bobao.360.cn/learning/detail/126.html
在前两篇文章中,我们讨论了攻击Activity相关组件,内容提供商泄露和防御方法。在本期的文章中,我们将讨论攻击broadcast receivers(广播接收器)。 什么是broadcast receivers Broadcast receivers 是对广播接收和回应的组件。系统会发出许多广播,比如时区的改变、电量过低,图片被选中等。应用也可生成广播,比如通知其他设备一些数据已经下载完成并且可以被使用。 Broadcast receivers 没有用户界面。但是,他可以启动一个界面作为对广播的回应,或者使用NotificationManager提示用户。NotificationManager可以通过多种方式提示用户,比如闪烁背光灯,震动设备,播放提示音等等。手机状态条中会一直存在一个提示图标,用户可以打开它查看提示信息。 安全风险 如果想了解broadcast receivers的安全风险,我们必须了解事件是如何被广播出来的,事件分为两种类型,如下图所示: [/url] 1. 系统事件 系统事件是由系统发出的,比如“启动完成、收到信息、电量过低”等。比如当应用程序注册了短信接收事件,每收到一次短信就会唤醒broadcast receivers 2. 用户事件 除了系统生成的事件, 用户也可以注册一个自定义的应用程序广播事件接收器。 下面问题来了:
1当我们的应用程序发送一个广播意图,是只有目标程序会收到,还是所有的程序会收到呢? 2 当我们注册了一个接收器,我们是只能从合法的广播来源接收程序还是也可以从恶意的程序那里接收到广播呢?
如果开发人员没有限制谁能广播谁不能广播的话,很明显答案是肯定的。如果接收器接收到了不信任源发来的广播,我们的应用程序会陷入危险。 为了演示这个场景如何被利用,我开发了一个小程序。 请填写表单然后下载程序和源码。(小编贴心的下载了下来,然后传到了网盘里,你就叫我红领巾吧)
[url=http://yunpan.cn/cfAPSi5i4tbgc]http://yunpan.cn/cfAPSi5i4tbgc (提取码:48fb)
准备工作 安装了Android SDK的电脑 两个模拟器 测试程序的功能 下载下来后你需要安装上测试程序,执行下面的命令
当我们启动应用程序,如下图所示
[/url] 我们需要注册一个特别的手机号,如下图所示。当我们点击了按钮,自定义的广播将被发送,我们将收到短信确认注册成功。 这个程序的任务是发送虚假的广播并确认程序是否收到,如果收到了,将利用这个虚假的广播发送一条短信。 理解此程序的功能 一个叫做“MyBroadCastReceiver “的广播接收器在AndroidManifest.xml 文件中被注册。代码如下: [url=http://p6.qhimg.com/t015e9110b0337dd635.png] 应用程序使用以下代码发送,“input“是你刚才输入的那些字符。 [/url] 下面的代码将把广播来的手机号码通过短信发送给注册的用户。 [url=http://p7.qhimg.com/t01a87a6bf9630b9214.png] 攻击Broadcast Receivers 下面我们尝试发送一些虚假的广播,通过下面的步骤: 使用adb 获得一个设备的adb shell,输入下面的命令
| am broadcast -a MyBroadcast -n com.isi.vul_broadcastreceiver/.MyBroadCastReceiver
|
上面的命令将发送一个广播,但是他没有包括手机号码。我们可以使用 –es 这个选项传递电话号码 输入下面的命令 | am broadcast -a MyBroadcast -n com.isi.vul_broadcastreceiver/.MyBroadCastReceiver –es number 5556
|
如下图所示 [/url] 使用一个恶意的app 我们可以写一个恶意的app去发送广播,或者利用存在漏洞的app。最好的利用场景就是恶意的程序不需要发送短信的权限,而是利用存在漏洞的app的权限。 如何加固你的app 1.设置AndroidManifest.xml ,添加下面的属性 [url=http://p6.qhimg.com/t01fda51c5a04b7b2b6.png] 2.控制权限来防止类似事件发生 结语 在Android上,broadcast receivers是开发应用程序不可或缺的重要组件,但是当安全控制不恰当时,可能导致严重的后果。所以在安卓测试上,任何一个组件的测试都是必要的,因为小的问题往往带来大的隐患。
|