Blueborne - Linux 内核 Bluetooth 子系统的远程拒绝服务(DoS)安全漏洞 - CVE-2017-1000251
背景信息
逻辑链路控制和适配协议(L2CAP)在 Bluetooth(蓝牙)堆栈中的数据链路层工作,它为上层协议(如蓝牙)提供连接多路复用、分段及数据包重新组合的服务。上层协议会使用它来接收和发送客户端的 L2CAP 数据包。
Linux 的 Bluetooth 子系统处理来自于客户端的待配置数据包的代码中存在一个堆栈缓冲区溢出的问题。一个客户端可以发送一组随意的 L2CAP 配置参数,它们会被保存在一个堆栈的缓冲对象中。这些参数可能会超过缓冲区的长度,从而造成对相邻的内核堆栈内容的覆盖。在建立一个蓝牙连接时,这种情况会在进行授权验证前发生。因此,如果没有启用内核堆栈保护功能(CONFIG_CC_STACKPROTECTOR=y),一个未授权的用户可以利用这个安全漏洞,在通过蓝牙连接到一个系统时对系统进行破坏,并可能在受影响的系统上运行恶意代码。
致谢
受影响的产品
- Red Hat Enterprise Linux 6
- Red Hat Enterprise Linux 7
- Red Hat Enterprise MRG 2
不会受到影响的产品
- RHEL Atomic Host。虽然它带有存在漏洞的 Bluetooth 模块,但它没有 bluetoothd 服务,因此不会受到此安全漏洞的影响。
- Red Hat Enterprise Linux 7 s390x 版没有存在漏洞的 Bluetooth 模块,因此不会受到此安全漏洞的影响。
- Red Hat Enterprise Linux 5 在内核中使用早期版本的、没有此漏洞的 Bluetooth 子系统,因此不会受到此安全漏洞的影响。
安全攻击描述及可能的影响
诊断您的系统
如果您的系统中存在蓝牙硬件,而且 Bluetooth 服务被启用并运行,则可能会受此漏洞的影响。特别是,此漏洞存在于 bluetooth.ko 内核模块代码中,如果系统加载了此模块,则系统就可能会存在此安全漏洞。
采取行动
受影响产品的更新
现可为运行 Red Hat Enterprise Linux 7.2 或更高版本的用户提供 kpatch。 请创建一个支持问题单以便获取 kpatch。
有关 kpatch 的详情:RHEL 7 是否支持实时提供内核补丁(kpatch)?
产品 | 软件包 | 公告 |
---|---|---|
Red Hat Enterprise Linux 7 | 内核 | RHSA-2017:2679 |
Red Hat Enterprise Linux 7 | kernel-rt | 待发布 |
Red Hat Enterprise Linux 7.3 Extended Update Support* | 内核 | RHSA-2017:2680 |
Red Hat Enterprise Linux 7.2 Extended Update Support* | 内核 | 待发布 |
Red Hat Enterprise Linux 6 | 内核 | RHSA-2017:2681 |
Red Hat Enterprise Linux 6.7 Extended Update Support* | 内核 | RHSA-2017:2682 |
Red Hat Enterprise Linux 6.6 Advanced Update Support** | 内核 | 待发布 |
Red Hat Enterprise Linux 6.5 Advanced Update Support** | 内核 | 待发布 |
Red Hat Enterprise Linux 6.4 Advanced Update Support** | 内核 | RHSA-2017:2683 |
Red Hat Enterprise Linux 6.2 Advanced Update Support** | 内核 | 待发布 |
Red Hat Enterprise MRG 2 | kernel-rt | 待发布 |
**需要有效的 AUS 订阅才可获得在 RHEL AUS 中的这个补丁。
补救操作
通常情况下,在一个系统上,如果内核堆栈内存被破坏,攻击者就可以轻松地利用此问题以内核 ring 0(如 root)的权限运行任意代码。RHEL 内核使用 gcc 编译时间参数来保护内存不会被破坏。gcc -fstack-protector 选项在一个程序函数的开始以及返回地址前增加了一个 canary 值。-fstack-protector-strong 会把 canary 保护扩展到本地堆栈变量,包括任何类型和长度的数组。在把数据复制到这些堆栈变量时,内核会验证 canary 值来检测任何可能的内存破坏,并可以通过产生一个内核 panic 以阻止可能的安全攻击。
# echo "install bnep /bin/true">> /etc/modprobe.d/disable-bluetooth.conf
# echo "install bluetooth /bin/true">> /etc/modprobe.d/disable-bluetooth.conf
# echo "install btusb /bin/true">> /etc/modprobe.d/disable-bluetooth.conf
对于 RHEL 6,以 root 身份运行以下命令:
# rmmod bnep
# rmmod bluetooth
# rmmod btusb
Ansible Playbook
Comments