CKcmd后门分析
by Sinbad
Dec 14, 2001
http://sinbad.dhs.org
简介
-=-=-=-=--=
ACKcmd是提供Win2000下远程命令Shell的一种后门,它使用TCP来传输,但是不同于一般正常的TCP连接有三次握手,ACKcmd仅使用了TCP ACK数据包,所以一般情况下可以穿越防火墙及躲避IDS的检测。
ACKcmd采用client/server结构,在目标机器上运行AckCmdS.exe植入后门,入侵者在客户端运行命令AckCmdC <target ip>即可获得一个远程的Shell。
分析
-=-=-=-=--=
我们现在用sniffit来观察ACKcmd的数据是怎样传输的。入侵者在192.168.0.29,连入目标机器192.168.0.2:
E:/Tools>ackcmdc 192.168.0.2
AckCmd 1.1 - The Ack Command Prompt for Windows 2000
- (c) 2000, Arne Vidstrom, arne.vidstrom@ntsecurity.nu
- For instructions see http://ntsecurity.nu/toolbox/ackcmd/
Type "quit" and press Enter to quit
AckCmd> net name <------ 输入命令
名称
-------------
SERVER2000
ADMINISTRATOR
命令成功完成。
AckCmd> quit <------ 退出
sniffit抓到的包如下:
TCP Packet ID (from_IP.port-to_IP.port): 192.168.0.29.80-192.168.0.2.1054
SEQ (hex): 6060606 ACK (hex): 6060606
FLAGS: -A---- Window: 4000
Packet ID (from_IP.port-to_IP.port): 192.168.0.29.80-192.168.0.2.1054
45 E 00 . 00 . 38 8 00 . 00 . 00 . 00 . 80 . 06 . B9 . 50 P C0 . A8 . 00 . 1D .
C0 . A8 . 00 . 02 . 00 . 50 P 04 . 1E . 06 . 06 . 06 . 06 . 06 . 06 . 06 . 06 .
70 p 10 . 40 @ 00 . E6 . C6 . 00 . 00 . 02 . 04 . 05 . B4 . 01 . 01 . 04 . 02 .
6E n 65 e 74 t 20 6E n 61 a 6D m 65 e
TCP Packet ID (from_IP.port-to_IP.port): 192.168.0.2.1054-192.168.0.29.80
SEQ (hex): 6060606 FLAGS: ---R--
Packet ID (from_IP.port-to_IP.port): 192.168.0.2.1054-192.168.0.29.80
45 E 00 . 00 . 28 ( 04 . A8 . 00 . 00 . 80 . 06 . B4 . B8 . C0 . A8 . 00 . 02 .
C0 . A8 . 00 . 1D . 04 . 1E . 00 . 50 P 06 . 06 . 06 . 06 . 06 . 06 . 06 . 06 .
50 P 04 . 00 . 00 . 11 . EB . 00 . 00 .
TCP Packet ID (from_IP.port-to_IP.port): 192.168.0.2.1054-192.168.0.29.80
SEQ (hex): 6060606 ACK (hex): 6060606
FLAGS: -A---- Window: 4000
Packet ID (from_IP.port-to_IP.port): 192.168.0.2.1054-192.168.0.29.80
45 E 00 . 00 . CD . 04 . A9 . 00 . 00 . 80 . 06 . B4 . 12 . C0 . A8 . 00 . 02 .
C0 . A8 . 00 . 1D . 04 . 1E . 00 . 50 P 06 . 06 . 06 . 06 . 06 . 06 . 06 . 06 .
70 p 10 . 40 @ 00 . 1C . C1 . 00 . 00 . 02 . 04 . 05 . B4 . 01 . 01 . 04 . 02 .
0D . 0A . C3 . FB . B3 . C6 . 20 20 20 20 20 20 20 20 20 20
20 20 20 20 0D . 0A . 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D -
2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D -
2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D -
2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D -
2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D -
2D - 2D - 2D - 2D - 2D - 0D . 0A . 53 S 45 E 52 R 56 V 45 E 52 R 32 2 30 0 30 0
30 0 20 20 20 20 20 20 0D . 0A . 41 A 44 D 4D M 49 I 4E N 49 I 53 S
54 T 52 R 41 A 54 T 4F O 52 R 20 20 20 0D . 0A . C3 . FC . C1 . EE . B3 .
C9 . B9 . A6 . CD . EA . B3 . C9 . A1 . A3 . 0D . 0A . 0D . 0A .
可以看出,这次操作总共传输了三个TCP包。客户端的端口号是80,服务器的端口号是1054,这种类似于HTTP的通信是很容易被网管忽略的。客户端的命令net name以明文方式放在TCP的数据段,服务器立刻返回一个TCP RST包,然后接着返回一个TCP ACK,其中带着命令执行后的输出结果。如果输出结果很长,ACKcmd只能返回部分数据,这是作者在设计时没有考虑的。你可以运行dir c:/winnt/system32看看,只能输出部分文件列表,最后附带信息“More...”表示并不是返回了全部数据。
检测
-=-=-=-=--=
首先,它采用的端口(80和1054)是固定的。要监控客户端发出的数据包,tcpdump的过滤规则为:
tcp[0:2] = 80 and tcp[2:2] = 1054
多做几次试验,可以发现它们之间通信的TCP ACK包中,序列号和ACK号都是0x06060606(十进制101058054),这也是一个很重要的特征。tcpdump的过滤规则为:
tcp[4:4] = 0x06060606 and tcp[8:4] = 0x06060606
缺陷
-=-=-=-=--=
正如作者所说,这是一个使用TCP ACK穿越防火墙的proof-of-concept,所以并不是很完善。数据的明文方式传输,以及在Win2000的任务列表中能看到AckCmdS.exe,所以此后门不难被发现。
by Sinbad
Dec 14, 2001
http://sinbad.dhs.org
简介
-=-=-=-=--=
ACKcmd是提供Win2000下远程命令Shell的一种后门,它使用TCP来传输,但是不同于一般正常的TCP连接有三次握手,ACKcmd仅使用了TCP ACK数据包,所以一般情况下可以穿越防火墙及躲避IDS的检测。
ACKcmd采用client/server结构,在目标机器上运行AckCmdS.exe植入后门,入侵者在客户端运行命令AckCmdC <target ip>即可获得一个远程的Shell。
分析
-=-=-=-=--=
我们现在用sniffit来观察ACKcmd的数据是怎样传输的。入侵者在192.168.0.29,连入目标机器192.168.0.2:
E:/Tools>ackcmdc 192.168.0.2
AckCmd 1.1 - The Ack Command Prompt for Windows 2000
- (c) 2000, Arne Vidstrom, arne.vidstrom@ntsecurity.nu
- For instructions see http://ntsecurity.nu/toolbox/ackcmd/
Type "quit" and press Enter to quit
AckCmd> net name <------ 输入命令
名称
-------------
SERVER2000
ADMINISTRATOR
命令成功完成。
AckCmd> quit <------ 退出
sniffit抓到的包如下:
TCP Packet ID (from_IP.port-to_IP.port): 192.168.0.29.80-192.168.0.2.1054
SEQ (hex): 6060606 ACK (hex): 6060606
FLAGS: -A---- Window: 4000
Packet ID (from_IP.port-to_IP.port): 192.168.0.29.80-192.168.0.2.1054
45 E 00 . 00 . 38 8 00 . 00 . 00 . 00 . 80 . 06 . B9 . 50 P C0 . A8 . 00 . 1D .
C0 . A8 . 00 . 02 . 00 . 50 P 04 . 1E . 06 . 06 . 06 . 06 . 06 . 06 . 06 . 06 .
70 p 10 . 40 @ 00 . E6 . C6 . 00 . 00 . 02 . 04 . 05 . B4 . 01 . 01 . 04 . 02 .
6E n 65 e 74 t 20 6E n 61 a 6D m 65 e
TCP Packet ID (from_IP.port-to_IP.port): 192.168.0.2.1054-192.168.0.29.80
SEQ (hex): 6060606 FLAGS: ---R--
Packet ID (from_IP.port-to_IP.port): 192.168.0.2.1054-192.168.0.29.80
45 E 00 . 00 . 28 ( 04 . A8 . 00 . 00 . 80 . 06 . B4 . B8 . C0 . A8 . 00 . 02 .
C0 . A8 . 00 . 1D . 04 . 1E . 00 . 50 P 06 . 06 . 06 . 06 . 06 . 06 . 06 . 06 .
50 P 04 . 00 . 00 . 11 . EB . 00 . 00 .
TCP Packet ID (from_IP.port-to_IP.port): 192.168.0.2.1054-192.168.0.29.80
SEQ (hex): 6060606 ACK (hex): 6060606
FLAGS: -A---- Window: 4000
Packet ID (from_IP.port-to_IP.port): 192.168.0.2.1054-192.168.0.29.80
45 E 00 . 00 . CD . 04 . A9 . 00 . 00 . 80 . 06 . B4 . 12 . C0 . A8 . 00 . 02 .
C0 . A8 . 00 . 1D . 04 . 1E . 00 . 50 P 06 . 06 . 06 . 06 . 06 . 06 . 06 . 06 .
70 p 10 . 40 @ 00 . 1C . C1 . 00 . 00 . 02 . 04 . 05 . B4 . 01 . 01 . 04 . 02 .
0D . 0A . C3 . FB . B3 . C6 . 20 20 20 20 20 20 20 20 20 20
20 20 20 20 0D . 0A . 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D -
2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D -
2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D -
2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D -
2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D - 2D -
2D - 2D - 2D - 2D - 2D - 0D . 0A . 53 S 45 E 52 R 56 V 45 E 52 R 32 2 30 0 30 0
30 0 20 20 20 20 20 20 0D . 0A . 41 A 44 D 4D M 49 I 4E N 49 I 53 S
54 T 52 R 41 A 54 T 4F O 52 R 20 20 20 0D . 0A . C3 . FC . C1 . EE . B3 .
C9 . B9 . A6 . CD . EA . B3 . C9 . A1 . A3 . 0D . 0A . 0D . 0A .
可以看出,这次操作总共传输了三个TCP包。客户端的端口号是80,服务器的端口号是1054,这种类似于HTTP的通信是很容易被网管忽略的。客户端的命令net name以明文方式放在TCP的数据段,服务器立刻返回一个TCP RST包,然后接着返回一个TCP ACK,其中带着命令执行后的输出结果。如果输出结果很长,ACKcmd只能返回部分数据,这是作者在设计时没有考虑的。你可以运行dir c:/winnt/system32看看,只能输出部分文件列表,最后附带信息“More...”表示并不是返回了全部数据。
检测
-=-=-=-=--=
首先,它采用的端口(80和1054)是固定的。要监控客户端发出的数据包,tcpdump的过滤规则为:
tcp[0:2] = 80 and tcp[2:2] = 1054
多做几次试验,可以发现它们之间通信的TCP ACK包中,序列号和ACK号都是0x06060606(十进制101058054),这也是一个很重要的特征。tcpdump的过滤规则为:
tcp[4:4] = 0x06060606 and tcp[8:4] = 0x06060606
缺陷
-=-=-=-=--=
正如作者所说,这是一个使用TCP ACK穿越防火墙的proof-of-concept,所以并不是很完善。数据的明文方式传输,以及在Win2000的任务列表中能看到AckCmdS.exe,所以此后门不难被发现。