无线通信新威胁!Realtek RTL8170C Wi-Fi 模块存在严重漏洞

专栏 - 资讯 发布于 2021-06-08 13:37:44 阅读 73 评论 0

网络安全研究人员在Realtek RTL8170C Wi-Fi 模块中发现一组新的严重漏洞,攻击者可以利用这些漏洞获得设备上的更高权限并劫持无线通信。攻击成功后将导致完全控制Wi-Fi模块,并在使用该模块的嵌入式设备的操作系统(Linux或Android)上进行潜在的root访问。

Realtek Wi-Fi模块严重缺陷

Realtek RTL8710C Wi-Fi SoC用于支持Ameba,这是一个 Arduino 兼容的可编程平台,配备外设接口。一般用于构建跨越农业、汽车、能源、医疗保健、工业、安全和智能家居领域的设备的各种物联网应用。

这些缺陷会影响所有使用该组件连接到Wi-Fi网络的嵌入式和物联网设备,并要求攻击者与使用RTL8710C模块的设备处于同一Wi-Fi网络上,或者知道网络的预共享密钥(PSK)。

调查结果是在2月份发现,当时分析发现Realtek RTL8195A Wi-Fi模块存在类似的弱点,其中最主要的是缓冲区溢出漏洞(CVE-2020-9395),这个漏洞允许在RTL8195模块附近的攻击者无需知道Wi-Fi 网络密码即可通过模块。

同样的是,在RTL8170C Wi-Fi模块的four-way handshake机制容易受到两个基于堆栈缓冲区溢出漏洞(CVE-2020-27301 和 CVE-2020-27302,CVSS 评分:8.0)的影响,攻击者可以通过此系统漏洞在使用此模块的WPA2 客户端上远程执行代码。

研究人员通过PoC验证了攻击者利用此漏洞的场景,他们伪装成一个合法的接入点,并向通过WPA2协议连接到它的任何客户机(又名请求者)发送一个恶意的加密组临时密钥(GTK)。

在PoC中,右侧窗口显示 “发送恶意加密GTK”

验证演示了堆栈溢出,最终将返回地址覆盖为无效地址 0x95f98179。这是一个“随机”地址,因为缓冲区经过 AES 解密,然而——由于攻击者完全了解所有加密参数(网络的 PSK 等),因此可以实现对返回地址的精确控制。

虽然目前还没发现利用此漏洞的已知攻击,而且在2021年1月11日之后发布了固件版本,但还是建议使用强大的私人 WPA2 密码,以防止在设备固件无法更新的情况下通过以上系统漏洞受到攻击。

缓冲区溢出

缓冲区是一块连续的计算机内存区域,可保存相同数据类型的多个实例。缓冲区可以是堆栈(自动变量)、堆(动态内存)和静态数据区(全局或静态)。缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。缓冲区溢出可以导致程序崩溃,更可以被不法分子利用跳转并执行恶意代码。比较严重的安全漏洞事件包括2003年8月的冲击波病毒、2014年4月报出的openssl“Heartbleed”(心脏滴血)漏洞,2015年1月的glibc库幽灵漏洞。根据CNNVD2021年5月30日周报显示,当周采集漏洞446个,其中缓冲区溢出错误一共59个,占比13.23%,排名第一。

防范缓冲区溢出

首先,编写代码时确保做边界检查,不要为接收数据预留相对过小的缓冲区,大的数组应通过malloc/new分配堆空间来解决,在将数据读入或复制到目标缓冲区前,检查数据长度是否超过缓冲区空间。同样,检查以确保不会将过大的数据传递给别的程序,尤其是第三方COTS(Commercial-off-the-shelf)商用软件库。

其次要严格要求代码编写规范,对很多开发人员来说,尽管谨慎编写了一个世纪,但是依旧存在很多代码漏洞。所以可以灵活利用一些代码查错工具来寻找人为产生的缓冲区溢出带来的漏洞。但对不同语言存在局限性,因此并不是万能的。

最稳妥的方式是通过静态代码分析来检测,一般静态代码分析工具都有适配不同语言的特点,而且因为缓冲区溢出导致系统安全漏洞,主要是由于开发人员在编写代码中缓冲区使用不当引起的,这种类型有共同的特征,就是通过简单的源代码静态分析手段可以检测出来,并且在开发阶段就能发现,因此这个时候进行漏洞修复是成本最低的。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!