官公庁のサイトへの攻撃で使われたバッファ・オーバーフローと,Yahoo!などを襲ったDDoS(Distributed Denial of Service)攻撃の概要と対策を探る。バッファ・オーバーフローの多くは,適切なパッチを当てるなどの基本対策で防ぐことができる。DDoS攻撃に狙われれば防ぐのは困難だが,攻撃用に仕掛けられた不正プログラムは検出できる。

写真1●侵入された中央省庁のホームページに書かれたメッセージ
クラッカは東京大学や米国のサーバーなどを踏み台にして侵入してきたことが明らかになっている

 2000年1月末から2月上旬にかけて日米で相次いだ不正アクセス事件は,インターネットに潜む危険を露呈させた*1。日本の官公庁のホームページの改ざん(写真1[拡大表示])は,公共機関のセキュリティ対策の不備が招いたと言える。しかし,米Yahoo!,米Amazon.com,米eBay,米CNNなどを次々と襲ったDDoS(Distributed Denial of Service)攻撃は,少なくとも現状では「標的にされれば完全に防ぐ方法はない」(ラック 取締役不正アクセス対策事業本部長 三輪信雄氏)。インターネットの根幹に対する脅威である。


遍在するバッファ・オーバーフロー

 官公庁への攻撃を捜査している警視庁ハイテク犯罪対策総合センターは,被害にあったサーバーのハード・ディスクを解析した結果,被害にあった15件のうち6件がバッファ・オーバーフローと呼ばれる現象を利用して侵入したものだと発表した。具体的に,どのOSまたはアプリケーションのバグを突いて侵入したのかは「捜査中のため公表できない」(警視庁)としている。

 しかし,どのアプリケーションだったかはそれほど重要ではない。なぜなら,バッファ・オーバーフローは最も代表的なセキュリティ・ホールであり,昔から,様々なOSやアプリケーションに多く存在している問題だからだ。今回攻撃された穴だけを塞ぐだけでは侵入は防げないのだ。

図1拡大表示●バッファ・オーバーフロー
変数への代入の際に,データ量のチェックを怠ったプログラムは,大量のデータを入力された際に戻り先のアドレスを書き換えられて,任意のコードを実行されてしまう可能性がある

送りつけられたコードが実行される

 バッファ・オーバーフローがどのような現象で,クラッカがどのようにそれを利用するのかを説明しよう([図1])。詳細はプロセッサによって異なるが,一般にC言語で関数呼び出しを行うとき,コンパイルされて生成された機械語プログラムは,戻り先アドレスをメモリー上のスタックと呼ばれる領域に置き.ジャンプする(図1の(1))。変数が宣言された時にも同じスタック領域にスペースが確保される((2))。この変数に,確保したスペース以上の大きさのデータが代入されるとどうなるか。データは変数領域をあふれて他のデータを上書きしてしまう((3))。これがバッファ・オーバーフローである。Windows,DOSの世界ではバッファ・オーバーランと呼ばれる。

 多くの場合,上書きされた戻り先アドレスはでたらめな値であり,プログラムは異常終了する。しかし,上書きされた戻り先アドレスが,あふれた変数のうちのあるスタック領域を指し,そこに実行可能な機械語コードがあったとしたら,関数を終了して戻る際に,スタック上のコードが実行されてしまう((4))。CGIプログラムやファイル転送機能などは管理者の権限で実行されていることが多い。その場合クラッカは管理者の権限で好きなコードを実行できる。クラッカは,例えばftpコマンドのパラメータとして機械語コードを含む大量のデータを送るなどして,バッファ・オーバーフローを利用し侵入を狙うのである。

 原理は簡単でも,実行にはスタックのアドレスを探り当てたり機械語コードを作成するなど高度な技術が必要だ。だからといって安心はできない。バッファ・オーバーフローを利用して侵入するためのプログラムを配布しているサイトも多数存在するからだ。

 現実に,バッファ・オーバーフローを起こすソフトは多数発見されている(表1[拡大表示])。UNIXにもWindows NTにもある。WWWブラウザやtelnetなどWindowsクライアント・アプリケーションでも報告されている。

表1●バッファ・オーバーフローの例
99年後半以降に報告されたうちの一部である

パッチやサービス停止が最大の対策

 バッファ・オーバーフローによる侵入を防ぐには,何より当たり前の基本対策を実施することだ。CERT*やベンダーのセキュリティ・ホール情報をチェックし,配布された修正ファイル(パッチ)を適用する。適切なパッチを当てれば,データを書き込む前に変数の領域を超えないかをチェックするようになるので,バッファ・オーバーフローは起きない。また,不要なサービス(デーモン)は停止する。サービスやCGIはなるべく管理者以外の権限で実行する*2。これらはバッファ・オーバーフロー以外の攻撃にも有効だ。

 UNIXでは,rootという唯一の管理者がすべての管理者権限を持つ。そのため,いったんrootで侵入されると歯止めが効かない。管理者の権限を分散することでセキュリティを高めようとするツールもある。日本ヒューレット・パッカードが販売するVirtual VaultはHP-UXの,アズジェントが販売するAutoSecure ACX(旧SeOS)はSoalris,AIX,HP-UXなどの管理者権限を分割し制限を加えることができる*3

