首页
社区
课程
招聘
[翻译]英国NCSC:Pygmy Goat 恶意软件分析报告(第三版)
发表于: 2天前 2332

[翻译]英国NCSC:Pygmy Goat 恶意软件分析报告(第三版)

2天前
2332

翻译:梦幻的彼岸

报告下载地址:
版本 3 2024 年 11 月 7 日 

备注:有缘看到此报告,感觉写的很不错,为方便阅读,根据自身理解将其翻译成简体中文并进行扩展,若发现可完善之处望指出


一、执行摘要

  • 使用LD_PRELOAD加载到/bin/sshd并拦截其accept函数。
  • 在原始Socket上监听传入的ICMP数据包以触发回连,或者使用拦截的accept函数在SSH连接中搜索特定序列的魔法字节。
  • 功能包括远程shell、数据包捕获、cron任务以及创建反向SOCKS代理服务器。

二、简介

    Pygmy Goat是一个本地的x86-32 ELF共享对象,被发现在Sophos XG防火墙设备上,提供了对该设备的后门访问权限。它利用 LD_PRELOAD 环境变量将共享对象加载到 sshd(SSH 守护进程)二进制文件中。

  • 样本创建了一个原始 ICMP Socket来监控传入的数据包,这些数据包包含 AES 加密的 TCP 回调 IP 和端口,用于样本连接以实现 C2(命令与控制)功能。
  • 样本利用其 LD_PRELOAD 位置拦截 socket 的 accept 函数,以窥探传入流量寻找特定的 SSH 协议声明,然后重用该连接作为另一种 C2 的方式。
  • 样本使用一个硬编码的嵌入式CA证书伪装成Fortinet,以与C2建立TLS连接并验证对方身份
  • C2命令使攻击者能够在设备上建立远程shell,启动数据包捕获,创建cron任务,并创建反向SOCKS代理以将流量发送到防火墙后的设备。

三、恶意软件详细信息

(一)元数据

文件名
libsophos.so
描述加载到 /bin/sshd 的恶意共享对象 
大小1,759,412 bytes
MD5c71cd27efcdb8c44ab8c29d51f033a22
SHA-171f70d61af00542b2e9ad64abd2dda7e437536ff
SHA-2566455de74ae15071fa98f18cdbc3148c967755e69df7dee747bc31d0387751162

文件名libsophos.so
描述较早版本的 libsophos.so 缺失了反向代理功能,并使用 VMProtect 来混淆二进制文件。
大小3,056,741 bytes
MD53f28196675dc8cb20cf5b5f80ea29310
SHA-17ace663c22b3e800fc17c1477d54b533f7002833
SHA-256823b079c75f4e6a5905d9eea9a60c62e1f0995bfc25764d1ba0407a5bd78c962


四、功能介绍

(一)持久性

    Pygmy Goat预计是通过使用LD_PRELOAD环境变量加载到/bin/sshd进程中的,这从钩住的accept函数以及二进制文件加载时立即取消设置LD_PRELOAD环境变量的情况可以明显看出。这表明攻击者通过在启动时设置LD_PRELOAD环境变量,例如,通过修改启动脚本,来实现在受害设备上的持久化存在。其脚本内容类似于如下代码: 

1
LD_PRELOAD=”libsophos.so” /bin/sshd

这将确保恶意的libsophos.so文件在系统启动时被加载到下一个执行的SSH守护进程中,使其能够覆盖sshd二进制文件中的现有函数。

(二)后门

    Pygmy Goat的libsophos.so二进制文件在其INIT_ARRAY段中包含一个指向名为main_constructor函数的引用(此名称来源于保留在二进制文件内的调试符号)。这意味着在sshd二进制文件的主要功能启动之前,这个main_constructor函数将会被自动执行。
    main_constructor函数会进行fork操作,以避免妨碍合法sshd进程的加载,然后立即为自己和所有未来的子进程取消设置LD_PRELOAD环境变量。尽管如此,值得注意的是,原始的父sshd进程在此时仍然会在其环境中保留LD_PRELOAD变量
    恶意软件会检查主机系统的运行时间,确保系统已经运行超过60秒,若未达到则进入休眠。然后,它尝试在‘/var/run/sshd.pid’处获取一个单实例pid文件的互斥锁,以确保当前只有这一个恶意软件实例在执行。接着,恶意软件再次fork,通过静态编译嵌入的BusyBox 1.33.1启动一个crond守护进程,以便稍后执行攻击者可以通过恶意软件部署到设备上的cron任务。    最后,恶意软件创建了一个ICMP 原始socket,用于监听设备接收到的所有ICMP数据包,并且还创建了一个Unix socket,用于监听连接到‘/tmp/.sshd.ipc’的请求。

    由于Pygmy Goat通过LD_PRELOAD加载到sshd进程中,libsophos.so共享对象中导出的函数会替代sshd(/bin/sshd)原本导入的同名函数。具体来说,当检查libsophos.so和sshd之间的函数交互时,发现只有一个函数被替换:accept函数。这意味着所有到达sshd守护进程的TCP连接都会经过这个修改过的accept函数处理。

    当这个修改后的accept函数被调用时,它使用dlsym来找到并调用原始的accept函数。然后,该函数会对前0x17字节的数据进行非消耗性、非阻塞的预览,并每100毫秒重复这一过程,持续3秒钟,直到成功读取到0x17字节的数据、连接中断或时间到期。如果成功读取了0x17字节的数据,它们将与一个硬编码的字节序列进行比较:

1
2
SSH-2.0-OpenSSH_5.3p1\r\n
备注:尽管这是一个合法的 OpenSSH 协议版本(发布于2009年),但恶意软件开发者可能认为在2024年自然出现这种情况的可能性极低。

    如果检测到这些字节,恶意软件会识别出这是一个后门SSH连接,并通过与先前在main_constructor函数中创建的/tmp/.sshd.ipc Unix socket进行通信,来转发所有来自和去往后门SSH连接的数据。    此外,拦截的accept函数在被调用时,也会立即取消设置LD_PRELOAD变量    由于accept函数是在父sshd进程中被调用的,而此时该进程仍然设置了LD_PRELOAD变量,这使得该技术在设备的常规取证检查中不易被发现。环境变量仅在sshd进程中设置,并且会在sshd首次接受TCP连接时取消设置。然而,如果攻击者在系统首次启动后没有尝试连接到Pygmy Goat的受害者,或者攻击者使用了ICMP唤醒方法,则LD_PRELOAD变量将永远不会在父sshd进程中被取消设置。

(三)指令

    Pygmy Goat 是一种复杂的恶意软件,它通过与 C2 服务器通信来接收指令并执行特定的操作。这种通信是基于命令 ID 字节的,这意味着每个命令都由一个唯一的标识符表示,C2 服务器发送这个标识符给受感染设备上的 Pygmy Goat 恶意软件,后者据此执行相应的操作。    一旦与C2(命令与控制服务器)建立连接,Pygmy Goat可以根据命令ID字节执行多个命令。每个命令在C2任务分配部分中有详细说明
补充C2 命令结构示例
命令 ID 字节:这是每个命令的核心标识,通常是一个字节或几个字节,用来告诉恶意软件接下来要做什么。这可以看作是双方协议的一部分,确保只有预期的命令被识别和处理。
参数:某些命令可能还需要额外的数据作为参数传递,例如 IP 地址、端口号、文件路径等。这些参数紧跟在命令 ID 后面,用于指导具体的操作细节。

