9.3. 基于网络的 IDS

基于网络的入侵检测系统和基于主机的入侵检测系统的工作方式不同。基于网络的 IDS 的设计哲学是在路由器或主机级别扫描网络分组、审查分组信息、并在一个特殊文件中详细记录可疑分组。根据这些可疑分组,基于网络的 IDS 可以扫描它自己的已知网络攻击特征数据库,并为每个分组指定严重级别。如果严重级别够高,它就会给安全组的成员发送电子邮件或通知传呼机,因此安全组的成员就可以进一步调查这些异常特点。

随着互联网在其范围和交通流量方面的增大,基于网络的 IDS 已经越来越受欢迎。在安全行业中,能够扫描大量网络活动并成功地标记可疑传输的 IDE 很受好评。鉴于 TCP/IP 协议所固有的安全问题,开发扫描器、嗅探器、以及其它网络评审和检测工具来防止由蓄意不良的网络活动所带来的安全破坏已显得极端重要。这些活动包括:

多数基于网络的 IDS 需要把主机系统网络设备设置为混杂(promiscuous)模式。该模式允许设备捕捉每个经过网络的分组。混杂模式可以通过 ifconfig 命令来设置,例如:

ifconfig eth0 promisc

运行不带选项的 ifconfig 会显示出 eth0 现在处于混杂(PROMISC)模式。

eth0      Link encap:Ethernet  HWaddr 00:00:D0:0D:00:01  
          inet addr:192.168.1.50  Bcast:192.168.1.255  Mask:255.255.252.0
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:6222015 errors:0 dropped:0 overruns:138 frame:0
          TX packets:5370458 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:2505498554 (2389.4 Mb)  TX bytes:1521375170 (1450.8 Mb)
          Interrupt:9 Base address:0xec80 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:21621 errors:0 dropped:0 overruns:0 frame:0
          TX packets:21621 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1070918 (1.0 Mb)  TX bytes:1070918 (1.0 Mb)

使用一个类似于 tcpdump(包括在红帽企业 Linux 中)的工具,我们能够看到网络中的大量交通:

tcpdump: listening on eth0
02:05:53.702142 pinky.example.com.ha-cluster > \
 heavenly.example.com.860:  udp 92 (DF)
02:05:53.702294 heavenly.example.com.860 > \
 pinky.example.com.ha-cluster:  udp 32 (DF)
02:05:53.702360 pinky.example.com.55828 > dns1.example.com.domain: \
 PTR? 192.35.168.192.in-addr.arpa. (45) (DF)
02:05:53.702706 ns1.example.com.domain > pinky.example.com.55828: \
 6077 NXDomain* 0/1/0 (103) (DF)
02:05:53.886395 shadowman.example.com.netbios-ns > \
 172.16.59.255.netbios-ns: NBT UDP PACKET(137): QUERY; BROADCAST
02:05:54.103355 802.1d config c000.00:05:74:8c:a1:2b.8043 root \
 0001.00:d0:01:23:a5:2b pathcost 3004 age 1 max 20 hello 2 fdelay 15 
02:05:54.636436 konsole.example.com.netbios-ns > 172.16.59.255.netbios-ns:\
 NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
02:05:56.323715 pinky.example.com.1013 > heavenly.example.com.860:\
 udp 56 (DF)
02:05:56.323882 heavenly.example.com.860 > pinky.example.com.1013:\
 udp 28 (DF)

你会注意到,目的地不是我们这台机器(pinky.example.com)的分组也会被 tcpdump 扫描并记录。

9.3.1. Snort

虽然 tcpdump 是一个很有用的评审工具,它并不是一个真正的 IDS,因为它并不分析或标记异常分组。tcpdump所有分组信息不加分析地打印到输出屏幕或日志文件中。一个正确的 IDS 将会分析分组、标记潜在的恶意分组传输、并把它贮存到一个格式化了的日志中。

Snort 是一个 IDS,它能够准确简明地成功记录恶意网络活动,并在潜在破坏出现时通知管理员。Snort 使用标准的 libcap 库和 tcpdump 作为分组记录后端。

除了它的功能外,Snort 的最受重视的特性是其灵活的攻击特征子系统。Snort 有一个可以通过互联网来添加和更新的不断更新的攻击数据库。用户可以根据新网络攻击来创建其特征,并提交到 Snort 特征邮件列表中(位于 http://www.snort.org/lists.html),因此所有的 Snort 用户都可以从中受益。这种社区共享精神使 Snort 成为最新最强健的基于网络的 IDS。

注记注记
 

Snort 没有被包括在红帽企业 Linux 中,它也不被支持。本书之所以包括了对它的介绍,是想为有兴趣使用它的用户提供一个参考。

关于使用 Snort 的详情,请参见官方网站:http://www.snort.org/