【缺陷周话】第6期:命令注入

栏目: 编程工具 · 发布时间: 6年前

内容简介:代码审计是使用静态分析发现源代码中安全缺陷的方法,能够辅助开发或测试人员在软件上线前较为全面地了解其安全问题,防患于未然,因此一直以来都是学术界和产业界研究的热点,并且已经成为安全开发生命周期 SDL 和 DevSecOps 等保障体系的重要技术手段。360代码卫士团队基于自主研发的国内首款源代码安全检测商用工具,以及十余年漏洞技术研究的积累,推出“缺陷周话”系列栏目。每周针对 CWE、OWASP 等标准中的一类缺陷,结合实例和工具使用进行详细介绍,旨在为广大开发和安全人员提供代码审计的基础性标准化教程。

【缺陷周话】第6期:命令注入

代码审计是使用静态分析发现源代码中安全缺陷的方法,能够辅助开发或测试人员在软件上线前较为全面地了解其安全问题,防患于未然,因此一直以来都是学术界和产业界研究的热点,并且已经成为安全开发生命周期 SDL 和 DevSecOps 等保障体系的重要技术手段。

360代码卫士团队基于自主研发的国内首款源代码安全检测商用工具,以及十余年漏洞技术研究的积累,推出“缺陷周话”系列栏目。每周针对 CWE、OWASP 等标准中的一类缺陷,结合实例和 工具 使用进行详细介绍,旨在为广大开发和安全人员提供代码审计的基础性标准化教程。

1、命令注入

命令注入指应用程序所执行命令的内容或部分内容源于不可信赖的数据源时,程序本身没有对这些不可信赖的数据进行正确、合理的验证和过滤,导致程序执行了恶意命令。在 JAVA 应用程序中,敏感函数的参数如 Runtime.getRuntime().exec(Stringcommand) 中的 command 参数,该参数可为 os 命令,如果该参数可由用户控制,则极易造成命令注入。

本文以JAVA语言源代码为例,分析命令注入产生的原因以及修复方法。详见 CWE ID 77: Improper Neutralization of Special Elements used in a Command (‘Command Injection’)(http://cwe.mitre.org/data/definitions/77.html)。

2、命令注入的危害

命令注入利用应用程序的输入可以执行一些特殊的 os 命令,例如:使用 cpuinfo 命令查看系统信息,使用 shutdown命令关闭服务器。从2018年1月至10月,CVE中共有 205 条漏洞信息与其相关。部分漏洞如下:

CVE 漏洞概述
CVE-2018-0714 QNAP QTS 是中国威联通(QNAP Systems)公司的一套 Turbo NAS 作业系统。该系统可提供档案储存、管理、备份,多媒体应用及安全监控等功能。Helpdesk 是其中的一个帮助台程序。 QNAP QTS 中的 Helpdesk 1.1.21 及之前版本存在命令注入漏洞。远程攻击者可利用该漏洞在受影响的应用程序中运行任意命令。
CVE-2018-10900 Network Manager VPNC plugin (networkmanager-vpnc) 是一款支持连接 Cisco VPN 的虚拟网络管理器。Network Manager VPNC 插件 1.2.6 之前版本中存在安全漏洞,该漏洞源于换行字符可以被用来将 Password helper 参数注入到配置数据中并传入到 VPNC。攻击者可利用该漏洞以 root 权限执行命令。
CVE-2018-1000189 CloudBees Jenkins 是由美国公司 CloudBees 开发的一套基于Java 开发的持续集成工具,主要用于监控持续的软件版本发布/测试项目以及一些定时执行的任务。Absint Astree Plugin 是其中一个静态程序分析插件。CloudBees Jenkins Absint Astree Plugin 1.0.5 及之前版本中的 AstreeBuilder.java 文件存在命令执行漏洞。远程攻击者可利用该漏洞执行命令。
CVE-2018-1335 从 Apache Tika 版本 1.7 到 1.17,客户端可以将精心设计的头文件发送到 tika-server,该头文件可用于将命令注入运行 tika-server 的服务器的命令行。此漏洞仅影响在对不受信任的客户端开放的服务器上运行 tika-server 的漏洞。

3、示例代码

示例源于 Samate Juliet Test Suite for Java v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE78OSCommandInjectionProperty01.java。

3.1 缺陷代码

【缺陷周话】第6期:命令注入

上述示例代码在第30行使用 getProperty() 函数获取了用户的账户名称,在第43行将获取的账户名称和变量 osCommand 进行拼接,直接执行了拼接的结果。攻击者可在用户的账户名称中存入特殊的 os 命令进行操作,例如删除文件,关闭主机等命令,从而造成命令注入。

使用360代码卫士对上述示例代码进行检测,可以检出“命令注入”缺陷,显示等级为高。如图1所示:

【缺陷周话】第6期:命令注入

图1 命令注入检测示例

3.2 修复代码

【缺陷周话】第6期:命令注入

在上述修复代码中,在第28行改为直接对变量 data 进行赋值,使敏感函数的参数值不由用户控制,当程序执行 exec() 函数时,参数来源于程序内部,这样就避免了命令注入。

使用360代码卫士对修复后的代码进行检测,可以看到已不存在“命令注入”缺陷。如图2:

【缺陷周话】第6期:命令注入

图2:修复后检测结果

4、如何避免命令注入

要避免命令注入,需要注意以下几点:

  • 程序对非受信的用户输入数据进行净化,删除不安全的字符。
  • 创建一份安全字符串列表,限制用户只能输入该列表的数据。
  • 不要让用户直接控制eval()、 esec()、 readObject() 等函数的参数。
  • 使用源代码静态分析工具,进行自动化的检测,可以有效的发现源代码中的命令注入问题。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

我知道他想看什么

我知道他想看什么

沙建军 / 中信出版社 / 2018-1 / 48.00

社交媒体迅速发展、信息快速迭代、时间碎片化;大数据、智能终端、物联网横空出世;移动支付、网红经济和传统营销失效,这些都让这个时代的媒体、内容、渠道、产品之间的边界越来越模糊,也从根本上改变了营销的逻辑,内容营销从热词变成趋势,变成营销的底层思维。未来一切都是媒体,形式也是内容。 本书作者通过对国内外36个内容营销的新近案例的故事化描述和透彻分析,提出“组织媒介化”“营销内容化”“内容情趣化”......一起来看看 《我知道他想看什么》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试