Sharing More and Checking Less: Leveraging Common Input Keywords to Detect Bugs in Embedded Systems
论文信息
- 标题: Sharing More and Checking Less: Leveraging Common Input Keywords to Detect Bugs in Embedded Systems
- 作者: Libo Chen, Yanhao Wang, Quanpu Cai, Yunfan Zhan, Hong Hu, Jiaqi Linghu, Qinsheng Hou, Chao Zhang, Haixin Duan, Zhi Xue
- 发表时间: 2021年秋季
- 论文下载: https://www.usenix.org/system/files/sec21-chen-libo.pdf

摘要
论文指出,物联网(IoT)设备为我们的日常生活带来了极大的便利。然而,它们的广泛应用也放大了安全漏洞的影响。许多嵌入式系统的漏洞存在于其脆弱的Web服务中。现有的漏洞检测方法往往要么引入了较大的执行开销,要么误报和漏报较多,因此无法有效和高效地分析此类Web服务。
为此,Libo Chen 等人提出了一种新颖的静态污点检查解决方案 SaTC (Shared-keyword aware Taint Checking),用于高效检测嵌入式设备提供的Web服务中的安全漏洞。核心思想是,Web接口中的字符串字面量通常在前端文件和后端二进制文件之间共享,用于编码用户输入。通过提取前端文件中的常见关键字,作者们能够在后端定位输入入口,并利用有针对性的数据流分析来准确检测不受信任输入的危险使用。实验结果表明,SaTC 在39个来自六个主流厂商的嵌入式系统固件中发现了33个未知漏洞,其中30个漏洞被确认并分配了CVE/CNVD/PSV编号。相比当前最先进的工具 KARONTE,SaTC 在同样的测试集中发现了更多的漏洞,证明了其在嵌入式系统漏洞检测中的有效性。
1. 引言
论文指出,物联网设备带来了前所未有的连接性,推动了创新的服务和应用。然而,由于物联网设备的普及,漏洞的破坏性也进一步加剧,带来了安全风险。报告显示,57%的物联网设备容易受到中等或高危等级的攻击。
在这些物联网设备中,无线路由器和网络摄像头遭受攻击的比例最高。这主要是因为这些设备暴露了包含可利用漏洞的Web服务和网络服务。现有的方法无法有效分析嵌入式系统中的服务以检测漏洞。Libo Chen 等人发现,前后端之间复杂的交互和隐式的数据依赖性是现有方法的主要障碍。因此,他们提出了 SaTC,一种新颖的静态分析方法,能够跟踪用户输入在前后端之间的数据流,以精确检测安全漏洞。
2. 问题与方案概述
威胁模型
论文将研究目标聚焦于检测无线路由器和网络摄像头等两类物联网设备中的安全漏洞。这些设备通过协议(如MQTT和UPnP)提供便捷的Web服务和网络服务,常常成为家庭网络或本地网络的入口。攻击者通常会通过这些网络服务对设备进行攻击。
动机示例

论文通过Tenda AC18路由器的USB卸载功能,展示了一个命令注入漏洞。攻击者可以通过在 deviceName 参数中注入恶意命令,从而控制设备执行任意指令。现有的漏洞检测工具难以有效识别此类漏洞,例如动态方法(如模糊测试)无法覆盖所有可能的程序状态,而静态方法(如KARONTE)则会产生大量误报。因此,作者们认为需要一种能够精确识别后端程序中用户输入入口的工具,以进行有针对性的分析。
1 int sub_426B8() {
2 Register_Handler("GetSambaCfg",formGetSambaConf);
3 Register_Handler("setUsbUnload",formsetUsbUnload);
4 Register_Handler("GetUsbCfg",formGetUsbCfg);
5 }
6
7 int formsetUsbUnload(uint32_t input) {
8 uint32_t v1 = input;
9 void *cmd = WebsGetVar(input, "deviceName", &unk_F213C);
10 doSystemCmd("netctrl %d?op=%d,string_info=%s",...,cmd);
11 sub_2C43C(v1, "HTTP/1.0 200 OK\r\n\r\n");
12 sub_2C43C(v1, "{\"errCode\":0}");
13 return sub_2C984(v1, 200);
14 }
SaTC的创新点
论文的核心创新在于利用前后端共享的关键字来精准定位用户输入的处理函数。前端中的用户输入字段(如 deviceName)在后端中通常以相同或相似的形式出现,因此可以通过这些关键字将前端与后端连接起来,并对后端的输入处理过程进行有针对性的静态分析。
3. 输入关键字提取
SaTC从前端文件中提取可能的关键字。这些关键字可以分为两类:
- 参数关键字:用于标识用户输入的数据(如
deviceName)。 - 动作关键字:用于标识用户执行的动作(如
setUsbUnload)。
为了提取这些关键字,作者们利用正则表达式和抽象语法树(AST)解析HTML、XML和JavaScript文件,并通过过滤规则排除此类文件中的常见字符串。
4. 输入入口识别
SaTC通过匹配前端关键字与后端字符串引用,来定位后端程序中处理用户输入的函数调用。这些调用被视为输入处理的入口点,作为进一步静态分析的起点。同时,作者们设计了多种机制来识别隐式的输入入口,确保不会遗漏关键的输入处理代码。
5. 优化的污点分析
论文指出,传统的污点分析在嵌入式系统中效率低下,因此提出了以下优化:
- 粗粒度的污点传播:通过简化污点传播的方式,加快数据流分析的速度。
- 输入引导的路径选择:通过关键字匹配,减少路径搜索空间。
- 路径合并:通过路径合并技术,解决数据流分析中的路径爆炸问题。
6. 实验与结果
论文对39个嵌入式固件样本进行了实验,成功发现了33个未知漏洞,包括命令注入、缓冲区溢出和不正确访问控制漏洞。其中,30个漏洞已被CVE或CNVD系统确认。在与KARONTE的对比实验中,SaTC 在相同的测试集上发现了更多的真实漏洞,展示了其在嵌入式系统中的实用性和有效性。

贡献
论文的工作在以下几个方面做出了贡献:
- 提出了利用前后端共享关键字来定位后端二进制文件中数据入口的技术。
- 设计并实现了 SaTC,通过粗粒度的污点分析和路径优化,提升了嵌入式系统漏洞检测的效率。
- 在真实的固件样本上进行了评估,发现了多个未公开的漏洞,并与现有工具进行了有效的对比。
结论
论文提出的 SaTC 方法利用前后端共享的关键字,成功改进了嵌入式系统漏洞静态分析的精度和效率。为了推动该领域的进一步研究,作者们开源SaTC的源代码和实验数据。
1万+

被折叠的 条评论
为什么被折叠?



