9.3. ネットワークベースのIDS

ネットワークベースの侵入検知システムはホストベースの IDS とは異なった動作を します。ネットワークベースの IDS の設計原理は、ルーターまたはホストレベルでの ネットワークパケットをスキャン、パケット情報の監査、そして拡張情報付きで 特別ログファイルへ不審なパケットの全てのログを取り込む事です。これら不審なパケットに基づいて、ネットワークベースの IDS は自身が持つ既知のネットワーク攻撃署名のデータベースをスキャンして、各パケットに重大度レベルを振り当てます。重大度のレベルが高い場合には、警告電子メールかポケベル通知がセキュリティチームのメンバーに出されるので、その異常の正体をさらに調査することができます。

ネットワークベースの IDS はインターネットの拡大に伴い一般に普及してきました。膨大な量となるネットワーク活動をスキャンして不審な通信にタグ付けできるIDS はセキュリティ業界内で広く受け入れられます。TCP/IP プロトコールが持つ固有の不安定さのため、次のような悪意あるネットワーク活動などセキュリティ侵害を防止するためにスキャナー、sniffer、その他ネットワーク監査・検知ツールを開発することは避けられない事態となってきました。

ほとんどのネットワークベースの IDS はホストシステムネットワークデバイスがpromiscuousモードに設定される必要があり、これにより そのデバイスがネットワーク上で渡されるすべてのパケットを 取りこむことができるようになります。Promiscuous モードはifconfig コマンドで次のように設定することができます。

ifconfig eth0 promisc

オプションなしでifconfigを実行すると、現在、eth0 は promiscuous (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(Red Hat Enterprise 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 は Red Hat Enterprise Linux には含まれないのでサポートされません。 Snort に関心があるユーザーへの参考としてここで説明のみしています。

Snort の使用方法についての詳細は公式ウェブサイト、 http://www.snort.org/ を参照してください。