-
-
[翻译]英国NCSC:Pygmy Goat 恶意软件分析报告(第三版)
-
发表于: 2025-1-28 18:13 9112
-
翻译:梦幻的彼岸
报告下载地址:8dbK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2F1j5%4y4U0i4K6u0W2k6$3!0$3i4K6u0W2N6h3E0Q4x3V1k6K6N6r3q4@1K9h3y4Q4x3X3c8S2M7%4y4W2N6s2y4Q4x3V1k6V1L8$3y4#2L8h3g2F1N6s2y4Q4x3V1k6E0j5h3I4%4j5i4u0W2i4K6u0V1j5h3&6S2L8s2W2K6K9i4y4Q4x3X3c8J5k6i4m8G2M7Y4c8K6i4K6u0r3M7s2W2Y4L8i4W2Q4x3X3c8Y4L8$3q4@1i4K6u0r3L8X3y4K6j5#2)9J5k6r3#2S2M7W2)9J5k6s2m8&6k6$3#2&6i4K6u0V1k6$3!0S2N6q4)9J5k6i4m8V1k6R3`.`.
版本 3 2024 年 11 月 7 日
备注:有缘看到此报告,感觉写的很不错,为方便阅读,根据自身理解将其翻译成简体中文并进行扩展,若发现可完善之处望指出
Pygmy Goat是一个本地的x86-32 ELF共享对象,被发现在Sophos XG防火墙设备上,提供了对该设备的后门访问权限。它利用 LD_PRELOAD 环境变量将共享对象加载到 sshd(SSH 守护进程)二进制文件中。
Pygmy Goat预计是通过使用LD_PRELOAD环境变量加载到/bin/sshd进程中的,这从钩住的accept函数以及二进制文件加载时立即取消设置LD_PRELOAD环境变量的情况可以明显看出。这表明攻击者通过在启动时设置LD_PRELOAD环境变量,例如,通过修改启动脚本,来实现在受害设备上的持久化存在。其脚本内容类似于如下代码:
这将确保恶意的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字节的数据,它们将与一个硬编码的字节序列进行比较:
如果检测到这些字节,恶意软件会识别出这是一个后门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 后面,用于指导具体的操作细节。
Pygmy Goat具有两种机制,攻击者可以根据需要使用这些机制来建立与后门的C2(命令与控制服务器)连接:
在接收到任何类型的ICMP数据包时,Pygmy Goat会尝试使用AES-256-CBC算法和一个硬编码的初始化向量(IV)及密钥,对ICMP数据部分的前0x10字节进行解密,使用空填充(null padding)方式:
一旦解密完成,前四个字节会被与一个特定的魔数序列进行比较,以确保数据实际上是一个C2控制数据包而非正常的ICMP数据包:
接下来的四个字节被视为一个大端格式的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. 签发的。
一旦拦截的 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 握手 (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服务器的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 将开始将后续的数据包作为命令进行处理。
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
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
命令(详情)
标识符
子命令(响应)
压缩后的长度
系统详情
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 输出 (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.
标识符
子命令 (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.. #
标识符
子命令 (IO)
压缩后的长度
Shell 输出
(‘pwd\r\n/home/user/libsophos\r\n# ’)
Shell 暂停请求(C2 -> Malware)
0x0000
03 7b 05 00 00
.{...
标识符
子命令(停止)
压缩后的长度
Shell 暂停响应 (Malware -> C2)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课