软件注入缺陷典型案例

2015-01-07 11:29冯济舟
航天标准化 2015年4期
关键词:文件名合法命令

冯济舟

(中国电子科技集团公司第三十八研究所,安徽合肥230088)

软件注入缺陷典型案例

冯济舟

(中国电子科技集团公司第三十八研究所,安徽合肥230088)

软件测试是能力成熟度模型集成(CMMI,CapabilityMaturityModelIntegration)中验证(Ver,Verification)与确认(Val,Validation)过程域的重要表现形式,是保障软件可靠性的重要手段。近年来,随着软件规模的增大和复杂程度的不断提高,软件测试技术也不断发展,现有测试方法已能够确保导致系统崩溃问题的测试输入的覆盖。然而程序设计语言本身固有的特性使得许多漏洞无法在编译、运行阶段被发现,且这些固有漏洞在不导致系统崩溃的情况下,可以通过非法注入篡改用户权限的形式威胁系统安全。面对此种软件安全的新形势,开发人员及测试人员由于缺乏此方面的经验和认识,造成无法意识到此问题带来的隐患,而忽略此问题的测试及修正。

本文根据实际工程经验对此缺陷在实践中的具体表现形式进行归纳和总结,并针对每种表现形式以具体代码实例进行故障模式分析,给出补偿措施分析,这对提高软件质量具有重要作用。

1 命令注入导致恶意代码破坏系统

故障模式:网络应用程序从socket套接字中接收用户自定义参数,并且使用这些参数启动进程时,如果放置未经验证的用户输入命令数据到一个执行请求中,用户数据就可以直接影响执行代码,造成用户可以在服务器上使用应用程序特权运行允许执行破坏系统的自定义恶意代码的情况。系统直接执行用户人工输入的参数para,当输入内容为“&shutdown-s-f-d p”时,无论该用户权限是否合法,都将导致服务器关机。

补偿措施分析:对于命令注入缺陷,需要关注程序代码中接收用户自定义参数para,以及定义的用户可使用合法、有效命令参数集{A}。程序只需验证输入的用户命令参数para在系统规定的用户可使用合法、有效命令参数集{A}中(cmd_para∈{A}),即可避免命令注入问题。以故障模式分析的案例为例,在系统执行用户人工输入参数之前,判断所输入参数是否符合所定义用户可使用合法、有效命令参数规则,以此判断该命令是否执行,从而避免非法用户引起的服务器关机事件。

2 文件名注入导致获得访问权限

故障模式:网络应用程序从socket套接字中接收来自用户自定义文件名或路径用于应用程序文件处理时,应用程序在服务器文件系统中存储一些以用户信息名称作为文件名的用户数据,如果未验证的数据出现在文件名中,那么用户就能够获得访问系统上任何文件的权限,并可以向应用系统注入特殊准备的恶意数据。当用户提供“c:\windows\system.ini”作为信息名称和一些特别准备的配置文件内容作为信息内容时,那么在保存这些信息后,系统.ini文件可能被篡改并保存一些危险内容。

补偿措施分析:对于文件注入缺陷,需要关注程序代码中从socket套接字中接收到的用户自定义文件名name_para,以及系统定义的用户合法、有效文件名及路径集{A}。程序只需验证输入的用户自定义文件名name_para在系统规定的

用户可使用合法、有效文件名或路径集{A}中(name_para∈{A}),即可避免文件名注入问题。以故障模式分析的案例为例,当用户人工输入内容“c:\windows\system.ini”时,系统会根据validate函数中定义的用户可使用的合法、有效文件名和路径,判断该命令是否执行,从而避免非法用户引起的文件名注入问题。

3 SQL注入导致恶意控制数据库

故障模式:当应用程序使用用户提供数据或未经验证数据源来构建SQL查询,并且在其使用之前不对这些数据进行验证时,用户可能按照开发者不希望的方式改变SQL语句,从而完全控制数据库甚至在系统上执行命令。当用户人工输入登录名称:admin'or'1'='1以及登录口令:123456'or'1'='1时,生成的SQL语句则变为SELECT user_id,user_class,rights FROM users WHEREuser_name='admin'or'1'='1'and password='123456'or'1'='1',因为where条件始终为真,所以尽管攻击者没有提供任何必要的许可信息,仍将成为用户表中的最高权限用户而得到所有用户的信息。

补偿措施分析:对于SQL注入缺陷,需要关注程序代码中从socket套接字中接收到的用户自定义的输入SQL参数,通过获得用户数据,对用户输入的SQL参数的合法性和有效性进行判断,即可避免SQL注入问题。以模式分析的案例为例,当攻击者人工输入登录名称:admin'or'1'='1以及登录口令:123456'or'1'='1时,通过获得用户数据,而不是直接创建一个包含参数值的文字查询,从而避免非法用户引起的SQL注入问题。

本文根据实际工程经验描述了软件注入缺陷在实践过程中的具体表现形式、故障模式及补偿措施,不仅可以为开发人员提供避免编程时引入软件注入缺陷漏洞的参考,也可以作为测试人员设计测试方案的一种方法,这对提高软件系统的可靠性具有积极意义。

[1]万江平,孔学东,杨建梅.集成能力成熟度模型(CMMI)的研究[J].计算机应用研究,2001,(10).

[2]李兴兵,李孟军,谭跃进.军用CMMI模型的建立初探[J].兵工自动化,2003(6).

冯济舟(1984年—),男,硕士,工程师,现从事软件工程化和软件测试工作。

猜你喜欢
文件名合法命令
只听主人的命令
安装和启动Docker
右键调用多重更名更方便
Excel轻松提取文件名
合法外衣下的多重阻挠
把我的秘密藏起来
西班牙推动废除合法卖淫
移防命令下达后
解析Windows10的内部命令
报告