セキュリティ対策 - ネットワーク侵入検知/防止 Snort - rules の書き方
- 1. 概要
- 2. 基本構造
- 3. ヘッダ
- 4. オプション
1. 概要
「how to make snort rules」で「Google」大先生に尋ねると、約 2,210,000 件、「snort ルール 書き方」で、約 829 件かかります(2023年6月7日)。
なかなか、わかりやすいものがないのだけれど。
わたしも勉強しながら、書いてみますが、わたしの書き方がわかりやすいかは、謎で。
間違ったことを書いちゃうかもしれないので、ぜひ、いろいろなサイトを参考にしてください。
本ページは、下記のサイトを参考にさせていただきました。
「Snort ルールの構造」
「Snortのシグネチャの作成方法 - セキュリティ」
「Linux セキュリテイ対策 Snort による侵入検知」
「セキュリティ How-To - Snortのルール構造とその作成方法」
2. 基本構造
なかなか、実際にダウンロードしているルールだと、1行が長すぎるので、参考サイトのものを丸パクリさせていただきますが。
alert icmp any any -> any any (msg: "ICMP Packet detected"; sid:999999;)
となっておって、()までの部分と、()の部分、大きく2つに分かれます。
前半部分を「ルールヘッダセクション」、後半部分を「ルールオプションセクション」というそうです。
なげぇので、ここでは、「ヘッダ」「オプション」と割愛させていただきます。
ヘッダにふるまいや、ポート・アドレス等の定義をするようです。
オプションにアラート出力時のメッセージや、ヘッダに適合する通信の中のさらに検出するためのパケットの情報等を記述するようです。
3. ヘッダ
ヘッダの構造は
アクション プロトコル 送信元ネットワーク 送信元ポート -> 送信先ネットワーク 送信先ポート
となっています。
アクションには、下記の種類があります。
アクション | 説明 | 備考 |
alert | アラートを出力し、パケットの内容をログに記録 | |
log | パケットの内容をログに記録 | |
pass | パケットを通過させ、このパケットのチェックは終了 | |
activate | アラートを出力し、「dynamic」を有効にする | |
dynamic | 「activate」から呼び出されて、指定された処理を実行する | |
「snort」で扱うプロトコルは、以下のものです。
ネットワークは、「any」ですべてのネットワークを示します。
「192.168.0.1」の形式で、単独のアドレスを指定できるし、「192.168.0.0/24」の形式で、ネットワークを指定することもできます。
ポートは、そのものずばり、ポート番号ですな。
これも、「any」ですべてのポートを示します。
単独の数値で、ポート番号を指定する他に。
[80,81] の形式で、[]内を、カンマで区切って、複数ポートを指定できます。
[2601:2606] の形式で、コロンを挟んで開始、終了の範囲指定もできるようです。
4. オプション
これが、なかなかに難しい。
() 内に複数のオプションを記述できるのですが。
キーワードと引数をコロンで区切って、1オプション。
セミコロンで区切って、複数のオプションを記述します。
オプション末には、必ず、セミコロンが必要。
まぁ、書式自体は、難しいものではありませんけどね。
キーワードは、いっぱいあるようで、参考サイトにも抜粋しか書いておりませんが、ほぼ丸パクリで書きますと。
(ほぼ、そのまま書き写していますが、意味がわからないものも多数)
キーワード | 説明 | 備考 |
msg | 出力するメッセージの文字列 | |
content | 指定した文字列、バイナリデータ(16進数)とのマッチングを行う。さらにオプションとしてoffset/depthがある | |
regex | 「content」でワイルドカードを利用する際のキーワード | |
content-list | あらかじめ用意したファイルから読み込みマッチングを行う | |
nocase | 指定することで大文字・小文字を区別して検出する | |
flags | TCPフラグの指定。FIN/SYN/RST/PSH/URG/及び予約ビット(2/1)、TCPフラグなし(0)の指定ができる。またすべてにマッチングする場合(+)、いずれかにマッチングする場合(*)、マッチングしない場合(!)の指定ができる | |
logto | 特定のログファイルを指定する。/var/log/snortへログファイルを作成しておく | |
dsize | パケットペイロードサイズの指定 | |
classtype | classification.configにあるタイプを確認し、記述しておけばログにタイプと優先順位(priority)が付記される | |
priority | 優先順位の指定 | |
|
|