命令ID  功能描述
0x01 返回当前日期和时间
补充功能用途:当 C2 服务器发送此命令时,恶意软件将响应并返回设备上的当前日期和时间。这可以帮助攻击者确认受感染设备的时间设置,或者用于同步操作。
0x02 返回系统详情
补充功能用途:该命令使得恶意软件返回有关受感染系统的详细信息,可能包括操作系统版本、网络配置、已安装软件等。这些信息有助于攻击者了解目标环境并规划后续行动。
0x03 启动 /bin/sh shell
补充功能用途:此命令指示恶意软件在受感染设备上启动一个交互式的 Bourne shell (/bin/sh)。攻击者可以通过这个 shell 执行任意系统命令,从而获得对系统的完全控制。
0x04 启动 /bin/csh shell
补充功能用途:类似于命令 ID 0x03,但这次是启动 C shell (/bin/csh)。不同的 shell 提供了不同的环境和特性,攻击者可能会根据需求选择合适的 shell。
0x05 创建新的计划任务
补充功能用途:通过调用 crontab,此命令允许攻击者为受感染设备添加新的定时任务。这些任务可以是定期下载更新、执行脚本或进行其他类型的恶意活动。
0x06 开始数据包捕获
补充功能用途:启用网络嗅探器来记录流经受感染设备的所有或特定类型的网络流量。这对于窃取敏感信息或监视网络活动非常有用。
0x07 连接到 EarthWorm Server 创建反向 SOCKS5 代理
补充功能用途:此命令指示恶意软件连接回一个被称为“EarthWorm”的服务器,并建立一个反向 SOCKS5 代理。这允许攻击者通过受感染设备作为中介访问内部网络资源,甚至穿透防火墙。有关 EarthWorm 的更多信息,请参阅“EarthWorm 反向 Socks 代理。

五、通信机制

Pygmy Goat具有两种机制,攻击者可以根据需要使用这些机制来建立与后门的C2(命令与控制服务器)连接:

  • ICMP 原始Socket端口敲击
  • 拦截 SSH accept 的响应

(一)ICMP 端口敲击

    在接收到任何类型的ICMP数据包时,Pygmy Goat会尝试使用AES-256-CBC算法和一个硬编码的初始化向量(IV)及密钥,对ICMP数据部分的前0x10字节进行解密,使用空填充(null padding)方式:
 

1
2
IV:43 4a fc 1c 5d 9d 77 06 67 c1 c3 0e c1 37 47 bb
Key:59 4b 6e 77 51 6a 6d 41 54 62 41 6e 52 6f 5a 6d 30 66 47 37 55 5a 57 62 32 59 55 78 55 51 50 77

    一旦解密完成,前四个字节会被与一个特定的魔数序列进行比较,以确保数据实际上是一个C2控制数据包而非正常的ICMP数据包:
 

1
魔幻字节序列:ef 12 68 45

    接下来的四个字节被视为一个大端格式的IPv4地址,随后的两个字节为大端格式的TCP端口号,数据包中的其余部分则被忽略。备注:本报告中的所有示例数据都是使用Pygmy Goat样本在虚拟环境中生成的,因此这些数据仅用于说明目的,并非从任何受害者或攻击者的数据中获取。

加密 ICMP 数据包

00 00 cc a2 5a 9d 00 01 d7 00 9e 6c 17 c0 82 6b 95 f0 fa 5b 5b 4e dd 8a

Echo (ping) reply

ICMP 编码

ICMP 校验和

ICMP 标识符

序列号

加密数据

解密数据包数据

ef 12 68 45 c0 a8 06 01 1e 61 00 00 00 00 00 00

魔法验证字节

IPv4 地址192.168.6.1

TCP 端口7777

AES 填充

    一旦提取出C2的IPv4地址和TCP端口,Pygmy Goat会与服务器建立TLS连接,并使用嵌入在libsophos.so二进制文件中的根CA证书验证服务器提供的证书(参见TLS根CA证书)。这一点值得注意,因为这意味着攻击者可以从不同的设备发送ICMP数据包到C2回连服务器。
备注:Root CA 证书声称是由另一家网络设备供应商 FortiGate, Fortinet Ltd. 签发的。

(二)拦截SSH Accept 

一旦拦截的 accept 函数识别出 SSH 版本魔幻字节并将连接通过 Unix Socket /tmp/.sshd.ipc 传递后,Pygmy Goat 继续使用硬编码的数据执行假的 SSH 握手,读取固定数量的响应字节,但忽略其内容。

伪造 SSH 握手 (C2 -> Malware)

0x0000

0x0010

53 53 48 2d 32 2e 30 2d 4f 70 65 6e 53 53 48 5f

35 2e 33 70 31 0d 0a

SSH-2.0-OpenSSH_ 5.3p1..

SSH 版本交换(在初次接受后窥视)

 

伪造 SSH 握手 (Malware -> C2)


0x0000

53 53 48 2d 32 2e 30 2d 44 38 70 6a 45 0d 0a

SSH-2.0-D8pjE..

SSH 版本替换

伪造 SSH 握手 (Malware -> C2)

0x0000

0x0010

0x0020

0x0030

0x0040

0x0050

0x0060

0x0070

0x0080

0x0090

0x00a0

0x00b0

0x00c0

0x00d0

0x00e0

0x00f0

0x0100

0x0110

0x0120

0x0130

0x0140

0x0150

0x0160

0x0170

0x0180

0x0190

0x01a0

0x01b0


0x01c0

0x01d0

0x01e0

0x01f0

0x0200

0x0210

0x0220

0x0230

0x0240

0x0250

0x0260

0x0270

0x0280

0x0290

0x02a0

0x02b0

0x02c0

0x02d0

0x02e0

0x02f0

0x0300

0x0310

0x0320

0x0330

0x0340

0x0350

0x0360

0x0370

0x0380

0x0390

0x03a0

0x03b0

0x03c0

0x03d0

0x03e0

0x03f0

0x0400

0x0410

0x0420

0x0430

0x0440

0x0450

0x0460

0x0470

0x0480

0x0490

0x04a0

0x04b0

0x04c0

0x04d0

0x04e0

0x04f0

0x0500


0x0510

0x0520

0x0530

0x0540

00 00 05 4c 0a 14 fd 8d cf 7b 16 6d de 60 6f f4

1c 19 89 c1 93 ee 00 00 00 80 63 75 72 76 65 32

35 35 31 39 2d 73 68 61 32 35 36 40 6c 69 62 73

73 68 2e 6f 72 67 2c 64 69 66 66 69 65 2d 68 65

6c 6c 6d 61 6e 2d 67 72 6f 75 70 2d 65 78 63 68

61 6e 67 65 2d 73 68 61 32 35 36 2c 64 69 66 66

69 65 2d 68 65 6c 6c 6d 61 6e 2d 67 72 6f 75 70

2d 65 78 63 68 61 6e 67 65 2d 73 68 61 31 2c 64

69 66 66 69 65 2d 68 65 6c 6c 6d 61 6e 2d 67 72

6f 75 70 31 34 2d 73 68 61 31 00 00 00 13 73 73

68 2d 72 73 61 2c 73 73 68 2d 65 64 32 35 35 31

39 00 00 00 bb 63 68 61 63 68 61 32 30 2d 70 6f

6c 79 31 33 30 35 40 6f 70 65 6e 73 73 68 2e 63

6f 6d 2c 61 65 73 31 32 38 2d 63 74 72 2c 61 65

73 31 39 32 2d 63 74 72 2c 61 65 73 32 35 36 2d

63 74 72 2c 61 72 63 66 6f 75 72 32 35 36 2c 61

