2017
03
31

Snort メモ

Snortの個人的メモ
随時更新予定
参考
http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node27.html
http://blog.joelesler.net/2010/03/offset-depth-distance-and-within.html

offset [どこから検索するか]
パケットのどこから検索を開始するか指定する
content:"cgi-bin/phf"; offset:4;
パケットの4バイト目以降から"cgi-bin/phf"の検索を行う

depth [どこまで検索するか]
パケットのどこまで検索するかを指定する
content:"GET"; depth:3;
パケットの1バイト目から3バイト目の間に現れる"GET"を検索する。ちなみにルール中の一番最初のcontentは自動的にオフセット0から検索されるので、offset:0と指定する必要はない。

distance [どこから次の検索を開始するか]
content Aが見つかったあと、次のcontent Bの検索をどこから開始するかを指定する
content:"ABC"; content:"DEF"; distance:1;
"ABC"が見つかったら、1バイト無視してから"DEF"の検索を開始する
/ABC[.]DEF/
「"ABC"のあとに"DEF"が現れるはずだけど、何バイト目以降に現れるかは分からない」という場合にはcontent:"ABC"; content:"DEF"; distance:0 とすれば、"ABC"のあとに何バイトあろうと関係なく"DEF"を検索します。

within [~以内を検索する]
content Aが見つかってから、何バイト以内にあるcontent Bを検索する
content:"ABC"; content:"EFG"; within:10;
"ABC"のあとの10バイト以内にある"EFG"を検索する。大体何バイト以内に次のcontentがあるか分かっている場合に有効。

dsize
パケットのペイロードのサイズをチェックします。
dsize:300<>400;
ペイロードのサイズが300から400バイトのパケットをチェックします。ただし、dsizeでペイロードのサイズを指定しても長大なデータに意図せずマッチしてしまうこともあります。例えばTCPは長大なデータを複数のパケットに分割して送信する性質がありますが、分割されたパケットの中にたまたまパターンにマッチするデータが含まれていた場合、これを検知してしまう可能性があります。またdsizeを使用するときは記述の順番に注意する必要があります。
以下の記述を見てみましょう。

content:"|15|"; dsize:1;

上記はサイズが1バイトでかつ0x15(16進数)というデータが含まれたペイロードを検知することを目的としています。本来なら15というパターンにマッチすることを期待してしまいますが、実際には1515151515というパターンにもマッチしてしまいます。1バイトと指定しているにも関わらずなぜそのようなことが起きてしまうのでしょうか。snortにはrecursion(再帰)という性質があり、パターンがマッチするまで検索を続けるのです。1515151515のパターンを例に見てみましょう。1バイト目に0x15が見つかりますが、1バイト目以降もデータが続いています。これでは、「1バイトでかつ0x15」という条件にマッチしないので、snortは引き続き同様のパターンを探します。2バイト目にも0x15が見つかりますが、やはり2バイト目以降もデータが続いているので、「1バイトでかつ0x15」という条件にマッチしないと判断され、snortは検索を継続します。5バイト目に0x15が見つかりました。5バイト目以降は何もデータがありません。ここで初めてsnortは「1バイトでかつ0x15」という条件にマッチしたと判断します。(1515151515)
このような誤検知を避けるにはdsizeをcontentよりも前に指定する必要があります。
dsize:1; content:"|15|";
上記のように記述すれば、snortはまずペイロードが1バイトかどうか確認してから0x15の検索を行うので誤検知を防ぐことができます。(こちらに詳しく書いてあります。)

PCRE あれこれ

先読み: 肯定先読みは"(?="、否定先読みは"(?!"と記述

\w+(?=;)

末尾にセミコロンがついた単語にマッチする

foo(?!bar)

末尾に"bar"が続かない"foo"にマッチする

個人的によく使うパターンは下記のようなもの

pcre:"/(?![a-zA-Z]{10})(?![0-9]{10})[a-zA-Z0-9]{10}/";

英数字が混ざった文字列10文字にマッチする。アルファベットのみで構成された10文字あるいは数字のみで構成された10文字にはマッチしない。

URLのパラメーターに英数字混合のランダムな文字列 (30~90文字)を含んだURLを検知したい。ただし、MD5ハッシュ値 (32文字)は除外する
pcre:"/\.[a-z]{3,4}\?[a-z]{3,10}=(?![a-z]{30,90})(?![0-9]{30,90})(?![a-z0-9]{32}\s)[a-z0-9]{30,90}\sHTTP\/1\./"

参考
http://www.pcre.org/original/doc/html/pcrepattern.html
Comment



Only the blog author may view the comment.

[16]

This design is incredible! You certainly know how to keep a reader amused.
Between your wit and your videos, I was almost moved to start my own blog (well,
almost...HaHa!) Excellent job. I really loved what you had to say, and more than that, how you presented it.
Too cool!

[21]

I leave a response each time I especially enjoy a article on a website or I have something to contribute to the discussion. Usually
it's caused by the passion displayed in the post I looked at.
And after this post Snort メモ : 奇妙な風景 Unique
Scene. I was actually moved enough to leave a leave a responsea response ;) I do have a couple of questions for
you if you usually do not mind. Could it be only me or does it give the impression like
a few of these remarks come across as if they are
left by brain dead people? :-P And, if you are posting
at additional places, I would like to keep up with you.
Would you list all of all your communal sites like your Facebook page, twitter feed, or linkedin profile?

[25]

Inspiring quest there. What happened after? Thanks!

[26]

Since the admin of this web site is working, no doubt very rapidly it will be renowned, due to its feature contents.

[36]

Precisely what I was looking for, thanks for putting up.

[41]

Glad to be one of many visitors on this amazing internet site :D.

Trackback
Trackback URL

«  | HOME |  »

奇妙な風景 Unique Scene
<< >>

プロフィール


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


スポンサード リンク


FC2カウンター


検索フォーム


RSSリンクの表示


リンク


ブロとも申請フォーム


QRコード