当前位置:Linux教程 - Linux - 了解你的敌人:蠕虫战

了解你的敌人:蠕虫战

Know Your Enemy:
Worms at War
The Not so Friendly World of Cyberspace

Honeynet Project
http://project.honeynet.org
http://www.xfocus.org
Last Modified: 9 November, 2000

这文章纯粹是在好奇的情况下产生的,我们的Honeynet的UDP端口137和TCP端口139被多次扫描,我们的网络中这种端口一天内居然被扫描5-10次,怀疑有一定原因。为了了解这些扫描的动机,我们设置了WIN98的honeypot,因为基于这些端口的系统一般上WIN系统,并做在那里等攻击者的操作,我们没有等很长时间,就有了这篇Know you Enemy系列的后续。



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)奖项的组织。如果赢得挑战将获得一些奖金,在这里,我们的访客通过安装蠕虫把我们当成"志愿军"来参加这个项目。

某个人([email protected]),制作了这个可复制的蠕虫,它可以在不被怀疑的有漏洞的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 .....WINDOWSSY
53 54 45 4D 5C 64 6E 65 74 63 2E 69 6E 69 00 STEMdnetc.ini.

通过下面信息我们可以看到配置文件dentc.in的确切传输配置,注意[email protected],他就是接受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 [email protected]
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 .....WINDOWSSY
53 54 45 4D 5C 64 6E 65 74 63 2E 65 78 65 00 STEMdnetc.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 .....WINDOWSSY
53 54 45 4D 5C 6D 73 69 32 31 36 2E 65 78 65 00 STEMmsi216.exe.

最后,蠕虫上传了新的win.ini文件,这么做的原因是可以在系统重新启动的时候被执行,因为很难在远程Win98系统上直接执行程序,所以蠕虫修改c:windowswin.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:windowssyste
6D 5C 6D 73 69 32 31 36 2E 65 78 65 0D 0A 72 75 mmsi216.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_MACHINESoftwareMicrosoftWindowsCurrentVersionRunBymer.scanner HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunServicesBymer.scanner
你是否想着等着系统重启来执行程序不值得信赖,可是要知道目标是Windows桌面系统,你多长时间重启一次你的Windows?

第二条蠕虫

繁忙的一周,第二天我们的第二条蠕虫来了。这次是第一次的变种,获取你的CPU资源用来参加distributed.net竞赛,不同的是,这一次所有文件合为一个可执行文件wininit.exe,缺省安装已经有一个安装在c:windowswininit.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 .....WINDOWSSY
53 54 45 4D 5C 77 69 6E 69 6E 69 74 2E 65 78 65 STEMwininit.exe
00

一旦蠕虫被安装,远程系统就会修改win.ini以确保在系统重启以后能够运行,在这里我们注意到它已经被加入c:windowswin.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:windowssyste
6D 5C 77 69 6E 69 6E 69 74 2E 65 78 65 20 63 3A mwininit.exe c:
5C 77 69 6E 64 6F 77 73 5C 73 79 73 74 65 6D 5C windowssystem
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 .....WINDOWSSY
53 54 45 4D 5C 77 69 6E 69 6E 69 74 2E 65 78 65 STEMwininit.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 .....WINDOWSSY
53 54 45 4D 5C 64 6E 65 74 63 2E 69 6E 69 00 STEMdnetc.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:windowswin.ini的这个配置文件被重新修改,很想是被winint.exe,这条蠕虫从启动配置中移走msi216.exe。同样dentc.ini也重新被修改,把邮件地址从[email protected]改为[email protected],这些表明第二条蠕虫正在尝试从配置中去掉第一条的配置从而替代它。这种现象就像自然界的生态斗争,一条虫子同另外一台争夺地盘,或者是CPU资源。

如果你希望自己分析一下这个程序,可以下载win98.tar.gz。这个压缩包里包含了四天中snort捕获到的二进制的数据以及在我们honeypot上捕捉到的所有蠕虫的二进制程序。包括wininit.exe 和 msi216.exe。需要提醒的是,由于这些程序是直接从互联网上搜集来的,里面可能包含一些恶意代码,因此要小心使用。如果你不需要蠕虫的二进制程序的话,可以下载win98-wo.tar.gz。

结论

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

Acknowledgements

非常感谢H Carvey 和Ryan Russell,他们是主要的技术贡献者,看额外的信息,可以http://distributed.net或者http://www.cert.org。