72 63 66 6f 75 72 31 32 38 2c 61 65 73 31 32 38

2d 63 62 63 2c 33 64 65 73 2d 63 62 63 2c 62 6c

6f 77 66 69 73 68 2d 63 62 63 2c 63 61 73 74 31

32 38 2d 63 62 63 2c 61 65 73 31 39 32 2d 63 62

63 2c 61 65 73 32 35 36 2d 63 62 63 2c 61 72 63

66 6f 75 72 2c 72 69 6a 6e 64 61 65 6c 2d 63 62

63 40 6c 79 73 61 74 6f 72 2e 6c 69 75 2e 73 65

00 00 00 bb 63 68 61 63 68 61 32 30 2d 70 6f 6c

79 31 33 30 35 40 6f 70 65 6e 73 73 68 2e 63 6f

6d 2c 61 65 73 31 32 38 2d 63 74 72 2c 61 65 73

31 39 32 2d 63 74 72 2c 61 65 73 32 35 36 2d 63

74 72 2c 61 72 63 66 6f 75 72 32 35 36 2c 61 72


63 66 6f 75 72 31 32 38 2c 61 65 73 31 32 38 2d

63 62 63 2c 33 64 65 73 2d 63 62 63 2c 62 6c 6f

77 66 69 73 68 2d 63 62 63 2c 63 61 73 74 31 32

38 2d 63 62 63 2c 61 65 73 31 39 32 2d 63 62 63

2c 61 65 73 32 35 36 2d 63 62 63 2c 61 72 63 66

6f 75 72 2c 72 69 6a 6e 64 61 65 6c 2d 63 62 63

40 6c 79 73 61 74 6f 72 2e 6c 69 75 2e 73 65 00

00 01 68 75 6d 61 63 2d 36 34 2d 65 74 6d 40 6f

70 65 6e 73 73 68 2e 63 6f 6d 2c 75 6d 61 63 2d

31 32 38 2d 65 74 6d 40 6f 70 65 6e 73 73 68 2e

63 6f 6d 2c 68 6d 61 63 2d 73 68 61 32 2d 32 35

36 2d 65 74 6d 40 6f 70 65 6e 73 73 68 2e 63 6f

6d 2c 68 6d 61 63 2d 73 68 61 32 2d 35 31 32 2d

65 74 6d 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 2c

68 6d 61 63 2d 73 68 61 31 2d 65 74 6d 40 6f 70

65 6e 73 73 68 2e 63 6f 6d 2c 75 6d 61 63 2d 36

34 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 2c 75 6d

61 63 2d 31 32 38 40 6f 70 65 6e 73 73 68 2e 63

6f 6d 2c 68 6d 61 63 2d 73 68 61 32 2d 32 35 36

2c 68 6d 61 63 2d 73 68 61 32 2d 35 31 32 2c 68

6d 61 63 2d 73 68 61 31 2c 68 6d 61 63 2d 6d 64

35 2d 65 74 6d 40 6f 70 65 6e 73 73 68 2e 63 6f

6d 2c 68 6d 61 63 2d 72 69 70 65 6d 64 31 36 30

2d 65 74 6d 40 6f 70 65 6e 73 73 68 2e 63 6f 6d

2c 68 6d 61 63 2d 6d 64 35 2d 39 36 2d 65 74 6d

40 6f 70 65 6e 73 73 68 2e 63 6f 6d 2c 68 6d 61

63  2d 6d 64 35 2c 68 6d 61 63 2d 72 69 70 65 6d

64  31 36 30 2c 68 6d 61 63 2d 72 69 70 65 6d 64

31 36 30 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 2c

68 6d 61 63 2d 6d 64 35 2d 39 36 00 00 01 68 75

6d 61 63 2d 36 34 2d 65 74 6d 40 6f 70 65 6e 73

73 68 2e 63 6f 6d 2c 75 6d 61 63 2d 31 32 38 2d

65 74 6d 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 2c

68 6d 61 63 2d 73 68 61 32 2d 32 35 36 2d 65 74

6d 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 2c 68 6d

61 63 2d 73 68 61 32 2d 35 31 32 2d 65 74 6d 40

6f 70 65 6e 73 73 68 2e 63 6f 6d 2c 68 6d 61 63

2d 73 68 61 31 2d 65 74 6d 40 6f 70 65 6e 73 73

68 2e 63 6f 6d 2c 75 6d 61 63 2d 36 34 40 6f 70

65 6e 73 73 68 2e 63 6f 6d 2c 75 6d 61 63 2d 31

32 38 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 2c 68

6d 61 63 2d 73 68 61 32 2d 32 35 36 2c 68 6d 61

63 2d 73 68 61 32 2d 35 31 32 2c 68 6d 61 63 2d

73 68 61 31 2c 68 6d 61 63 2d 6d 64 35 2d 65 74

6d 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 2c 68 6d

61 63 2d 72 69 70 65 6d 64 31 36 30 2d 65 74 6d

40 6f 70 65 6e 73 73 68 2e 63 6f 6d 2c 68 6d 61

63 2d 6d 64 35 2d 39 36 2d 65 74 6d 40 6f 70 65

6e 73 73 68 2e 63 6f 6d 2c 68 6d 61 63 2d 6d 64

35 2c 68 6d 61 63 2d 72 69 70 65 6d 64 31 36 30

2c 68 6d 61 63 2d 72 69 70 65 6d 64 31 36 30 40

6f 70 65 6e 73 73 68 2e 63 6f 6d 2c 68 6d 61 63

2d 6d 64 35 2d 39 36 00 00 00 15 6e 6f 6e 65 2c


7a 6c 69 62 40 6f 70 65 6e 73 73 68 2e 63 6f 6d

00 00 00 15 6e 6f 6e 65 2c 7a 6c 69 62 40 6f 70

65 6e 73 73 68 2e 63 6f 6d 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00



