xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
添加文章 English Version

ACKcmd后门分析


创建时间:2001-12-14
文章属性:原创
文章来源:http://sinbad.dhs.org
文章提交:Sinbad (microbin_at_263.net)

ACKcmd后门分析

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,所以此后门不难被发现。