セキュリティ対策 - ネットワーク侵入検知/防止 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」で扱うプロトコルは、以下のものです。

 プロトコル    説明    備考 
tcp Transmission Control Protocol - Wikipedia」を読んでくだされ
udp User Datagram Protocol - Wikipedia」を読んでくだされ
icmp Internet Control Message Protocol - Wikipedia」を読んでくだされ

 ネットワークは、「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 優先順位の指定


ハイスピードプラン