SNORT FAQ日本語版



この文書はsnortの日本語FAQです。
誤訳、Typo等ありましたら筆者(awacs@hawkeye.ac)まで気軽にどうぞ。
もちろん、ご意見、提案も受け付けています。

内容そのものについての疑問も受け付けます。答えられる範囲までですが。
もし、英語で書く勇気があるなら、この文書の元となっているsnort FAQのメンテナである
Dragos Ruiu氏(dr@kyx.net)に送ってもいいと思います。#責任は持ちませんけど。
なお、この訳については、以下の方にご協力いただきました。
石川さん


-----ここからSnort FAQの訳文です。------
この文書について意見や要望がありましたらDragos Ruiu(dr@kyx.net)に
E-Mailでいつでも連絡してください。

以下の方々がこのFAQに貢献してくださいました。

Marty Roesch
Fyodor Yarochkin
Dragos Ruiu
Jed Pickel
Max Vision
Michael Davis
Joe McAlerney
Joe Stewart
Erek Adams
Roman Danyliw
Christopher Cramer
Frank Knobbe
Phil Wood
Toby Kohlenberg
Ramin Alidousti
Jim Hankins
Dennis Hollingworth
Paul Howell
Stef Mit
Ofir Arkin
Jason Haar
Blake Frantz
Lars Norman SØdergaard
Brent Erickson
Brian Caswell

----------------------------------------------------------------------------- 
snortに関するよくある質問

Section 1:Snortの背景について -------------------------- 1.1 Q: snortの開発者の名前はどう発音するのですか? 1.2 Q: Fyodor Yarochkinはnmapの開発者と同一人物ですか? 1.3 Q: どこでsnortに関する情報をより多く得ることができますか? 1.4 Q: どこでIDSに関する文書を入手したり講座を受けることができますか? 1.5 Q: Snortは断片化したIPパケットを扱えますか? 1.6 Q: SnortはTCPストリームの再構築を実行できますか? 1.7 Q: Snortはステートフルなプロトコル解析を行えますか? 1.8 Q: スイッチを使ったネットワークでもSnortは使えますか? 1.9 Q: "Stick"や"Snot"のようなノイズジェネレータに対してIDSは脆弱であると聞きました。そのような類の攻撃に対してSnortは脆弱ですか? 1.10 Q: ポリモーフィックな変異をするシェルコードに対しても使えると聞いたんだけど。 1.11 Q: Snortはアラートを生成するときにパケットすべてを記録するの? Section 2: Getting Started -------------------------- 2.1 Q: どうやってsnortを実行するの? 2.2 Q: どこに、どんな名前でログファイルが置かれるの? 2.3 Q: Snortセンサーを設置するよい場所はどこですか? 2.4 Q: Libpcapがパーミッションに問題があると出力する。どうしたらいい? 2.5 Q: なぜ/var/log/snortについてエラーがでるの? 2.6 Q: RedHatを持っているんだけど・・・・ 2.7 Q: どこで最新バージョンのlibpcapを入手できるの? 2.8 Q: どうしてビルド時に"Missing references"エラーがでるの? 2.9 Q: どうして"yylex"や"lex_init"エラーでビルドに失敗するの? 2.10 Q: Snortボックスを作ろうと思っている。Will this <Insert List> handle <this much> traffic? 2.11 Q: CIDR netmasksってなんですか? 2.12 Q: tcpdumpファイルを読み込む"-r"スイッチの用途は何ですか? Section 3: Configuring Snort ---------------------------- 3.1 Q: どうやったらSnortを"ステルス"インターフェースを使って設置できますか? 3.2 Q: どうやったらIPアドレスを割り振らずにSnortを実行できますか? 3.3 Q: ネットワークが複数のサブネットに分割されています。HOME_NETをどう定義すればいいですか? 3.4 Q: どうやったら同時に(simultaneously)複数のインターフェースでSnortを実行できますか? 3.5 Q: IPアドレスが動的に割り振られます。Snortは実行できますか?
3.6 Q: 1枚のネットワークカードに2つのエイリアスを定義しています。Snortにそれぞれのアドレスで"listen"させることはできますか?  3.7 Q: どうしたらあるホスト(ホスト群)から入ってくるトラフィックだけ無視させることができますか? 3.8 Q: パケットのヘッダと同様にペイロードを記録するようにできますか? 3.9 Q: なぜ/var/log/snortディレクトリにIPアドレスのサブディレクトリができないのですか? 3.10 Q: どうしたら一部のトラフィックだけ無視するようにできますか? 3.11 Q: どうしてportscan-ignorehostsリストに記載されたホストからのステルススキャンも記録してしまうのですか?
3.12 Q: コマンドラインオプションとルールファイルのどちらが優先して使われるのですか? 3.13 Q: ルールの適用順序はどうなっていますか? 3.14 Q: どうやったらstream4プリプロセッサを設定できますか? 3.15 Q: 新しい/変更されたルールセットはどこで入手できますか?どうやったらマージできますか? 3.16 Q: CVSから最新のSnortを入手する方法は? Section 4: Snort Rules and Alerts --------------------------------- 4.1 Q: Snortを実行したとき、ルールファイルでエラーがでるんだけど。 4.2 Q: Snortが"Rule IP addr ("1.1.1.1") didn't x-late, WTF?"とメッセージを出すんだけど? 4.3 Q: Snortをファイアウォールの内部(ipf/pf/ipchains/ipfilter)に設置するとアラートを出さないんだけど。 4.4 Q: あるアラートが大量にでます。何をすればいい?どこでもっと詳しい情報を得られますか?
4.5 Q: これらすべての偽警報はどうでしょうか? 4.6 Q: /var/log/snort内のサブディレクトリにできるICMPファイルはどうでしょう? 4.7 Q: なぜpassルールに記述したパケットでアラートが出力されるのですか? 4.8 Q: "ICMP destination unreachable"アラートはどうでしょう? 4.9 Q: どうして多くのSnortルールはPフラグ(PSH)とAフラグ(ACK)がついているの? 4.10 Q: アラート名についているIDSコードって何ですか? 4.11 Q: Snortから"BACKDOOR SIGNATURE..."というアラートを受けた。トロイの木馬がインストールされているの? 4.12 Q: "CGI Null Byte attacks"って何ですか? 4.13 Q: ACIDで、どうして一部のアラートは"unknown"IPアドレスのように見えるの? 4.14 Q: ACIDで、アラートにプライオリティをつけることは可能ですか? 4.15 Q: "SMB Name Wildcard"って何ですか? 4.16 Q: SYNFINスキャンって何? 4.17 Q: とても多くの"IIS Unicode attack detected"や"CGI Null Byte attack detected"の偽アラームを受けます。どうしたらこの検知を止めることができますか?
4.18 Q: どうやったらSnortのアラートやログをテストできますか? Section 5: Getting Fancy ------------------------ 5.1 Q: どのようにすればSnortのログをHTMLレポートにできますか? 5.2 Q: どうすれば複数のデータベースにログを記録できますか? 5.3 Q: どうすればイーサネットなしで、もしくは他のコンピュータなしでSnortをテストできますか?
5.4 Q: どうすればSnortをWin32サービスとして実行できますか? 5.5 Q: Snortを使ってipfilter/ipfwファイアウォールのルールを追加することはできますか? 5.6 Q: Snortが"react"キーワードでエラーが出るのですが・・・ 5.7 Q: SnortからE-mailでアラートを受け取ることはできますか? 5.8 Q: どのようにしたら特定のタイプのトラフィックを記録し、アラートをsyslogに送ることができますか? 5.9 Q: アラートがあがったとき、Snortが外部プログラムを起動することはできますか?

Section 6: Problems
-------------------
6.1 Q: どうもSnortのバグを見つけたようだ。さてどうしよう? 6.2 Q: SMBアラートがうまく動いていない。何か間違っている? 6.3 Q: Snortから"Garbage Packet with Null Pointer discarded!"というメッセージを受けた。へ? 6.4 Q: Snortから"Ran Out Of Space"というメッセージを受けた。なんだって? 6.5 Q: Snortのログをデータベースに送ろうとして問題が生じている。 6.6 Q: ACIDのデータベースとのコネクションが長いオペレーション(例:大量のアラートを消去)でタイムアウトしてしまう。
6.7 Q: なぜLinuxではパケットロストの統計が利用できないとレポートしてくるんだ? 6.8 Q: /var/log/snortのディテクトリが肥大化している・・・ 6.9 Q: なぜACIDからアラートを消そうと試みるとエラーになるんですか?
6.10 Q: ACIDをLynxからみると壊れているように見える。 6.11 Q: Snort実行時'snort [pid] uses obsolete (PF_INET, SOCK_PACKET)'とワーニングが出る。間違ってる? 6.12 Q: HPUXでlan0をオープンしようとするとrecv_ack: promisc_phys: Invalid argument、だって・・・ 6.13 Q: Snortが"can not create file"エラーで死んでしまう。ディスクは空いているのに。間違っている? 6.14 Q: WindowsでSnortを使おうとするとスタートアップ時にOpenPcap()でエラーが出る。 6.15 Q: Snortがデータベースにログを記録しない。 6.16 Q: ポートスキャンのログをデータベースに記録しない。 6.17 Q: Snortがsyslogにログを送らない。 6.18 Q: $DNS_SERVERS変数に代入したのに、そのIPアドレスからのポートスキャンメッセージが大量に出ている。 6.19 Q: なぜchrootしたSnortはSIGHUPを送ると死んでしまうの? 6.20 Q: Snortがクラッシュした。どうリスタートすればいい? 6.21 Q: なぜオートスイッチハブ上の10Mbpsや100Mbpsトラフィックを監視できないの? --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq-- *************************************** Section 1: SNORT BACKGROUND

