一、GoBrut简介

Go语言因为跨平台且易上手,越来越受到攻击者的青睐。2019年年初[1],一个由Go语言编写的新型恶意软件家族问世,称为GoBrut(又名StealthWorker),目的是检测目标站点的服务并对其进行爆破。GoBrut行为低调但野心勃勃,每次均攻击众多Web服务器。7个月之内,GoBrut的版本号不断更新,从初版跃升至目前的3.0X,已至少出现过10个版本号,迭代稳定,感染的平台也从Windows扩展到Linux。这一切与当前脆弱的Web安全现状不无关系。

1 主流Web框架安全问题频发

Web安全是网络安全激烈厮杀的重要战场之一。Magento、WordPress和Drupal是当今最为流行的PHP网站管理框架,在提供开发便利之余,也留下了重重隐患。例如2018年,WordPress及其插件被发现了近60个漏洞[2],而到了2019年,新出现的漏洞数量猛翻3倍。Magento也不容乐观,2019年前半年,漏洞数量已超过30个[3] 。

从远程代码执行、跨站脚本攻击和目录穿越等老生常谈的问题,到弱口令这种不是漏洞的漏洞,Web安全易攻难守的现状,必然会不断引鬼上门。当攻击者拿到目标站点的用户名与口令后,便拥有Shell权限,可进行诸多恶意操作,例如窃取网站信息、插入恶意链接和黑链,甚至上传木马,将受害站点变为自己的文件服务器供其他肉鸡下载木马,以扩展传播渠道。在这种情况下,GoBrut这类僵尸网络诞生并蔓延开来。出道后,该僵尸网络已经攻击过使用了Magento、Cpanel、PhpMyAdmin和WordPress等系统或工具的站点,方式从漏洞利用到弱口令爆破等等,危害不容小视。

2 专注爆破

GoBrut与以往的僵尸网络有着显著不同之处,主要体现在其功能定位和爆破类型上。

大多数僵尸网络家族主要用于DDoS、挖矿、勒索和窃密,而GoBrut则另行其道,专门用于分布式破解网站的用户名和口令,且不染指其他恶意行为,也无法传播自身。这意味着GoBrut仅仅扮演了攻击链中的一个前哨角色,用于为后续活动铺路设桥,是一次网络攻击事件前奏的参与者。

目标类型上,当前大多数僵尸网络的爆破主要针对远程管理协议和数据库。而GoBrut的目标类型则覆盖到了Web管理系统,在种类上明显超出。以下是3.06版包含的所有攻击目标类型:

网站CMS / 插件

Drupal、Joomla、Magento、WordPress

Bitrix、OpenCart 、WOO

数据库

PostgreSQL、MySQL

协议工具

SSH、FTP

管理工具

Htpasswd、PhpMyAdmin

其他网络存储

QNAP-NAS、CPanel、WebHost Manager

二、WordPress事件

2019年年中,版本号为3.06的Linux木马出现,其组成的僵尸网络专门针对WordPress网站,C&C服务器域名为formfactset.org,并于8月初被爆出攻破了上万WordPress站点[4][5]。WordPress的后台登录地址默认为/wp-login.php或/wp-admin,木马会向该地址发起请求来猜测或枚举用户名与口令,并向/xmlrpc.php发起POST请求进行XmlRpc爆破。得手后,肉鸡将对应的用户名和口令回传到C&C,接着攻击者拿到网站权限并上传木马。整个过程可形成一个闭环:

【感染GoBrut –> 爆破 –> 攻击者植入PHP后门、下载GoBrut –> 继续爆破】

1 受害者

每次肉鸡请求时,C&C都会动态生成新的攻击列表:

伏影实验室威胁追踪系统随机选取了三个不同日期的某时间点进行统计。结果显示,每次下发的顶级域名类型平均为200多个,大多为地区型域名。com占到近50%,再除去org和net等排名较高的通用域名外,受攻击较多的网站主要位于德国、英国、荷兰、法国、澳大利亚和俄罗斯等国家。

被攻破网站的清单保存在C&C服务器的backdoorGood.txt文件中。该文件显示受害者站点均被植入了PHP后门。随着时间推移,该文件条数也在动态变化。例如, 2019年8月19日,该文件上共有一万八千余条记录,20日则减少为一万五千条左右,到21日又有回升。这可能是攻击者失去了一些网站的权限,重新下发爆破任务所致。

搜索引擎显示,相关信息早已在某些黑产喜闻乐见的场所传开了。

2 植入木马

上述PHP后门所在的目录已经被上传了GoBrut木马,每个木马名称随机,这可以迷惑经验不足的网站管理员。Go语言生成的可执行文件体积较大,可作为排查特征之一。

PHP后门中揭示了攻击者上传GoBrut木马的方式。对于相关页面的POST请求,若cp参数值为”download”,则根据url参数值指定的路径去下载文件。

生成的名称一定是6位字母与数字的随机组合,这便是受害网站目录下很多文件名称为6个字符的原因。

攻击者有意在上传新木马前删除旧木马,但由于文件名是随机生成的,故无法删除之前的文件,所以受害网站中存在不少MD5相同的GoBrut木马。

3 C&C服务器

爆破与后续行动分离,看似能隐藏踪迹。然而当上传的木马被网站管理员发现时,C&C服务器的地址便暴露出来。该网站可直接访问,光鲜靓丽的外表下隐藏着不可告人的目的。

服务器存在一个名为static的目录,其子目录assets下存放了CKEditor 4组件,这与该家族早期的情况一致[1],表明应是同一团伙所为。

但与之前不同的是,C&C服务器没有设置storage目录,而后者在过往事件中常被用来存放最新版木马供肉鸡下载。这表明攻击者并不关心木马版本问题,或是担心被人抓住更多把柄。

