程序员征服安全:分享与学习系列 - 操作系统命令注入

当应用程序允许用户向 Shell 输入内容,却未对输入字符串的有效性进行验证时,就可能发生操作系统命令注入攻击。这使得攻击者能够直接向托管应用程序的操作系统发送命令,并获得该应用程序所拥有的权限级别。
操作系统命令注入攻击即使是入门级或技术水平较低的黑客也能实施,这使其成为安全团队最常遇到的漏洞之一。幸运的是,有很多非常有效的方法可以防止此类攻击得逞。在本期节目中,我们将学习:
它们的工作原理
它们为何如此危险
如何部署防御措施来阻止它们。
攻击者如何利用操作系统命令注入?
攻击者发起操作系统命令注入攻击的第一步,是在应用程序中找到用户输入点。用户填写的表单通常是很好的切入点。更高明的攻击者甚至会利用 Cookie 或 HTTP 标头作为突破口,而这些几乎是每个应用程序或网站都会用到的。
第二步是确定托管该应用程序的操作系统。由于选择范围很小,通过反复试验即可轻松完成此阶段。大多数应用服务器要么是基于 Windows 的(通常无需区分具体版本),要么是某种 Linux 系统,也可能是 Unix。
随后,黑客会修改输入内容,将操作系统命令注入到看似无害的输入中。这会诱骗托管操作系统执行非预期的命令,并获得该应用程序所具备的权限。
例如,应用程序中的合法用户可以使用以下命令来查看文件内容,本例中为月度董事会会议记录。
exec("cat " + filename)
在我们的示例中,这将执行以下命令并将会议记录返回给用户。
$ ./cat MeetingNotes.txt
七月份会议共有三名执行委员会成员出席。会议讨论了新预算项目,但未采取任何行动或进行投票。
当攻击者在输入内容末尾添加额外命令(例如 Linux 中用于列出目录内容的命令)时,就会发生这种情况。在本例中,原始的显示会议记录的命令依然会执行,但恶意用户同时还能看到目录中的所有其他内容,并获知后续可用于操作系统命令注入攻击的其他命令。他们输入的是:
$ ./cat MeetingNotes.txt && ls
请改用以下内容:
七月份会议共有三名执行委员会成员出席。会议讨论了新预算项目,但未采取任何行动或进行投票。
MeetingNotes.txt
JuneMeetingNotes.txt
MayMeetingNotes.txt
format.c
misnull.c
notefault.c
trunc.c
writewhatwhere.c
如您所见,在这种情况下,黑客不仅看到了目录内容,还获得了一个可执行命令菜单,这意味着他们现在知道可以在主机操作系统上运行哪些命令。
为什么操作系统命令注入攻击如此危险?
允许用户绕过目标应用程序的既定用途,转而运行操作系统命令,这具有极高的风险。攻击者可以轻易执行破坏性操作,例如窃取机密数据或格式化整个服务器驱动器。攻击者的选择仅受限于操作系统允许的命令及其利用这些命令的创造力。
操作系统命令以与应用程序相同的权限级别运行。如果应用程序以管理员权限运行,那么一旦被黑客攻破,他们便能运行所有操作系统命令。
操作系统命令注入的攻击模式已广为人知并有据可查。存在漏洞的应用程序不仅容易受到专业黑客的攻击,也同样容易受到“脚本小子”的威胁。即使是技术水平很低的攻击者,也可以尝试通过复制粘贴操作系统命令来测试应用程序的反应。
如何通过操作系统命令注入的安全检查
有几种有效的技术可以阻止操作系统命令注入。第一步是确保应用程序仅以完成其功能所需的最低权限运行。这虽然不能完全防止攻击,但一旦发生入侵,可以将损失降至最低。
大多数编程语言和框架都为常见的操作系统操作(如列出目录内容、在硬盘上创建或读取文件)提供了 API 调用。消除环境中操作系统命令注入的绝佳方法是让所有应用程序使用这些 API 调用,而不是直接使用操作系统命令。
如果无法做到这一点,请在将用户输入用于操作系统命令之前对其进行验证。可以使用白名单来确保仅使用一小部分受信任的值。虽然从技术上讲也可以使用黑名单,但通常允许的命令远少于禁止的命令,因此白名单几乎总是更简单的选择。别忘了将有效的 POST 和 GET 参数以及常被忽视的用户输入向量(如 Cookie)包含在白名单中。
最后,如果没有可用的编程 API 且无法使用白名单,请使用清理库在将用户输入用于操作系统命令之前,对其中的任何特殊字符进行转义。
关于操作系统命令注入攻击的更多信息
如需深入了解,您可以查看 OWASP 关于 操作系统命令注入攻击的报告。您还可以通过 Secure Code Warrior 平台的免费演示 来测试您新学到的防御知识,该平台旨在培训网络安全团队成为顶尖的网络战士。要了解更多关于击败此漏洞及其他各类威胁的信息,请访问 Secure Code Warrior 博客。
在 AI 驱动的开发成果发布前实现有效治理
评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。
探索更多博客
获取有关安全编码、人工智能治理和软件风险管理的专家内容。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
在产品发布前确保 AI 驱动的开发安全
洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。



.avif)