*************************************** 1.1 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q:snortの開発者の名前はどう発音するのですか? A: Roeschは"fresh"の"f"を抜いたような発音です。 加えて、"Ruiu"は"screw you"の"sc"を抜いたような発音で、 Jedの名字は"pick-el"のような感じです。"Pickle"じゃないですよ。:) 1.2 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Fyodor Yarochkinはnmapの開発者と同一人物ですか? A: ちがいます。fyodor@insecure.orgはnmapの作者で、彼はペンネームです。そしてSnortのFyodorは本当の名字です。 えぇ、私のメールボックスも取り散らかってます。ただ、彼らのどちらも変更するには遅すぎると思います。:-) 1.3 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どこでsnortに関する情報をより多く得ることができますか? A: WWWサイト(http://www.snort.org)をチェックしてください。 それ以外では配布されるソースの中にある、SnortのユーザマニュアルとUSAGEファイルがあります。 1.4 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どこでIDSに関する文書を入手したり講座を受けることができますか? A: SANS、USENIX、そしてNetworld/Interopで侵入検知の講座を受け付けています。 http://www.sans.org http://www.usenix.org/event/ http://www.key3media.com/interop/ 多くの侵入検知に関する本もあります。 Network Intrusion Detection An Analyst's Handbook By Stephen Northcutt ISBN 0735708681 TCP/IP Illustrated, Volume 1 The Protocols By W. Richard Stevens ISBN 0201633469 Intrusion Detection By Rebecca G. Bace ISBN 1578701856 1.5 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortは断片化したIPパケットを扱えますか? A: 扱えます。 "preprocessor frag2"、"preprocessor defrag"、"preprocessor defrag2"のいずれかを使ってください。  それぞれわずかに異なった能力を持っています。 1.6 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: SnortはTCPストリームの再構築を実行できますか? A: はい。セッションをステートフルに解析してログをとったり、TCPを再構築し、さらにいろいろなことを行うstream4プリプロセッサを見てください。
FAQ内のstream4の設定に関する質問をみてください。

1.7 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortはステートフルなプロトコル解析を行えますか? A: はい。Snort FAQの#1.6をみてください。 1.8 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: スイッチを使ったネットワークでもSnortは使えますか? A: スイッチを使ったネットワークでのスニフが可能かどうかはどのような種類のスイッチを使っているかに依存します。 もしトラフィックのミラーリングが可能なスイッチを使っているならば、すべてのトラフィックをSnortマシンのポートに ミラーリングしてください。 1.9 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: "Stick"や"Snot"のようなノイズジェネレータに対してIDSは脆弱だと聞きました。Snortはそのような類の攻撃に対して脆弱ですか? A: 今や、stream4プリプロセッサを使うことでそのような種類のノイズジェネレータをうち破ることができるようになっています。 Stream4プリプロセッサを使用可能としていない状態でも、高度に最適化されているため、落ちたり、多くのアラートを見失わずに アラートの嵐を切り抜けることができる。 多量のアラートを生成させようとするツールの使用は、アナリストに誰かがかぎ回ろうとしていることを警告することになります。 1.10 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: シェルコード上でポリモーフィックな変異をさせる事ができると聞いたんだけど。 A: はい。そしてそれらはいくつかのNOP検知シグネチャを破ることができます。 しかし、通常のexploitルールはそのような混乱によって影響されてはなりません。 SPADEの統計異常検知はこれらの攻撃のいくつかを検知するかもしれません。 その他の防御方法は作成中であり、バージョン2.0までに準備ができるはずです。 1.11 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortはアラートを生成するときにパケットすべてを記録するの? A: はい。パケットはアラートの原因となるパケットのソースアドレスと同じ名前のディレクトリに保存されます。


--faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

***************************************
Section 2: GETTING STARTED
***************************************

2.1 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうやってsnortを実行するの? A: Snortをスニファモードで実行し(snort -dvi eth0)、パケットをみることができるかどうか確認してください。 そしてルールファイルのHOME_NET変数をあなたが守ろうとするネットワークに適切に設定し、実行します。 デフォルトルールファイルはSnortの配布物の中にあり、"snort.conf"という名前です。 これを基本のルールセットとして実行するには以下のコマンドラインを入力します。 snort -A full -c snort.conf すべてがうまくセットさていれば、インターフェースがプロミスカスモードになります。"ifconfig -a"を実行して (コマンド出力のオプション部で確認できます)確認してください。 もしなっていなければ、それを手動で行う必要があります。 デフォルトの出力モード(-A full)で動作しているsnortは非常によくコントロールされた環境以外では使用されるべきではない事に注意してください。 それはもっともsnortをゆっくりと実行させることになり、ファイルシステムのinode生成に関する問題から回復することが困難であることを示しています。 実際にIDSを機能させたい人は、ファストアラートモードでtcpdumpバイナリログファイルを出力するような(-A fast -b)方法を使うか、unifiedフォーマットをbarnyardで利用してください。 2.2 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どこに、どんな名前でログファイルが置かれるの? A: デフォルトでは、/var/log/snortにログは保存されます。Snortを"-l ディレクトリ名"で実行した場合には、 ログは指定したディレクトリに保存されます。 過去には、デーモンモード(-D)でSnortを実行した場合、ログファイル名は"snort.alert"でした。 諸般の事情で(For consistency sake)、これは変更されました。通常のモード、デーモンモードともにファイル名は"alert"です。 2.3 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortセンサーを設置するよい場所はどこですか? A: これは、あなたの組織のポリシー、そしてなにを検知したいかに大きく左右されます。 場所を考える一つの方法は、ファイアウォールの外側に置くか、内側に置くかを決定することです。 IDSをファイアウォールの外側においた場合、ファイアウォールがブロックしたかどうかに関わらず、すべての攻撃を検知することができます。 これはIDSをファイアウォールの内側に設置した場合に比べ、より多くのイベントを拾うことを意味し、 その結果より多くのログを出力することになります。 もし、ファイアウォールが通過させたトラフィックにのみ興味がある場合、IDSをファイアウォールの内側に設置してください。 リソースが許すなら、IDSをファイアウォールの内側と外側両方に設置するのがよいでしょう。 こうすれば、あなたのネットワークに向かってくるパケットと、ファイアウォールを通過したパケットのすべてを検知できます。 2.4 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Libpcapがパーミッションに問題があると出力する。どうしたらいい? A: Snortをroot権限で実行していないか、カーネルが正しく設定されていません。 2.5 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: なぜ/var/log/snortについてエラーがでるの? A: ログを出力するディレクトリを必要としているからです。 これを実行してください。:mkdir /var/log/snort ログディレクトリの所有がSnortを実行するユーザになっていることに注意してください。 2.6 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: RedHatを持っているんだけど・・・・ A: あなたの使っているlibpcapのバージョンをチェックしてください。:) もし0.5以上のバージョンじゃなかったら、アップデートしましょう。 2.7 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どこで最新バージョンのlibpcapを入手できるの? A: http://www.tcpdump.org/ 2.8 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうしてビルド時に"Missing references"エラーがでるの? A: libpcapを"--install-incl"オプションをつけてmakeするか、libpcap-develパッケージ(rpm)をインストールしてください。 2.9 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうして"yylex"や"lex_init"エラーでビルドに失敗するの? A: lexとyaccツールかGNUの同等のツールであるflexとbisonをインストールする必要があります。 2.10 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: I Want to build a snort box. Will this <Insert list of hardware> handle <this much> traffic? A: それはいろいろです。;-)ルールを少なくすると標準的なパフォーマンスがあがります。 必要のないルールをはずしたりルールをメンテナンスしたりしてください。
"XXMBの〜マシンを使っています"などのようなパフォーマンスに関する多くのディスカッションが存在します。
snort-usersメーリングリストのディスカッションをみてください。