...L..ý.Ï{.mÞ`oô

...Á.î....curve2

5519-sha256@libs

sh.org,diffie-he

llman-groupexch

ange-sha256,diff 

ie-hellman-group 

-exchange-sha1,d 

iffie-hellman-gr 

oup14-sha1....ss 

h-rsa,ssh-ed2551 

9...»chacha20-po 

ly1305@openssh.c 

om,aes128-ctr,ae 

s192-ctr,aes256- 

ctr,arcfour256,ar

cfour128,aes128 -

cbc,3des-cbc,bl 

owfish-cbc,cast1 

28-cbc,aes192-cb 

c,aes256-cbc,arc 

four,rijndael-cb 

c@lysator.liu.se 

...»chacha20-pol 

y1305@openssh.co 

m,aes128-ctr,aes 

192-ctr,aes256-c 

tr,arcfour256,arc

four128,aes128- 

cbc,3des-cbc,blo 

wfish-cbc,cast12 

8-cbc,aes192-cbc 

,aes256-cbc,arcf 

our,rijndael-cbc 

@lysator.liu.se. 

..humac-64-etm@o 

penssh.com,umac- 

128-etm@openssh. 

com,hmac-sha2-25 

6-etm@openssh.co 

m,hmac-sha2-512- 

etm@openssh.com, 

hmac-sha1-etm@op 

enssh.com,umac-6 

4@openssh.com,um 

ac-128@openssh.c 

om,hmac-sha2-256 

,hmac-sha2-512,h 

mac-sha1,hmac-md 

5-etm@openssh.co 

m,hmac-ripemd160 

-etm@openssh.com

,hmac-md5-96-etm 

@openssh.com,hma 

c-md5,hmac-ripem 

d160,hmac-ripemd 

160@openssh.com, 

hmac-md5-96...hu 

mac-64-etm@opens 

sh.com,umac-128- 

etm@openssh.com, 

hmac-sha2-256-et 

m@openssh.com,hm 

ac-sha2-512-etm@ 

openssh.com,hmac 

-sha1-etm@openss 

h.com,umac-64@op 

enssh.com,umac-1 

28@openssh.com,h 

mac-sha2-256,hma 

c-sha2-512,hmac- 

sha1,hmac-md5-et 

m@openssh.com,hm 

ac-ripemd160-etm 

@openssh.com,hma 

c-md5-96-etm@ope 

nssh.com,hmac-md 

5,hmac-ripemd160 

,hmac-ripemd160@ 

openssh.com,hmac 

-md5-96....none,

zlib@openssh.com

....none,zlib@op

enssh.com.......

................

SSH 密钥交换初始化

伪造 SSH 握手  (C2 -> Malware)

0x0000

?? * 0x490

SSH 密钥交换初始化(Pygmy Goat 忽略内容)

 

伪造 SSH 握手  (C2 -> Malware)

0x0000

?? * 0x30

SSH 密钥交换

 

Fake SSH Handshake (Malware -> C2)

0x0000

0x0010

0x0020

0x0030

0x0040

0x0050

0x0060

0x0070

0x0080

0x0090

0x00a0

0x00b0

0x00c0

00 00 00 bc 08 1f 00 00 00 33 00 00 00 0b 73 73

68 2d 65 64 32 35 35 31 39 00 00 00 20 3d 5f 84

8d 6b d8 10 08 e4 91 22 7b 94 28 65 e0 e0 7a 76

83 3d 74 de 60 bf b7 4b 39 21 1d 99 1e 00 00 00

20 52 91 ba 65 28 66 56 d4 cd 7d 06 c0 6d 06 e8

88 01 8f 3e 3a 9a 1f 3f 1c f4 84 e6 57 39 75 f8

1b 00 00 00 53 00 00 00 0b 73 73 68 2d 65 64 32

35 35 31 39 00 00 00 40 29 cc f0 cc 16 c5 46 6e 

52 19 82 8e 86 65 42 8c 1f 1a d4 c3 a5 b1 cb fc 

c0 26 6c 31 3c 5c 90 3a 24 7d e4 d3 57 6d da 8e 

cb f4 66 d1 cb 81 4f 63 fd 4a fa 06 e4 7e 4c a0 

95 91 bd cb 97 a4 b3 0f 00 00 00 00 00 00 00 00

00 00 00 0c 0a 15 00 00 00 00 00 00 00 00 00 00

...¼.....3....ss

h-ed25519... =_.

.kØ..ä."{.(eààzv 

.=tÞ`¿·K9!......

 R.ºe(fVÔÍ}.Àm.è

...>:..?.ô.æW9uø

....S....ssh-ed2

5519...@)ÌðÌ.ÅFn

R....eB...ÔÃ¥±Ëü

À&l1<\.:$}äÓWmÚ.

ËôfÑË.OcýJú.ä~L

..½Ë.¤³.........

................

SSH Key 交换

 

伪造 SSH 握手  (C2 -> Malware)

0x0000

?? * 0x10

SSH 新 Keys


伪造的 SSH 握手完成后,Pygmy Goat 继续通过伪造的 SSH TCP 连接建立合法的 TLS 握手,遵循与 ICMP 回连相同的路径。

备注:这 somewhat odd,因为 TLS 握手通常由 TCP 客户端发起,而在此情况下,Pygmy Goat 作为 TCP 服务器却像客户端一样建立了 TLS 握手;即,发送 Client Hello,随后由 TCP 客户端发送 Server Hello。

(三)C2 任务分配

    无论使用哪种机制建立与C2服务器的TLS连接,从服务器发送到Pygmy Goat的后续数据都将遵循相同的代码路径。    通过C2 TLS通道在任一方向上传输的数据包括一个命令字节、一个标识字节、一个子命令字节,以及一个两字节的大端长度,后面可能跟着一个LZO1X压缩的数据段。对于简单的请求-响应命令,标识字节未被使用,服务器发送的值会在响应中简单地回显。然而,对于长时间运行的命令,它用于指定要与之前命令的哪个实例进行交互,例如停止之前启动的数据包捕获。在TLS握手之后,Pygmy Goat接收到的第一个命令数据包预期是另一个包含一系列预期魔数字节的握手:
备注:所有示例命令包均在去除 TLS 加密并解压缩 LZO1X 数据后展示,以使数据更易读。对于小数据包,LZO1X 算法由于添加了头部信息,可能会导致“压缩”后的长度比未压缩的字节长度更长。除非特别标注为 ‘LE’(小端序),所有数值均以大端序传输。

Pygmy Goat 握手 (C2 -> Malware)

0x0000

63 00 01 00 0c 2c 62 45 42 33 3f 3d 6f

c....,bEB3?=o

命令(握手)

标识符

子命令(请求)


压缩后的长度

Magic Bytes

Pygmy Goat 握手 (Malware -> C2)


0x0000

63 00 01 00 00

c....

命令(握手)

标识符

子命令(响应)


压缩后的长度

 在握手完成后,Pygmy Goat 将开始将后续的数据包作为命令进行处理。


(1)命令 ID 0x01:日期时间请求

Pygmy Goat 使用 C 函数 ctime 格式化后返回当前的日期和时间。

日期时间请求 (C2 -> Malware)

0x0000

01 00 01 00 00

.....

Command (DateTime)

标识符

子命令(请求)


压缩后的长度

 

日期时间响应(Malware -> C2)

0x0000

0x0010

0x0020

01 00 06 00 23 54 75 65 20 4d 61 72 20 31 34 20 

31 32 3a 33 37 3a 33 33 20 32 30 32 34 20 28 44  

41 54 45 29

....#Tue Mar 14 

12:37:33 2024 (D

ATE)

Command (DateTime)

标识符

子命令(响应)

压缩后的长度

Formatted date time

 

(2)命令 ID 0x02:详情

Pygmy Goat 使用 C 函数 uname 返回受害系统的详细信息。
Details request (C2 -> Malware)

请求详情(C2 -> Malware)

0x0000

  02 00 01 00 00

.....

命令(详情)

标识符

子命令(请求)

压缩后的长度

 

响应详情 (Malware -> C2)

0x0000

0x0010

0x0020

0x0030

0x0040

0x0050

0x0060

0x0070

0x0080

02 00 06 00 8d 53 79 73 6e 61 6d 65 3a 20 20 4c 

69 6e 75 78 0a 4e 6f 64 65 6e 61 6d 65 3a 20 75 

62 75 6e 74 75 0a 52 65 6c 65 61 73 65 3a 20 20 

34 2e 31 30 2e 30 2d 32 38 2d 67 65 6e 65 72 69 

63 0a 56 65 72 73 69 6f 6e 3a 20 20 23 33 32 7e 

31 36 2e 30 34 2e 32 2d 55 62 75 6e 74 75 20 53 

4d 50 20 54 68 75 20 4a 75 6c 20 32 30 20 31 30 

3a 31 39 3a 31 33 20 55 54 43 20 32 30 31 37 0a 

4d 61 63 68 69 6e 65 3a 20 20 69 36 38 36

.....Sysname:  L inux.Nodename: u buntu.Release:   4.10.0-28-generi c.Version:  #32~ 16.04.2-Ubuntu S MP Thu Jul 20 10 :19:13 UTC 2017.

Machine:  i686

