0x01 基本介绍

[1]本地拒绝服务漏洞基本介绍

1) 漏洞位置:

处理getIntent()的intent附带的数据

2) 漏洞触发前提条件:

getIntent()的intent附带空数据、异常或畸形数据;

处理getXXXExtra()获取的数据时没有进行异常捕获;

3) 漏洞原理:

Android系统中提供了Intent机制来协助应用间的交互与通讯,其负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,系统则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。调用的组件在处理Intent附加数据的时候,没有进行异常捕获,因此当处理空数据、异常或者畸形数据时,导致应用崩溃。

[2]Drozer基本使用方法介绍

(参考来源:http://drops.wooyun.org/tips/2997)

安装

1) windows安装 下载:

https://www.mwrinfosecurity.com/products/drozer/community-edition/

在Android设备中安装agent.apk:

>adb install agent.apk

或者直接连接USB把文件移动到内存卡中安装

2) *inux安装(Debian/Mac)

1
2
3
4
5
6
$ wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
$ sh setuptools-0.6c11-py2.7.egg
$ easy_install --allow-hosts pypi.python.org protobuf
$ easy_install twisted==10.2.0
$ easy_install twisted ./drozer-2.3.0-py2.7.egg
$ drozer        //运行测试

下面介绍三种方法运行

1) USB方式

1
2
3
>adb forward tcp:31415 tcp:31415        //adb目录下运行次命令
选择drozer>Embedded Server>Enabled
>drozer.bat console connect     //在PC端drozer目录下运行此命令

2) Wifi方式(常用)

1
>drozer.bat console connect --server 192.168.1.12:31415  //在PC端执行192.168.1.12为android端ip和端口

3) Infrastructure Mode 这种模式涉及到三个通信方,drozer server、drozer agent(Android 设备中)与drozer console。

其中server与agent,server与console需要网络互通。这种模式的好处是你不需要知道android设备的ip,

agent与console的ip段可以隔离的,并且可以支持一个server对应多个设备的操作。

>drozer.bat server start

在Android设备上新建一个New Endpoint,修改配置Host为PC server端ip,并且启用Endpoint

1
>drozer console connect --server 192.168.1.2:31415      //192.168.1.2为server端ip和端口

使用基本操作


0x02 测试流程(案例)

分享一个最近挖的教育技术服务平台的拒绝服务漏洞测试流程

(http://www.wooyun.org/bugs/wooyun-2010-0146074)

 

首先查看Activity暴露组件:

然后测试相关组件(向组件发送空的intent,查看客户端app是否崩溃退出)

效果:

xmpp

 

应用程序进程崩溃


0x03 补充(Intent scheme URL attack)

  • 拒绝服务远程攻击(IntentScheme)

利用思路(参考地址:http://drops.wooyun.org/papers/2893):

在Android上的Intent-based攻击很普遍,这种攻击轻则导致应用程序崩溃,重则可能演变提权漏洞。当然,通过静态特征匹配,Intent-Based的恶意样本还是很容易被识别出来的。 然而最近出现了一种基于Android Browser的攻击手段——Intent Scheme URLs攻击。这种攻击方式利用了浏览器保护措施的不足,通过浏览器作为桥梁间接实现Intend-Based攻击。相比于普通Intend-Based攻击,这种方式极具隐蔽性,而且由于恶意代码隐藏WebPage中,传统的特征匹配完全不起作用。除此之外,这种攻击还能直接访问跟浏览器自身的组件(无论是公开还是私有)和私有文件,比如cookie文件,进而导致用户机密信息的泄露。

参考案例:

http://www.wooyun.org/bugs/wooyun-2010-0123649(当当Android客户端拒绝服务漏洞)

示例代码:

 

效果:

Crash日志:


0x04 修复建议

  1. 将不必要的导出的组件设置为不导出
    设置export为false
  2. intent处理数据时进行捕获异常通过Intent.getXXXExtra()获取的数据时进行以下判断,以及用try catch方式进行捕获所有异常,以防止应用出现拒绝服务漏洞:

    1) 空指针异常;

    2) 类型转换异常;

    3) 数组越界访问异常;

    4) 类未定义异常;

    5) 其他异常;