2.11 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: CIDRネットマスクって何ですか? A: (http://public.pacbell.net/dedicated/cidr.htmlより) CIDRは昔のクラスA、B、Cアドレスより効果的なインターネット上のアドレススキーマです。
CIDR is a new addressing scheme for the Internet which allows for more i
efficient allocation of IP addresses than the old Class A, B, and C address
scheme.

CIDR Block Prefix # Equivalent Class C # of Host Addresses
/27 1/8th of a Class C 32 hosts
/26 1/4th of a Class C 64 hosts
/25 1/2 of a Class C 128 hosts
/24 1 Class C 256 hosts
/23 2 Class C 512 hosts
/22 4 Class C 1,024 hosts
/21 8 Class C 2,048 hosts
/20 16 Class C 4,096 hosts
/19 32 Class C 8,192 hosts
/18 64 Class C 16,384 hosts
/17 128 Class C 32,768 hosts
/16 256 Class C 65,536 hosts (= 1 Class B)
/15 512 Class C 131,072 hosts
/14 1,024 Class C 262,144 hosts
/13 2,048 Class C 524,288 hosts

CIDRに関するより詳細な技術情報は、こちらにあります。
http://www.rfc-editor.org/rfcsearch.html
また、関係するRFCは以下のものです。

RFC 1517: Applicability Statement for the Implementation of CIDR
RFC 1518: An Architecture for IP Address Allocation with CIDR
RFC 1519: CIDR: An Address Assignment and Aggregation Strategy
RFC 1520: Exchanging Routing Information Across Provider Boundaries in the
CIDR Environment

2.12 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: tcpdumpファイルを読み込む"-r"オプションスイッチの用途は何ですか? A: Snortを使うことで、tcpdumpデータ内の有害なコンテンツ、ポートスキャン、その他Snortが検知できる様々なものを解析できます。 Snortは通常のtcpdumpに比べより簡単にみることができるよう、パケットをデコードしたフォーマットで出力することもできます。 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq-- *************************************** Section 3: CONFIGURING SNORT *************************************** 3.1 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうやったらSnortを"ステルス"インターフェースを使って設置できますか? A: インターフェースにIPアドレスを割り振らずに使用可能にします。FAQの3.2をみてください。 http://www.geocrawler.com/archives/3/4890/2000/9/0/4399696/ A: イーサネットタップを使うか、"受信のみ"のイーサネットケーブルを自前で作ってください。 http://personal.ie.cuhk.edu.hk/~msng0/sniffing_cable/index.htm A: とりあえず、私は以下に示すケーブルを使っています。 LAN Sniffer 1 -----\ /-- 1 2 ---\ | \-- 2 3 ---+-*------ 3 4 - | - 4 5 - | - 5 6 ---*-------- 6 7 - - 7 8 - - 8 通常、スニファ側の1と2をつなぎ、3と6はそのままにLAN側に接続します。 LAN側の1と2はそれぞれスニファ側の3と6につなげます。 これにより、両端がつながっているように見せかけつつ、LANからスニファへの通信だけを許可されるようになります。 また、"incoming"トラフィックはLANへと返されるので、ハブでのみうまく動作します。 スイッチ環境では使えなくもないですが興味深いエラーが生じるでしょう。 スイッチが、送信されたパケットをまた同じポートで受け取る事になるため、MACアドレステーブルが混乱し、 スイッチはすぐに落ちてしまうのです。
このため、ハブでしかうまく動きません。


3.2 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうやったらIPアドレスを割り振らずにSnortを実行できますか? A: ifconfig eth1 up 3.3 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: ネットワークが複数のサブネットに分割されています。HOME_NETをどう定義すればいいですか? A: Snort1.7はIPリストをサポートしています。アドレスの数だけ単一の変数に定義できます。たとえば、以下のように。 var HOME_NET [10.1.1.0/24,192.168.1.0/24] 注意:現時点ですべてのプリプロセッサがIPリストをサポートしているわけではありません。
ほかの方法で記述しない場合、IPリスト変数を使用できるどんなプリプロセッサでもHOME_NETの一つ目の値を使用すると思われます。
ポートスキャンプリプロセッサは一つの例です。すべてのポートスキャンを検知可能にするためには�0.0.0.0/0�を
プロセッサの第一引数に指定します。

preprocessor portscan: 0.0.0.0/0 5 3 portscan.log

ファインチューニングや、ノイジーな、もしくは信頼しているコンピュータを定義するにはportscan-ignorehostsプリプロセッサ
を使用します。


3.4 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうやったら同時に複数のインターフェースでSnortを実行できますか? A: もしあなたが(LPF使用可能な)Linux2.1.x/2.2.xカーネル上でSnortを動かしていないなら、 たった一つの方法は、(-iオプションでインターフェースを指定し)インターフェース一つにつき一つのインスタンスでSnortを実行することです。 しかし、Linux2.1.x/2.2.x(もしくはそれ以上)とS. Krahmer氏のパッチを当てたlibpcapライブラリを使用している場合、 インターフェース名として"any"という指定が可能です。 この場合、Snortはすべてのインターフェースに入ってくるトラフィックを扱うことが可能です。 3.5 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: IPアドレスが動的に割り振られます。Snortは実行できますか? A: はい。Snort1.7以降では、<インターフェース名>_ADDRESS変数が使えます。 この変数の値は常にSnortを実行するインターフェースのIPアドレス/ネットマスクにセットされています。 もしインターフェースがダウンし、再びアップする(そしてIPアドレスが再び割り振られる)と、 Snortをリスタートする必要があります。 過去のバージョンでは、スクリプトで同様の結果を得ることができます。 3.6 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: 1枚のネットワークカードに2つエイリアスを定義しています。Snortにそれぞれのアドレスで"listen"させることはできますか? A: 少なくともバージョン1.7以降を使っている場合、以下のようにIPリストを定義できます。以下に例を示します。 var HOME_NET [192.168.<your-IP>/24,<Internet address>/32] もしもっと古いバージョン(1.6.3-patch2など)を使うのなら HOME_NET変数をそれぞれ再定義する必要がある。以下に例を示します。 var HOME_NET 10.1.1.0/24 include scan-lib etc. var HOME_NET 192.168.1.0/24 include scan-lib etc. 3.7 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうしたらあるホスト(ホスト群)から入ってくるトラフィックだけ無視させることができますか? A: passルールを記述し、portscan-ignorehostsリストにホスト(群)を追加します。
passルールを有効にするために、Snortを-oオプションつきで実行します。
http://www.snort.org/docs/writing_rules/に詳細な情報があります。

A: コマンドラインに無視したいホストをBPFで記述して実行します。以下に例を示します。

$ snort <commandline options> not host 192.168.0.1

3.8 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: パケットヘッダと同様にペイロードを記録するようにできますか? A: コマンドラインオプションで"-d"を使ってください。 3.9 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: なぜ/var/log/snortディレクトリにIPアドレスのサブディレクトリができないのですか? A: それはログ出力にどのような設定を行っているかに依存します。もしログをバイナリフォーマットで出力していれば、 テキスト形式の代わりにバイナリログを得るでしょう。
3.10 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうしたら一部のトラフィックだけ無視するようにできますか? A1: コマンドラインでBPFフィルタを記述します。tcpdumpのmanページにフィルタに関する記述があります。 A2: passルールを使います。 A3: portscanプリプロセッサは独自のリストを使います。portscan-ignorehosts.rulesファイルのディレクティブです。 3.11 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうしてportscan-ignorehostsリストに記載されたホストからのステルススキャンも記録してしまうのですか? A: そういった種類のTCPパケットはどこから送信されたかに関わらず、本質的に疑わしいものです。 ポートスキャンディテクターはそのような"ステルス"パケットをリポートするよう設計されています。 仮にそれがポートスキャンのモニター対象になっていないホストからのものであってもです。 �ステルス�パケットを無視するオプションは将来追加されるでしょう。 3.12 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: コマンドラインオプションとルールファイル、どちらが優先して使われるのですか? A: コマンドラインオプションはルールファイルの記述よりも優先的に実行されます。 もしルールファイルを手修正せずに手早く試してみたいときには、コマンドラインで 記述することで多くの場合ルールファイルを無視できるようになります。 3.13 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: ルールの適用順序はどうなっていますか? A: Martyは数度にわたってsnort-usersメーリングリストで答えてます。 ここに示すのは、"Thu, 22 Feb 2001 00:31:53 -0500, titled "Re: [Snort-users] order of evaluation of rules""です。 現在、Snortのルールデータを保存する構造はRuleTreeNodes(RTN)とOptTreeNodes(OTN)です。 これらのデータ構造はRTNを一番最初の列に、そしてOTNをRTNの下の行として格子状の2次元としてリンクした構造として保存されます。 以下にASCIIイラストを示します。(Here's an ASCII illustration from the infamous "lisapaper":)
訳注:要はRTNを作って、その下にOTNをぶら下げるような感じです。下の絵もそうなっていますね。:-)

RTN RTN RTN
-------------- -------------- -----
| Chain Header | | Chain Header | | Chai
| | | | |
| Src IP | | Src IP | | Src
| Dst IP |----->| Dst IP |----->| Dst .....
| Src Port | | Src Port | | Src
| Dst Port | | Dst Port | | Dst
| | | | |
-------------- -------------- -----
| |
| |
| |
OTN \|/ OTN \|/
-------V------ --------V-------
| Chain Option | | Chain Option |
| | | : |
| Content | :
| TCP Flags | :
| ICMP Data |
| Payload Size |
| etc. |
| |
---------------
|
|
|
OTN \|/
-------V------
| Chain Option |
| |
| Content |
| TCP Flags |
| ICMP data |
| Payload Size |
| etc. |
| |
--------------
|
|

似たルールヘッダ(例えばすべてのCGIルール、古いステルスポートスキャン検知ルール、
ほとんどすべての一つのサービスに的を絞ったルール、など)は効率化のために一つのRTNの
もとにグループ化され、適用可能なOTNはその下にぶら下がります。
例として、あなたが以下のような3つのルールを使用している場合、
three rules like this:

alert tcp any any -> $HOME 80 (content: "foo"; msg: "foo";)
alert tcp any any -> $HOME 80 (content: "bar"; msg: "bar";)
alert tcp any any -> $HOME 80 (content: "baz"; msg: "baz";)

それらすべては同じRTNとしてグループ化され、OTNは以下のようにぶら下がります。

RTN
--------------------
| SIP: any |
| SP: any |
| DIP: $HOME |
| DP: 80 |
--------------------
|
|
OTN \|/
---------v----------
| content: foo |
| msg: foo |
---------------------
|
|
OTN \|/
---------v----------
| content: bar |
| msg: bar |
---------------------
|
|
OTN \|/
---------v----------
| content: baz |
| msg: baz |
---------------------

こうすればチェックを行うとき、RTNを一度だけみればよいので効率的な方法です。
また、この配列には別の観点があります。それは関数ポインタのリストです。
配列中のそれぞのれのノードは関数ポインタのリストとリンクしています。
リスト中の関数は現在のパケットが現在のルールノードの情報と一致するかどうか決定するために実行される必要のあるものです。
この間数ポインターのリストを持っていることで効率と柔軟性を併せ持ちます。
現在のルールが持っていない事をテストする必要がありません。(例:"any"ポート/IPアドレス、contentを持つ/持たないルール、など)
また、プログラム全体を修正する必要なく、任意のパケット解析機能を持たせることができます。
(バージョン1.5以前の場合)(which was the case in versions prior to version 1.5).
訳注:わかりにくいのですが、ここで言う、関数ポインタはCで言うところのポインタの事ではないかと思っています。
   ただし、ソースコードを読んでないので責任は持ちません:-P
   ここで言いたいのは、ポインタのリストとリンクしているので、比較が簡単だよ、と言いたいんだと思います。

このアーキテクチャがルールに関係します。ルールの順序に関するこの議論において、
興味深いことはこのルールの順序を説くことがトリッキーであると言うことです。
例えば、

alert tcp any any -> $HOME 80 (content: "foo"; msg: "foo";)
alert tcp any any -> $HOME 1:1024 (flags: S; msg: "example";)
alert tcp any any -> $HOME 80 (flags: S; msg: "Port 80 SYN!";)
alert tcp any any -> $HOME 80 (content: "baz"; msg: "baz";)

このようなルールの場合、以下のようになります。gets built like this:


RTN RTN
-------------------- --------------------
| SIP: any | | SIP: any |
| SP: any |-------->| SP: any |
| DIP: $HOME | | DIP: $HOME |
| DP: 80 | | DP: 1-1024 |
-------------------- --------------------
| |
| |
OTN \|/ \|/
---------v---------- ---------v----------
| content: foo | | flags: S |
| msg: foo | | msg: example |
-------------------- --------------------
|
|
OTN \|/
---------v----------
| flags: S |
| msg: Port 80 SYN! |
--------------------
|
|
OTN \|/
---------v----------
| content: baz |
| msg: baz |
--------------------

適用されるRTNが作られる順序により、すべてのポート80に関係するルールは1から1024のポートに関するルールの前に評価されます。
これは、規則パーサが、ポート80での通信のために一つ目のチェーンヘッダを構築し、
ルールリストにそれをつけるからです。次に、次のルールがあたらしいチェーンヘッダが
要求されると判断しますので、ヘッダを構築し、つけます。
この場合、(ルールだけをみた場合)直感的に"example"メッセージが評価され、"Port 80 SYN!"は評価されないように感じるでしょう。
しかし、実際には逆なのです。


3.14 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうやったらstream4プリプロセッサを設定できますか? A: Stream4は2つの機能を実現する全く新しいプリプロセッサです。 1) Stateful inspection of TCP sessions 2) TCP stream reassembly さらにロバスト性を持ったストリーム再構築能力を持ち、Snortに対する最新の"ステートレスな攻撃" (例えばstickやsnot)をうち破る事を望み、stream4を実装しました。
Stream4は企業クラスのユーザ(256を越えるストリームを同時に追跡し、再構築する必要のある人々)が
ストリーム再構築を扱えるようにするために書かれています。
コードを強固で、安定し、かつ早くなるように最適化しています。
試験及び計算では、数千の同時接続下で十分ストリーム再構築を行え、64000以上の同時セッションに対し
ステートフルインスペクションを行うことができると確信しています。

