snort

  • 投稿者:
  • 投稿カテゴリー:snort

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