Snortとは
監視しているネットワークへの不正な侵入や攻撃を、
その手法である「パターンルールセット」(シグネチャ)と照らし合わせ
マッチングしているものを検知し、ログとして記録する
つまりIDS(Intrusion Detection System, 不正侵入検知システム)である
「Inlineモード」とするとIPS(Intrusion Prevention System, 不正侵入防止システム)機能も利用可能
IDSは不正なパケットを記録し、IPSは不正なパケットを破棄する
モード
スニッファーモードではネットワークを流れるパケットを単に読み込み、入ってくるパケットをコンソール上で次々と表示します。パケットロガーモードではそれらのパケットをディスクに記録します。ネットワーク不正侵入検知モードは、最も複雑かつ設定の変更が可能
IDSについて
監視対象
IDSが監視する対象によって、「ネットワーク型(NIDS)」と「ホスト型(HIDS)」がある
ネットワーク型の場合は、192.168.0.0/24などのネットッワークを監視し、基本的にNICにIPアドレスを割り振らずに運用する
ホスト型はIDSが稼働しているコンピュータ自身を監視する
分析方法
分析方法によって「シグネチャ型」と「アノマリ型」がある
シグネチャ型:「○○の場合は不正アクセスである」といった情報(シグネチャ)と現在のパケットを照らし合わせる
アノマリ型 :しきい値を設定し、それを超えた時にエラーとなる(例えば、10Mbpsをしきい値とすると、これを超えた時にアラートとなる)
Snort構成
・パケットデコーダ
データリンク層からトランスポート層レベルまでの解析とデコード処理を行い、次のプリプロセッサに渡す。
・プリプロセッサ
ポートスキャンやDoS攻撃などを認識するための処理
Snortの場合、このしくみはプラグイン形式となっており、様々なプリプロセッサが用意されている。
・検知エンジン
プリプロセッサから送られるパケットを取り出し
シグネチャ(ルール)の条件のいずれかに該当するか調査する
該当した場合はアラート(警告)などとしてアウトプットされる。
・出力プラグイン
アラートをログファイル形式やデータベース形式などで記録する。
インストール-debian7
root@hostname:/home/shimizu# aptitude install snort 以下の新規パッケージがインストールされます: libclass-isa-perl{a} libdaq0{a} libdumbnet1{a} libencode-locale-perl{a} libfile-listing-perl{a} libfont-afm-perl{a} libhtml-form-perl{a} libhtml-format-perl{a} libhtml-parser-perl{a} libhtml-tagset-perl{a} libhtml-tree-perl{a} libhttp-cookies-perl{a} libhttp-daemon-perl{a} libhttp-date-perl{a} libhttp-message-perl{a} libhttp-negotiate-perl{a} libio-socket-ip-perl{a} libio-socket-ssl-perl{a} libltdl7{a} liblwp-mediatypes-perl{a} liblwp-protocol-https-perl{a} libmailtools-perl{a} libmysqlclient18{a} libnet-http-perl{a} libnet-ssleay-perl{a} libpcap0.8{a} libpcre3{a} libprelude2{a} libsocket-perl{a} libswitch-perl{a} libtimedate-perl{a} liburi-perl{a} libwww-perl{a} libwww-robotrules-perl{a} mysql-common{a} oinkmaster{a} perl{a} perl-modules{a} snort snort-common{a} snort-common-libraries{a} snort-rules-default{a} 更新: 0 個、新規インストール: 42 個、削除: 0 個、保留: 0 個。 ... root@hostname:/home/shimizu# snort --version ,,_ -*> Snort! <*- o" )~ Version 2.9.2.2 IPv6 GRE (Build 121) '''' By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team Copyright (C) 1998-2012 Sourcefire, Inc., et al. Using libpcap version 1.3.0 Using PCRE version: 8.30 2012-02-04 Using ZLIB version: 1.2.7 root@hostname:/etc# ps afx | grep [s]nort 10386 ? Ssl 0:21 /usr/sbin/snort -m 027 -D -d -l /var/log/snort -u snort -g snort -c /etc/snort/snort.conf -S HOME_NET=[100.72.70.151/255.255.254.0] -i eth0 ### snort.confはSnortの設定ファイル、xxx.rulesはルールセット ### root@hostname:/etc# ls snort/ classification.config database.conf reference.config snort.conf threshold.conf community-sid-msg.map gen-msg.map rules snort.debian.conf unicode.map
オプションについて
-D デーモンモードでSnortを起動
-d アプリケーション層のデータをダンプ
-l 出力されたログを保存するディレクトリを指定
-i パケットをスニファするインターフェイス名を指定
-m 027 umask値が「027」つまり新規ファイルのパーミッションは「640」
-S 変数を定義する
-b ログをtcpdumpのフォーマットで保存
snort -v
スニッファーモード
snort -v -l /var/log/snort
パケットロガーモード
snort -D -h 100.72.70.151/23 -c /etc/snort/snort.conf -l /var/log/snort -b -d
ネットワーク不正侵入検知モード
シグネチャ詳細
alert tcp $EXTERNAL_NET any -> $TELNET_SERVERS 23 (msg:"TELNET Solaris memory mismanagement exploit attempt"; flow:to_server,established; content:"|A0 23 A0 10 AE 23 80 10 EE 23 BF EC 82 05 E0 D6 90|%|E0|"; classtype:shellcode-detect; sid:1430; rev:7;)
ルールヘッダ
()より左の部分
alert:アラートを出力しパケットの内容をログに記録する
tcp:プロトコルを指定
msg:指定された文字列をアラートまたはログに出力
content:パターンマッチ。このパターンとマッチするとアラートして登録する。”|”でバイナリを指定する
ツール
snortsnarf
Snortが出力したアラートを解析し、その結果をHTMLとして出力するツール
Basic Analysis and Security Engine(BASE)
snortのログをWEB上で確認できる
oinkmaster
ルールファイルを自動的にアップデートする
参考URL
ネットワーク型IDS「Snort」の導入
http://www.atmarkit.co.jp/ait/articles/0205/18/news001.html
Snortを導入する
http://www.itmedia.co.jp/help/howto/security/ids/01/
Snortでつくる不正侵入検知システム
http://www.atmarkit.co.jp/fsecurity/rensai/snort01/snort01.html
ネットワーク型IDS「Snort」の導入
http://www.atmarkit.co.jp/ait/articles/0205/18/news001.html