Stream4は大きく、複雑なコード(約2000行)からできており、実行環境に関係した多くのオプションがあります。
ここに示します。

preprocessor stream4: [noinspect], [keepstats], [timeout <seconds>],
[memcap <btream4_reassemble defaults:
Reassemble client: ACTIVE
Reassemble server: INACTIVE
Reassemble ports: 21 23 25 53 80 143 110 111 513
Reassembly alerts: ACTIVE

Stream4と協調して機能する新しいコマンドラインオプションが"-z"です。
-zオプションは2つのうち、いずれか一つを引数に持ちます。それは"all"と"est"です。
引数蚤ll�はデフォルトで、Snortに通常通りアラートを出すように設定します。
もし-zオプションに引数"est"を指定した場合、TCPの通信において、3wayハンドシェークに
より通信が双方で確立されたか、双方向で協調した活動が確認されたときのみアラートを
出力します。(例:ある通信が一方通行になり、他方からRSTかFINが送信元に返されたとき)
"-z est"を指定したとき、SnortはTCPベースのstick/snortの攻撃を完全に無視します。


3.15 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: 新しい/変更されたルールセットはどこで入手できますか?どうやったらマージできますか? A: 新しいルールセットはCVS(3.16を見てください)か、www.snort.orgからダウンロード可能です。 sourceforgeが運営する、Snortのルールに特化したメーリングリスト、snort-sigsもあります。 新しいルールをマージする、snortppプログラムはSnortのソースアーカイブ中のsnort/contrib ディレクトリにあります。 3.16 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: CVSから最新のSnortを入手する方法は? A: Snortプロジェクトの使用している、SourceforgeのCVSレポジトリはanonymousでチェックアウトできます。 あなたがチェックアウトしたいモジュールはmodulename.rで指定しなくてはいけません。 パスワードを要求された場合は単にエンターキーを押すだけです。 cvs -d:pserver:anonymous@cvs.snort.sourceforge.net:/cvsroot/snort login cvs -z3 -d:pserver:anonymous@cvs.snort.sourceforge.net:/cvsroot/snort co snort モジュールディレクトリ内部からの最新版については-dオプションは必要ありません。 *************************************** Section 4: RULES AND ALERTS *************************************** 4.1 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortを実行するとルールファイルでエラーがでます。 エラーはこのようなものです。 ERROR somefile.rules:yy => Port value missing in rule! ERROR somefile.rules:yy => Bad port number: "(msg:"blah" ERROR somefile.rules:yy => Couldn't resolve hostname blah どうしたらいい? A: somefile.rulesは構文エラーの生じたファイル名で、yyはエラーの生じた行です。 エラーにはいろいろな可能性があります。 a) ルールにポート番号が書いてないか、間違った数字を入れているか、ホストネームがおかしいか ーこういった場合はルールの作者が注意する必要があります。 b) ありがちなのは、ルールそのものはあっているけれど、そこで使われている変数が定義されていない場合です。 ルールファイルを開き、エラーの行を見て、宣言された変数を使っていることを確認してください。 変数に関する詳しい情報は以下にあります。 http://www.snort.org/docs/writing_rules/chap2.html#tth_sEc2.1.2 4.2 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortが"Rule IP addr ("1.1.1.1") didn't x-late, WTF?"とメッセージを出すんだけど? A: (くすっ)IPアドレスのクォートをとってもう一度やってみてください。 :-) 4.3 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortをファイアウォールの内部(ipf/pf/ipchains/ipfilter)に設置するとアラートを出さないんだけど。 A: ファイアウォールのルールでSnortがアラートを出しそうなトラフィックをブロックしているのでしょう。 4.4 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: あるアラートが大量にでます。何をすればいい?どこでもっと詳しい情報を得られますか? A: いくつかのルールはほかのものに比べてより偽警報を出しやすいのです。 それはネットワークによって異なります。まず最初に調べる必要があるのは、それが本当に偽警報であるかどうかです。 いくつかのルールにはIDナンバーつきで参照できます。 以下にそれぞれを確認できるシステムと、それぞれのアラートについてどこに行けばより詳細な情報を入手できるかを示します。 System Example URL --------------------------------------------------------------- IDS IDS182 http://www.whitehats.com/IDS/182 CVE CVE-2000-0138 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2000-0138 Bugtraq BugtraqID 1 http://www.securityfocus.com/vdb/bottom.html?vid=1 McAfee Mcafee 10225 http://vil.nai.com/vil/dispVirus.asp?virus_k=10225 パケットのペイロードを調査し、アラートが偽りかどうかを決める必要があります。 パケットのペイロードを記録するためには-dオプションが必要です。 もし、アラートが偽りであると確信したら、大量の誤検知を生じているマシンに対してpassルールを 作成する必要があるかもしれません。 もし、制御不可能なほど大量の誤検知が異なったマシンで生じてしまう場合には、passルールをトラフィック全体に 対して設定する事も可能です。これは最後の手段としてください。 4.5 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: これらすべての誤警報はどうでしょう? A: 大量の誤検知の方がずっとましだと考えています。 必要ないならば止めてしまうこともできます。逆に、ほんの少しだけ設定していると、 Snortがきちんと動作しており、何の問題も生じていない、といった慢心を抱かせて しまうかもしれません。 4.6 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: /var/log/snort内のサブディレクトリにできるICMPファイルはどうでしょう? A: それらのほとんどは、ネットワークの接続が失敗したときのdestination unreachableやport unreachablesを
Snortが検知したものでしょう。

4.7 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: なぜpassルールに記述したパケットでアラートが出力されるのですか? A: ルールが適用されるデフォルトの順序は、アラートが最初で次にpassルール、そしてログルールの順番です。 この順序は50のすばらしいアラートルールを書き、そして間違ったpassルールを誤って作ってしまい、 アラートルールが使用不能にならないようにするためです。 もし、本当にpassルールが最初に解釈されるように順序を変更したいならコマンドラインで-oスイッチを使ってください。 4.8 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: "ICMP destination unreachable"アラートはどうですか? A: ICMPは"Internet Control Message Protocol"の略語です。 接続に失敗したとき、ICMP unreachパケットはそのときのオリジナルのデータグラムとIPヘッダの 先頭64ビット(8バイト)をつけて送られます。 ICMP Destination Unreachable(メッセージタイプ3)は送信先アドレスにIPパケットを 届けることができなかったとき、送信元に送られます。 ICMPのコードはどうしてパケットが届かなかったのかを示します。 コードは以下の通りです。 0 (ネットワークに届かない)net unreachable 1 (ホストに届かない)host unreachable 2 (プロトコルを届けられない)protocol unreachable 3 (ポートに接続できない)port unreachable 4 (フラグメントしないといけないのにDF(フラグメントしてはいけない)ビットがセットしてある)fragmentation needed and DF bit set 5 (ソースルーティングに失敗した)source route failed As far as why... "it all depends..." ICMP Unreachableエラーメッセージは2つのグループに大別できます。 - ルータから送られるもの(16種類すべて) - ホストから送られるもの(2つだけ) ホストから送られるもの2つは何かというと、 ICMP Port Unreachable - 送り先ホストのポートが閉じられている(言い換えればリッスン状態になってない) ICMP Protocol Unreachable - 試そうとしているプロトコルを送り先ホストが使用していない ICMPのタイプフィールドとコードフィールドはなぜパケットを届けることができなかったかを示します。 Snortの出力するいくつかのICMPアラートはicmp-info.rulesに記述されており、よい情報源です。 現時点ではリファレンスも関連するクラスタイプも設定されていません。 ほかのルールはやっかいな活動に関係している傾向があります。例えば、icmp.rulesに記述してあるルール、 alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"ICMP ISS Pinger"; content:"|495353504e475251|";itype:8;depth:32; reference:arachnids,158; classtype:attempted-recon; sid:465; rev:1;) これは、archnidsを参照することにより、その重要性を確認できるものです。 Crasstypeは大なり小なり、そのイベントの相対的な重要性を示しています。 less the relative importance of the event. 送信先のUDPポートが閉じている、言い換えればリッスン状態になっていないとき、 送信先ホストはICMP Port unreachableをソースアドレスに対し送り返します。 いくつかのプログラム(*nixベースのマシンが持つtraceroute)はこのメッセージを使用しています。 Windowsベースのマシン(tracert)はICMP echo requestをデフォルトで使用します。 もっと詳細な情報は以下にあります。 IP ftp://ftp.isi.edu/in-notes/rfc791.txt ICMP ftp://ftp.isi.edu/in-notes/rfc792.txt TCP ftp://ftp.isi.edu/in-notes/rfc793.txt UDP ftp://ftp.isi.edu/in-notes/rfc768.txt そして http://www.iana.org/assignments/icmp-parameters 実際以下のURLを手軽な場所においておくといいでしょう。 http://www.iana.org/ また、ICMPに関するよい文書がhttp://www.sys-security.com/にあります。 4.9 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうして多くのSnortルールはPフラグ(PSH)とAフラグ(ACK)がついているの? A: 理由の一つはPAフラグをつけることで誤検知を最小にしたいからです。 コネクションが確立しただけでアラートを受けることになります。 もしすべての試みをみたいならば、シグネチャを修正する必要があります。 シグネチャを追加するか、もしくは特定のポートへの試みを記録したファイアウォールのログを使ってください。 4.10 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: アラート名についているIDSコードって何ですか? A: IDSは"Intrusion Detection Signature"の略で、知られている攻撃の試みを特定するものです。 http://www.whitehats.com/にあるarachNIDSサーチエンジンで特定のIDSのIDを使って調べられます。 ルール中の"references"キーワードもまた詳しい調査のよいポインターです。 for further research. 4.11 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortから"BACKDOOR SIGNATURE..."というアラートを受けた。トロイの木馬がインストールされているの? A: もしパケットのデータを吐き出しているなら、それを見返してください。 これらのルールはポート番号だけを基準に判断しているため、非常に高い割合で誤検知することが知られています。 4.12 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: "CGI Null Byte attacks"って何ですか? A: それはhttpプリプロセッサの機能の一部です。基本的に、httpのデコードルーチンがhttpリクエスト中に
"%00"を見つけると、このメッセージを出力します。
cookiesにURLエンコードされたバイナリが入っていたり、ポート443で流れている、SSLで暗号化された通信を
検知対象としている場合にしばしば誤検知します。
パケットログをとっているならばチェックして、アラートを引き起こす文字列が本当かどうか確認してください。
同様に、UnicodeのアラートもcookieやSSLで同様の誤検知をします。
パケットダンプをとることが本当にアタックをされているかどうかを確認する唯一の方法です。
もっとも、これはすべてのコンテンツを基本としたアラートすべてに言えることです。

