面向嵌入式CGI的命令注入漏洞挖掘研究
2023-04-13常天佑朱涛宋健谷广宇
常天佑 朱涛 宋健 谷广宇
摘 要: 嵌入式IoT设备系统种类多差别大,系统存在危险数据过滤不严格的风险大,攻击者可通过精心构造的恶意数据包获取系统的控制权。嵌入式系统的安全性已逐渐成为设备被广泛采纳的最大障碍。针对命令注入型漏洞与程序接收数据密切相关这一特征,本文通过对嵌入式通用网关接口(Common Gateway Interface,CGI)程序接收的数据进行数据流分析,使用污点分析技术研判程序接收的数据是否能够不经无害处理而到达系统敏感函数,达到检测CGI程序是否存在命令注入漏洞的目的。
关键词: CGI; 嵌入式; 污点分析; 漏洞挖掘
中图分类号:TP313.3 文献标识码:A 文章编号:1006-8228(2023)04-01-04
Abstract: Embedded IoT devices have many different kinds of systems, and there is a high risk that the system is not strictly filtered with dangerous data. Attackers can gain control of the system through carefully constructed malicious data packets. Security of embedded systems is emerging as the biggest barrier to widespread adoption. In view of the feature that the command injection vulnerability is closely related to the data received by the program, the data flow received by the embedded common gateway interface (CGI) program is analyzed, and the taint analysis technique is used to determine whether the data received by the program can reach the system sensitive function without harmless processing. The purpose of detecting whether the CGI program has command injection vulnerability is achieved.
Key words: CGI; embedded; taint analysis; vulnerability mining
0 引言
近年來,智能制造,智能家居,智慧医疗等智能化应用推动了越来越多的智能化设备接入互联网,在IoT Analytics研究报告中预计,到2025年,将有大约270亿台物联网设备通过网络互联,这些网络互联的物联网设备大部分都采用嵌入式系统。未来物联网嵌入式设备的应用范围将不断被拓宽,随之而来的是大规模安全漏洞[1-4]的出现,这一趋势给物联网的发展带来极大的挑战。
据360公开安全研究报告显示,与IoT设备相关的漏洞增长率比漏洞整体增长率高出14.7%[5]。相关研究发现,小而精、低功耗是IoT嵌入式设备追求的目标,因而导致缺少完善的安全机制和防护手段,IoT嵌入式设备的安全隐患逐渐成为其被广泛采纳的最大障碍。在物联网设备入网前和入网后,发现漏洞并及时修复漏洞,可以保障物联网设备的安全性。因此,研究IoT嵌入式系统的漏洞挖掘具有极为重要的学术意义和实际应用价值。
针对嵌入式设备的漏洞挖掘是当前网络安全的研究热点之一。已有的研究如基于源代码相似性检测,是根据已知漏洞代码特征匹配进行大规模漏洞挖掘[6-8],但这种漏洞挖掘需要提供程序源代码。COSTIN等在文献[9]中提出使用静态分析方法,根据已知漏洞特征对大规模固件进行漏洞挖掘,该方法对已知漏洞的检测有一定的效果,但是无法检测到未知的漏洞。学术界比较推崇的是符号执行[10],符号执行分为动态符号执行和静态符号执行,它能够以尽可能少的测试用例达到一定的代码覆盖率,但符号执行面临路径空间爆炸和状态空间爆炸问题[11],它的开销非常大。工程界比较推崇基于fuzzing的模糊测试技术,由于嵌入式系统无论在带宽处理还是计算资源上都远低于传统PC系统,Fuzzing这种在传统PC领域非常成熟的技术对带宽资源和计算资源要求都非常高,而仿真嵌入式系统是一件具有挑战的事情,仿真环境通常对系统配置的依赖较多,嵌入式设备的多样性使得仿真难以具备通用的配置。CHEN等在文献[12]提出基于已知特征进行系统级仿真环境漏洞检测的方法。由于仿真环境对系统配置的依赖较多,因而该实验证明了嵌入式设备的多样性会使得仿真难以具备通用的配置。在NDSS 2016上推出一个开源工具Firmdyne[13],其在虚拟嵌入式系统方面做出较大的贡献,但该工具仅适用部分品牌路由器系统的虚拟复现。
本文提出了基于污点分析的嵌入式CGI程序命令注入漏洞挖掘方法,采用污点分析技术研判程序接收的数据是否能够不经无害处理而到达系统敏感函数,以此检测出CGI程序是否存在命令注入式漏洞。实验结果表明本文提出的方法能够有效挖掘嵌入式CGI程序的命令注入式漏洞。
1 CGI程序的污点分析技术
1.1 CGI程序运行原理
CGI是Web服务器运行时外部程序的规范,按照CGI编写的程序可扩展服务器功能。CGI程序运行在HTTP服务器中,为HTTP服务器与其他第三方应用程序之间提供数据交换手段。程序的大部分采用C语言编写,通过系统函数调用来控制设备,以此达到灵活高效又能操控设备的目的。
如图1所示,Web服务器发送HTTP请求Request到CGI进程,CGI进程把HTTP请求的Header设置为进程的环境变量。HTTP请求的Body正文设置为进程的标准输入,CGI进程的标准输出作为HTTP数据包响应Web服务器的请求,这样CGI程序获取浏览器参数在完成业务逻辑运算或执行相关动作后返回浏览器。其中环境变量是指 CGI 程序定義的一组环境变量,通过环境变量可传递数据。常用CGI程序环境变量如表1所示。
根据REQUEST_METHOD变量值可判断CGI请求所采用的请求方法,以决定是通过Stdin还是通过环境变量QUERY_STRING获取客户端传输数据。当使用ISINDEX查询或FORM表使用GET方法时,可以通过QUERY_STRING环境变量获取CGI程序URL中″?″之后的数据;当环境变量METHOD为POST时,CGI 程序通过标准输入STDIN 读取数据获取POST表单信息。通过CONTENT_LENGTH环境变量获取获取传输数据的字节数,通过CONTENT_TYPE环境变量获取传输数据的编码类型。CGI程序通过函数environ可以获得所有的环境变量及其值,通过函数getenv可以获得指定环境变量的对应值。
1.2 CGI程序的污点分析思路
污点分析作为数据流分析的实践,是漏洞挖掘的一种有效方法[14],它标记不可信数据为污点数据,通过数据流分析的方法,监控污点数据在程序中的传播以判断是否存在命令执行、信息泄露等违反安全的操作。本文采用污点分析的方法,通过分析CGI程序接收的HTTP请求数据包能否以不受限制的方式传播到系统敏感函数,来研判CGI程序是否存在命令注入漏洞。污点分析可以抽象成三元组
如图2所示,CGI程序通过getenv函数获取环境变量的值,该数据值作为程序接收的数据是数据流分析的关键。另外Body内容作为程序标准输入的数据也是数据流分析的重点对象。这些数据作为污点分析抽象三元组的source污染源部分,被视为外部引入的不信任数据。sink污点汇聚点代表直接产生危险的敏感操作,对于嵌入式CGI程序,重点关注system-like此类系统敏感函数。
如图3所示,system-like系统调用函数的参数作为污点汇聚点是污点分析的最终节点。接下来CGI程序的污点分析就是分析程序中环境变量值和标准输入值是否能够不经无害处理传播到污点汇聚点,即system-like函数参数。如果能,说明程序能够产生命令注入式安全问题,否则不存在命令注入式安全问题。
1.3 CGI程序的污点分析算法
污点分析算法作为系统的核心,通过解析环境变量和输入数据进行污染源的识别;通过污染源更新和标记更新进行污点标记的传播;通过解析系统函数参数进行汇聚点的识别。最后以汇聚结点是否检测到污点标记来判断程序是否存在命令注入式安全问题,算法如下。
污点分析算法以CGI程序作为输入,利用IDA分析引擎反汇编出程序指令集,识别污点输入源函数,汇聚结点函数,然后针对每一条指令进行污点标记和污点更新,最后以汇聚结点是否检测到污点标记来判断程序是否存在命令注入式安全问题。
2 实验分析
为验证本文提出方法的有效性,本文在angr工具的基础上实现原型系统,使用IDA Pro脚本反编译解析CGI程序。
2.1 实验环境设置
实验采用Linux虚拟机,配置intel I7 CPU,内存16G,磁盘64G,操作系统为Ubuntu18.04,完成CGI程序污点源识别、污点标记传播,汇聚点识别等实验。
2.2 实验对象选择
通过固件下载和硬件读取的方式收集多个厂家共38个嵌入式设备的CGI程序,详见表2。选取以下CGI程序作为测试集来进行实验分析,以此验证本文方法的可行性和有效性。
2.3 实验可行性测试
本文选取DIR-815_A1_FW:v1.02b06固件的CGIBIN程序作为测试对象进行分析,该程序存在CNVD-2018-01084远程命令注入式漏洞。利用binwalk提取固件中的CGIBIN程序,在IDA pro7.5中反编译结果如图4所示。
原型系统每执行一条程序指令均进行污点传播标记,部分污点传播记录如图5所示。
最终原型系统发出了警告,经分析可以看到程序在0x40DF78处引发了漏洞,如图6所示。
通过上述实验结果,能够发现DIR-815_A1_FW:v1.02b06固件中的CGI程序存在命令注入式漏洞,同时在测试其他的CGI程序时具有类似的结果,验证了本文提出的方法是可行的和有效的。
3 结束语
针对IoT嵌入式系统漏洞突出,人工手段难以应对大量的、类型多样IoT嵌入式系统的漏洞挖掘,本文针对嵌入式CGI程序命令注入此类典型漏洞,首先对CGI程序的工作原理和环境变量进行分析,然后重点介绍了CGI程序污点分析的思路并设计污点分析的算法,最后通过实验验证本文提出的方法能够有效挖掘嵌入式CGI程序的命令注入漏洞。
参考文献(References):
[1] HO G, LEUNG D, MISHRA P, et al. Smart locks: Lessons for securing commodity internet of things devices[C]//Proceedings of the 11th ACM Asia Conference on Computer and Communications Security. New York: ACM,2016:461-472
[2] GARTNER. Internet of things (IoT) market[EB/OL].[2017-07-10].https://www.gartner.com/newsroom/id/3598917.
[3] CONSTANTIN L. Hackers found 47 new vulnerabilities in 23 IoT devices at DEFCON [EB/OL]. [2017-05-23].http://www.Csoonline.com/article/3119765/security/hackers-found-47-new-vulnerabilities-in-23-iot-devices-at-defcon.html.
[4] NAWIR M, AMIR A, YAAKOB N, et al. Internet of things(IoT): Taxonomy of security attacks[C]//2016 3rd International Conference on Electronic Design.Piscataway:IEEE,2016:321-326
[5] 360,典型IoT設备网络安全分析报告,2021
[6] LI H, KWON H, KWON J, et al. CLORIFI: software vulnerability discovery using code clone verification[J]. Concurrency and Computation Practice and Experience,2016,28(6):1900-1917
[7] 甘水滔,秦晓军,陈左宁,等.一种基于特征矩阵的软件脆弱性代码克隆检测方法[J].软件学报,2015,26(2):348-363
[8] LI Z, ZOU D, XU S, et al. VulPecker: an automated vulnerability detection system based on code similarity analysis[C]//Conference on Computer Security Applications. Los Angeles: ACM,2016:201-213
[9] COSTIN A, ZADDACH J, FRANCILLON A, et al. Alarge-scale analysis of the security of embedded firmwares[C]//Proceedings of the 23rd USENIX conference on Security Symposium. Berkeley: USENIX Association,2014:95-110
[10] Libo C, Quanpu C, Zhi X.Sharing More and Checking Less: Leveraging Common Input Keywords to Detect Bugs in Embedded Systems[C]//USENIX Security,2021
[11] 叶志斌,严波.符号执行研究综述[J].计算机科学,2018
[12] CHEN D D, WOO M, BRUMLEY D, et al. Towards automated dynamic analysis for linux-based embedded firmware[C]//Proceedings of Network and Distributed Systems Security Symposium.Reston:ISOC,2016:1-16
[13] Chen D D, Woo M, Brumley D, et al. Towards Automated Dynamic Analysis for Linux-based Embedded Firmware[C]//NDSS,2016
[14] 王蕾,李丰,李炼,等.污点分析技术的原理和实践应用[J].软件学报,2017,28(4):860-882
作者简介:常天佑(1992-),男,河南遂平人,研究生,助理工程师,主要研究方向:网络安全。