如何防范及修复OS命令注入漏洞
2021-06-23 17:19:12 Author: www.secpulse.com(查看原文) 阅读量:163 收藏

什么是OS命令注入?

软件在构造OS命令时使用了外部输入的数据,如果没有对外部输入中可能影响OS命令的特殊元素进行过滤,或是过滤不充分/不正确,就有受到OS命令注入攻击的风险。

OS命令注入缺陷允许攻击者直接在操作系统执行各种命令,当缺陷存在于网页应用等无法直接访问操作系统的软件中时,会造成一些脆弱性问题。而当该缺陷存在于有高级权限的软件中时,攻击者可通过缺陷获得高级权限,从而造成极大的危害。

OS命令注入两种常见的子类型有哪些?

①应用程序通过用户输入的参数来构造OS命令。

例如,程序可能使用system(“nslookup [HOSTNAME]”)来运行nslookup命令,其中的HOSTNAME由用户输入。由于没有检查HOSTNAME中是否存在命令分隔符,攻击者可将想执行的命令通过分隔符加在HOSTNAME中,当系统执行完nslookup后就会执行攻击者的命令;

②应用程序将输入的整个字符串作为一个OS命令。

例如,通过exec([COMMAND])来执行命令,其中COMMAND由用户输入,此时攻击者可以通过命令分隔符注入命令。

OS命令注入漏洞会造成哪些后果?

关键词:执行未经授权的代码或命令; DoS:崩溃,退出或重启; 读取文件或目录; 修改文件或目录; 读取应用数据; 修改应用数据; 隐藏活动。

攻击者可以执行未经授权的命令,然后可以使用这些命令来禁用软件,或者读取和修改攻击者无权直接访问的数据。由于目标应用程序直接执行命令而不是攻击者,因此任何恶意活动似乎都来自应用程序或应用程序的所有者。

如何防范修补OS命令注入漏洞?

从架构和设计的角度来说:

①要用最小权限去运行程序,不要给予程序多余的权限,最好只允许在特定的路径下运行,可以通过明确的路径运行命令;

②尽可能使用库或框架:使用不允许此弱点出现的经过审核的库或框架,或提供更容易避免此弱点的构造。尽可能地使用库调用,而不是调用外部进程来完成所需功能。

③减少被攻击面:对于那些被用于生成待执行命令的数据,尽可能避免其被外部可控的数据污染。

从实现的角度来说:

虽然使用动态生成的查询字符串,代码或命令将控制和数据混合在一起是有风险的,但有时它可能是不可避免的。正确引用参数并转义这些参数中的任何特殊字符。最保守的方法是转义或过滤所有未通过极其严格的白名单的字符(例如不是字母数字或空格的所有内容)。如果仍然需要一些特殊字符,例如空格,则在转义/过滤步骤之后将每个参数包装在引号中;

如果只允许运行有限的命令,使用白名单方式过滤。

OS命令注入漏洞样例:

3.png

本文作者:天齐软件测评中心

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/161342.html


文章来源: https://www.secpulse.com/archives/161342.html
如有侵权请联系:admin#unsafe.sh