4.13 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: ACIDで、どうして一部のアラートは"unknown"IPアドレスのように見えるの? A: Snortのデータベースプラグインはルール(シグネチャ)によってアラートが発生したとき、 パケットの情報だけをデータベースに入力します。そのため、アラートがプリ-プリプロセッサ(ポートスキャン やミニフラグメント)によって作成されたとき、ルールと一致しているわけではないので、 パケットの情報はログに書き込まれず、その出来事だけが記録されます。 結果として、ACIDはパケットレベル(IPアドレスなど)の情報を出力することができないのです。 特定のアラートは、統計上はユニークなIPアドレスとしてでず、"unknown"なIPとしてリストされ、 アラートをデコードしてもパケットに関する情報がリストされないのです。 4.14 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: ACIDで、アラートにプライオリティをつけることは可能ですか? A: この質問に簡単に答えると、"できません"。 ACIDは基礎となるデータベースに左右されるため、Snortがプライオリティをアサインしなければ ACIDはプライオリティを持ち得ません。それでもなお、いくつかの対処法があります。

異なった重要性を持つアラートをそれぞれ個別のデータベースに記録することでデータベース中に
プライオリティをつけくわえることが可能です。
例えば、バッファオーバーフローのようなクリティカルなアラートを一つのデータベースに、スキャンのような
アラートを別のデータベースに書き込みます。そして、二つの異なったバージョン,
つまり異なったデータベースのインスタンスを指し示すACIDをロードするのです。


Alert Groups(AG)をマニュアルで介在させることでもプライオリティをアサインできます。
本質的に、この方法はそれそれのレベルのAGを作成し、手作業でアラートを正しいグループに
移動させる必要があります。

