このFAQは、ネットワークを通じてシステムを攻撃する侵入者の発見に関して、どのようにしてそのような侵入を発見するのかというような一般的な質問に答えるものです。
Questions? Feedback? Send mail to nids-faq @ robertgraham.com 日本語での質問やご意見は rxb00445@nifty.com まで。Copyright 1998-1999 by Robert Graham (robert_david_graham@yahoo.com. All rights reserved. This document may be reproduced only for non-commercial purposes. All reproductions must contain this copyright notice. Reproductions must not contain alterations except by permision.
この文書は、非商用についてのみ転載(全文、一部)が可能です。転載についてはこの著作権表示を含むものとします。 This Japanese translation is permitted by the author and all reproduction must follow the original copy right notice by the author.
この日本語版は著作権者の許可に基づき翻訳されたものであり、転載等条件については上記に従うものとします。
Olaf Schreck <chakl at syscall de>
John Kozubik <john_kozubik at hotmail com> (see http://www.networkcommand.com/john/index.html for NT login-script tips).
Aaron Bawcom <abawcom at pacbell net>
Mike Kienenberger <mkienenb at arsc edu>
Keiji Takeda <keiji at sfc keio ac jp>
Scott Hamilton <sah at uow edu au>
Holger Heimann <hh at it-sec de>
Bennett Todd <bet at mordor dot net>
"侵入検知システム:イントルージョン・デテクション・システム はこのような侵入を検出するためのシステムのことをいいます。IDSは以下のカテゴリーに分類することができます。
ネットワーク侵入検知システム(Network Intrusion Detection Systems) 以下、NIDSと略 ネットワーク・ケーブル上を流れるパケットをモニタし、ハッカー/クラッカーの侵入(あるいはサービス妨害攻撃)の発見を行います。典型的な例は、目標となるマシンに対して行われる大量のTCP接続要求(SYN)を監視することにより、TCPポートスキャンなどが行われていることを発見するシステムのようなものです。NIDSには対象となるマシン上で運用されそのマシンに対するトラフィックを監視するものもあり(大抵は、提供するサービスに統合)、また、専用のマシンによって全てのネットワーク・トラフィックを監視(ハブ、ルータ、プローブ)するようなものもあります。他のIDSが(インストールされている)単一のマシンだけをモニタするのに対して、"ネットワーク" IDSは他の複数のマシンをモニタします。
システム・インテグリティ・ベリファイア(system integrity verifiers) 以下、SIVと略 はシステム・ファイルを監視し、侵入者がこれを変更したことを検出します。(バックドアなどの設置を検出します。) このようなシステムの最も有名なものに"Tripwire"があります。SIVには、良く知られている手口を発見するためにシステム・ファイルの他Windowsレジストリやchron configuration などの要素を監視するものもあります。
ログファイル・モニタ 以下、LFMと略 はネットワーク・サービスによって生成されたログファイルをモニタします。NIDSと同様にこのシステムはログファイル上の侵入者による攻撃を示すパターンを探します。この典型的なに例は、"phf"攻撃のような良く知られたセキュリティー・ホールを探る侵入者を検出するHTTPサーバーのログファイル解析パーサーがあります。例: swatch
偽ごまかし行為 (デセプション システム) (A.K.A. デコイ, ルアー, ハエ取り紙, ハニーポット)はハッカーを引っ掛ける目的で良く知られている偽物のサービスを提供するものです。 参照例 デセプション・ツールキット http://www.all.net/dtk/ 単純なトリックとしてはWindowsNTのadministratorアカウント名を変更し、権限のない偽のadministratorを設定することによって、侵入者の追跡を容易にするものなどがあります。
侵入者は以下の2つのカテゴリに分類されます。
侵入にはいくつかのタイプがあります。 暴走族的行為はハックできるものには何でもします。理由はありません。山賊的行為は破壊をしたりウェブページに落書きをしたりします。 営利目的的行為は企業データを盗んだり売ったりすることで、企業等から利益を得ることを目的とします。
物理的な侵入 侵入者が物理的なアクセスをマシンに対して持っている場合(例えば、キーボードを利用することができるとか、システムを分解できるなどの場合)彼らはシステムへの侵入が可能です。そのテクニックはその端末の持つ権限によるものから、システムを分解してディスクドライブを取り出す(そして他のマシンを用いて内容を読み書きする)などがあります。BIOSプロテクションさえバイパスすることは簡単です:実際全てのBIOSはバックドア・パスワードを持っています。
システム侵入 このタイプのハッキングは侵入者がすでにそのシステムに低い権限でのアカウントを持っている場合を想定しています。もしそのシステムが最新のセキュリティー・パッチを当てていなければ、侵入者はかなりの確率で、一般に知られている手口を用いて管理権限などを手に入れることができるでしょう。
リモート侵入 このタイプのハッキングはネットワークを経由してリモートからシステムに対して侵入を試みようとする侵入者によるものです。侵入者は全く特別な権限のない状態から侵入を開始します。このハッキングにはいくつかの形態があります。もし侵入者と被害者のマシンの間にファイアウォールが存在すれば侵入はより困難なものになるでしょう。
NIDSは主としてこのリモート侵入に関して扱うものです。
バッファー・オーバフロー(Buffer overflows): おそらく、報道などで報じられたセキュリティ・ホールはこの問題によるものです。典型的な例はユーザのログイン名入力に対して256文字以上が想定されていなかったというものです。たしかにプログラマは誰もそんなに長い名前を持っていないと考えたことでしょう。しかし、ハッカーはもしそれよりも長い間違ったユーザネームを入力したらどうなるだろうかというようなことを考えます。あまった文字列はどこにいくのだろう?もし、彼らハッカーが正しく操作をしたならば、彼らはサーバによって実行されるコードを含んだ300文字を送ることができ侵入に成功するであろう。ハッカーはこのようなソフトウェア不良を様々な方法で発見します。まずはじめに、ネットワーク上に公開されている様々なサービスのソースコードを解読します。ハッカーは大抵バッファー・オーバーフロー問題を抱えているコードを探してプログラムを眺めます。次に、ハッカーはそのような問題が存在するのか、プログラム自体(実行ファイル)に注目し、機械語を解読します。第3にハッカーは全ての入出力部分に対してでたらめなデータを与えオーバ・フローが発生するかを検証します。もし、そのプログラムが壊れれば、入力データをうまく構成すればかなりの確率ハッカーの侵入が可能であることを示しています。この問題はCやC++で書かれたプログラムで一般的でありJavaで書かれたものにはあまりあてはまりません。
予期せぬ組み合わせ(Unexpected combinations): プログラムは一般にオペレーション・システム最下層とする何層にもわたるコードによって構成されています。侵入者は一つの層には意味を成さないが、他のレイヤに大きな意味を持つ入力を与えることができることがあります。Web上でユーザの入力を処理する最も一般的な言語はPERLです。PERLで書かれたプログラムはこの入力を次の処理を行うために他のプログラムへ送り出します。一般的なハッキングの手口は"|
mail < /etc/passwd"というものです。PERLがオペレーティング・システムに、与えられた入力とともに別のプログラムを起動するように処理を行うので、このコードが実行されることになります。しかしながら、オペレーティング・システムがパイプ'|'キャラクタを認識するので、同時に侵入者にパスワードファイルを送信する'mail'を実行してしまうのです。
仕様外の入力(Unhandled input): 多くのプログラムは有効な入力を処理するように作られています。多くのプログラマは、仕様外の入力が与えられることを考慮していません。
レース・コンディション(Race conditions): 最近の多くのシステムは"マルチタスク/マルチスレッド"に作られています。これは、システムが同時に複数のプログラムを実行できるということです。もし2つのプログラムが同時に同じデータにアクセスをする必要がある場合に危険が発生します。同じファイルを更新する必要のある2つのプログラムAとBがあったとしましょう。ファイルを更新するためには、それぞれのプログラムはまずファイルをメモリに読みこまなければなりません。そしてメモリの内容を書き換えます。次にメモリの内容をファイルに書きこみます。レースコンディションはプログラムAがファイルをメモリに読みこみ、変更を加えた場合に、Aがファイルに書きこむよりも前に、Bがファイルの読み出し/変更/書き込みを行ったような場合に発生します。プログラムAはBが変更を行う前にファイルの読み込みを行っているので、Bによる変更は全て失われることになるのです。このような処理を正しい手順で実行させないといけないのでレースコンディションが起こることはあまりありません。侵入者がレースコンディションを引き起こす方法を見つけシステムに侵入するには通常数千回もの試行錯誤が必要です。
デフォルト・コンフィギュレーション: 多くのシステムは、使用しやすいように設定されたデフォルト設定の状態で出荷されます。 残念なことに「使用しやすい」ということは「侵入しやすい」ということを意味します。ほぼ全てのUNIXやWinNTは簡単に進入される状態で出荷されています。
いい加減な管理者(Lazy administrators): 驚くほど多くのマシンが 空の root/administrator パスワードが設定されています。これは管理者があまりにもいい加減で、できるだけ早くシステムを設定し、できるだけ簡単に起動したいことによるものです。残念なことに彼らは後でこのパスワードを変更するということはなく、侵入者による簡単なアクセスを許しています。侵入者がネットワーク上で最初にすることの一つに、全てのマシンに対して空のパスワード設定がないかをスキャンすることなのです。
ホール(穴)作り(Hole creation): 実質的にほぼ全てのプログラムは non-secure(安全でない)モードに設定することが可能です。ときおり管理者の不注意によりマシンに穴を作ってしまうことがあります。多くの管理者ガイドは、不注意によるホールの発生を防ぐために、特に必要のない機能についてはOFFにしておくことを薦めています。セキュリティ監査パッケージは大抵これらのホールを発見し管理者に知らせます。
信頼関係(Trust relationships): 侵入者は(ネットワークの)信頼関係を利用し、ネットワークを通じて"踏み台(island hop)"攻撃を行うことがあります。お互いに信頼関係にあるマシンのネットワークは最も弱いつながりでもあるのです。
本当に弱いパスワード: 多くの人は自分の名前や、子供、配偶者、ペットあるいは車のモデルなどの名前をパスワードに用います。"password"や空のパスワードを設定するような人もいます。これは侵入者が入力する30個以下程度の可能性のあるパスワードリストを提供することになります。
辞書攻撃(Dictionary attacks): 前項の攻撃が失敗した場合、侵入者は次に辞書攻撃を試みます。この攻撃では、侵入者は辞書にある全ての言葉をトライするプログラムを使用します。辞書攻撃はシステムへ繰り返しログインを試みる方法と、暗号化されたパスワードを手に入れ辞書にある全ての言葉を同じ方法で暗号化したものと対比する方法とがあります。侵入者は大抵、このための英語辞書と外国語の辞書を持っています。彼らはさらに、名前や一般的なパスワードを収めた辞書のようなデータベースを持っています。
ブルートフォース・アタック(Brute force attacks): 辞書攻撃に似ていますが、この場合侵入者は可能な全ての文字の組み合わせを試みます。短い英小文字4文字のパスワードだとほんの数分で解読することができます。(ラフに見積もって、この場合5万とおりの組み合わせがあります。) 大文字と小文字と数字や記号を混ぜた長い7文字のパスワードの場合(10兆とおりの組み合わせ)だと、1秒に100万とおりの組み合わせを試みたとしても数ヶ月はかかる可能性があります。(実際には1台で1秒あたり千個の組み合わせが妥当な線と思われます。)
サーバ・スニファリング(Server sniffing): しかしながら、スィッチングされたネットワークにおいて、もしサーバ上にスニファ・プログラムを設置することができたなら(特にルータとして機能しているもの)、その情報をクライアントマシンや信頼関係にあるマシンへ侵入することに利用できるでしょう。例えば、ユーザのパスワードを知らない場合でもログインする時のTelnetセッションを盗み見することで、パスワードを手にいれることができるでしょう。
リモート・スニファリング(Remote sniffing): 多くのコンピュータは RMONが可能な状態で設定されています。帯域幅は狭いのですが(全てのトラフィックを盗み見することはできません。)ここにも多くの可能性が潜んでいます。
TCP/IP プロトコルの不備: TCP/IP プロトコルは今日のような大規模な ハッキングが行われることを想定して設計されませんでしたので、セキュリティ上の問題を 引き起こす多くの問題を抱えています。例としては スニフアタック, ICMP 接続不能切断, IP スプーフィング, SYNフラッドなどがあげられます。最大の問題はIPプロトコル自体が 信頼関係をベースにしたものなのでハッカー達はIPのデータを咎められることなく偽造する ことができてしまいます。このような問題を解決するためにIPsec(IP security)がデザイン されましたがまだあまり一般的には使用されていません。
UNIXの設計上の不備: UNIXオペレーティングシステムには 侵入の原因となる多くの本質的な問題があります。最大の問題は'root'だけが管理権限を持つ というアクセスコントロールシステムにあります。
平文スニファリング: いくつかのプロトコル(Telnet, FTP, HTTP Basic)は、平文のパスワードを使用しています。平文とはその文字列そのまま。つまり、パスワードが暗号化されることなくクライアントとサーバの間のネットワークでやりとりされます。プロトコル・アナライザを持つ侵入者はネットワークを流れるそのようなパスワードを見つけることが可能です。それだけで、侵入者はただちにそのパスワードをログインに用いることができます。
暗号文スニファリング: しかしながら、他の多くのプロトコルはパスワードに対してなんらかの暗号処理を施しています。この場合、侵入者はこの暗号を解読するための辞書を用いるかブルートフォースを行う必要があります。この段階において、侵入者はパッシブ(受動的)なままで何もネットワーク上に発信していないので、あなたはまだ侵入者の存在には気づくことはありません。パスワード・クラッキングに侵入者のマシンが使われている限りはネットワーク上に何かが送信されるということはありません。
リプライ攻撃(Replay attack): いくつかのケースでは、侵入者はパスワードを復号する必要はありません。システムにログインするために、暗号化されているパスワードそのものを用いることができるのです。このためには大抵、クライアントソフトウェアをプログラムすることが必要になります。
パスワードファイルの盗用(Password file stealing): 全ユーザのデータベースは大抵、一つのファイルとしてディスク上に格納されています。UNIXの場合このファイルは/etc/passwd (あるいはこのファイルのミラーしたもの。)、WinNTの場合は、これはSAMファイルになります。どちらについても、侵入者がこれらのファイルを手に入れれば、そのファイルの中の弱いパスワードを探すためにクラッキングプログラム(前述)を使用することができるでしょう。
観察(Observation): パスワード・セキュリティの従来からの問題点の一つにパスワードは長くて難しくそして推測しにくいものでなければならないというものがあります。(これは辞書やブルートフォースによる攻撃を十分に難しくするためです。)しかしながら、このようなパスワードは覚えるのが難しく、ユーザはどこかに書きとめたりします。侵入者はメモに記されたパスワードを見つけるためにその人机の周りを探したりすることもあります。(大抵はキーボードの下) 侵入者はユーザの背後からパスワードがタイプするのを見てパスワードを読み取ることもできます。
ソーシャル・エンジニアリング(Social Engineering): 一般的な(有効な)方法は単にユーザに電話をかけ、「やぁ、情報システム部のボブです。ネットワーク上の問題を追いかけてるんですが、どうやらあなたのマシンから問題が発生してるようです。どういうパスワードを使っていますか?」多くのユーザはこの状況でパスワードを言ってしまいます。(多くの企業は例え相手が情報システム部であっても絶対にパスワードを他人に教えないように、というポリシーを持っていますが、このテクニックは十分に有効です。一つの簡単な対策としては6ヶ月ほどの新入社員に電話をかけパスワードを聞き出し、その後でパスワードをもらしたことを彼らが忘れられないほど注意することですィ:-)
Step 1: 外部からの偵察 侵入者は正体をあらわにすることなくできるだけ多くの情報を手に入れようとします。彼らは公開情報や一般のユーザのふりをしてこれを行います。この段階において彼らを発見することはまず不可能でしょう。侵入者はあなたのネットワークについてドメインネーム(foobar.comのようなもの。)とともに登録されている情報を手に入れるために'whois'での検索を行うでしょう。侵入者はあなたのマシン名を見つけるために、DNSテーブルを探るかもしれません。('nslookup'や'dig'などのドメイン検索のユティリティ−を使用します。)侵入者は他にも、WebサイトやアノニマスFTPサイト、あなたの会社に関するニュース記事や報道資料など一般に公開されている情報を探ります。
Step 2: 内部偵察 侵入者は情報を得るためにより強引なテクニックをを用いますが、まだ実害を与えるには至りません。彼らはあなたのWebページを見て廻り、CGIスクリプトをのぞきます。(CGIスクリプトはハックされやすいことがあります。) 彼らはどのマシンが生きているかを確認するために'ping' の巡回をかけることもあります。またターゲットとなるマシンでどのようなサービスが提供されているかを確認するためにUDP/TCPポートスキャン/ストローブをかけるかもしれません。彼らは何が可能かを調べるために'rcpinfo'、'showmount'、'snmpwalk'などのようなユティリティーを使用するかもしれません。この点において、侵入者はネットワーク上の'ノーマル'な行為を終えます。これまでのところでは侵入とみなされる行為は行っていないことになります。この点においてNIDSは「誰かがドアのノブをチェックしています。」ということができますが、誰かがドアを実際にあけようとしたということはできません。
Step 3: 攻略(exploit) 侵入者はいよいよ準備が整い、目標のマシンの攻撃可能なホール(穴)を攻略しにかかります。 侵入者は入力にシェルコマンドを送ることでCGIスクリプトを悪用したりします。また、大量のデータを送ることで、よく知られたバッファー・オーバーラン・ホールをこじ開けるかもしれません。侵入者は予想されやすいパスワードや空のパスワードを試したりもします。ハッカーはいくつかの攻略段階を踏むかもしれません。例えば、もし、ハッカーがユーザアカウントにアクセスできた場合、彼らは次に root/adminアクセスを手に入れるための攻略を開始するでしょう。
Step 4: 踏み台(foot hold) この段階においてハッカーはすでにあなたのネットワークに対してうまく踏み台を手に入れたことになります。侵入者の主な目的は攻撃の証拠を隠し(記録やログファイルを無効にすること)、再進入できることを確実にすることです。彼らは、アクセスを可能にする'ツールキット(toolkits)'をインストールし、それまであったサービスをバックドア・パスワードを持つトロイの木馬(Trojan horse)に変更したり自分のアカウントを作ったりします。システム・インテグリティー・ベリフィケーション(System Integrity Verifier 以下、SIV略)によって、侵入者がシステムファイルを変更したこの時点で発見できるかもしれません。ハッカーはそれから、一般に内部からの防御は弱くなっているものなので、このシステムを他のシステムへの踏み台として利用するかもしれません。
Step 5: 収益(profit) 侵入者は彼らの得た状態を利用して、秘密のデータを盗んだり、システム資源を悪用したり(例:あなたのサイトから他のサイトへの攻撃)、Webページを書き換えたりします。
違った始まり方をする他のシナリオもあります。特定のサイトをアタックするというのではなく、特定のセキュリティーホールを探してインターネット上をランダムにスキャンするのです。例えば、SendMail DEBUGというセキュリティーホールを探すためにインターネット全体をスキャンするなどということが考えられます。彼らは、セキュリティーホールの見つかったマシンに対して侵入を行います。あなたを直接狙うわけではなく、彼らはあなたがだれであるかということすら知らないでしょう。(これは'バースデーアタック(birthday attack)'として知られるものです。良く知られているセキュリティーホールと、IPアドレスのリストさえあれば、そのようなセキュリティーホールを持ったサイトを発見する確率はかなり高いでしょう。)
偵察 これにはピング・スイープ(ping sweeps)、DNS ゾーン転送(DNS zone transfers)、電子メール偵察(e-mail recons)、TCP/UDPポートスキャン(TCP or UDP port scans)、 CGIセキュリティーホールの検索(cgiのホールを探すための公開サイトのリストアップ)
攻略 システムへのアクセスを得るために、隠された機能やプログラム不良を利用するものです。
サービス妨害攻撃(denial-of-service 以下、DoS攻撃と略) 侵入者はサービス(あるいはマシン)を破壊するため、ネットワークやCPUに過負荷をかけたり、ディスクを一杯にしたりします。この場合、侵入者は情報を得ようとするのではなく単純にあなたのマシンを使えなくしたいだけです。
ウェブサーバは使用しているオペレーティングシステムに関係したソフト不良を持っている場合があります。Microsoft社のIIS にあった古いソフト不良のいくつかは、WindowsNTがファイル名の記述をするのにロングファイルネームと短縮8.3文字の2通りの表現を持っていてパーミッション(アクセス許可)をバイパスできることに関係していました。NTFS(新しいファイルシステム) はマッキントッシュのデータとリソースという考え方に似ている、代替データストリーム"alternate data streams"という機能を持っています。この場合あなたは"::$DATA"を加えることで、そのストリーム名を通してスクリプトを実行するのではなく、スクリプトのファイルを手に入れることができます。
多くのサーバはURLsに関してこれまで多くの問題を抱えてきました。例えば昔のApacheが持っていた"大量スラッシュ(death by a thousand slashes)" 問題はURL内のスラッシュで示されたディレクトリを処理するために大量のCPU負荷がかかってしまうという問題がありました。
URL フィールドはバッファオーバーフロー状態を起こすことがあります。これには、HTTP ヘッダーとしての処理、スクリーンへの表示、何らかの形での処理(キャッシュ・ヒストリでの保存など)フォーム内での処理などの段階で発生します。また古いインターネットエクスプローラのソフトウェア不良では .LNK や .URLなどのコマンドを実行してしまうという不良がありました。
HTTP ヘッダはソフトウェア不良を悪用するのに利用することが可能です。なぜなら、いくつかのfieldについては特定の情報だけを想定されているからです。
HTML が悪用されることもあります。Netscape Communicatorの<EMBED> コマンドにおけるMIME-typeオーバーフローなどがこれにあたります。
JavaScriptは常に問題があり、大抵は一般化したファイルネームを用いてファイル名を生成し、"SUBMIT" ボタンに隠れ"file upload" 機能を利用するものです。このソフトウェア不良はなんども修正が行われていますがその度に新しい方法が発見されています。
フレーム(Frames) はJavaScriptの一部として使われたり、Java hack (1ピクセル×1ピクセルのサイズのスクリーンとして、ウェブページに隠れる)として利用され問題を起こします。例えば私が、フレームを利用している信頼できるサイトへのリンクをあるページに含めたとしましょう。その信頼できるはずのページのフレームの一部を私のサイトにあるものと置きかえることも可能なのです。そしてそれはあたかも、その信頼できるサイトの一部のように表示されるのです。
Javaはロバスト(強靭な)なセキュリティモデルを持っています。しかし、そのモデルはときどきソフトウェア不良を含んでいることが証明されています。(しかし、他のものに比べると、最も安全なシステム要素の一つに違いないことは確かです。)しかし、このロバストなセキュリティは解除されるかもしれません。通常Javaアプレットはローカルシステムへのアクセスを持ちませんが、もしこれが可能になればとても便利になるかもしれません。したがって"trust"の実装についてはハックされる危険性を高めることになるでしょう。
ActiveX は信頼モデルに基づきネイティブコードを実行するので、Javaよりもさらに危険でしょう。偶然ウィルスを含んでいたベンダーコードを知らないうち拾ってしまうこともあり得ます。
IP スプーフィングは他の攻撃の一部として良く利用されます。:
1.9.1 ピング巡回(Ping sweeps)
さらに重要なことに、法的責任の問題があります。あなたは潜在的に、ハッカーがあなたのマシンを用いて起こした損害に対する責任があります。あなたは、法廷において"妥当な"ハッカーからの防衛措置をとっていることを示せなければならないのです。 例えば、あなたが高速な回線の上にマシンを置き(cable modemあるいはDSL)administrator/root アカウントをパスワードを設定せずに放置しておいたとしましょう。もしハッカーがそのマシンに侵入し、銀行に入り込むのに使ったとします。あなたはマシンを保護するための最も明かな措置を行っていなかったことから責任を問われることがあり得ます。
非常によいペーパーがあります。http://www.cert.org/research/JHThesis/Start.html John D. Howard はインターネット上でどれだけのハッカーがいてどのぐらいあなたは危険な状態にいるかということを書いています。
NIPCはFBIによって1998年中ごろに設置されその最初の主な活動はMelissaウィルス(W97M.Melissa)の発信源をつきとめるのを支援したことです。CyberNotesのアーカイブは1999年1月からになっています。
シグネチャ検出(Signature recognition) 入力と出力のトラフィックを良く知られたシグネチャ(signatures)と比較する最も一般的な方法。例えば、大量の広範囲のポートに対するTCP接続の失敗は誰かがTCPスキャンを行っていることを示します。
異常検出(Anomaly detection) 基本的な振る舞いからの変化を発見するために統計的分析を行う方法。 (トラフック、CPU利用、ディスク利用、ユーザログオン、ファイルアクセスなどの急激な増加など)このテクニックはシグネチャ検出よりは弱いがシグネチャ・データの存在しないアタックも検出できるという利点もある。異常検出は現在のところかなり理論的であり今後の研究が期待される分野でもある。(だれも、単純にシグネチャを収録するだけではPh.D.は取れない。したがって研究者はニューラルネットワーク、ファジー理論、あるいは他の人工的手法を取り入れる必要がある。)
発見には発生時に対処する"リアルタイム" な方法と、ログファイルの解析などのオフライン的手法が存在する。
プロトコル・スタック・ベリフィケーション "Ping-O-Death"や "TCP Stealth Scanning"などの多くの侵入手法は目標のマシンを攻撃するためにはIP, TCP, UDP,やICMPなどのプロトコルに違反しています。単純なベリフィケーションシステムは無効なパケットを検出することができます。これは極度に細分化されたIPパケットなど、有効なではあるけれども不審なものに対しても有効です。
アプリケーション・プロトコル・ベリフィケーション OOBデータを加えた無効なNetBIOSプロトコルを用いる"WinNuke"や有効だけれども異常なシグネチャを見せるDNSポイゾニングなど、多くの侵入は無効なプロトコル動作を行います。これらの侵入を発見するためには、疑わしいあるいは無効な振る舞いを検出するためにNIDSは多くのアプリケーションレイヤプロトコルを実装し直さなければなりません。
新しいログ保存可能なイベントの作成 NIDSはネットワーク管理ソフトの記録能力を拡張することにも使えるでしょう。例えばあるNIDSはあるマシン上で利用される全てのアプリケーション・レイヤ・プロトコルを記録することができるでしょう。これらの拡張イベントは一般のイベントログシステム(WinNT Event, UNIX syslog, SNMP TRAPS等)等のイベントと関連づけて調べることができるでしょう。
一例としてはターゲットにtracerouteを行なうことです。これはIDSに低レベルのイベントを発生させます。tracerouteは無害でネットワーク上で頻繁に使用され るので攻撃を意味するものではありません。しかしながら、攻撃の前に tracerouteが行われることがよくありますのでおそらくIDSはこれをログに記録する でしょう。ログの処理の一環として通常DNSの逆引きを行います。したがってあなたのDNSサーバに対して逆引きが行われればIDSが使用されているということが考 えられます。
%systemroot%/system32ディレクトリに対する"Everyone"からの"write"アクセスを不可にしましょう。
ネットワークへの侵入への物理的な防御を考えることも必要でしょう。John Kozubik はログインスクリプトを使用してビルトインのパスワード付スクリーンセーバーを強制するということを提案しています。これはログインスクリプトに以下を含めることで可能です。
regedit /s \\MY_PDC\netlogon\scrn.reg
"scrn.reg"というファイルに以下を書いておきます。
REGEDIT4 [HKEY_CURRENT_USER\Control Panel\Desktop] "ScreenSaveTimeOut"="1800" "ScreenSaveActive"="1" "SCRNSAVE.EXE"="c:\winnt\system32\logon.scr" "ScreenSaverIsSecure"="1"
これによって、30分間操作のなかった場合、パスワード付のスクリーンセーバーを起動しているというものです。(再度操作を継続するためにはパスワードの再入力を要求する。)
以下は一般的なユーザーのためのテクニックです。
John Kozubiは企業ユーザに対し以下の提案を行っています。サーバからのログインスクリプトを実行しているWin95/Win98非常にセキュリティが弱いので、そこから他の企業行ネットワークに侵入されることがあります。Win95は読みやすい形でパスワードをキャッシュするので、それらをとりのぞいた方が良いでしょう。
del c:\windows\*.pwl REGEDIT /s \\MY_PDC\netlogon\nocache.reg
"nocache.reg" を以下のように設定します。
REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Network] "DisablePwdCaching"=dword:00000001
もちろん、あなたはシステムを更新することを考えるのも良いでしょう。実際、Sunが何年も前に公式にサポートすることを止めているにも関わらず、世の中には大量のSunOS 4.x システムが存在します。
それ以上に、わたしはそれについて知っていることが無いということもあります。
優先順位については会社のCEOによって設定される必要があります。 あなたのシステムが攻撃され、あなたがプラグを抜いたというシナリオを想定しましょう。 ユーザは腕を抱えて不満を言うことでしょう。そして、あなたが間違っていたということが判明すれば、あなたは首になることでしょう。あからさまな攻撃があったときでさえ、とばっちりを恐れるあまりにプラグを抜く人は少ないことでしょう。 データの盗用は目に見えず非現実的であり、機嫌の悪いユーザは非常に現実的に感じられることでしょう。 したがって、侵入の疑いがある場合に際して手順について、最上層部からの明示的なポリシが必要なのです。 [著者: どなたか私に送ってもらうことのできるポリシーのサンプルをお持ちでしょうか?]
一環した方針が定まったなら、次の項で説明する必要な技術について調査をする必要があります。
多くの場合、事前に良い防御手段を講じておくことが良い対処になります。これは以下を含みます。:
コンピュータネットワークは非常に早く成長し、侵入に対処する能力を身につけた人材は不足しています。さらに、急速なネットワークの発展のためにログ保存や監査の体制はかなりでたらめになっています。これらの状態によって人々は攻撃を受けている場合に何をすべきかを知らず、攻撃からうまく回避する体力はできていません。
以下はあなたのドメインからTelnet接続を示しているログです。この接続先のマシ ンは一般にサービスを提供しているものではなく、弱点のあるマシンを探すIP空間探索 であることが考えられます。 我々はこの事態を深刻に捉え、あなたもおなじように真剣に考えていただけることを望 んでいます。この事態に対し適切な対処をとりご連絡いただけるようお願いします。 Nov 6 07:13:13 pbreton in.telnetd[31565]: refused connect from xx.xx.xx.xx
このログ・エントリーはUNIX上のサービスについてのログとアクセス・コントロール機能を持つtcpwrapperによって生成されたもののようです。電子メールメッセージにあるようにこれは何らかの自動スィープのようです。もっともポピュラーなスィープ対象となるプロトコルはICMP, FTP, SMTP, NNTP, 及び Telnetです。
大抵の場合、これは攻撃ではなく探査(probe)の証拠であることが考えられます。また、その他の確認する証拠はありません。Greg Drew <gdrew at computer dot org>によって指摘されるようにいくつかの良心的な理由も考えられます。 there could be a number of benign reasons:
しかし、またいくらかの悪意の可能性もまたあります。
<vick at macdoon dot lerc dot nasa dot gov> はこれはソーシャル・エンジニアリング攻撃かもしれないと他の可能性を指摘しています。このメッセージはあなたに、どのようなアクションをとったかを尋ねています。もしあなたがそうすればあなたは自分のネットワークのことを多く説明することになるでしょう。:
スパムに対処するように、このメールに対する返答はあまり良い結果が得られないかもしれません。(あなたがあなたのネットワークを踏み台として使っていたということを発見した場合を除いて。)質問のあった日時におけるあなたのシステムのログを確認をした方が良いでしょう。もしあなたがログをとっていなかったとするならログを取りはじめる良い機会でしょう。
事件は良心的なものであることが判明しました このターゲット・ネットワークは再構築され、その"unauthorized"ユーザはこのことを知らず、正しくログインしていなかったというものです。
私に言えることは、できるだけ多くの情報を集めるということです。例えば、私はT-1ライン上のパケットを記録するスニファを設置し16ギガバイトのディスクにファイルとして記録を行ったことがあります。(ほとんどのスニファ・プログラムはこのようなことができます。)それはあまりいい考えとは思われないかも知れませんが、私はこれらのファイルを活用しています。どれだけ多くのTCP/UDPスキャンが日々行われているかを見ると大変驚かされます。
さらに、全てのマシンの全てのログ記録と監査機能が動作することを確認しておくべきでしょう。これらはあなたがハックされている時に何が起こっているかを明かにする手がかりになることでしょう。
いくらかのフリーウェアについては4.4 及び4.5にて解説をしています。
| ベンダー | 製品 | 初期バージョン | 更新頻度 | 更新方法 | プロトコル | アプリケーション | モード | ハードウェア | OS | レイヤー2 | router/firewallとの通信 | 通報 | インテグレーション |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Network ICE | BlackICE | 1999年7月 | 約2週間毎 | 認証を伴う自動更新 | TCP/IP, ARP | SMB+Windows, NFS, DNS, HTTP, FTP, Telnet/rlogin, SNMP, SMTP, Sun RPC, MS RPC, Finger, ICQ, IRC, ident/auth, IMAP, POP, NNTP, PCAnywhere, SQL, TFTP, Back Orifice | Promiscuous (Sentry), non-promiscuous (Pro) | single- or dual-CPU | WinNT, Win95, Win98, Win2k | 10/100 Ethernet, Token Ring | yes | paging, e-mail, icon change, HTTP post | SDK, SQL |
| Network Associates, Inc. | CyberCop Monitor | 1999年6月 | 4半期毎 | 製品のアップデート | TCP/IP | SMB+Windows,DNS, HTTP, FTP, Telnet, rlogin, SMTP, IRC, identd, POP, TFTP, ICMP, NetBIOS | Non-Promiscuous, Promiscuous? | x86 | WinNT | 10/100 Ethernet, ? | no | E-mail, Event Log, custom message, DCOM | SQL, Crystal Reports |
| Cisco | NetRanger | 1996年8月 | 4ヶ月毎 | CD | TCP/IP | SMB, NFS, DNS, HTTP, FTP, Telnet, SNMP, SMTP, RPC | Promiscuous | デュアルCPU Solaris x86 | Solaris x86 | 10/100 Ethernet, FDDI, Token Ring | yes | paging, e-mail, icon change | ? |
| ISS | RealSecure | 1996年12月 | 毎月 | 暗号化されたWebあるいはメールから手動により実施Manually via encrypted web or via encrypted e-mail | TCP/IP | SMB, NFS, DNS, HTTP, FTP, Telnet, SNMP, SMTP, RPC | Promiscuous | many | NT and UNIX | 10/100 Ethernet, FDDI, Token Ring | yes | ポップアップウィンドウ, e-mail, SNMP trap | CheckPoint, Lucent Mgmt. Server? |
| NFR | Network Flight Recorder | 1997年12月 | サードパーティーより随時 | ソースコードより手動コンパイル | TCP/IP | DNS, HTTP, FTP, Telnet, SMTP, RSH | Promiscuous | x86 | Most UNIXes (including many x86 variants) | 10/100 Ethernet, FDDI | no | paging, e-mail, fax, pop-up window | ? |
| NSW | Dragon | 1999年4月 | 約2週間 | 手動ダウンロード, メーリングリスト | TCP/IP スイート | Promiscuous | sparc, x86 | Linux, BSD, Solaris | 10/100/gig Ethernet | no | syslog, SNMP trap | ログファイルおよびDB解析部のルーチンの記述が容易 | |
| AXENT | Omniguard Intruder Alert | 1992 | 1から2週間毎 | 暗号化されたWEBより手動 | N/A | ログ, ファイル更新, Cisco ルーターイベント, su, ファイアーウォール・イベント | End-node | End-node | NT, NetWare, AIX, Digital UNIX, HP-UX, Solaris) | N/A | no | paging, e-mail, pop-up window | Tivoli TME 10, BMC PATROL, HP OV |
また、この製品は他のシステムと同様にUNIXへの攻撃の検出のほか、Windowsに対する一連の攻撃も検出することができます。検出可能な侵入のリストは次のアドレスで見ることができます。http://www.networkice.com/advICE/Intrusions
BlackICE は148,800 フレーム/秒 (100-Mbps Fast Ethernetの最大値)のトラフィックを扱うことができ、IDSをインストールするにはセンシティブなUNIX環境やサーバーに対する"sentry(番兵)"としても適当です。
BlackICE は "intrusion countermeasures(侵入対策)" というコンセプトに基づいています。この製品は侵入者を検出するだけではなく、ビルトインされたミニ・ファイアーウォールによってアクセスを遮断します。また、証拠をつかむための逆探知(追跡)を行います。ミニ・ファイアーウォールはファイアーウォールの設定できない末端のユーザや、通常のファイアーウォールでは干渉が多すぎると感じる人にとって有効です。
BlackICE はカスタム侵入検知、カスタム反撃、カスタム・イベント・レポート、カスタム表示などの機能を追加するためのSDKが付属しています。
The ICEcap 管理コンソールは何千ものBlackICEエージェントに対応可能なスケーラブルな報告機能、プッシュ型インストール、侵入に関する情報の自動更新の機能を提供します。
Goto http://www.networkice.com for more information.
4.2.1 CyberCop by Network Associates, Inc.
しかしながら、Network Associates は "CyberCop" という名称が気に入っていたため現在も製品の名称として使用しています。 同社は Ballista (Secure Networks社製)というSATANタイプの vulnerability scanner を購入し "CyberCop Scanner" と名前を改めました。
同社はさらに"CyberCop Server"と呼ばれる製品を提供しています。これはネットワークの機能はなくSun あるいは NTサーバ上での不正なログインやファイルの更新を監視するものです。これは最近NAI社によって買収されたHaystack社によって開発されたものであったと思われます。
4.2.2 RealSecure (Internet Security Systems (ISS), Inc.)
RealSecure は最初のメジャーな商用ネットワーク・イントルージョン・デテクション・システムであり、技術的にはやや遅れているのですが現在のマーケットにおいても主導的な位置付けにあります。かつては強みであった検出シグネチャ数やトラフィック容量も他にくらべると少ないものになっています。スイッチングネットワークへの未対応は大きな欠点となっています。
RealSecure は多くのOEM契約をしていますのでODS switchesなど他の製品の中に含まれていることもあります。
4.2.3 NetRanger (WheelGroup/Cisco)
4.2.4 SessionWall-3 (AbirNet/Memco)
4.2.5 ID-Trak (Internet Tools, Inc.)
4.2.6 SecureNet Pro (MimeStart)
4.2.8 Kane Security Monitor (KSM) (Security Dynamics)
4.2.9 Network Flight Recorder
NFRの評判のある特徴としてはIDSに関して特化した "N-code" とよばれるプログラミング言語があります。 N-codeで書かれた完全なSMTP解析ツールもあります。他の多くのシステムは単純にシグネチャを追加するかCプログラムを書くことが必要です。数多くのN-codeスクリプトがインターネット上のL0phtなどのサイトからダウンロード可能です。
NFR は他のシステムよりもより統計的な処理を行います。N-code システムによりこの統計機能を拡張することも容易です。
より詳しい情報は以下のアドレスにて見ることができます。http://www.nfr.net/forum/publications/LISA-97.htm
4.2.10 Dragon
SessionWallはPlatinumによって買収された AbirNetによって開発されました。PlatinumはComputer Associatesによって買収されました。より詳しい情報は http://www.abirnet.comにあります。
"Regexp" (正規表現) はUNIX環境における一般的なパターンマッチング言語です。これまで、一般的に正規表現はテキストファイルを検索するのに用いられてきましたが、バイナリデータについて使用することも可能です。事実、そのようなシステムはより柔軟なポート番号やTCPフラグなどのマッチングの基準に用いることも可能です。
"libpcap" (library for packet capture) はワイヤ上のパケットを"sniffs" するUNIXシステムにおいて使用可能な一般的なライブラリです。ほとんどの UNIX-ベースの侵入検知システム(どんな種類でも) が特定のプラットフォームに最適化したドライバを使用していたとしても、libpcapも使用しています。
どちらのモジュールについてもソースコードが公開されています。多くの侵入検知システムが単純にlibcapの出力を正規表現を記したファイルを読み込んで処理する正規表現のパーサーに送っているだけです。いくらかのシンプルなシステムは正規表現すら使用せずにパケットをよく知られたバイトパターンと比較しているだけです。
この種の侵入検知システムは一つの利点があります。それはアップデートが最も容易であることです。この種の製品は一環して最多の"signatures" を備え新たな侵入"scripts" に対して最も早く対応します。
しかしながら、そのようなシステムは多くの"signatures"を用意しながらも、重大な侵入を発見できることはあまり無いようです。例えば、"CE63D1D2 16E713CF"という8バイトがUDP data の最初に存在した場合は Back Orifice へのデフォルト・パスワードでのトラフィックを意味します。80% of Back Orifice の攻撃がデフォルトパスワードを使用しますが、残りの20%は異なるパスワードを使用しているので、このようなシステムでそれを発見することは困難でしょう。例えば、Back Orificeのパスワードを "evade" に変更したとするとパターンは"8E42A52C 0666BC4A", となり、"network grep" システムで発見することはできなくなってしまいます。
このようなシステムのいくらかはIPデータグラムやTCPストリームを再構築していません。したがってハッカーは単純にマシンのMTUサイズを調整することでこのようなシステムに発見されることを回避することができます。
このようなシステムは多くのfalse positiveを生む結果となります。上記のBackOrificeの例では64-bitのパターンはあまり一般的ではありません。これによってBack Orificeが存在しないにも関わらず警報を発してしまうことがあります。
プロトコル解析を行うシステムの場合このような問題はありません。それらは、全ての攻撃のインスタンスをキャッチし、少ない誤警報(false positives)に押さえることができるでしょう。そしてまた、プロトコル解析はフレームを探す必要がないので実行速度も速くすることができます。さらにこれらはより完全な問題の診断が可能になります。例えば、"Back Orifice PING" (無害) と"Back Orifice compromise" (極端な例ですが。)の区別などが可能になります。また一方で、新たなプロトコル解析のシグネチャはデザインやテストが必要になるため一週間以上かかることもあります。また、極端に精力的な攻撃に対しては誤警報(false positive)を現象させ実際の攻撃を見失うことがあります。
しかしながら、"network grep"はプロトコル解析システムに勝る利点があります。それらはあらかじめどのようにネットワークトラフィックが見えるべきかという前提なしで動作するために他のシステムでは見落とされてしまう攻撃を発見することができます。例えば、もしある会社がPOP3サーバーを通常とは異なるポートで運用していた場合、プロトコルを解析システムはPOP3プロトコルとは認識しないかもしれません。したがって、そのポートに対する攻撃は発見されずに終わってしまいます。一方、network-grep スタイルのシステムではポート番号等を考慮せずに同じシグネチャをチェックします。
参照ftp://coast.cs.purdue.edu/pub/tools/unix/argus ftp://ftp.sei.cmu.edu/pub/argus-1.5
商用バージョンについては上記を参照のこと。
inetdと各サービス(ftp, telnet等)の間に入ります。inetdはまずアクセス管理(IPアドレスによる)を行うtcpwrapperを呼びログを取ります。次にtcpwrapperが実際のサービスを実行します。
セキュリティーの問題はCERT advisoryで報告されることがあります。 CERT (コンピュータ緊急対応チーム) 1988年のモーリス・ワーム事件を受けて、いくつかの大学とDARPAによって設立されました。参照 http://www.cert.org.
AUSCERTへのコンタクト auscert@auscert.org.au.
6.2.1 Purdue大学 COAST アーカイブ
ここはIDSとセキュリティ全般について学ぶには最適なサイトです。 参照 http://www.cs.purdue.edu/coast, http://www.cs.purdue.edu/coast/intrusion-detection, and http://www.cs.purdue.edu/coast/ids.6.2.2 SANS Institute
ここはハッカーではない人々のためのセキュリティ情報には最適なサイトと思われます。彼らの対象は彼らのネットワークを守るMIS(情報システム管理)プロフェッショナルです。 参照 http://www.sans.org/6.2.3 L0pht Heavy Industries
Windowsをターゲットとしたツールやアラート情報などハッキングの情報があります。 Goto http://www.l0pht.com6.2.4 Technical Incursion Countermeasures
私のお気にいりのサイトです。システム侵入に関するよく整理された豊富な情報があります。 参照 http://www.ticm.com6.2.5 IDS メーリングリスト
本文に"subscribe ids"と書いたメールを majordomo@uow.edu.auに送ってください。
質問については ids-owner@uow.edu.au まで。
これは時折興味深い議論が寄せられる比較的流量の少ない良いメーリングリストです。6.2.6 Michael SobireyのIntrusion Detection Systems ページ
http://www-rnks.informatik.tu-cottbus.de/~sobirey/ids.html6.2.7 advICE データベース
http://www.networkice.com/advice/Countermeasures/Intrusion%20Detection/default.htm
6.3.2 NTSecurity.net
ファイアーウォールは単純に全てをシャットアウトしておいて、いくつかの選択された通信だけを通過させるようにしたものです。完璧な世界においては、システムはすでに"ロックされ"安全になっているはずなので、ファイアーウォールは必要ないでしょう。我々がファイアーウォールを必要とする理由は偶発的にセキュリティーホールが残されていたりするためです。
したがって、ファイアーウォールをインストールする場合、最初に行われるのは全ての通信を停止することです。次に、ファイアーウォールの管理者は特定のタイプのトラフィックがファイアー・ウォールを通過することを許可する"ルール(rule)"を注意深く設定します。例えば、一般的な企業におけるインターネットに接続されたファイアーウォールは、全てのUDPとICMPデータグラムトラフィックを停止し、内向きのTCP接続を停止し、外向きTCP接続は許可しています。これはインターネット上のハッカーからの内向きの接続を停止しますが、内部ユーザによる外向きの接続を許してしまいます。
ファイアーウォールはあなたのネットワークを囲み、いくつかのゲートを選択して用意した単純なフェンスのようなものです。フェンスは(例えばその下に穴を掘っているとか、無許可の人物がゲートを通過しているなど)誰かが侵入を試みていることを発見するような能力も能力は備えていません。それは単純に指定されたポイントへのアクセスを制限するにすぎません。
要するに、ファイアーウォールはユーザーが想像するような動的な防御システムではありません。これに対し、IDS は より動的なシステムです。IDSはファイアーウォールが捉えることのできないネットワークに対する攻撃を認識します。
例えば、1999年4月にはColdFusionのソフト不良によって多くのサイトがハックされました。これらのサイトはポート80のWebサーバのみにアクセスするよう全てファイアーウォールが設定されていました。しかしながら、ハックされたのはWebサーバだったのです。したがってファイアウォールは何の防御も提供しなかったのです。一方侵入検知システムなら、システムに設定されたシグネチャと一致することで、この攻撃を発見することができたでしょう。
ファイアウォールに関する他の問題点としては彼らはあなたのネットワークの境界部のみにおいて機能するということです。ハッキングによる経済的損失のおよそ80%がネットワーク内部からによるものと言われています。ネットワークの周囲にあるファイアウォールはインターネットと内部ネットワークの間のやりとりを監視するだけで、内部に起こることに関しては一切感知していません。
あなたのファイアーウォールにIDSを追加する理由としては以下のものが挙げられます。
"周到な防御と、執拗なこだわりはあなたの味方です。" (Bennett Todd <bet at mordor dot net>からの引用). ハッカーはあなたが想像する以上の能力を持っています。あなたはできる限りの防御を行った方が良いでしょう。それでもなお、真剣なハッカーには十分とはいえません。しかしながら、そのような防御によってハッカーの意欲を喪失させる効果はあるのです。
歴史上の橋の建設というものを考えてみましょう。時がたつにつれて技術は向上し、橋はどんどん広くて長い距離をつなぐことができるようになってきました。(数キロにもわたるサンフランシスコのゴールデンゲートブリッジなど)橋の建設者達は橋が失敗する(人命に関わらないとしても)ことをとても恐れるために、とても保守的です。したがって、彼らは必要以上に素材(木、石、鉄)を使用します。また決して可能な限りの幅を持つような橋を作ることはありません。しかしながら、時が経つにつれて橋自身の実績ができてくると、技術者達は橋が失敗するまで、よりリスクを選択するようになってきます。そしてまたさらに多くの技術者が保守的になっていく。As has been quoted "落ちない橋を作ることは容易である。問題なのはかろうじて落ちない橋をつくることである。"
これと同様に、多くのファイアーウォール管理者は保守的な方法を取っています。過剰に保守的にこだわり、絶対に必要な以外のサービスを全て停止することでハックされないファイアーウォールを構築することは容易です。
しかしながら現実の世界において、技術者は十分神経質になることは許されてはいません。橋の建設者が橋を広くして豪華に見せたいのと同様に、企業はインターネットに対するサービスを広く持ちたいと考えるものです。これはファイアーウォールの管理者に対して防御を緩めさせる大変なプレッシャーになります。このプロセスはシステムがハックされるまで続きます。その結果企業はより保守的になるでしょう。このような観点から、企業のダイナミクスによって管理者はハックされることを余儀なくされているとも言えるでしょう。
全てのファイアーウォール管理者が知るようにシステムはインターネットからの攻撃に常にさらされています。世界中のハッカーが常にシステムの弱点を探しつづけています。さらに、毎月一般的な製品の新たな弱点が発見されハッカーはその弱点を探してインターネット全体にスキャンをかけます。そのようなセキュリティーホールの例にColdFusionのcfmdocsバグと呼ばれるものやMicrosoft社の.htrバッファーオーバーフローなどがあります。
ファイアーウォールは単純に通過を許可するかしないかのルールベースシステムであることに注意してください。 "内容検査" スタイルのファイアーウォールでさえ、彼らのルールに合致するかどうかを調べるだけで、トラフィックの内容がアタックかどうかを判断する能力を持っていません。
例えば、ウェブサーバの前にあるファイアーウォールの場合、TCPポート80以外の全てのトラフィックをブロックします。ファイアーウォールは全てのポート80への接続を有効なアクセスとして扱います。一方IDSは同じトラフィックの中の攻撃パターンを探し出します。IDSは管理者がポート80を許可していようがいまいが感知していません。IDSに関しては全てのトラフィックが怪しいものとして扱います。
これはIDSはファイアウォールと同じデータソースすなわち生のネットワークトラフィックを見なければならないということを意味しています。もし、IDSがファイアーウォールと対等の位置になく、付随的な機能であった場合、ファイアーウォールが侵入とみなしたものに対する機能しか提供できないことになってしまいます。上の例でいうとファイアーウォールはポート80のトラフィックを決してIDSに送らないことになってしまいます。
+-+ .
|F| +-----+ .
|I+--+IDS#1| .
/============\ |R| +-----+ /============\ .
H H |E| H corporate H .
H internet H--------+--------+ +------+------H network H .
H H | |W| | H +-----+
\============/ +--v--+ |A| +--v--+ \=========+IDS#4|
|IDS#3| |L| |IDS#2| +-----+
+-----+ |L| +-----+ .
+-+ .
最も大切な質問は:
イントルージョン・デテクション・システムをインストールすれば、常に侵入のための行為が行われていることがわかるでしょう。SOHOの環境では週に一度はハッカーからのスキャンを受けることが予想されます。有名なWebサイトではハッカーは1日に何度も弱点がないかスキャンを試みることでしょう。大規模な企業内ネットワークでは内部ユーザの定常的な不穏な行動を発見することでしょう。
最初に遭遇しそうな問題としては内部ユーザがWebのポルノサイトを見ていることが考えられます。この問題はNetwork General (Sniffer Network Analyzer tmの開発企業) において"web expert analyzer"の開発途中に多くの社員がそのようなサイトを見ていることをこのシステムが検出したことにより明かになりました。当時のCTO(Greg Gilliom)は、この会社が公式なポリシーは持っていないが、世界で最も進んだネットワーク・モニタリング機器が彼らの行動を監視している、ということを述べた電子メールを社員に向けて書かなければなりませんでした。結局それは会社のビジネスにつながったのです。
多くの他の保守的な企業がそのようなブラジングについての明かな制限を設けていないのは興味深いところです。これは、しばしばエグゼクティブ自らそのようなことをしているからではないでしょうか。立場の低いエンジニアはそのような行動が発見することに対する恐れから、このような議題が上らないと思われます。
次の問題はエンジニアの人事問題です。 ユーザが不正な行為を行っているのを発見した場合に、そのユーザを注意するために多くの時間を人事と相談しなければならないでしょう。
最後の問題はシステムに侵入したハッカー達をどうするかという問題です。 大抵はISPに問い合わせの電話をしたり"abuse@"というアドレスにメールを出したりします。時にはISPは自分達のシステムも侵入されていることが分かるので感謝をしてくれるでしょう。
実際、極めてひどいハックに遭遇したとしても、落ち着いて、威厳と敬意を忘れずに他人と接するようにしましょう。
しかしながら、企業は自ら"ビッグ・ブラザー"になることを望んではいません。不適切なネットサーフィンに関するルールがグレーエリアになってしまうのはやむを得ません。(例えば: Playboy.com では最近コンピュータ・セキュリティーに関する記事を掲載していましたので、従業員は正統にWebをサーチしているだけで問題に引っかかってしまう可能性があります。)
IDS、ファイアーウォール、プロキシサーバ、スニファ・プログラムは全てのWebサーフィンを誰がどのサイトにアクセスしたかを含め、ログファイルに記録することができます。多くの企業はそのようなログを持っていますが、この情報を利用しているところは少ないようです。ネットワーク技術者は人事部のような仕事をしたり、人を責めるような仕事はしたくありません。(多くの場合犯人は経営陣であり、彼らを責めることは自分のキャリアを狭める結果になります。)
一つの解決法は、そのような情報を内部用Webサイトに公開することです。これは不適切なWebサーフィンに関して劇的な効果があることで知られています。これは中央で適切かどうかを判断するのではなく、そういった判断を個人にゆだねることになります。
例えば、上のセクション 4.3 ではネットワーク・トラフィックをパターンマッチシステムにかける "network grep" システムを紹介しました。このようなシステムはある程度のC言語とUNIXシステムの知識があれば作成できます。
同様にセクション 4.5.2 ではファイアーウォールのログファイルを解析するPERLによるシステムを紹介しました。
心配の一つは、NIDSを企業のネットワークで運用するということは、ネットワーク管理者が従業員のネットサーフィンの活動をを見ているということになります。(時にはネットワーク管理者は企業のトップがポルノサイトを見ているのを発見することもあります。)ネットワーク機器やユーザのワークステーションがが会社に属する限り、法的にはそれらの機器の使用にあたってはモニタされることは同意しているとみなされます。しかしながら、企業は明示的に従業員のハンドブックに彼らのネットワーク上での活動はモニタされるであろうことを記しておくべきです。少なくとも、これによって不要な問題の発生を回避することができるでしょう。
WORM (Write-Once-Read-Many)ドライブは従来よりこのような目的に利用されてきましたが、それらはとても高くあまり一般的ではありません。おそらくはあなたのシステム用のそういったドライバは無いかもしれません。そしてまた、あなたのソフトウェアには互換性がないかもしれません。 (例:いくつかのシステムは書きこんだファイルを後で少し書き換えたりしますが、これはWORM上では機能しません。
エントロピセットインという方法は、システムに意図的な制約を与えることで、混乱した状況を回避します。システムを安全に監視する一つの方法はシステムログをTCP/IPの届かないところに設置し、TCPDUMPを使用して生のパケットをファイルに書き出していくことです(おそらくシスログの生成は後日行うことになります。)が、このようなシステムが誤ってTCP/IPに接続されないという保証はありません。
そのような混乱に対抗するためには、"snipped-wire" アプローチというものを使用します。このモデルでは、データを生成するマシンにイーサーアダプタを追加し、受信 ワイヤをカットします。もし、この追加のアダプタが安全でないネットワークに接続されたような場合にも、わずかの問題の発生に押さえることができます。同様に、受信システムは一つだけのイーサーアダプタを持つべきでしょう、そしてその送信ワイアをカットするのです。これはパケットスニファを使用する場合にTCP/IPスタックを無効にする最も有効な方法でしょう。(もちろん、反応が無かったとしてもシステムを攻撃する方法もあります。)
通常のTCP/IPはこのシナリオの中では機能しません。トラフィックを一方通行で送信するにはルーティングとARPテーブルをハードコードしなければなりません。同様に、受信マシンについては受信パケットを利用可能な形に再構成するユティリティーが必要になるでしょう。
syslogやSNMP TrapのようなUDPベースの通信はこのような状況ではもっとも有用な通信手段になります。ビルトインの環境があるので出力用のマシンにおいてこれらを利用することはとても容易です。UDPでは反応を待たないので、アプリケーションの運用を妨げることがありません。また、SNMPメッセージやsyslogは受信側で最終的に解析する際容易ですし、少なくとも、TCP/IPスタック上でこれらのポートのみを受信するように固めることも容易です。一方、最小限TFTPかNFSがTCP/IP上でファイルを転送するために設定することも可能です。
このデータ管理方法の問題点として、データリポジトリをネットワークに接続することができないのでシステムをバックアップするのに必要なものは全てそのマシン自身にインストールされていなくてはならないということです。
個人的に私が使用しているのは古いPentium-90のコンピュータに6GのドライブとCD-ROM Writerを接続し、全てのネットワークトラフィックをディスクに記録するスニフィング・ユティリティーを使用しています。(416-kbps DSL環境)単純なフィルタが多くの不要なものを削除するので最新のRedHatのディストリビューションをダウンロードしたとしてもディスクを埋めることはありません。私は、この方法では絶対的にネットワーク上で起こっていることの多く、いわゆるステルス手法なども含めて記録できるので、この解決法をログファイルを記録するよりも好んでいます。
これは侵入検知システムが役にたたないということを意味するわけではありません。ハッキングが非常に普及している今日のネットワークでは、(ファイアウォールの内側でも外側でも)そのようなシステムをインストールするとすぐに驚かされることでしょう。良い侵入検知システムは劇的にサイトのセキュリティを改善することができます。侵入検知システムは補完的な手段にすぎないことを自覚しておかなければなりません。"proveably accurate"(おそらく正確)なシステムは大抵(ヒューマンエラーによって)失敗し"proveably incorrect"(おそらく不正確)なシステムは大抵うまく動作します。
例えば、CEOと同じスィッチ内のネットワークに接続しているユーザはCEOのマシンのファイルやプリンタ共有の機能に対して一日中自由に攻撃をしかけることができます。
この問題にはいくつかの解決法が存在しますが、十分なものではありません。これには以下のようなものがあります。
スィッチ間におけるケーブルのタッピングの問題としては大量のトラフィックが発生することである。しかしながら、ほとんどのNIDSは限られた帯域幅しか処理することができないのでこのような場合飽和してしまうことが予想されます。
Thanks to Christopher Zarcone < czarcone at acm dot org > for this info.
このセクションではいくらかの典型的なリソースの問題をリストアップします。
IDSを購入する場合、ベンダーに対してどれだけの同時TCP接続を処理できるかを聞くと良いでしょう。
高いトラフィックはセンサーに処理できなかったパケットを落とさせるだけではなく、センサー自体を完全にシャットダウンすることも可能です。例えば、最大20,000フレーム/秒の処理を行うことのできるセンサーを考えましょう。40,000フレーム/秒の負荷が与えられた場合、実際の処理速度は10,000フレーム/秒か5,000フレーム/秒あるいは0になってしまうかもしれません。これはフレームの受信とフレームの分析は2つの異なる処理だからです。多くのアーキテクチャは処理するのが難しい場合でも、パケットを受信しさらにパケットの処理時間を奪います。
したがって、侵入者はネットワークを飽和させることでセンサを攻撃することが可能です。もし侵入者がローカルにいるのであれば、単にパケット送信プログラムを使用すれば良いでしょう。400Mhzのマシンは60byteのパケットを用いてそのシステムに接続されたIDSシステムを破壊することができるでしょう。
リモートからの侵入者の場合、攻撃者自身がこの方法で攻撃する十分に高速なネットワークを持っているとは考えにくいので(100Mpbsということはあまりないでしょう)ネットワークを飽和させるのにsmurf か fraggle 攻撃ができるでしょう。
'nmap'ポートスキャンツールは”デコイ”スキャンという機能を持っています。これは攻撃者の実際のIPアドレスと同時に何百もの偽のソースアドレスをしようしてスキャンするものです。したがって、管理者がこのうちどれが本当のアドレスかということを発見するのはとても大変になります。
どのような攻撃も同様のテクニックで行うことができます。偽のアドレスによる大量のアタックは、その中にまぎれている本当のアドレスからの攻撃をみつけにくくします。管理者はノイズにまぎれた本当の攻撃を見つけるのに苦労を強いられます。
しかしながら、これら2つのシナリオにも問題があります。攻撃者が疑うにはそこに見つけるべきデータが必要です。他の攻撃はこのデータ容量を埋め尽くしてしまおうというものです。データベースが埋められてしまえば過去のアタックの記録は削除されて発見することはできません。
NIDSは様々なサービスを提供しているTCP/IPスタック全体にも相当するとても複雑なシステムです。これはNIDSはSYN floodやsmurfのような攻撃に影響されやすいということを意味しています。
それどころか、NIDSが処理する様々なプロトコルは予期せぬトラフィックに対してシステムがクラッシュさせられる可能性を残しています。攻撃者はターゲットが使用しているのと同じ侵入検知システムを購入し、そのIDSを破壊するためのパケットを探したりします。そして侵入者は攻撃の間IDSを殺しておいて発見されないようにします。
このセクションでは基本的な侵入検知システムをだますための単純な回避テクニックを紹介します。 次のセクションでより高度な手法について述べます。
したがって製品レベルのNIDSはトラフィックの再構成を行います。またいくらかのファイアウォールはトラフィックが通過する前に再構成を行うことでトラフィックの”正規化”を行います。
ディスティネーションポートはユニークにプロトコルを規定するという仮定に基づいて、ファイアウォールを簡易なNIDSとして使用する人々もいます。バックドアをうまくバックドアをインストールすることのできたハッカーはデフォルトポート以外で標準的なプロトコルを走らせることができます。例えば、ハッカーは例えばBack Orificeが仕込まれたプログラムをポート番号をデフォルトの31337から変更して他のユーザに送ることができます。(わずかなものを除いて)大抵の侵入検知システムはトラフィックを適切に識別することはできないでしょう。
例えば、いくつかのPOP3サーバは長いパスワードを入力するバッファーオーバフローに対して脆弱です。この弱点に対する攻撃スクリプトがいくつか存在しています。ある侵入検知システムは10個の最も一般的なスクリプトに対する10個のパターンを持っているとしましょう。同時に他の侵入検知システムはパスワードフィールドを調べて100byte以上入力された場合に警報を発するとします。後者がこの弱点に対するあらゆる攻撃をキャッチすることができるのに対して、前者はスクリプトを変更することで簡単に回避できてしまいます。
ネットワーク侵入検知の回避について書かれたセミナーペーパーが Thomas H. Ptacek と Timothy N. Newsham によって書かれています。オリジナルのポストスクリプトバージョンは http://www.aciri.org/vern/Ptacek-Newsham-Evasion-98.psにあります。またHTMLミラーはhttp://www.robertgraham.com/mirror/Ptacek-Newsham-Evasion-98.htmlにあります。 Thomas H. Ptacek は多くのあるいはほとんどの商用IDSはまだ(1999年10月)重大な問題があるとしています。このセクションの多くはこの2つのペーパーのサマリから構成しました。
これらのペーパーはネットワーク侵入検知システムが用いているネットワークモデルは現実世界のものとは異なっているという考えを述べています。
例えば、侵入者は目標となるホストは見ないが、NIDSは見るようなTCP FINパケットを送るかもしれません。これによってNIDSは接続が終了したと信じるけれども、実際には終了していないということがおこり得ます。TCP接続は"keep-alive"という信号を送らないので侵入者は何時間でも何日でも終了を延ばすことができます。実際には、多くの重要なサービスは一定時間活動がなければ切断するように設計されていますが、数分間は保持することができます。
まず考えられるのはNIDSは通過できるがその後のルータでパケットが落とされるようなパケットを利用する方法です。これはルータの設定によりますがが、低いTTLフィールドやフラグメンテーション、ソースルーティングや他のIPオプションなどを用いて行うことができます。もしIDSに接続された接続が低速であった場合、ハッカーはこの接続を高いプライオリティのIPパケットによって飽和させTCP FINを低いプライオリティのパケットとして送信することによりルータにこのパケットを落とさせることができるかもしれません。
他のアプローチとしては何をホストが受け入れ何を受け入れないかを考えることです。例えば異なるTCPスタックは微妙に無効な入力に対して異なった動作をします('nmap'や'queso'などOSを識別するプログラムなどはこれを利用しています)。この性質を利用して受け入れられたりリジェクトされたりするトラフィックを発生させる典型的な方法としてはTCPオプションを送信しIPフラグメントやTCPセグメントについてタイムアウトを発生させる方法や、フラグメントやセグメントをオーバラップさせる、TCPフラグかシークエンス番号に微妙に誤った値をいれて送るなどがあります。
Ptacek/NewshamのペーパーではIDSのソフト不良を明らかにするためにIPフラグメンテーションとTCPセグメンテーションの問題に焦点をあてています。例えば異なるデータを持つオーバラップしたフラグメントが送信されると、あるシステムは最初のフラグメントを選択し(WinNT, Solaris)、あるものは後の方のフラグメントを選択します。(Linux, BSD)IDSは終端においてどちらが選択されるか知る由もなく間違った予測をしてしまうかもしれません。
彼らのTCP接続の分析はより深いものです。我々の予想以上に脆弱なTCP接続の非同期化という方法が知られています。IDSは全てのTCP/IPスタックの振る舞いをモデル化することは不可能であり、終端が何をデータとして受け取るかということを知ることはできません。TCPもまたIPのフラグメント化と同様オーバーラップの問題を持っています。例えば、終端のホストが後のセグメントを受け取るような場合に、侵入検知システムは最初のセグメントを受け取り後のセグメントを無視するかもしれないのです。
彼らは侵入検知システムを回避できるかどうかを明らかにするために様々な侵入検知システムに対してテストを実施しており、その結果は悲惨でした。あるメジャーな侵入検出システムはパケットをフラグメント化するだけで回避されてしまい、他のものも終端ホストが受け取るデータと”非同期化”させることによって無効化されてしまいました。
CVEの活動は様々なアドバイザリやIDS/スキャナーチェックなどの間で共通に使える用語辞書のようなものと考えれば良いでしょう。 これによって異なる製品が同じ事象を違う見方をするような問題を解決します。 例えば、ある侵入検知システムがあるフィールドの長さを見てバッファーオーバーフローを発見したとします。次にこれを複数のCVEエントリーとアドバイザリ に照合し同じフィールドにバッファーオーバーフローを持つ複数の製品について 調べることができます。同様に、他のIDSシステムは単独のvulnerabilityに対す る特定の攻略法についての(公開されたスクリプトから作成された)シグネチャを調べることもできます。
したがって、1対多、多対1あるいは多対多の製品及びアドバイザリのマッピングを行うことができます。CVEは様々なシステムの間での共通辞書を提供するもの です。
以下のステップによって作戦を立てるとよいでしょう。
インシデントレスポンスについて学ぶことができる。
ハッキングのテクニックについて学ぶことができる。多くの人は「自分には起こりえない’と信じており、必要な備えをしていません。。ハッカーが侵入可能なシステムをセットアップすることはどのようにしてハッカーの侵入を検知するのかまたその後どうクリーンアップするのかを学ぶことができるでしょう。
早期警戒システム
あなたの社内に容易に進入可能なシステムをセットアップすることによって実際のシステムが進入されるよりもずっと前に警報を発することができるでしょう。
ハッカーはシステムに侵入するための難しい方法を試す前に、まず単純な手口から試すものです。したがって、簡単に進入できるシステムをセットアップすることは何者かによる明らかな敵対的な意思を示しています。
Specter
- http://www.specter.ch/
- NAI CyberCop Sting
web上でのシステムの従来からの問題としてe-mailのシステムがメッセージを送信しているシステムのIPアドレスを付けてしまうというものがありました。もしあなたが社内にいて外部にe-mailを送信すれば内部のe-mailサーバのアドレスを公開していることになります。もしあなたがyahoo mailやHotmailのような無料e-mailシステムを使用している場合、あなたが使用しているマシンのIPアドレスがヘッダーの中に含まれています。これは社内のシステムのさまざまなレベルの深さにまで通ずる場合があり、ゲートウェイ、ファイアウォール、アンチウィルスコンテンツスキャナを何段階もとおりぬけることができる場合があります。簡単ではありませんが、ヘッダーに含まれるIPアドレスを偽るようなプログラムを書くことも不可能ではありません。
DNS情報
ハッカーが最初に行う行動のひとつがDNSゾーン転送です。多くの管理者がこれを禁止するために(他のDNSサービスの妨げになるとしても)TCPのポート53へのアクセスを禁止しています。偽のマシンや偽のサブドメインを挿入しておくことでハッカーの判断を誤らせることができます。例えば"bogus.robertgraham.com"というマシンを192.0.2.132というIPアドレスとともにセットアップし、IDSにこのアドレスに対するアクセスがあれば警報をを発するようにセットアップすることができます。私のIDSはゾーン転送に対して警報を発するようになっているので、これは誰かが真剣に私のネットワークを探ろうとしているのを発見することができるでしょう。
アンチ・スニファー
あなたのISPがあなたを盗聴していないと確信できますか?これを確かめるためにはインターネット上のどこかに、クリアテキストで接続可能なマシンをセットアップするのです。そして誰かがこのパスワードを使用した場合に警報を発するようにIDSをセットアップします。これは実際にサービスを提供していないハニーポットとともに用いると良いでしょう。例えば、私は他のマシンにログインするように見せかける仮想的なテルネットデーモン作成したことがあります。そしてIDSにそのアカウント名を使用してログインするユーザを検知するように設定しました。彼らがログインするとまもなく、それは本物のアカウントではないことに気づくでしょう。
アンチ・スニファーその2
上と似ていますが、簡単にクラックできるようなパスワードファイルをネットワーク上で転送し、誰かログインを試みていることを検知するようにIDSを設定します。例えば、FTPで/etc/passwdを定期的に転送するようなバッチファイルを設定します。これによりこのファイルを誰かが盗聴しているのを発見することができます。