作者:伊戈尔·雅尔丁
O 弹震 利用组件中的漏洞 BASH 系统数 UNIX,允许远程执行命令。
BASH 是 Unix 环境中的命令解释器。命令是发送给解释器(shell)的一个动作或一组动作。由 SR Bourne 创建的 BASH(Bourne Again Shell)是这些程序中使用最广泛的,尽管还有其他程序,例如 csh、tesh、sh。在 Microsoft 环境中,本机解释器是 cmd.exe。
另一个重点是,shell 也是一个脚本解释器,可以被 Web 服务器上的应用程序调用,例如 Apache。
攻击
BASH 允许创建环境变量,供用户在需要时调用。还可以使用脚本自动调用环境变量。一个例子是创建一个接收带有名称的字符串的变量:
环境名称=Nicolas
回显“欢迎 $Name”
Shellshock(漏洞 CVE-2014-6271、CVE-2014-6277、CVE-2014-6278、CVE-2014-7169、CVE-2014-7186、CVE-2014-7187)允许环境变量中包含的该字符串包含无需调用变量即可执行的命令。
BASH 版本 1.14(自 1994 年起)至 4.3 均容易受到此缺陷的影响。尽管这个缺陷已经存在很久了,但它最近才被公开发现——因此无法保证这个缺陷没有被(或不会继续被)用于攻击。
与 SQLInjection 一样,此缺陷允许对手使用某些参数绕过解释器,从而导致 BASH 执行合法用户不希望执行的任意命令。在以下示例中,命令的唯一输出应该是“正常脚本命令”,但在受感染的 Bash 中,变量甚至在脚本的任何部分都没有被调用就被执行,并在屏幕上打印以下内容:
“警告”一词。
# 环境名称 = '() { :;}; echo 警告' bash -c “echo 正常脚本命令”
警告
普通脚本命令
NAME 变量从未被调用,但是其中的 echo 命令无论如何都会被执行。
可以通过多种方式利用此缺陷。只需声明变量即可执行其中的任何其他命令。在另一个例子中,可以使用系统上通常默认安装且不会被管理员删除的工具 Netcat 打开特定端口。
在以下示例中,脚本执行时会打开端口 7654,从而允许直接访问受感染主机上的 BASH。此攻击允许在用户不知情的情况下在系统后台自动访问 BASH。
# 环境名称 = '() { :;}; nc -lp 7654 -e /bin/bash&' bash -c “echo Normal”
正常
该函数的执行继续在最后打印单词“Normal”,但没有提及对 netcat 的调用。对于普通用户来说,如果只查看命令输出,一切正常,但是如果我们使用 netstat 检查系统开放的端口,我们会注意到端口 7654 已开放并等待连接。
# netstat –tupan | grep 7654
tcp 0 0 0.0.0.0:7654 0.0.0.0:*
收听 12846/nc
这使得 Shellshock 比 Heartbleed 的问题更大,因为后者读取服务器上的隐藏数据,而前者允许完全控制易受攻击的主机。 Shellshock 可以出现在两个不同且广泛使用的前端,例如 Web 服务器和嵌入式系统(例如无线路由器)。
一些公司已经确认他们的服务器受到该漏洞的攻击,例如雅虎,但据该公司自己称,并没有用户数据受到侵犯。
解决方案
虽然对于普通用户来说,这个缺陷并不是一个多么危险的问题,但对于公司来说,它却是一个极其严重的问题。业务服务通常由负责应用软件补丁和更新的系统管理员负责。这些专业人士并不总是有更新服务器的习惯,他们在事件发生很久之后才意识到自己遭到了黑客攻击。
几乎所有 Linux 发行版都已经修复了 Shellshock 漏洞,您只需要更新默认存储库并更新 Bash。
对于嵌入式设备,例如路由器、打印机、VoIP 电话,问题会稍微复杂一些。嵌入式设备的更新(和修复错误)取决于制造商提供的更新。这些更新并非适用于所有设备,旧型号在其使用寿命结束之前可能仍然容易受到这些类型的攻击。
总结
应采取以下措施来保护自己免受 Shellshock 的侵害:
– 立即使用以下命令检查您的 Bash 是否存在漏洞:
# env shock='() { :;}; echo VULNERABLE' bash -c “echo Kryptus.com”
如果命令输出是 VULNERABLE,则应该更新您的系统。
# env shock='() { (kryptus.com)=>\' bash -c “echo date”;猫回声; rm./echo
如果命令输出是当前日期,即使显示一些错误,您的系统也容易受到攻击。
– 根据发行版使用必要的命令更新系统:
基于 Debian 的系统
#apt-get 更新; apt-get install –only-upgrade bash
基于RedHat的系统
# yum 更新 bash -y
基于 Arch 的系统
#pacman -Syu
– 检查访问日志,查找任何对服务器的意外访问。
– 密切关注操作系统发行版和嵌入式设备的安全修复。
参考文献
https://shellshocker.net/
http://www.businessweek.com/news/2014-10-06/yahoo-says-no-data-stolen-in-shellshock-hack
https://cve.mitre.org/
https://www.debian.org/security/2014/
http://www.ubuntu.com/usn/
http://lwn.net/Alerts/CentOS/
https://securityblog.redhat.com/