4.15 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: "SMB Name Wildcard"ってなんですか? A: Whitehats IDS177 http://dev.whitehats.com/cgi/test/new.pl/Show?_id=netbios-name-query あなたのローカルネットワークの「外側」からトラフィックがきているかどうか特定する。 パブリックなネットワークからのnetbiosトラフィックを許可することは通常、非常にセキュアでない。 もし使用しているルールが入り側のトラフィックのみ参照するようならば、 なぜ多くの誤検知が生じていないかを説明しているでしょう。 これを読んでいる誰もが大量の誤検知を目にしています。ーもしソースアドレスが!$HOME(もしくは あなたの使用する内部ネットワークに相当する変数)になるようにルールを修正したら、 多くの誤検知が消えてなくなることを確認できるでしょう。 この値はデフォルトの管理者権限共有、C$、ADMIN$などにアクセスしたことを示しています。 通常の利用では生じません。ーファイルを共有したくて共有とACLを明示的に定義した場合(でも・・・?)。 4.16 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: SYNFINスキャンって何? A: SYNFINスキャンはSYNとFIN、2つのフラグをセットしていることからその名前が付いています。 4.17 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: とても多くの"IIS Unicode attack detected"や"CGI Null Byte attack detected"の偽アラートを出力します。どうしたらこの検知を止めることができますか? A: これらのメッセージはhttp_decodeプリプロセッサが出力します。もしこの検知を止めたいなら -unicodeや-cginullをhttp_decodeプリプロセッサの行に続けて書いてください。 preprocessor http_decode: 80 8080 -unicode -cginull 内部のユーザがふつうにWWWを見て回ることが、このプリプロセッサにアラートを出力させる引き金になります。 ネットスケープはとりわけよく引き金になる事で知られています。 ほかの方法としては、以下のような感じで外向きのhttpトラフィックをBPFフィルタで無視させることもできます。 snort -d -A fast -c snort.conf not (src net xxx.xxx and dst port 80) これは5-6ヶ月の間非常にうまく働いており、Snortは公開webサーバに対する実際に危険なcgi nullやunicode攻撃を 検知してくれます。 4.18 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうやったらSnortのアラートやログをテストできますか? A: 常時監視させるテストには以下のルールを試してみてください。 alert tcp any any -> any any (msg:"TCP traffic";) また、sneeze(http://snort.sourceforge.net/sneeze-1.0.tar)も探してみてください。 Sneezeは誤検知発生プログラムで、Snortのシグネチャを読み、それらのルールの引き金となるような パケットを生成します。 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq-- *************************************** Section 5: GETTING FANCY *************************************** 5.1 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どのようにすればSnortのログをHTMLレポートにできますか? A1: よく知られているソリューションはSnortSnarfです。これはアラートを見やすくするために、 SnortのアラートからHTMLファイルを作成するツールです。 (and doing a whole lot more). http://www.silicondefense.com/snortsnarf/ A2: もしデータベースでログをとるようにセッティングしている場合はACIDを試してみてください。 現在のACIDの機能を説明したドキュメントは以下にあります。 http://www.cert.org/kb/acid/ 5.2 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうすれば複数のデータベースにログを記録できますか? A: 複数のアウトプットプラグインを用いることで冗長性を持たせることができます。 以下に例を示します。 複数のデータベースにログを記録するプラグイン output log_database: mysql, dbname=snort host=localhost user=xyz output log_database: mysql, dbname=snort host=remote.loghost.com user=xyz リモートのデータベースとローカルにtcpdumpで保存する output log_database: mysql, dbname=snort host=remote.loghost.com user=xyz output log_tcpdump: /var/log/snort.tcpdump そしてtcpdumpファイルをSnortを使って再生し、データベースを再び作ることができます。 5.3 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうすればイーサネットなしで、もしくは他のコンピュータなしでSnortをテストすることができますか? A: 二つのダミーデバイス間をルーティングする必要があります。You have to use routing between two dummy devices: modprobe -a dummy (ダミーデバイスが使えるようカーネルが構築されている必要があります) ifconfig dummy0 192.168.0.1 ifconfig dummy0:0 192.168.0.2 telnet 192.168.0.3 12345 二つ目のIPアドレスは1つ目と同じインターフェースに割り振り、例えばdummy1やdummy2に割り振らず、 アクセスをテストしたいアドレスはインターフェースに割り振っていないものを使う事が重要です。 Snortがプロミスキャスモードで通信を傍受できるアドレスを使ってください。(上記ではHOMEDIR=192.168.0.0/16) 5.4 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうすればSnortをWin32サービスとして実行できますか? A: サービスのサポートはSnort-1.6.3-patch2から実装されました。 バイナリは以下からダウンロードできます。 http://www.datanerds.net/~mike/dev/snort-1.6.3-patch2-service.zip 現在、バイナリのみダウンロードできます。 Snort Service FAQ: 1) すべてにおいて絶対パスを使用しなければいけません。すべてです。 コマンドライン、設定ファイルなどすべてです。例: includeステートメントはフルパスを使う必要があります。"include scan-lib"は間違いです。
"include C:\snort\scan-lib"が正解です。
すべてのコマンドラインオプションはフルパスを使う必要があります。
"snort.exe -l ./log"は間違いです。"snort.exe -l C:\snort\log�"正解です。

2) いつでもコマンドラインでログ保存ディレクトリを指定しなければなりません。(-lを使います)
もし指定しなかったら、サービスは始まらず、NT/2000においては約4分後にブートに失敗します。

3) Snortをサービスとしてインストールする方法は以下の通りです。
必要とするオプションと-Iオプションをつけて、Snortを実行します。
例えば、'snort.exe -c snort.conf -l ./log -h 192.168.1.0/24 -s'として実行したい場合、
'snort.exe -c C:\snort\snort.conf -l C:\snort\log -h 192.168.1.0/24 -s
-I'のようにオプションを付け加えて実行します。
ファイルやディレクトリは絶対バスを使用しなければなりません。
注意:サービスとしてインストールする場合、-Dオプションは必要ありません。指定しなかった
場合、自動的に追加されます。

4) サービスとして追加したSnortを削除する方法は以下の通りです。
"snort -R"を実行してください。

5) Win9x/MEでサービスとして実行できますか?
はい。うまく動かすためにひどいハックをします。ブートアップすると、Snortがバックグラウンドジョブに変わる前の
5秒間黒いコマンドプロンプトウィンドウを見ることになるからです。
このサービスモードはひどいハックで、たぶんすべての条件でうまくは動かないでしょう。

6) NTサービスのどの機能がサポートされていますか?
現在、スタートとストップだけです。ポーズとリジュームの実装は後になります。
(コードは存在しているのですが、うまく動きません)

質問、コメント、批判はmike@datanerds.netまで。

5.5 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortを使ってipfilter/ipfwファイアウォールのルールを追加することはできますか? A: はい。追加ソフトがcontribディレクトリにあります。しかし、このソフトは 危険であり、何をしようとしているかわかっていない人にはお勧めしません。 Guardianが使用可能であり、tarボールがcontribディレクトリにあります。 GuardianはSnortがアタックを検知したとき、IPchainsを使ってそれ以上のアタックを 阻止するためのperlスクリプトです。 GuardianのWebページは以下にあります。 http://www.chaotic.org/~astevens/Guardian/index.html またミラーサイトもあります。 http://www.cyberwizards.com/~midnite/Guardian/index.html ただし、一つ警告しておきます。外部のバイナリを実行することはパフォーマンスに 制限を加えることになます。以下の注意を読んでください。 Christopher Cramer wrote: > > I'm sure this has been mentioned before in similar discussions, but this > feels like a _really_ bad idea. What if the bad guys realize what is > going on and make use of your blocking method as a DoS attack. All one > would have to do start sending a series of triggering packets with spoofed > IP addresses. > > Since I am no longer interested in breaking into your site, but rather > making your life hell, I don't worry about the resulting data getting back > to me. All I have to do is start proceeding up a list of IP addresses > that I think you should no longer be able to talk to. When you come in > the next morning, you find that you can no longer access the world. > > Just my $0.02. > Danger Will Robinson: Conventional wisdom says that auto-blocking is inherently dangerous. However, for those that like to live at the bleeding edge of tech (and the separate process scanning logs and processing firewall commands sounds like a good way to do this...): Please remember to include an exclusion list and put on them important sites such as root servers, other important dns servers (yours, and important sites for your users), and in general any host you don't want to receive phone calls about being DoSed when they are spoofed - usually inconveniently like that first time you actually manage to get on vacation.... (i.e. imagine "Crisis: the ceo can't reach his favorite redlite.org game.... you have to fly back from the carribean asap....") 5.6 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortが"react"キーワードでエラーを出すのですが・・・ A: --enable-flexrespつきでconfigureを再実行し、リビルド、再インストールしてください。 5.7 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: SnortからE-mailでアラートを受け取ることはできますか? A: syslogでログを取り、swatchかlogcheckを使ってください。 5.8 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どのようにしたら特定のタイプのトラフィックを記録し、アラートをsyslogに送ることができますか? A: snort.confに追加する例を示します。 ruletype redalert { type alert output alert_syslog: LOG_LOCAL2 output database: alert, postgresql, user=user dbname=snort password=pwd } [...snip...] local.rulesを開いて、こんな風に書いてみてください。 redalert tcp any any -> any any (msg:"REDRUM REDRUM"; content:"redalerttest") そしてtelnetで"redalerttest"と入力してみてください。すぐに両方に記録されます。 5.9 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: アラートがあがったとき、Snortが外部プログラムを起動することはできますか? メインのIDSループ内から別のプログラムを呼び出すことは、通常悪いアイディアです。 何かを起動するまで待っている間IDSは止まってしまうので信頼性を低下させますし、 そもそもパケットが処理されるのを待っているタイミングだとパケットロスを招いてしまいます。 Especially with the already oh-so-consistent "Gee I think I'll go away for a minute" rock steady even cpu slicing Windows gives you (that's sarcasm, sorry). 他の方法を考えた方がいいです。Windowsではプロセスの呼び出しは高コストです。 Windows. IDSのタスクをできる限り中断させずぶん回してパケットを効率的に処理させ、 プロセス生成のペナルティをさけるようにした方がいいと個人的には思います。 特に、*nixに比べ、プロセス生成が非常に重いWindowsでは。 外部プロセスについてもです。前述の理由により、終始起きているプロセスの 方が、アラートごとに起きてくるよりももっとうまく処理できるでしょう。 よりより代理方法はswatchかlogcheckを調べることです。 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq-- *************************************** Section 6: PROBLEMS *************************************** 6.1 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: どうもSnortのバグを見つけたようだ。さてどうしよう? A: 診断情報を入手して、http://www.sourceforge.net/の"snort-users"にポストしてください。 診断情報を入手できるようSnortをコンパイルするには、以下のいずれかを行ってください。 make clean; make CFLAGS=-ggdb
または
make clean; make "CFLAGS=-ggdb -DDEBUG"

