一、ShellShock对Web Server的影响
下述文字节选自:
http://codeway.co/2014%E5%B9%B49%E6%9C%88%E6%9B%9D%E5%87%BA%E7%9A%84bash-shellshock%E6%BC%8F%E6%B4%9E/
Bash曝出在调用环境变量设置命令或者接口时,可以任意执行Bash命令语句,绕过用户权限的限制。基本原理是:
$ env x='() { :;}; echo vulnerable'
env命令在执行赋值语句时未检查函数的边界,导致函数之后的内容也被执行。运行如上代码,屏幕如果显示“vulnearable”,那么系统的bash就存在该问题。目前确知的是,4.3版本之前的bash都存在该问题。该漏洞的代码为:CVE-2014-6271。目前存在一些场景允许远程执行Bash命令,正好又会在命令中调用环境变量设置函数。如CGI、DHCP等。
下面以CGI为例,说明这一漏洞攻击的过程。
CGI相关的解析HTTP请求的过程如下:
1、Linux WEB Server一般可以提供CGI接口,允许远程执行Bash命令;
2、对于HTTP头部,CGI脚本解析器会将其当作环境变量,调用bash的env相关函数设置到临时环境变量中;
3、HTTP协议允许发送任意客户端自定义的HTTP头部;
4、这样就产生了一个完整的可供Bash命令注入的场景,客户端故意发送构造好的带攻击命令的HTTP头部到服务端,服务端调用设置环境变量的函数,直接执行了客户端指定的头部里面的命令。并且还会将结果一并返回给客户端。
攻击过程为:
1、客户端构造HTTP头部,包含内容为:
Httpheader=’(){:;}; echo vulnerable’
2、客户端发送该头部到Linux Web Server,接收到该头部后,CGI将调用Bash的env把该HTTP头部作为临时变量设置到系统环境变量中;
3、Echo vulnerable将被执行(跳开权限检查)
以下文字摘取并翻译自:
https://www.trustedsec.com/september-2014/shellshock-dhcp-rce-proof-concept/?utm_source=tuicool
Shellshock对DHCP服务攻击流程
DHCP服务器处理流程:
1、DHCP Server接收到Linux Client的Discover包后,构建Offer包,里面包含有IP地址、子网掩码等参数,其中额外Option中,有一个114号的参数,代表Url参数;
2、Linux Client接收到该Offer后,经过Request、Ack后,将调用Bash对端口以相关参数赋值,其中Option 114后面的字符串作为环境变量。
3) 该参数的字符串将被越界命令。
SSH因其AcceptEnv、TERM、SSH_ORIGINAL_COMMAND等环境变量受此漏洞影响。
~/.ssh/authorized_keys文件是SSH中用于记录强制命令(force command)及公钥的文件,这些force command被记录到SSH_ORIGINAL_Command变量中。当往该文件添加适当的命令后,SSH用户在登录后将执行上述命令。若该命令运行环境为Bash,则该漏洞似的用户登录后直接使用未授权的命令,然后再执行强制命令。例如:
sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser
上述命令建立一个testuser用户,并在该用户的公钥文件中添加了sleep 1这条命令。
正常情况下,使用testuser登陆应该出现以下情况:
$ ssh testuser@localhost echo something else
starting sleep
echo回显命令无法执行。
以下是使用ShellShock漏洞执行的结果:
$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep
可以看到,以函数溢出形式调用echo回显时,echo命令被调用了。
另外还有一种二次认证情况下绕过第二次认证的漏洞,这里就不详细列举了。
上述三个漏洞已被CVE-2014-6271所修复。
针对上述影响,企业需要做好来自上述已知攻击的预防工作。
(一)及时更新补丁,特别是已经暴率出来的CVE-2014-6271,必须尽快部署。
(二)更新防火墙、IPS、IDS规则库,尽早发现攻击源并做好防范;
(三)控制访问上述应用的客户端应用。
(四)网络设备安全部署:
1、针对DHCP Server的漏洞基本上要配合假冒DHCP Server来完成,可以通过DHCP Snooping进行防范。
(1)在交换机全局启用DHCP Snooping:
Switch(config)#ip dhcp snooping
(2)在特定VLAN中启用DHCP SNOOPING:
Switch(config)#ip dhcp snooping vlan VLAN-ID
(3)在可信端口启用信任模式:
Switch(config-if)ip dhcp snooping trust
2、针对Web和SSH的漏洞,目前而言只能通过IDS、IPS进行防范。目前在网络层面唯一可以做的,是限制非法工作站的接入:
[root@tp ~]# iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
[root@tp ~]# iptables -A OUTPUT -d 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j DROP
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j DROP
[root@tp ~]# /etc/rc.d/init.d/iptables save
交换机则使用访问控制列表进行配置。