FortiGuard 生物医学前段时间碰到了一个从前没报导过的文本管理掌控系统 ( CMS ) 扫描器仪和用 Go C词汇 ( 一般来说也称作 Golang ) 编写的反击破解器。在几个新浪网高峰论坛上,它被叙述为加装在受病毒感染的 WordPress 中文网站上,但没申明的研究调查报告。
受负面影响网络平台:Linux;
负面影响使用者:任何人组织;
负面影响:远距反击者可以掌控易受反击的掌控系统;
轻微等级:轻微;
Golang 反击破解器并不美味。比如,他们以后报导过 2019 年的 StealthWorker 公益活动。那个捷伊反击破解器是他们重新命名为 GoTrim 的新公益活动的一小部分,因为它是用 Go 编写的,并采用 “:::trim:::” 来界定与 C2 伺服器通讯的数据。
与 StealthWorker 类似于,GoTrim 也利用互联网继续执行散播式反击反击。他们发现最先的样品是在 2022 年 9 月。在编写责任编辑时,该公益活动仍在进行中。
责任编辑详细如是说了那个丧尸互联网如何采用 WordPress 和 OpenCart 扫描器和毁坏中文网站。
反击链
GoTrim 反击链
GoTrim 采用地牢互联网对其最终目标继续执行散播式反击反击。每一地牢单厢获得几组凭证,用以尝试登入沃尔辛的中文网站最终目标。获得成功登入后,地牢应用程序将被加装到新病毒感染的掌控系统中。然后,它等候源自反击者的进一步指示,进而扩充地牢互联网。
GoTrim 仅在反击试著获得成功后向 C2 伺服器调查报告凭证。他们没在 GoTrim 中检视到任何人用作散播另一方面或布署其他恶意程序的标识符。不过,他们的确找出了浏览和继续执行 GoTrim bot 应用程序的 PHP JAVA。反击者或许在某种意义上误用外泄的凭证来布署 PHP JAVA以病毒感染 GoTrim 掌控系统。
PHP 浏览JAVA
一般来说,每一JAVA都将 GoTrim 恶意程序从硬编码的 URL 浏览到与JAVA本身相同的目录中的文件并继续执行它。为了掩盖其踪迹,浏览器JAVA和 GoTrim 反击程序都从受病毒感染的掌控系统中删除。它不会在受病毒感染的掌控系统中保持持久性。
静态分析
除非另有说明,责任编辑中详尽的分析是如前所述具有 SHA-256 哈希 c33e50c3be111c1401037cb42a0596a123347d5700cee8c42b2bd30cdf6b3be3 的示例。
GoTrim 是用 Go 1.18 版本构建的。与所有 Go 应用程序一样,标识符中采用的所有第三方库都静态链接到恶意程序,导致可继续执行二进制文件相对较大。但是这样做的好处是不依赖任何人外部文件来正确继续执行。为了解决大小问题,恶意程序采用 UPX 打包,将文件从 6 MB 减少到 1.9 MB。
采用 Go 的另一个优点是,相同的源标识符可以交叉编译,以支持不同的体系结构和操作掌控系统。根据示例中的源标识符路径,在开发 GoTrim 时采用了 Windows。但是,他们只检视到针对 64 位 Linux 的示例。
C2 通讯
GoTrim 可以通过两种方式与指示和掌控(C2)伺服器通讯:应用程序模式,它向指示和掌控伺服器(C2 伺服器)发送 HTTP POST 请求,或伺服器模式,它启动 HTTP 伺服器以侦听传入的 POST 请求。与 C2 交换的所有数据都采用 Galois 计数器模式下的高级加密标准(AES-GCM)进行加密,密钥源自嵌入恶意程序二进制文件中的口令。
默认情况下,如果受病毒感染的恶意程序直接连接到 internet ( 即受害者的出站或本地 IP 地址是非私有的 ) ,GoTrim 将试著在伺服器模式下运行。否则,将切换到应用程序模式。
继续执行后,GoTrim 创建一个 MD5 哈希,表示受病毒感染设备的唯一标识 ( 地牢 ID ) 。它由以下字符串生成,包含由 “:” 字符分隔的几条信息:
VICTIM_EXTERNAL_IP:HTTP_SERVER_PORT:1:OUTBOUND_IP:AES_PASSPHRASE
VICTIM_EXTERNAL_IP:设备的外部 / 公共 IP;
HTTP_SERVER_PORT:HTTP 伺服器端口。这是在伺服器模式下为 HTTP 伺服器随机生成的介于 4000 到 8000 之间的数字。对于应用程序模式,始终为 0;
恶意程序初始化标志:在计算地牢 ID 时始终设置为 1;
OUTBOUND_IP:最终目标设备的出站 / 本地 IP 地址;
AES_PASSPHRASE:嵌入每一样品的硬编码字符串。该恶意程序后来采用该字符串的 SHA256 哈希作为 AES-GCM 密钥,用作加密其与 C2 伺服器的通讯。他们检视到的所有样品都共享相同的 AES 密码。
在生成 bot ID 之后,GoTrim 创建一个异步 Go 例程 ( 类似于于多线程 ) ,该例程在应用程序和伺服器模式下向 C2 伺服器发送信标请求。
C2 请求 URL 在不同版本之间发生变化,如责任编辑稍后部分所述。对于此特定示例,信标请求 URL 为 “/selects?dram=1″。
在那个信标请求中,一些受害者和地牢信息被发送到 C2 伺服器,如下图所示。
发送到 C2 伺服器的数据截图
信标请求中发送的一些有趣的字段包括:
1. Bot ID:地牢的唯一 ID;
2. 外部 IP:受害设备的公共 IP 地址;
3.HTTP 伺服器端口:为 HTTP 伺服器随机生成的端口(应用程序模式为 0);
4. 恶意程序初始化标志:发出此请求时始终设置为 1;
5. 出站 IP:受害最终目标设备的本地 IP 地址;
6. 状态消息:”GOOD” 消息被其他字符串替换,这些字符串在后续信标请求期间调查报告任何人正在运行的 CMS 检测或强制继续执行任务的状态;
7. 状态标志:这些标志指示恶意程序当前是否有 C2 伺服器分配的任何人处理任务以及这些任务的 ID;
8.MD5 校验和:该值由上述请求的部分和硬编码的 AES 密码生成,它用作消息完整性校验和。
这些字段通过:::trim:::字符串连接在一起,因此为那个公益活动选择了那个名称。然后采用 AES-256-GCM 密钥加密数据,这是前面提到的密码的 SHA-256 哈希。
伺服器一般来说以 “OK”、”404 page not found” 或 “BC” 响应,所有这些都采用相同的 AES-GCM 密钥加密。当收到 “BC” 时,GoTrim 将重新生成其 bot ID 并从伺服器模式切换到应用程序模式。
第一个信标请求是向地牢互联网注册一个捷伊地牢。
每次信标请求后,GoTrim 会休眠几秒到几分钟,这取决于 C2 伺服器的响应,以及恶意程序在发送下一个请求以后是否正在处理 C2 分配的任务。恶意程序定期继续执行此信标请求,以更新 C2 伺服器有关地牢状态的信息,包括获得成功的凭证,如责任编辑的反击反击部分所述。如果 GoTrim 在 100 次重试后未能从 C2 伺服器接收到有效响应,它将自行终止。
当信标请求被异步发送以更新 C2 伺服器的状态时,GoTrim 要么向 C2 伺服器发送请求以接收指示(应用程序模式),要么设置 HTTP 伺服器以侦听传入的任务请求(伺服器模式)。
应用程序模式
在应用程序模式下,恶意程序发送一个 POST 请求到 “/selects?”bilert=1 ” 接收源自 C2 伺服器的指示。
C2 伺服器响应采用相同 AES-GCM 密钥加密的指示。在下图中可以看到一个解密指示的示例。
包含指示及其选项的响应截图
通过 “:::trim:::” 字符串分割数据后,可以识别 7 个字段,如下所示。
1. MD5 校验和:用作校验消息的完整性。如:83217f8b39dccc2f9f2a0157f0236c4f;
2. 指示 ID:表示当前任务的指示;
3. 并发等级:这会负面影响每一任务继续执行的 goroutine 的数量;
4. 指示选项:包含指示的选项,以 7E 6A 71 6D 70 C2 A9 ( ~jqmp © ) 字节分隔。根据指示的不同,它们的解释也不同:
a. 最终目标列表:这是 GZIP 压缩数据,解压缩后,包含将作为登入试著最终目标的域列表。
b. 指示选项 1(已修订):此选项包含身份验证指示的使用者名。C2 伺服器可以指定一系列字节(如 C2 A9 64)来采用域作为使用者名,而不是为每一域采用相同的使用者名。
c. 指示选项 2 ( 修改后 ) :对于认证指示,该选项包含密码;
d. 指示选项 3:WordPress 认证的未知选项;
e. 指示选项 4:WordPress 身份验证选项,在提交凭证时采用 POST 请求或 XML-RPC。
5. 内部值:恶意程序本身不采用的数值 ( 比如,42 和 255 ) ,可能代表当前指示的内部任务 ID。
恶意程序支持以下指示:
1:验证 WordPress 域提供的凭证;
2:验证对 Joomla! 域提供的凭证 ( 目前尚未实现 ) ;
3:根据 OpenCart 域验证所提供的凭证;
4:根据 Data Life Engine 域验证所提供的凭证 ( 目前尚未实现 ) ;
10:检测在域中加装 WordPress, Joomla!, OpenCar 或 Data Life Engine CMS;
11:终止恶意程序;
他们检视到一个最终目标列表在一个 WordPress 认证指示中包含多达 30000 个域。此外,他们检视到,身份验证指示只提供一个密码来测试列表中的所有域。如上所述,反击可能是通过指示受病毒感染设备互联网测试不同的域和凭证来散播的。
恶意程序完成处理指示后,在发送另一个 POST 请求以接收源自 C2 伺服器的新任务以后,它会休眠一段时间。
服务器模式
在伺服器模式下,GoTrim 在 4000 到 7999 之间的随机端口上启动伺服器,以响应反击者发送的传入 POST 请求。这种模式为反击者提供了一种与地牢通讯的更灵敏的方式。比如,反击者可以检查地牢的状态,而无需等候后续的信标请求,只需向地牢的 HTTP 伺服器处理的特定 URL 发送 POST 请求。
为了向最终目标设备发出指示,反击者向 “/BOT_ID?”ert=1 ” 发送 POST 请求,正文包含 AES-256-GCM 加密的指示数据,类似于于 C2 伺服器在应用程序请求指示时的响应。伺服器模式支持与应用程序模式相同的指示。
反击者还可以发送带有参数 “/BOT_ID?intval=1” 的请求,以查看当前正在运行的任务的状态以及分配的任务是否已完成。
当 CPU 利用率低于某个水平 ( 75% 或 90%,取决于当前任务采用的并发工作者的数量 ) 时,将生成一个单独的 goroutine 来处理每一域。
丧尸互联网指示
检测 CMS
GoTrim 试图确定最终目标中文网站上是否采用了四个 CMS(WordPress、Joomla!、OpenCart 或 DataLife Engine)中的一个。它通过检查网页文本中的特定字符串来实现这一点。
有趣的是,它只通过检查 “WordPress.com” 的 Referer HTTP 标头来针对自托管的 WordPress 中文网站。由于托管的 WordPress 主机提供商,比如 wordpress.com,一般来说会实施更多的安全措施来监控、检测和阻止反击试著。
用作确定已加装 CMS 的字符串如下所示:
虽然 GoTrim 可以采用上述四种 cms 检测中文网站,但它目前只支持针对 WordPress 和 OpenCart 中文网站的身份验证。这表明该丧尸互联网仍在开发中。
验证 WordPress 凭证
除了 C2 伺服器提供的使用者名之外,它还试图通过向 “/wp-json/wp/v2/users” 发送 GET 请求来收集更多的使用者名。
之后,它试著采用 C2 指示中提供的使用者名列表和密码登入 WordPress 中文网站,通过发送 POST 请求到 “/wp-login.php”。下图显示了登入的 POST 请求示例。
WordPress 身份验证请求
那个请求导致在获得成功登入后重定向到 WordPress 中文网站的管理页面 ( 即 /wp-admin ) 。为了确认登入和重定向获得成功,它检查响应是否包含 “id=”adminmenumain”。
C2 伺服器还可以通过 WordPress XML- rpc 特性指定要继续执行的身份验证,这是使用者采用 XML 以编程方式与 CMS 远距交互的另一种方式。通过直接与 web 伺服器的后端通讯,可以绕过一般来说在访问中文网站页面时有效的反地牢机制(如 captchas)。
获得成功登入后,以下信息 ( 以 “|” 分隔 ) 将被更新为全局状态消息,并与以下请求一起发送到 C2 ( 应用程序模式 ) 或作为传入请求的响应 ( 伺服器模式 ) :
最终目标 URL;
使用者名;
密码;
指示 ID ( 1 用作 WordPress, 3 用作 OpenCart 等 ) ;
反击状态 ( “0GOOD” 表示获得成功 ) ;
验证 OpenCart 凭证
GoTrim 还可以强力破解运行开源电子商务网络平台 OpenCart 的中文网站。
它向最终目标的 “/admin/index.php” 发送一个 GET 请求,并收集登入请求所需的与身份验证相关的令牌和标头。然后,它通过向相同的 URL 发送 POST 请求以及包含使用者名和密码的表单编码数据来继续执行实际的身份验证。
为了验证登入请求是否获得成功,它会通过搜索 “/dashboard&user_token=” 来检查中文网站是否返回了 OpenCart 使用者令牌,并确保接收到的数据中的 “redirect” 值不为空。
一个有效的身份验证响应应该如下所示:
{“redirect”:”https://example.com/opencart/admin/index.php?route=common/dashboard&user_token=USER_TOKEN_HASH”}
获得成功登入后,全局状态消息将更新为针对 WordPress 的反击状态。
反地牢检查
GoTrim 可以检测到互联网托管提供商和 CDN ( 如 Cloudflare 和 SiteGround ) 采用的反地牢技术,并规避一些更简单的检查。
它试图通过采用浏览器发送的相同 HTTP 标头并支持相同的文本编码算法 ( gzip、deflate 和 Brotli ) 来模拟源自 64 位 Windows 上 Mozilla Firefox 的合法请求。
对于 WordPress 中文网站,它还会检测是否加装了 CAPTCHA 插件。
Google reCAPTCHA;
BestWebSoft 的 reCAPTCHA;
WP 限制登入试著;
屏蔽安全 Captcha;
All in One Security ( AIOS ) Captcha;
JetPack Captcha;
BestWebSoft 的 Captcha;
该恶意程序包含用作解决某些插件的 CAPTCHA 的标识符。不过,他们需要验证绕过技术是否有效。他们确定它无法绕过 Google、WP 限制登入试著和 Shield Security 的 CAPTCHA。
一般来说,对于它无法绕过的安全插件,它只通过采用与获得成功登入期间发送的数据类似于的信息更新全局状态消息来向 C2 伺服器调查报告它们。但它采用 “3GOOD” 表示反击状态,以指示跳过凭证验证。
在碰到网页文本中包含字符串 “1gb.ru” 的中文网站时,GoTrim 也会发送相同的 “3GOOD” 反击破解状态。这或许是一个有意识的决定,以避免针对该提供商托管的中文网站,但意图尚不清楚。
公益活动更新
在搜索与此公益活动相关的其他示例时,他们发现了一个源自 2022 年 9 月的 PHP JAVA和二进制文件,其中包含 C2 server 89 [ . ] 208 [ . ] 107 [ . ] 12 上不同的 URLs “/selects?param=1” 和 “/selects?walert=1″,他们检测的 PHP JAVA PHP/GoTrim!tr.dldr 采用相同的加装方法,只是浏览 URL 在他们收集的示例中有所不同。
源自 2022 年 9 月版本的不同 C2 伺服器的标识符片段
2022 年 11 月出现的二进制版本也更新了其 HTTP POST URL。信标请求 URL”/selects?dram=1″ 和指示请求 URL”/celects?bilert=1″ 已分别更改为 “/route?index=1” 和 “/routh?alert=1″。数据传输中采用的加密算法和密钥保持不变。
Wireshark 从两个版本的 GoTrim 捕获 POST 请求
总结
虽然那个恶意程序仍在开发中,但它拥有功能完备的 WordPress 反击程序,再加上它的反地牢规避技术,这使得它成为一个值得关注的威胁,特别是随着 WordPress CMS 的巨大普及,那个恶意程序的威胁不容小觑。为了降低这种风险,中文网站管理员应确保使用者帐户 ( 特别是管理员帐户 ) 采用强密码。另外,保持 CMS 软件和相关插件是最捷伊,因为反击者还可以通过利用未修补的漏洞来发起反击。