コアダンプをトレースするには以下のようにします。

gdb /path/to/snort /path/to/snort/core

gdb> where
gdb> bt
gdb> print $varname, varname, $$varname etc..

または、もしSnortがコアダンプしない場合には、以下のようにしてSnortを実行してください。

gdb snort

gdb> run <snort args without -D switch :-)>


6.2 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: SMBアラートがうまく動いていない。何か間違っている? A: configureの実行時に--enable-smbalertsを付け加えたことを確認してください。 6.3 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortから"Garbage Packet with Null Pointer discarded!"というメッセージを受け取った。へ? A: これはデフラグメントのプリプロセッサの初期バージョンの縛により出力された内部診断メッセージです。 最新バージョンのSnortにアップデートしてください。 6.4 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortから"Ran Out Of Space"というメッセージを受けた。なんだって? A: これは、デフラグメントのプリプロセッサを32MB以下のメモリで動かそうとしたときに出る内部診断メッセージです。 これについてはDragosに問い合わせてください<dr@kyx.net>. 6.5 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortのログをデータベースに送ろうとして問題が生じている。 A: 以下の文書はSnort1.6.3について書かれたものです。 Lee wrote.. > > Initializing rule chains... > > log_database: Database type is mysql > > log_database: Database name is snort > > log_database: Host set to localhost > > log_database: User set to root > > Problem obtaining SENSOR ID (sid) from mysql->snort->event In version 1.6.3, it turns out that many people have seen this error because they did not compile in support for their database. It should be fixed in snort 1.7 A quick and easy "fix" for older snort versions is to add -lm to either LIBS or LDFLAGS in the Makefile. e.g. LIBS = -lm -lmysqlclient -lpcap -lsocket -lnsl Anyway, if you are still having this problem you can take a look at the updated the installation and configuration information at the following web site. http://www.incident.org/snortdb 6.6 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: ACIDのデータベースとのコネクションが、長い時間のかかるオペレーション(例:大量のアラートを消去)でタイムアウトしてしまう。 A: PHPは実行できるスクリプトの長さに制限をかけるための内部変数を持っています。 これは出来の悪いコードが無限ループに陥るのを防ぐために使われます。 タイムアウトの値を変更する場合、"php.ini"設定ファイルの中にある、"max_executuon_time"変数の変更を検討します。 6.7 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: なぜLinuxではパケットロストの統計は利用できないとレポートしてくるのですか? A: LinuxのIPスタックはロストしたパケットの統計はレポートできません。 これはまた、最近、新しいlibpcapとカーネル2.4の組み合わせでフィックスされました。 カーネルとlibpcapをアップグレードすればうまく動くようになるでしょう。 6.8 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: /var/log/snortディレクトリが肥大化している・・・ A: この、ファイルをアーカイブするスクリプトを試してみてください。 #!/bin/sh # # Logfile roation script for snort writen by jameso@elwood.net. # # This script is pretty basic. We start out by setting some vars. # Its job is tho rotate the days logfiles, e-mail you with what # it logged, keep one weeks worth of uncompressed logs, and also # keep compressed tgz files of all the logs. It is made to be run # at midnight everynight. This script expects you to have a base # dir that you keep all of your logs, rule sets etc in. You can # see what sub dirs it expects from looking at the var settings # below. # # Things to note in this script is that we run this script at 12 # every night, so we want to set the dirdate var the day the script # runs minus a day so we label the files with the correct day. We # Then create a dir for the days logs, move the log files into # todays dir. As soon as that is done restart snort so we don't miss # anything. Then delete any logs that are uncompressed and over a # week old. Then compress out todays logs and archive them away, and # end up by mailling out the logs to you. # # Define where you have the base of your snort install snortbase=/usr/snort # Define other vars # logdir - Where the logs are kept # oldlogs - Where you want the archived .tgz logs kept # weeklogs - This is where you want to keep a weeks worth of log files uncompressed # dirdate - Todays Date in Month - Day - Year format # olddirdate - Todays date in the same format as dirdate, minus a week logdir=$snortbase/log oldlogs=$snortbase/oldlogs weeklogs=$snortbase/weeklogs # When I first wrote this script, I only ran it on BSD systems. That was a # mistake, as BSD systems have a date command that apperently lets you walk the # date back pretty easily. Well, some systems don't have this feature, so I had # to change the way that dates are done in here. I left in the old way, because # it is cleaner, and I added in a new way that should be portable. If anyone # has any problems, just let me know and I will try to fix it. # # You have to change the system var to either bsd or other. Set it to bsd if # your system supports the "-v" flag. If you are not sure, set it to other. system=bsd if [ $system = bsd ] then dirdate=`date -v -1d "+%m-%d-%y"` olddirdate=`date -v -8d "+%m-%d-%y"` elif [ $system = other ] month=`date "+%m"` yesterday=`expr \`date "+%d"\` - 1` eightday=`expr \`date "+%d"\` - 8` year=`date "+%y"` dirdate=$month-$yesterday-$year olddirdate=$month-$eightday-$year fi # Create the Dir for todays logs. if [ ! -d $weeklogs/$dirdate ] then mkdir $weeklogs/$dirdate fi # Move the log files into todays log dir. This is done with # a for loop right now, because I am afriad that if alot is # logged there may be to many items to move with a "mv *" # type command. There may a better way to do this, but I don't # know it yet. for logitem in `ls $logdir` ; do mv $logdir/$logitem $weeklogs/$dirdate done # Kill and restart snort now that the log files are moved. kill `cat /var/run/snort_fxp0.pid` # Restart snort in the correct way for you /usr/local/bin/snort -i fxp0 -d -D -h homeiprange/28 -l /usr/snort/log \ -c /usr/snort/etc/08292k.rules > /dev/null 2>&1 # Delete any uncompressed log files that over a week old. if [ -d $weeklogs/$olddirdate ] then rm -r $weeklogs/$olddirdate fi # Compress and save the log files to save for as long as you want. # This is done in a sub-shell because we change dirs, and I don't want # to do that within the shell that the script runs in. (cd $weeklogs; tar zcvf $oldlogs/$dirdate.tgz $dirdate > /dev/null 2>&1) # Mail out the log files for today. cat $weeklogs/$dirdate/snort.alert | mail -s "Snort logs" you@domain.com cat $weeklogs/$dirdate/snort_portscan.log | mail -s "Snort portscan logs" you@domain.com 6.9 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: なぜACIDからアラートを消そうとするとエラーになるんですか? A: ACIDで定義したデータベースのユーザが正しい権限を持っていない場合がほとんどです。 加えて、アラートをデータベースに記録する(INSERT、SELECT)ために与えられた権限に加え、 DELETEの場合も要求されます。 パーミッションに関係するこの問題は、データベースに手動で列を挿入し、その後それを消去することで確認できます。 1. MySQLにACIDで使われているものと同等の資格(例:ユーザ名、パスワード)でログインします。 例: % mysql -u -p 2. イベントテーブルにテスト用の列を挿入します。 mysql> INSERT INTO event (sid, cid, signature, timestamp) VALUES (1,1000000, "test", "0"); (これはまだIDが1000000をもつイベントをまだ使っていない場合です。使っていた場合は他のイベントIDを選んでください。) 3. 挿入したばかりの列を消去します。 mysql> DELETE FROM event WHERE sid=1 AND cid=10000000; もしどうしても消せない場合、パーミッションに問題を抱えていることを示します。 rootでMySQLにログインし直し、(DELETEパーミッションを与えるために)GRANTコマンドを入力します。 例: GRANT DELETE on snort.* to acid@localhost (この例はアラートデータベースが"snort"、ユーザ名が"acid"、そして"localhost"からログを入力している場合です。) 6.10 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: ACIDをLynxを使ってみると壊れているように見える。 A: これは知られている問題です。LynxはURLについているあるフォームの引数を台無しにしてしまうのです。 解決方法は調べられてはいますが、現状ではNetscape、OperaまたはIEを使うしかありません。 6.11 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortの実行時、'snort [pid] uses obsolete (PF_INET, SOCK_PACKET)'とワーニングが出る。間違ってる? A: 新しいLinuxカーネル上で古いlibpcapを使っていますね。それは カーネルがSOCK_PACKETソケットをサポートしている限り、問題はありません。 しかし、そのワーニングを取り除きたいならば、新しいバージョンのlibpcapに アップグレードする必要があります。(www.tcpdump.orgから入手したコピーをおすすめします) 6.12 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: HPUXで、lan0をオープンしようとするとrecv_ack: promisc_phys: Invalid argumentだって・・・ A: それはDLPIサービスを使った他のプログラムが実行されているからです。 HP-UXの実装は、Linuxの様に一度に複数のlibpcapを使ったプログラムの実行を認めていません。(from snort.c) 6.13 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortが'can not create file'エラーで死んでしまう。ディスクは空いているのに。間違っている? A: inodeが空いていないため、そのパーティションにもはや新しいファイルを作ることができないようです。 明快な解決方法は、rm いらないファイル、です。;-) 6.14 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: WindowsでSnortを使おうとするとスタートアップ時にOpenPcap()でエラーが出る。こんな風に。 ERROR: OpenPcap() device open: Error opening adapter 何が違うの? A: Winpcapがインストールされていないか、異なったバージョンを使っています。 新しいバージョンにアップグレードしてみてください。(version 2.1 as of 4/11/01) 新しいものは http://netgroup-serv.polito.it/winpcap/ にあります。 6.15 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: snortがデータベースにログを記録しない。 A1: 設定ファイルにデータベースプラグインの設定を書き込んでいない。 A2: 古いデータベーススキーマを利用している。ソースのtarボール中のcontribディレクトリにある データベース作成スクリプトを使ってアップデートしてください。 A3: コマンドラインオプションを使っているので設定ファイルの状態を上書きしてしまっている。 よくあるのは-Aと-sオプションです。注意:もしsyslogにもログを記録したいならば、コマンドライン ではなく、設定ファイルで設定してください。 A4: データベースの設定そのものに問題がある。 指定したユーザが適切なパーミッションを持っているか、または本当にデータベースが起動し、動いているか確認して下さい。 6.16 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: ポートスキャンのログをデータベースに記録しない。 A: アウトプットのファシリティを"log"から"alert"に変える必要があります。 ポートスキャンプリプロセッサは"log"よりも"alert"として登録されたアウトプットプラグインに出力します。 output database: alert, mysql, user=snort dbname=snort host=localhost 6.17 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortがsyslogにログを送らない。 A1: コマンドラインオプションを使っていて、設定ファイルの設定を上書きしてます。これは多くの場合、-Aオプションです。 A2: ちがうところにログを送っているかもしれません。syslogがきちんと設定されているかどうか確認してください。 6.18 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: $DNS_SERVERS変数に代入したのに、そのIPアドレスからのポートスキャンメッセージが大量に出ている。 A: /32ネットマスクをそのアドレスに付け加えてください。 var DNS_SERVERS [xxx.xx.0.3/32,xxx.xxx.0.2/32] そして、$DNS_SERVERS変数が、portscan-ignorehostsの行に書かれているかどうか確認してください。 preprocessor portscan-ignorehosts: $DNS_SERVERS 6.19 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: なぜchrootしたsnortにSIGHUPを送ると死んでしまうの? A: それはパーミッションに関するよく知られた問題です。次善策としてSIGHUPの代わりにリスタートをして下さい。 しかし、これは簡単な答です。 execv(2)コールが実行されることにより、スクラッチからSnortをリスタートされます。 これは、chrootされたSnortが再帰的にHUPSを受け取る事による奇妙な影響なのです。 例えば、Snortを/snortにchrootします。そうすると、/snortは/にみえます。ここでSnortをHUPさせます。 Snortは/snort/snortを/と見なします。言い換えれば、もしHUPさせるとき、jail環境中に新しくディレクトリを作ってあげた場合、 4回のHUPSを行うと、Snortは/snort/snort/snort/snortにいることになります。 6.20 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: Snortがクラッシュした。どうリスタートすればいい? A: 下のシェルスクリプトを試すか、daemontoolsを使ってみてください。 #!/bin/sh #snorthup: Snort Restarter and Crash Logger #(dr@kyx..net with help from kmaxwell@superpages.com) $conf = "snort.conf" for $IFACE in fxp0 fxp1 do if [ -f /var/run/snort_$IFACE.pid ]; then if ! ps -p `cat /var/run/snort_$IFACE.pid` > /dev/null ; then /usr/bin/logger -p user.notice snorthup: removing bogus pidfile /usr/bin/logger -p user.notice snorthup: restarting absentee snort on $IFACE with conf file $i rm -f /var/run/snort_$IFACE.pid /usr/local/bin/snort -D -c $conf -i $IFACE fi; else /usr/bin/logger -p user.notice snorthup: restarting snort on $IFACE with conf file $conf /usr/local/bin/snort -D -c $conf -i $IFACE fi done 6.21 --faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