三、GoBrut通信与任务下发

1 通信概览

2 上线/更新

木马连接C&C,上传当前版本号报告上线,并检查是否需要更新。当C&C回复“no”时表示当前已是最新版。

若C&C服务器回复内容包含”_Stub_”,则木马需要从其storage目录下载新版。过往事件中,一些C&C服务器会将木马命名为“版本号_Stub_架构名”的形式。本次某些受害网站的目录中,便存在这样命名的文件,表明攻击者可能使用过该网站作为木马存储服务器。

由前文所述,C&C服务器未设置storage目录且未检查木马版本,这导致在HTTP请求中填写任意版本号会收到同样结果。

3 获取攻击类型与目标

接着木马获取攻击类型,此处只包含了”wpBrt” (WordPress Bruter),表示只爆破WordPress网站。

若木马没有收到回应或连接失败,则会从”cp_b”开始(攻击Cpanel站点),挨个请求所有攻击类型,但不会收到目标,侧面说明此次事件专门针对WordPress站点。

木马会连续5次发起请求,每次获得300个目标,一共1500个。执行任务后,木马会再次获取新的列表。

实际中,木马有几率连接失败,会挨个请求其他攻击类型,这将推迟木马获得下一批WordPress目标。

4 任务下发特征

下发的目标列表为Json格式。Json的Host字段包含攻击域名和指定登录名,会替换掉Login字段和Password字段的[login]和[LOGIN]部分,来组成用于爆破的登录名和密码。可见,这是有限词语枚举的爆破而非穷举式的爆破。

用户名与口令搭配可分为口令与用户名相关和无关两种:

Host

http://xxx.yyy.com/wp-login.php;admin;123456;abcde

Login

[login]

Password

[login]123

Host

http://xxx.yyy.com/wp-login.php;admin;123456;abcde

Login

[login]

Password

password

由前文所述,木马一次HTTP请求可获得300个目标。统计发现,绝大多数情况下,这些目标的Password字段全部相同,故可认为C&C是按照不同用户名来下发任务的。

虽然C&C在动态生成目标列表时存在规律,但对肉鸡的IP没有记忆功能,不具备同步操纵肉鸡并下发非重叠任务的能力。木马与C&C服务器的每次通信都是一次性的HTTP连接,使得报告上线、检查更新和获取攻击类型之间并没有顺序要求,甚至可以不进行报告上线和检查更新的操作而去直接获取攻击类型。伏影实验室威胁追踪系统发现,一台机器短时间内多次连接C&C服务器,有几率获取到完全相同的域名、用户名和口令:

域名1,口令相同,用户名相同:

域名2,口令相同,用户名不同:

但是由于木马自身连续获取目标的次数有限,加上C&C服务器下发目标数量众多且动态生成目标列表,使得同一台肉鸡连续获取到相同域名和用户名组合的几率大大减小。

5 登录破解

木马先默认向目标的80端口发起正常GET请求,并根据网站返回的内容进行调整(包括GET改POST、HTTP改HTTPS、重定向等系列操作),再度发起连接,期间可能会调整多次。若破解成功,则木马会将登录名和密码回传至C&C。

针对众多目标的GET请求:

经过调整后可能变为POST请求:

此外,由于Json的XmlRpc字段为1,故木马在会进行WordPress XmlRpc爆破。不过木马代码存在Bug,请求的路径有误,xmlrpc.php应和wp-login.php在同一目录下。

6 目标从何而来

攻击者下发了大量WordPress网站域名,必定是事先收集过的。该木马除了爆破功能(brut)外还有检测功能(check),以确定目标是否使用了期望的系统或服务。例如,若C&C下发”wpChk”,则木马的任务则是检测目标是否属于WordPress站点,其他同理。但事实上C&C服务器直接下发”wpBrt”,说明搜集工作早已完成。因此,在流量中检查check动作或能够发现潜在的攻击行为并作出预警。伏影实验室威胁追踪系统发现,该C&C服务器在持续几周下发爆破指令后会有短暂的休整,期间改为下发”wpChk”以命令肉鸡进行检测任务,且不再对”wpBrt”类型请求做出有效响应。

下发的目标列表同样是Json格式。

完整的Json字段如下:

wpBrt

Host、Login、Password、Worker、XmlRpc

wpChk

Host、Subdomains、Subfolder、Port、Worker、Logins

此次未使用

FileName、Email、Slimit

四、总结

本次事件是一次有预谋的爆破行为,攻击目标覆盖众多国家,但未出现集中针对个别地区的情况。GoBrut家族背后的团伙展现了可观的目标搜集能力,即使不能大规模得手,但只要找到一定数量的脆弱主机,就能够以其为据点,进行下一阶段的僵尸网络活动。这种大规模的爆破行为警示人们,Web框架本身的安全问题和弱登录名弱口令这种看似肤浅的脆弱性一直在被攻击者利用,轻则被挂马挂链,重则可能导致严重的信息泄露,造成不可挽回的损失。

对WordPress网站及其他网站管理系统的管理人员,应尽快修改自身的默认后台管理地址及弱口令,并禁用不必要的接口和来源不明的插件,同时及时升级版本,提高安全性。

参考链接:

[1].https[:]//www.gdatasoftware.com/blog/2019/07/31728-a-deeper-dive-into-thesilentbruter-malware-internal-folder-structures-revealed

[2].https[:]//cve.mitre.org/cgi-bin/cvekey.cgi?keyword=wordpress

[3].https[:]//cve.mitre.org/cgi-bin/cvekey.cgi?keyword=magento

[4].https[:]//www.v2ex.com/t/588483

[5].https[:]//twitter.com/blackorbird/status/1158593888052862976

声明:本文来自绿盟科技研究通讯,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。