CC2541 SweynTooth BLE漏洞实测

SweynTooth hacker攻击蓝牙SoC时,人为设置错误的LL链路层CONNECT_REQ数据包回复给从机设备,导致从机设备蓝牙controller和host端处理异常。本文利用CC2541EVM,亲测蓝牙漏洞Invalid Connection Request (CVE-2019-19193)。

平台搭建

  • CC2541EVM (烧录SimplePeripheral固件, BLE-CC254x-1.5.0.16)

  • Nordic52840 usb dongle

  • Python2.7

  • Pycharm(选配)

  • Wireshark

Master python环境搭建

安装python2.7,配置环境变量(过程忽略,Bing搜索)。

1
2
pip install --upgrade pyserial
pip install --upgrade nrfutil

烧录NORDIC52840 USB固件(更新前请按下USB设备上的复位按键,引导bootloader)

测试平台已经就绪,在Windows命令行下运行脚本CC_connection_req_crash.py,需要设置usb设备的串口号,以及需要攻击的从机设备mac地址,如图所示。

1
python CC_connection_req_crash.py com13 78:04:73:B5:C7:28

可以看到红色字体已经提示从机出现了问题,从此再扫描不到该从机设备。

实现过程

设置主机端请求从机设备连接的connection interval值为0,该设置是SIG SPEC规范CONNECT_REQ数据包不允许的操作方式,通过python脚本模拟ble CONNECT_REQ数据包攻击从机广播设备。

脚本中用到scapy模块(不要与爬虫的scrapy混淆),该模块用于生成BLE协议数据包。

通过wrpcap(‘CC2540_connection_req_crash.pcap’, conn_request)保存CONNECT_REQ攻击包,我们用wireshark打开,可以看到连接CC2541的CONNECT_REQ数据包参数interval被人为设置为0,回复给CC2541。

攻击效果


(lcd显示的Adv 变为Disconnect状态,并未像蓝牙正常或异常断开后自动恢复到adv状态,此时CC2541已处于非广播模式)

在BLE连接的初始阶段,主机设备扫描从机设备的广播数据包,并发送一个连接请求数据包,其中包含诸如连接间隔和超时之类的相关参数。这两个参数分别控制从设备和主设备之间的数据包交换和超时。SIG规定它们的值必须为一个非零时间段(以毫秒为单位)。

但是,如果主设备发送无效的连接请求,且其字段间隔或超时都为零时,从设备将停止通告。在接收到无效的连接请求期间,BLE协议栈将连接请求失败事件发送到应用程序代码(bleGAPConnNotAcceptable),并且在收到该失败状态后,协议框架默认程序进入空闲状态,从而停止广播。

这就是该漏洞的攻击原理,同样,我们可以设置CONNECT_REQ timeout设置为0进行攻击,一样会造成设备停止广播。

漏洞影响

设备虽然受到攻击后不能再广播,但内置mcu功能不受影响,设备依然能按照设计的功能工作,只是蓝牙无法再工作。由于该漏洞攻击实施起来非常方便,该问题有可能被用于散播恶意诋毁竞品,达到打击竞品品牌的效应。

此次漏洞暴露了蓝牙测试认证的缺陷,攻击者采用非规范数据包对蓝牙设备进行欺诈攻击;不按规矩出牌,往往能取得意想不到的效果。

#「Wireless Inside 微信公众号 (原无线技术联盟微信公众号) 微信交流群」

助力IoT行业朋友打通短距离无线通信圈的行业小社区。
集高通,Broadcom,TI,Nordic,Dialog,ST,Silicon lab, NXP, AMBIQ等蓝牙芯片原厂技术,市场,销售
集华为,MTK,泰凌微,凌思微,盛源达,ASR,华普微,中颖电子,百瑞互联,Realtek 国产芯片原厂技术,市场,销售
集Arrow,北高智,迅通,世强,利尔达,科通,全科等一线原厂代理商技术,市场,销售
集小米,华米,绿米,涂鸦,雅观,百度,阿里,Oppo,Vivo,京东互联网公司,品牌客户,方案公司技术,市场,销售,创始人
集蓝牙认证机构,被动器件,射频公司,以及SIG大佬

申请流程:
① 因群人数已超过限制人,请先微信扫描以下微信二维码或添加Xcoder微信号(blecoder),添加微信时请将您的个人信息进行备注(名字 公司 职位),以便登记,同时也欢迎同行和我进行交流。
② 由于需要我逐个邀请入群,所以请大家耐心等待!谢谢理解与支持!