Q: なぜオートスイッチハブ上の10Mbpsや100Mbpsトラフィックを監視できないの?
Why can't snort see one of the 10Mbps or 100Mbps traffic on my autoswitch
hub

Basically it's a function of the design and all autoswitching hubs will
behave in this way. It's the result of just not being able to stuff all
the 100 Mbps traffic into the 10Mbps CSMA/CD. One solution I use to the
problem is these new cheapie four port switches... put all the 10Mbps on
it's own hub/switch/whatever and then route that to the 100Mbps hub I use
for monitoring but put a cheapie switch in between that works as an
adapter basically mediating the 10 up to 100 and vice versa.


The bad thing about hubs that _don't_ have this "feature", is that
in order to support 10bt devices, they throttle the entire hub speed
down to 10bt if there is one or more 10bt only devices hooked up to it.
I have seen this behavior (and did the bandwidth tests to proove it) on
old 3com office connect 10/100 hubs (newer ones do the 2 hubs with a switch
thing.) So, the point of what I am saying is, since these old hubs have
no switching capabilities, and they don't know which port the traffic is
supposed to go to (no switch=no arp table), they have to throttle bandwidth.

None of the hubs and switches have any significant amount of storage
on the ethernet chip sets, and therefore _any_ non-layer-three box that
has 100 -> 10 capability can only handle small amounts of traffic before
the chip set drops incoming packets on the floor. Guess one might call
that throttled bandwidth, but at the expense of retransmission timeouts
and retransmissions at the end nodes.

If the box has a backplane, multiple cards and some network management
functions, there is a higher _probability_ the manufacturer has some
additional buffering going on to keep dropped packets from happening
on at least small bursts of traffic.

In the most generic of terms, if a box supports 100 "full-duplex", then
its a switch (regardless of what the manufacturer calls it). If it
supports 100 -> 10, there is 50-50 chance the box has some MAC address
awareness. If a box only supports 10 -> 10 or 100 -> 100, there is a
high probability it is not MAC address aware and therefor functions
like a hub.

Many hubs have different back planes, ie one for 10 one for 100.

From a definition standpoint, a hub segment whether it be 10 or 100 is
a single broadcast/collision domain. You will not see ANY traffic
between segements without a bridge or layer3 route function between
them.

In a switched environment, typically each port is a separate collision
domain but one big broadcast domain. VLANs can be created in some to
separate into separate broadcast domains and some have built in layer
3 functionality which basically connects a router into the backplane
so that it can route between vlans at wire speed.

Think of a switch as a bridge with many ports. (that's what it is).
Some switches support port mirroring or span ports. When you want to
"sniff" frames in a switched environment (beyond just
broadcast/multicast traffic) you need to be able to "see" the unicast
traffic (telnet,http for example). You set up a port to mirror
traffic from the ports that have the devices your interested in to the
port you have your analysis device plugged into. Without doing so,
you don't see the unicast conversations because the traffic is getting
"switched" accross the backplane so pc on port 1 talks to server on
port 2 and no other ports get this traffic. If server on port 2
broadcasts or multicasts, the information is flooded out all ports.
(multicast can be controlled on some switches so only those ports that
have listening stations get the traffic. Not all switches have these
capabilities.

An excellent book on the topic is Interconnections by Radia Perlman.
(Bridges and Routers).

Additional caveat: if you deal with full duplex on a switched port,
only a tap would save you - users have succesfully used Shomiti's
ones on 100MB FD ports, and used two Snort instances, capturing
traffic on both directions. Port mirroring didn't work in that case ...

--faq-- --snort-- --faq-- --snort-- --faq-- --snort-- --faq--

--END OF FAQ v1.8.1--




back to
top


HTML generated by dr using sh, cat and sed.