命令(详情)

标识符

子命令(响应)

压缩后的长度

系统详情

 



 

(3)命令 ID 0x03:系统 Shell

Pygmy Goat 使用来自《The Linux Programming Interface》中的代码fork一个新的 /bin/sh 进程,通过Socket将数据传递给 shell 子进程或从 shell 子进程接收数据。标识字节用于支持同时打开多个 shell。


Shell 开始启动(C2 -> Malware)

0x0000

03 7b 01 00 08 00 04 00 00

.{.......

命令 (系统 Shell)

标识符 (123)

子命令 (启动)

压缩后的长度

缓冲区窗口大小 (1024, LE)


Shell 开始响应 (Malware -> C2)

0x0000

03 7b 02 00 00

.{...

命令 (系统 Shell)


标识符

子命令 (已启动)

压缩后的长度



Shell 输出 (Malware -> C2)


0x0000

03 7b 03 00 06 23 20

.{... 

命令 (系统 Shell)


标识符

子命令(IO)

压缩后的长度


Shell 输出 (‘# ’)

 

Shell 输入 (C2 -> Malware)

0x0000

03 7b 03 00 08 70 77 64 0a

.{...pwd.

命令 (系统 Shell)


标识符

子命令 (IO)

压缩后的长度

Shell 输入(‘pwd\n’)

 

     

Shell 输出(Malware -> C2)

0x0000

0x0010

0x0020

03 7b 03 00 21 70 77 64 0d 0a 2f 68 6f 6d 65 2f 

75 73 65 72 2f 6c 69 62 73 6f 70 68 6f 73 0d 0a 23 20

.{...pwd../home/ user/libsophos.. #  

命令 (系统 Shell)


标识符

子命令 (IO)

压缩后的长度

Shell 输出

(‘pwd\r\n/home/user/libsophos\r\n# ’)

 

Shell 暂停请求(C2 -> Malware)

0x0000

03 7b 05 00 00

.{...

命令 (系统 Shell)


标识符

子命令(停止)

压缩后的长度

 

Shell 暂停响应 (Malware -> C2)

0x0000

03 7b 06 00 00

.{...

命令 (系统 Shell)


标识符

子命令(已停止)

压缩后的长度

 




(4)命令 ID 0x04:CLI Shell

Pygmy Goat 分叉一个新的 /bin/csh 进程,其余操作方式与 System Shell 命令相同,包括命令包和控制流,唯一的区别是命令字节为 0x04 而不是 0x03;因此,未包含示例数据包。

(5)命令 ID 0x05:Crontab

Pygmy Goat 使用静态编译嵌入的 BusyBox 实例分叉一个新的 crontab 执行,其余操作方式与前两个命令类似。这为攻击者提供了一个交互式的 crontab 实例,使他们能够在受害设备上创建定时任务,在攻击者未主动与系统交互时执行这些任务。

Crontab CLI 启动请求 (C2 -> Malware)

0x0000

05 7b 01 00 08 00 04 00 00 00 00 00 00 2d 6c

.{...........-l

命令(Crontab CLI)

标识符

子命令(启动)

压缩后的长度

缓冲区窗口大小(LE)

未使用

crontab 的附加参数(例如,-l 用于列出任务,-e 用于编辑 crontab 文件)

 

Crontab CLI 启动响应 (Malware -> C2)

0x0000

05 7b 02 00 00

.{...

命令 (Crontab CLI)

标识符

子命令(已启动)

压缩后的长度

 

Crontab CLI 输出结果 (Malware -> C2)

0x0000

0x0010

0x0020

05 7b 03 00 21 33 30 20 2a 20 2a 20 2a 20 2a 20

65 63 68 6f 20 70 77 6e 64 20 3e 20 2f 68 6f 6d

65 2f 75 73 65 72 2f 70 77 6e 64 0d 0a  

.{..!30 * * * *  echo pwnd > /hom e/user/pwnd..

命令(Crontab CLI)

标识符

子命令 (IO)

压缩后的长度

CLI output

 

Crontab CLI 已停止运行(Malware -> C2)

0x0000

05 7b 06 00 00

.{...

命令 (Crontab CLI)

标识符

子命令(已停止)

压缩后的长度

注意,当子 crontab 进程退出时,恶意软件会自动发送“Stopped”消息。在上述例子中,C2 服务器发送了“-l”参数,这导致 crontab 列出当前的 cron 任务然后退出;因此,首先接收到包含标准输出的“IO”子命令,随后是表示已停止的“Stopped”子命令。

(6)命令 ID 0x06:Packet Capture

Pygmy Goat 使用 libpcap 库根据指定的过滤字符串在指定接口上开始捕获流量,并持续进行直到收到后续命令指示其停止。

数据包捕获启动请求 (C2 -> Malware)

0x0000

0x0010

06 7b 01 00 11 00 05 00 04 65 6e 73 33 33 69 63

6d 70

.{.......ens33ic mp 

命令(数据包捕获

标识符

子命令 (启动)

压缩后的长度

接口名称长度

筛选字符串长度

接口名称

筛选字符串

 

数据包捕获启动响应(Malware -> C2)

0x0000

0x0010

06 7b 02 00 1c d4 c3 b2 a1 02 00 04 00 00 00 00

00 00 00 00 00 00 00 00 00 01 00 00 00  

.{...Ôò¡....... .............

命令(数据包捕获

标识符

子命令 (已启动)


压缩后的长度

捕获元数据,包括链接类型

 

数据包捕获数据 (Malware -> C2)

0x0000

06 7b 03 00 5d bb 08 10 ... 67 68 69

.{..]»...ghi

命令(数据包捕获

标识符

子命令(数据包)

压缩后的长度

单个 pcap 框架

 

数据包捕获停止请求 (C2 -> Malware)

0x0000

06 7b 05 00 00

.{...

命令(系统shell)

标识符

子命令(停止)

压缩后的长度

 

数据包捕获响应 (Malware -> C2)

0x0000

06 7b 06 00 00

.{...

命令(系统shell)

标识符

子命令(已停止)

压缩后的长度


(7)命令 ID 0x07 EarthWorm 反向socks代理

Pygmy Goat从压缩数据中读取一个新的主机名/IP地址和TCP端口,然后调用EarthWorm源代码的一个副本中的create_rssocks_server函数,传递地址、端口以及硬编码的10秒超时时间。EarthWorm是一个开源的网络隧道工具,设计用于进攻性操作,特别是提供了一个反向SOCKS5代理服务器,以穿透防火墙。虽然EarthWorm本身并不是直接恶意的,但攻击者之前已经使用过它,正如MandiantCrowdStrike报告中所指出的那样。原始开发者已经从其GitHub页面上删除了源代码,尽管它仍然可以在镜像仓库中找到。

启动反向代理请求 (C2 -> Malware)

0x0000

0x0010

0x0020

0x0030

0x0040

0x0050

0x0060

0x0070

0x0080

0x0090

0x00a0

0x00b0

0x00c0

0x00d0

0x00e0

0x00f0

0x0100

07 7b 01 00 27 65 78 61 6d 70 6c 65 2e 63 6f 6d

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22 b8

.{...example.com ................

................

................

................

................

................

................

................

................

................

................

................

................

................

................ ..... 

命令(代理)

标识符

子命令(启动)

压缩后的长度

EarthWorm 服务器地址(256 字节,空填充)

EarthWorm 服务器 TCP 端口 (8888)

 

反向代理启动响应 (Malware -> C2)

0x0000

07 7b 02 00 00

.{...

命令(代理)

标识符

子命令(已启动)

压缩后的长度

在 fork 出的进程中,Pygmy Goat 随后建立一个新的 TCP 连接到启动请求数据中包含的地址和端口。

尽管用于请求 Pygmy Goat 创建反向 SOCKS 代理的通道是通过 TLS 加密的,但 EarthWorm 通道本身并没有加密,因此后续的数据包示例将是原始的 TCP 数据包。

EarthWorm 客户端请求(Malware -> EarthWorm Server)

0x0000

01 01 00 00 00 00

......

类型(握手)

子类 (请求)

Pool 编号


EarthWorm 服务器响应(EarthWorm Server -> Malware)

0x0000

01 02 00 00 00 00

......

类型(握手)

子类 (响应)

Pool 编号


EarthWorm 分配Pool编号 (EarthWorm Server -> Malware)

0x0000

01 03 00 00 04 d2

.....Ò

类型(握手)

子类 (分配Pool编号)

Pool 编号

备注:使用Pool编号是为了让单个 EarthWorm 服务器能够区分多个客户端。

 然后,Pygmy Goat使用刚刚被分配的Pool编号建立一个新的TCP连接到EarthWorm服务器,以请求一个远程隧道。

EarthWorm 请求远程隧道 (Malware -> EarthWorm Server)

0x0000

01 04 00 00 04 d2

.....Ò

类型(握手)

子类(隧道请求)

Pool 编号

 

创建了 EarthWorm 远程隧道 (EarthWorm Server -> Malware)

0x0000

01 05 00 00 04 d2

.....Ò

类型(握手)

子类 (隧道响应)

Pool 编号

    此时,EarthWorm服务器创建一个新的本地监听端口,SOCKS5客户端可以连接到这个端口。所有通过该本地监听端口发送的原始数据都将直接隧道传输至Pygmy Goat,后者作为SOCKS5服务器运行,使得攻击者能够从其本地端发送SOCKS流量,穿过防火墙设备并进一步传输。

    值得注意的是,无论SOCKS5客户端声明支持哪种认证方法,运行在Pygmy Goat中的EarthWorm SOCKS5服务器总是选择“无认证”。此外,EarthWorm仅支持指定远程地址为IPv4格式。最后,在与SOCKS5客户端指定的IPv4地址和端口建立远程连接后,服务器将以其本地绑定地址和端口是\x41\x41\x41\x41和\x41\x41响应。

代理的Curl请求,客户端问候 (Curl -> EW Server -> Malware)

0x0000

05 02 00 02

....

SOCKS 版本

无认证

No auth & User/Pass

 

代理的Curl请求,服务器选择 (Malware -> EW Server -> Curl)

0x0000

05 00

..

SOCKS 版本

认证选择(无认证)

 

代理 Curl 请求、客户端连接请求 (Curl -> EW Server -> Malware)

0x0000

05 01 00 01 c0 a8 06 01 1a 0a

....ˬ....

SOCKS 版本

建立 TCP 连接

保留

地址类型 (IPv4)

封装 IPv4 地址

TCP 端口

 

代理 Curl 请求,服务器响应 (Malware -> EW Server -> Curl)

0x0000

05 00 00 01 41 41 41 41 41 41

.....AAAAAA

SOCKS 版本

请求已获批准

保留

地址类型 (IPv4)

封装 IPv4 绑定地址

TCP 绑定端口


(四)网络示例图

    在下面的例子中,攻击者使用ICMP唤醒方法来建立一个到加密ICMP数据包中指定IP和端口的TLS连接。Pygmy Goat建立一个到C2服务器的TCP和TLS连接,并使用嵌入的CA证书验证C2服务器的TLS证书。C2服务器执行Pygmy Goat握手过程,然后下发一个任务:建立一个反向SOCKS5 EarthWorm连接,使用任务数据中的IP和端口。一旦反向隧道建立完成,SOCKS5客户端可以通过新打开的端口连接到EarthWorm服务器,发送需要通过隧道传输的数据,这些数据最终会从受害者的网络接口输出。

六、结论

    尽管 Pygmy Goat 并未引入任何新颖的技术,但其在允许攻击者按需与其交互的同时,巧妙地融入正常网络流量中,表现出相当高的复杂性。代码本身编写得非常干净,函数简短且结构良好,有助于未来的扩展性,并且在代码中全面检查了错误,表明它是由一名或多名熟练的开发者编写的。
    虽然到目前为止 Pygmy Goat 仅在 Sophos XG 防火墙上被发现,但从设计选择来看,它可能是为一系列 Linux 设备设计的,而不仅仅是针对特定设备。该恶意软件具有多种通信唤醒方法,以及两个独立的远程 shell(/bin/sh 和 /bin/csh),如果专门为某一特定设备开发,这些功能可能会被认为是不必要的努力。Pygmy Goat 不依赖任何特定设备的外部库,并可以在基础的 Ubuntu 发行版上运行。
    特别是嵌入的 Root CA 证书声称由 FortiGate, Fortinet Ltd. 签发,以及其中一个 IPC Unix Socket文件名为 .fgmon_cli.ipc,这些特征暗示 Pygmy Goat 最初可能旨在在 FortiGate 设备上执行。Mandiant 的最新报告展示了对 FortiGate 设备的攻击,其中 CASTLETAP 的战术、技术和程序 (TTPs) 与 Pygmy Goat 类似,例如使用加密的 ICMP 数据包包含 C2 信息来建立反向 SSL 连接。

七、探测

(一)入侵指标

类型

描述

路径

复制了恶意软件路径

/lib/libsophos.so

路径


IPC Unix 服务器 socket

/tmp/.sshd.ipc

路径


IPC Unix 客户都 socket

/tmp/.fgmon_cli.ipc

路径


旧版样本中的 IPC Unix 服务器socket

/tmp/.goat.ipc

路径


单一实例 pid 文件

/var/run/sshdd.pid

路径


旧版样本中的单一实例 pid 文件

/var/run/goat.pid

 

(二)规则和签名

描述

精度

规则类型

Pygmy Goat 的 AES 密钥在栈上构建或位于数据段中。

在过去 12 个月内通过 VirusTotal 回溯搜索没有产生误报。

YARA

rule pygmy_goat_aes_key

{

      meta: 

        author = "NCSC"

        description = "Pygmy Goat AES key built on the stack or in data"         date = "2024-11-07"

        hash1 = "71f70d61af00542b2e9ad64abd2dda7e437536ff"

 

      strings:

            $dword_1 = { 59 4b 6e 77 }

            $dword_2 = { 51 6a 6d 41 }

            $dword_3 = { 54 62 41 6e }

            $dword_4 = { 52 6f 5a 6d }

            $dword_5 = { 30 66 47 37 }

            $dword_6 = { 55 5a 57 62 }

            $dword_7 = { 32 59 55 78 }

            $dword_8 = { 55 51 50 77 }

 

      condition:

             (uint32(0) == 0x464c457f) and filesize < 5MB and all of them

}

 

 

 

 

描述

精度

规则类型


Pygmy Goat 在 C2 通信中使用的魔幻字节序列

在过去 12 个月内通过 VirusTotal 回溯搜索没有产生误报。

YARA

rule pygmy_goat_magic_strings

{

      meta: 

        author = "NCSC"

        description = "Pygmy Goat magic byte sequences used in C2 comms"         date = "2024-10-22"

        hash1 = "71f70d61af00542b2e9ad64abd2dda7e437536ff"

         

      strings:

            $c2_magic_handshake = ",bEB3?=o"

            $fake_ssh_banner = "SSH-2.0-D8pjE"

            $fake_ed25519_key = { 29 cc f0 cc 16 c5 46 6e 52 19 82 8e 86

65 42 8c 1f 1a d4 c3 a5 b1 cb fc c0 26 6c 31 3c 5c 90 3a 24 7d e4 d3 57 6d da 8e cb f4 66 d1 cb 81 4f 63 fd 4a fa 06 e4 7e 4c a0 95 91 bd cb 97 a4 b3 0f }

 

      condition:

            (uint32(0) == 0x464c457f) and any of them

}

 

描述

精度

规则类型


EarthWorm pool编号生成的 x86 汇编代码

签名旨在检测 x86 ELF 二进制文件中 EarthWorm 的使用情况,这可能包括良性用途。

YARA

rule earthworm_id_generation_x86

{

      meta: 

        author = "NCSC"

        description = "EarthWorm pool num generation x86 assembly"         date = "2024-10-22"

        hash1 = "71f70d61af00542b2e9ad64abd2dda7e437536ff"

         

      strings:

            $chartoi = {

                  8b 45 ??        // MOV        EAX,dword ptr [EBP + ??]

   c1 e0 07        // SHL  EAX,0x7    89 c1           // MOV  ECX,EAX

                  8b 55 ??        // MOV        EDX,dword ptr [EBP + ??]

                  8b 45 ??        // MOV        EAX,dword ptr [EBP + ??]

                  01 d0           // ADD        EAX,EDX

                  0f b6 00        // MOVZX      EAX,byte ptr [EAX]

                  0f be c0        // MOVSX      EAX,AL

                  01 c8           // ADD        EAX,ECX

                  89 45 ??        // MOV        dword ptr [EBP + ??],EAX

                  83 6d ?? 01     // SUB        dword ptr [EBP + ??],0x1

            }

         

      condition:

            (uint32(0) == 0x464c457f) and all of them

}


描述

精度

规则类型


Pygmy Goat 伪造的 SSH 协议握手

未知,假冒 SSH 协议版本导致推测值高

Snort v2


alert tcp any 22 -> any any (msg: "Pygmy Goat Fake SSH handshake"; content: "SSH-2.0-D8pjE"; offset: 0; depth: 13; classtype:trojanactivity;)

 

描述

精度

规则类型


Pygmy Goat 伪造的 SSH ed25519 key

未知,因内容长度而推测为高

Snort v2

alert tcp any 22 -> any any (msg: "Pygmy Goat Fake SSH ed25519 key"; content:

"|29ccf0cc16c5466e5219828e8665428c1f1ad4c3a5b1cbfcc0266c313c5c903a

247de4d3576dda8ecbf466d1cb814f63fd4afa06e47e4ca09591bdcb97a4b30f|"

; offset: 120; depth: 64; classtype:trojan-activity;)

八、MITRE ATT&CK

本报告是根据 MITRE ATT&CK® 框架编制的,该框架是一个基于真实世界观察的、全球可访问的攻击者战术和技巧知识库。

战术

ID

技术

技术是指攻击者为实现特定战术所使用的方法或手段

步骤

步骤是技术的具体实施过程,描述了攻击者如何应用这些技术来达到其目的

持久性

(这一战术涉及攻击者如何确保其恶意软件或访问权限能够在系统重启或其他中断后仍然保持有效)

T1574.006

动态链接程序劫持

Pygmy Goat 使用 LD_PRELOAD 环境变量注入 sshd

执行

(这一战术涉及攻击者如何在其目标环境中运行恶意代码或命令,以便实施攻击的其他阶段)

T1059.004

命令和脚本

解释器:Unix Shell

Pygmy Goat 可创建 /bin/sh 或 /bin/csh 远程 shell

T1053.003

计划任务/作业:Cron

Pygmy Goat 可以使用crontab创建任意的cron任务

T1559

进程间通信

Pygmy Goat 使用UnixSocket进行父进程和派生的子进程之间的进程间通信

发现

(攻击者使用这一战术来了解更多的系统和网络信息,以便为后续的攻击步骤做准备)

T1040

网络嗅探

Pygmy Goat 可以使用libpcap根据BPF过滤器嗅探网络流量,并将其渗漏到C2。

命令与控制

(这一战术涉及攻击者如何与其植入的恶意软件进行通信,以控制受感染系统、发送指令或接收数据)

T1205.001

流量信号:端口敲门

Pygmy Goat 在ICMP原始socket上监听,等待包含魔法字节和要回连的C2地址的加密数据包。

T1001.003

数据混淆:协议伪造

Pygmy Goat 响应发送魔法字节的SSH连接,使用伪造的SSH握手

T1573.002

加密通道:非对称加密

Pygmy Goat 使用TLS加密C2通信

T1572

协议隧道传输

Pygmy Goat 可以创建一个反向 SOCKS5 代理服务器,通过它进行隧道流量传输

收集

(这一战术涉及攻击者如何识别和收集目标系统中的信息,以便后续处理或传输)

T1560.002

压缩收集的数据:通过库压缩

Pygmy Goat 使用LZO1X压缩其C2通信

数据外传

(这一战术涉及攻击者如何从受害者的环境中窃取敏感数据)

T1041

通过C2通道进行的数据外传

Pygmy Goat 通过其C2通道渗漏结果数据


 九、附件

TLS 根 CA 证书

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
-----BEGIN CERTIFICATE----- 
MIIC3zCCAccCFB8e5bk6nwcaR66tdgFt7kh7iw19MA0GCSqGSIb3DQEBCwUAMCwx 
FjAUBgNVBAoMDUZvcnRpbmV0IEx0ZC4xEjAQBgNVBAMMCUZvcnRpR2F0ZTAeFw0y 
MTA4MzEwMTU0NDJaFw0zMTA4MjkwMTU0NDJaMCwxFjAUBgNVBAoMDUZvcnRpbmV0 
IEx0ZC4xEjAQBgNVBAMMCUZvcnRpR2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEP 
ADCCAQoCggEBAO0UTvHfYvBeIKqKYWV5xfoJW4hsHZbMHSWefuUiYSLDliBDWV8e 
4hBdi6krF8YGGRkKlHPZcfTHzJQmYwBG2mAjEWiIQm3Z0aD4wJjnF/B0VAYDTG29 
Vqj+PFU5UsckGeWqTomKOFwutazXiUWicGjzTJErhVj26AgXUPiKO5VHBdHR/xqW 
xJ5ed4L0OOW4c/WYQjUReeiKw2iP3bAtrglXWInJexiWzA/FzsRTbwCUexGmXhwG 
65QsW5t4beDCBHMJN/uP6Q7kIqtDe3/JL8osT0UmGTEcQBx1mkc7Nb6dMgabHPoM 
NWbGLlxRKxb9+H0XGq+effuFMr9CUXb60PcCAwEAATANBgkqhkiG9w0BAQsFAAOC 
AQEAHiZ0DxXlTEykWJxKDcKXhv02TO4C6jhDotr1xYiXha9s+o83h/Q9SFnCL7mP 
1KKB/hRA6/CwXH/P9YUR0OnbPEsUJoQp3jbcXV5m/Xen/Zss+AIwCtLVy20ctPCn 
svXbPp0lEf69fgByXmL1gB+03dk4QTsy96yrfIPCIXMn7Q3A5LZ2AMBSg/+YJ4xP 
Il+oGhm90WUbr4PgMS+DqTHuf+ghxxHTgbRtLdCvGLA8fu6CcM8rwGae48aE/+gU 
MaavuO9VUiW8eGdouyVZvGhutVpWWYABrslchLpZEF48pEFMk9ChLU9/17Qd1zgQ 
Ug/Gkjn036B8ZfA3xdCpTd7ldA==
-----END CERTIFICATE-----
X509 Certificate: 
Version: 1 
Serial Number: 1f1ee5b93a9f071a47aead76016dee487b8b0d7d 
Signature Algorithm: 
    Algorithm ObjectId: 1.2.840.113549.1.1.11 sha256RSA 
    Algorithm Parameters: 
    05 00 
Issuer: 
    CN=FortiGate 
    O=Fortinet Ltd. 
  Name Hash(sha1): b87a11fc647eed1aed3543237cb1540d99ead580 
  Name Hash(md5): d45eadb1d50562927512b7f545a02b65 
  
 NotBefore: 8/31/2021 1:54 AM 
 NotAfter: 8/29/2031 1:54 AM 
  
Subject: 
    CN=FortiGate 
    O=Fortinet Ltd. 
  Name Hash(sha1): b87a11fc647eed1aed3543237cb1540d99ead580 
  Name Hash(md5): d45eadb1d50562927512b7f545a02b65 
  
Public Key Algorithm: 
    Algorithm ObjectId: 1.2.840.113549.1.1.1 RSA (RSA_SIGN) 
    Algorithm Parameters: 
    05 00 
Public Key Length: 2048 bits 
Public Key: UnusedBits = 0 
    0000  30 82 01 0a 02 82 01 01  00 ed 14 4e f1 df 62 f0 
    0010  5e 20 aa 8a 61 65 79 c5  fa 09 5b 88 6c 1d 96 cc 
    0020  1d 25 9e 7e e5 22 61 22  c3 96 20 43 59 5f 1e e2 
    0030  10 5d 8b a9 2b 17 c6 06  19 19 0a 94 73 d9 71 f4 
    0040  c7 cc 94 26 63 00 46 da  60 23 11 68 88 42 6d d9 
    0050  d1 a0 f8 c0 98 e7 17 f0  74 54 06 03 4c 6d bd 56 
    0060  a8 fe 3c 55 39 52 c7 24  19 e5 aa 4e 89 8a 38 5c 
    0070  2e b5 ac d7 89 45 a2 70  68 f3 4c 91 2b 85 58 f6 
    0080  e8 08 17 50 f8 8a 3b 95  47 05 d1 d1 ff 1a 96 c4 
    0090  9e 5e 77 82 f4 38 e5 b8  73 f5 98 42 35 11 79 e8 
    00a0  8a c3 68 8f dd b0 2d ae  09 57 58 89 c9 7b 18 96 
    00b0  cc 0f c5 ce c4 53 6f 00  94 7b 11 a6 5e 1c 06 eb 
    00c0  94 2c 5b 9b 78 6d e0 c2  04 73 09 37 fb 8f e9 0e 
    00d0  e4 22 ab 43 7b 7f c9 2f  ca 2c 4f 45 26 19 31 1c 
    00e0  40 1c 75 9a 47 3b 35 be  9d 32 06 9b 1c fa 0c 35 
    00f0  66 c6 2e 5c 51 2b 16 fd  f8 7d 17 1a af 9e 7d fb 
    0100  85 32 bf 42 51 76 fa d0  f7 02 03 01 00 01 
Certificate Extensions: 0 
Signature Algorithm: 
    Algorithm ObjectId: 1.2.840.113549.1.1.11 sha256RSA 
    Algorithm Parameters: 
    05 00 
Signature: UnusedBits=0 
    0000  74 e5 de 4d a9 d0 c5 37  f0 65 7c a0 df f4 39 92 
    0010  c6 0f 52 10 38 d7 1d b4  d7 7f 4f 2d a1 d0 93 4c 
    0020  41 a4 3c 5e 10 59 ba 84  5c c9 ae 01 80 59 56 5a 
    0030  b5 6e 68 bc 59 25 bb 68  67 78 bc 25 52 55 ef b8 
    0040  af a6 31 14 e8 ff 84 c6  e3 9e 66 c0 2b cf 70 82 
    0050  ee 7e 3c b0 18 af d0 2d  6d b4 81 d3 11 c7 21 e8 
    0060  7f ee 31 a9 83 2f 31 e0  83 af 1b 65 d1 bd 19 1a 
    0070  a8 5f 22 4f 8c 27 98 ff  83 52 c0 00 76 b6 e4 c0 
    0080  0d ed 27 73 21 c2 83 7c  ab ac f7 32 3b 41 38 d9 
 0090  dd b4 1f 80 f5 62 5e 72  00 7e bd fe 11 25 9d 3e 
 00a0  db f5 b2 a7 f0 b4 1c 6d  cb d5 d2 0a 30 02 f8 2c 
 00b0  9b fd a7 77 fd 66 5e 5d  dc 36 de 29 84 26 14 4b 
 00c0  3c db e9 d0 11 85 f5 cf  7f 5c b0 f0 eb 40 14 fe 
 00d0  81 a2 d4 8f b9 2f c2 59  48 3d f4 87 37 8f fa 6c 
 00e0  af 85 97 88 c5 f5 da a2  43 38 ea 02 ee 4c 36 fd 
 00f0  86 97 c2 0d 4a 9c 58 a4  4c 4c e5 15 0f 74 26 1e 
Signature matches Public Key 
Root Certificate: Subject matches Issuer 
Key Id Hash(rfc-sha1): 241a37a7ac3e26d8d703a8058ffe100dd1150193 
Key Id Hash(sha1): d05ec61f560ec38990760bbb71339e09ebd3a4cc 
Key Id Hash(bcrypt-sha1): 1febcf83a6f6e2598a5288a0e57742d1fc6e7620 
Key Id Hash(bcrypt-sha256): 
efbb9150e66eff1492404ca6bfb219dd656c640814e27cfb3e757ff94fe6aa5a 
Key Id Hash(md5): eae7cc16a30ed5a98916f9f381a5bcb2 
Key Id Hash(sha256): 
8049bd8e86a6b5f382639b0739c78c5fd55780c72d3b5c9a6084e22981f9dc51 
Key Id Hash(pin-sha256): frcO5XKYZ/rwLDKF6EeMNz4MYTQrkNTwd1VPrxMDwSo
Key Id Hash(pin-sha256-hex): 
7eb70ee5729867faf02c3285e8478c373e0c61342b90d4f077554faf1303c12a 
Cert Hash(md5): e1b9842e7e0b9cf722bcc7d08c768486 
Cert Hash(sha1): 8d453ff52947af1842a0231d74ffbb6faacf6167 
Cert Hash(sha256): 
f85280bd427aa2e9d714ea3bc11febf5a436cfc04fcbbe708c2592a88b6000a3 
Signature Hash: 
ef0ae22901ab9ab07f3b6e1f80ee41cd21deee957e81d7a48fac2517ae5ce87e


十、免责声明

本报告引用了来自 NCSC 和行业来源的信息。任何由 NCSC 提出的发现和建议均无意避免所有风险,遵循这些建议也不会消除所有此类风险。信息风险的所有权始终归属于相关系统的所有者。
本信息根据《2000年信息自由法》(FOIA)享有豁免权,并可能根据其他英国信息立法享有豁免权。请将所有 FOIA 查询发送至 ncscinfoleg@ncsc.gov.uk。
所有材料均为UK Crown版权 ©




[招生]系统0day安全-IOT设备漏洞挖掘(第6期)!

最后于 2天前 被梦幻的彼岸编辑 ,原因:
收藏
免费
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册