狙われれば防げないDDoS攻撃

 日本の連続不正アクセス事件は,官公庁の管理体制の不備を責めれば済んだ。しかし,米国の不正アクセス事件では,十分なセキュリティ対策を講じていたはずの有名サイトが,膨大なデータ量を送りつけられ,サービス停止に追い込まれた。Buy.comでは8億ビット/秒のアクセスが確認されたという。攻撃には,クラッカに侵入され不正プログラムを仕込まれた数百のオーダーのマシンが使用されたとも言われる*4

 この事件も米FBIにより捜査中であり,正確な手口はまだ明らかになっていないが,DDoSツールと呼ばれるプログラムが使用されたと見られている。各セキュリティ対策ツール・ベンダーは,事件後ただちに代表的なDDoSツール──trinoo,tfn2k,stacheldrahtの3種への対応を表明した。

 なぜこれらが使用されたと考えられるのか。実はこれらはすでに99年に発見され,CERTなどから警告が出されていた。そしてもうひとつの大きな理由が,ツールの機能の高さである。

図2●DDoS攻撃の仕組み
クラッカは,あらかじめ,大量のマシンにセキュリティ・ホールを突いて侵入し,DDoS攻撃を行うプログラムを仕込んでおく。Yahoo!などへの攻撃に使用された可能性が高いと見られる分散DoSツールのひとつ「tfn2k」の例。「stacheldraht」と呼ぶツールでは「クライアント」と「デーモン」の間にさらにもう一段階「マスター」が介在する

スクリプト化による自動侵入

 図2[拡大表示]に,DDoSツールの仕組みを示す。クラッカは,あらかじめ大量のマシンに攻撃プログラム(デーモン)を仕込んで,指令プログラム(クライアント)から攻撃命令を送る。

 DDoSツールを解析し詳細なレポートを公開した米Washington大学のDavid Dittrich氏は*5,マシンのセキュリティ・ホールのスキャン,バッファ・オーバーフローを利用した侵入,攻撃プログラムの転送とcronによる常駐を行うスクリプトが組まれ,次々と自動実行されたと見ている。バッファ・オーバーフローで侵入された経路として,表1に記したwu-ftpd,cmsd,statdなどを挙げている。

 tfn2kはtfnと名付けられたDDoSツールの改良版で,trinooに比べても進化している(写真2[拡大表示])。trinooの攻撃がUDPパケットを大量に送るUDP Floodなのに対し,tfn2kはより多彩な攻撃を操る。(1)UDP Flood,(2)TCPセッション開始を要求するパケットを大量に送るTCP SYN Flood,(3)Ping応答パケットを送るICMP ECHO Flood,(4)ターゲットからのPing要求を装い,ターゲットに大量のPing応答を集中させることを狙ったICMP Smurf Flood,(5)以上のミックスなどがある。

 stacheldrahtの場合,クラッカが実行するクライアントと直接攻撃を行うデーモンとの間に,さらにもう一段階のプログラム(マスター)が介在する。クラッカは直接デーモンに指示する必要がないため,探知されにくくなる。

写真2●tfn2kの画面
操作方法を表示させたところ。攻撃方法は(1)UDPパケット,(2)SYNパケット,(3)ICMP Ping,(4)ICMP Smurf,(5)以上の混合などがある

 通信は暗号化されており,新しいバージョンのプログラムをダウンロードし自分自身を更新することもできる。

 プログラムを仕掛けられるのはUNIXだけではない。Windows NTで動作するDDoSデーモンも発見され,2月末にCERTから勧告が出された。trinooのデーモンで,ファイル名はservice.exeだったという。

ルーター設定などで対処する

 前述したようにDDoSを完全に防ぐ方法はないが,仕掛けられたプログラムを発見するツールは多数提供されている(写真3[拡大表示])。米FBIなども検出プログラムを配布している。ただセキュリティ・ホールを放置しているような管理者に検査を実行させるのは難しい。

 米Cisco Sytemsが公開しているDDoSについてのホワイト・ペーパー*6では,以下のような対策を紹介している。(1)ip verifyコマンドによりソースIPアドレスをチェックし,Smurf攻撃を防ぐ,(2)本来インターネットに直接接続されるはずのないプライベート・アドレスからのアクセスを拒否する,(3)ISPであれば顧客ネットワーク以外のIPアドレスからのパケットを拒否し,IPアドレスの詐称を防ぐ(ingressおよびegressフィルタリング),(4)ICMPやSYNパケットのrate limitを設定し,パケットを制限する,などである。

写真3●仕掛けられたDDoSプログラムを検出
写真は米Network Associatesの事業部であるmyCIO.comのサイトで,インターネット経由により無料でマシンを検査する。ほかにトレンドマイクロなどが検査プログラムを無償配布している

 もちろん,不正アクセスの脅威はDDoSだけではない。ラックの三輪氏は,日本の現状はDDoS対策より先にやるべき事がたくさんあると指摘する。「大手Eコマース・サイトでも通常のDoS*攻撃の対象になるバグを抱えたサーバーがいくつもある」(同)

(高橋 信頼=nob@nikkeibp.co.jp)