(57)【要約】【課題】攻撃コードを攻撃の度に変化させるスタックスマッシング攻撃に対する防御を可能とする。【解決手段】パケットフィルタリング（不正アクセス対処）ルール生成装置１は，バッファオーバーフローを検出し，バッファオーバーフローが発生したときに書き込まれることになる，フレームポインタやリターンアドレスまたはオペレーティングシステムによっては例外ハンドラヘのポインタの値を，スタックスマッシング攻撃の痕跡として抽出し，その値と入力パケットログのバイト列とを比較して，不正アクセス対処ルールを生成する。パケットフィルタリング装置２は，パケットフィルタリングルール生成装置１から不正アクセス対処ルールを受信して登録し，登録された不正アクセス対処ルールをもとに，外部から送信されてくるスタックスマッシング攻撃のパケットを遮断する。【選択図】図１
2005151492.tif 000002
【特許請求の範囲】
【請求項１】
外部から送信されてくる不正なパケットをフィルタリングするために用いられる不正アクセス対処ルールを生成する方法であって，
外部ネットワークから送信されたパケットを保存するステップと，
メモリコピー関数のコピー先のバッファサイズをチェックしてバッファオーバーフローを検出するステップと，
前記コピー先バッファが属する関数フレームの位置から，前記バッファオーバーフローが発生したときに書き込まれることになる，フレームポインタとリターンアドレスとオペレーティングシステムによっては例外ハンドラヘのポインタを割り出すステップと，
前記保存されたパケットを検索対象として，前記割り出されたフレームポインタ，リターンアドレスまたはオペレーティングシステムによっては例外ハンドラヘのポインタの値と一致するバイト列を検索するステップと，
前記検索されたバイト列を含むパケットの持つヘッダ中の情報を取得するステップと，
前記バイト列と前記ヘッダ中の情報とをルール要素として，フィルタリングするパケットについて記述する不正アクセス対処ルールを生成し記録するステップとを有する
ことを特徴とする不正アクセス対処ルール生成方法。
【請求項２】
外部から送信されてくる不正なパケットをフィルタリングするために用いられる不正アクセス対処ルールを生成する方法であって，
外部ネットワークから送信されたパケットを保存するステップと，
スタックメモリのバッファとフレームポインタとの間にガード変数を挿入して前記スタックメモリのレイアウトを変更するステップと，
前記スタックメモリのバッファとフレームポインタとの間に挿入されたガード変数が破壊されたかどうかをチェックしてバッファオーバーフローを検出するステップと，
レイアウトが変更される前の前記スタックメモリのレイアウトから，前記バッファオーバーフローが生じた際に書き込まれることになる，フレームポインタとリターンアドレスとオペレーティングシステムによっては例外ハンドラヘのポインタを割り出すステップと，
前記保存されたパケットを検索対象として，前記割り出されたフレームポインタ，リターンアドレスまたはオペレーティングシステムによっては例外ハンドラヘのポインタの値と一致するバイト列を検索するステップと，
前記検索されたバイト列を含むパケットの持つヘッダ中の情報を取得するステップと，
前記バイト列と前記ヘッダ中の情報とをルール要素として，フィルタリングするパケットについて記述する不正アクセス対処ルールを生成し記録するステップとを有する
ことを特徴とする不正アクセス対処ルール生成方法。
【請求項３】
外部から送信されてくる不正なパケットをフィルタリングする方法であって，
請求項１または請求項２に記載の不正アクセス対処ルール生成方法によって生成された不正アクセス対処ルールを受信し記憶装置に登録するステップと，
前記登録された不正アクセス対処ルールをもとに，不正アクセス対処ルールにおけるヘッダ中の情報およびバイト列と，受信したパケットにおけるヘッダ中の情報およびバイト列とを照合し，一致する場合に受信したパケットは不正なパケットとして，外部から送信されてくる不正なパケットをフィルタリングするステップとを有する
ことを特徴とする不正アクセス対処方法。
【請求項４】
外部から送信されてくる不正なパケットをフィルタリングするために用いられる不正アクセス対処ルールを生成する装置であって，
外部ネットワークから送信されたパケットを保存する手段と，
メモリコピー関数のコピー先のバッファサイズをチェックしてバッファオーバーフローを検出する手段と，
前記コピー先バッファが属する関数フレームの位置から，前記バッファオーバーフローが発生したときに書き込まれることになる，フレームポインタとリターンアドレスとオペレーティングシステムによっては例外ハンドラヘのポインタを割り出す手段と，
前記保存されたパケットを検索対象として，前記割り出されたフレームポインタ，リターンアドレスまたはオペレーティングシステムによっては例外ハンドラヘのポインタの値と一致するバイト列を検索する手段と，
前記検索されたバイト列を含むパケットの持つヘッダ中の情報を取得する手段と，
前記バイト列と前記ヘッダ中の情報とをルール要素として，フィルタリングするパケットについて記述する不正アクセス対処ルールを生成し記録する手段とを備える
ことを特徴とする不正アクセス対処ルール生成装置。
【請求項５】
外部から送信されてくる不正なパケットをフィルタリングするために用いられる不正アクセス対処ルールを生成する装置であって，
外部ネットワークから送信されたパケットを保存する手段と，
スタックメモリのバッファとフレームポインタとの間にガード変数を挿入して前記スタックメモリのレイアウトを変更する手段と，
前記スタックメモリのバッファとフレームポインタとの間に挿入されたガード変数が破壊されたかをチェックしてバッファオーバーフローを検出する手段と，
レイアウトが変更される前の前記スタックメモリのレイアウトから，前記バッファオーバーフローが生じた際に書き込まれることになる，フレームポインタとリターンアドレスとオペレーティングシステムによっては例外ハンドラヘのポインタを割り出す手段と，
前記保存されたパケットを検索対象として，前記割り出されたフレームポインタ，リターンアドレスまたはオペレーティングシステムによっては例外ハンドラヘのポインタの値と一致するバイト列を検索する手段と，
前記検索されたバイト列を含むパケットの持つヘッダ中の情報を取得する手段と，
前記バイト列と前記ヘッダ中の情報とをルール要素として，フィルタリングするパケットについて記述する不正アクセス対処ルールを生成し記録する手段とを備える
ことを特徴とする不正アクセス対処ルール生成装置。
【請求項６】
外部から送信されてくる不正なパケットをフィルタリングする装置であって，
請求項４または請求項５に記載の不正アクセス対処ルール生成装置から，前記不正アクセス対処ルールを受信し記憶装置に登録する手段と，
前記登録された不正アクセス対処ルールをもとに，不正アクセス対処ルールにおけるヘッダ中の情報およびバイト列と，受信したパケットにおけるヘッダ中の情報およびバイト列とを照合し，一致する場合に受信したパケットは不正なパケットとして，外部から送信されてくる不正なパケットをフィルタリングする手段とを備える
ことを特徴とする不正アクセス対処装置。
【請求項７】
外部から送信されてくる不正なパケットをフィルタリングするスタックスマッシング攻撃対策システムであって，
請求項４または請求項５に記載の不正アクセス対処ルール生成装置と，
請求項６に記載の不正アクセス対処装置とを備える
ことを特徴とするスタックスマッシング攻撃対策システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，バッファオーバーフローの脆弱性を悪用したスタックスマッシング攻撃に対する防御技術に関し，特に，攻撃コードを攻撃の度に変化させるスタックスマッシング攻撃に対する防御を実現する不正アクセス対処ルール生成方法，不正アクセス対処方法，不正アクセス対処ルール生成装置，不正アクセス対処装置およびスタックスマッシング攻撃対策システムに関する。
【０００２】
本明細書中で本発明の説明のために用いている用語を簡単に説明する。
・「スタック」：スタックとは，最後に格納したオブジェクトが最初に取り出されるデータ構造のことをいう。
・「スタックスマッシング攻撃」：スタックメモリ上には，サブルーチン呼び出しの際に呼び出し元へ戻るためのリターンアドレスや，サブルーチン内でのみ利用される局所変数（ローカル変数）が格納される。よって，サブルーチン内でのみ利用される局所変数として宣言されたバッファに対して，バッファの境界を越えて書き込みが発生すると，リターンアドレスが書き換わることになる。スタックスマッシング攻撃は，この性質を利用してプログラムの処理フローを変更し，任意のプログラムを実行させる攻撃である。
・「ＤｏＳ（Denial Of Service:サービス不能) 攻撃」：ＤｏＳ攻撃とは，あるサービスを利用不能な状態に陥れる攻撃のことをいう。
・「フック」：ある関数が呼び出されるときに制御を横取りすることを，関数をフックするという。例えばデバッグ目的で，ある関数が正確に呼び出されているかを調べるために，一旦制御を横取りしログ出力するといった利用方法がある。
【背景技術】
【０００３】
スタックメモリ上には，サブルーチン呼び出しの際に呼び出し元へ戻るためのリターンアドレスやフレームポインタ，サブルーチン内でのみ利用される局所変数，またオペレーティングシステムによっては例外ハンドラ（例外発生時に実行されるサブルーチン）のアドレス等が格納される。これを利用して，サブルーチン内でのみ利用される局所変数として宣言されたバッファに対して，バッファの境界を越えて書き込みが発生すると，リターンアドレス等が書き換わることになる。
【０００４】
スタックスマッシング攻撃は，この書き換えによりプログラムの処理フローを変更して，任意のプログラムを実行させるという攻撃である。このスタックスマッシング攻撃に対する防御を実現する従来技術として，標準的なメモリコピー関数の呼び出しをプログラム実行時にフック（関数が呼び出される時の制御の横取り）することで，コピー先のバッファのサイズをあらかじめチェックし，バッファオーバーフローを検出する手法がある（例えば，非特許文献１参照）。
【０００５】
また，保護対象プログラムに対して，コンパイル時にリターンアドレス等の保護のための特別の値であるガード変数を挿入して，関数のリターン処理の直前に，ガード変数の有効性を確認し，ガード変数が破壊されているときにはプロセスを異常終了する，という処理を挿入するものがある（例えば，特許文献１参照）。これにより，スタックスマッシング攻撃によるサーバの乗っ取りやデータの改竄といった不正侵入からホストを防御できるようになる。
【非特許文献１】White Paper,「Libsafe:Protectingcritical elements of stacks.」,"http://www.research.avayalabs.com/project/libsafe/", A.Baratloo,N.Singh,and T.Tsai,December 1999.
【特許文献１】特開２００１−２１６１６１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
また，本発明者等は，特願２００３−１３０９５０号（未公開）において，リターンアドレスの書き換えが行われたことを検出すると，その攻撃により書き込まれた不正なリターンアドレスの位置を割り出し，その不正なリターンアドレスの指す位置から不正アクセス対処ルールを導き出し，ネットワークで同様のスタックスマッシング攻撃を遮断する技術を提案している。
【０００７】
これにより，スタックスマッシングによるＤｏＳ攻撃（Denial Of Service ：あるサービスを利用不能な状態に陥れる攻撃）に対する脆弱性を排除することができるようになり，加えて，ネットワークでスタックスマッシング攻撃を防ぐことで，ネットワークに接続された他のホストもスタックスマッシング攻撃から守ることができるようになる。
【０００８】
しかし，以上のようなスタックスマッシング攻撃に対する不正アクセス対処ルールを生成する技術を用いて，スタックスマッシング攻撃に対するさらに完全な防御を実現するためには，次のような課題を解決する必要がある。
【０００９】
リターンアドレスの指す位置には，攻撃者が用意する攻撃プログラムが配置されているが，この攻撃プログラムは攻撃者により変更することが可能である。このため，攻撃の度に攻撃プログラムを変更されると，不正アクセス対処ルールのペイロードとは異なったペイロードのパケットが送られてくることになるため，不正アクセス対処装置では対処できなくなる。さらに，攻撃の度に不正アクセス対処ルールが生成され，この攻撃が継続的に行われると不正アクセス対処ルールの数が増え，不正アクセス対処装置のパケット処理性能が低下してしまう。
【００１０】
本発明はかかる事情に鑑みてなされたものであって，その目的は，攻撃プログラムが攻撃の度に変化する，スタックスマッシング攻撃に関する共通の攻撃痕跡を見つけることで，より高度なスタックスマッシング攻撃をネットワークで対策することにある。
【課題を解決するための手段】
【００１１】
この目的を達成するために，本発明によるスタックスマッシング攻撃対策システムは，外部から送信されてくる不正なパケットをフィルタリングするために用いられる不正アクセス対処ルールを生成する不正アクセス対処ルール生成装置と，その生成された不正アクセス対処ルールを使って，外部から送信されてくる不正なパケットをフィルタリングする不正アクセス対処装置とから構成され，それぞれ以下の処理を行う。
【００１２】
不正アクセス対処ルール生成装置は，従来技術によってバッファオーバーフローを検出する。具体的には，標準的なメモリコピー関数のコピー先のバッファサイズをあらかじめチェックし，バッファオーバーフローを検出する手法，もしくは，ガード変数が破壊されたかどうかをチェックすることでバッファオーバーフローを検出する手法により，スタックスマッシング攻撃を検出する。
【００１３】
これらの二つの検出手法の特徴は，次のとおりである。前者は，標準的なメモリコピー関数以外でのバッファオーバーフローを検出することはできないが，コンパイル作業が必要ないため，実行プログラムがコンパイル済みの状態で配布されていても適用可能である。また後者は，ほとんどのバッファオーバーフローを検出することができるが，コンパイル作業が必要なため，プログラムがソースコードで提供されていなければならない。
【００１４】
本発明では，プログラムの配布形式によってこれらの検出手法を使い分けることを特徴とする。これにより，様々なアプリケーションに適切なバッファオーバーフロー検知機構を追加することができるようになる。
【００１５】
次に，バッファオーバーフロー検出手法に応じた攻撃痕跡の抽出を行う。まず，標準的なメモリコピー関数のコピー先のバッファサイズをあらかじめチェックし，バッファオーバーフローを検出する手法は，コピー先のバッファがスタック上に存在するかどうかを調べる。もしスタック上に存在する場合には，現在のフレームポインタを起点にフレームポインタを辿り，コピー先バッファが属する関数フレームを探す。そして，コピー先バッファの先頭から次のフレームポインタが格納されている場所の手前までの長さを，バッファサイズとする。ここで得られたバッファサイズと，コピーされようとしているバッファサイズとを比較し，バッファオーバーフローを検出する。
【００１６】
そこで本発明では，ここで得られた関数フレームの位置より，バッファオーバーフローが発生したときに上書きされることになるフレームポインタとリターンアドレスとオペレーティングシステムによっては例外ハンドラヘのポインタを割り出し，それぞれの値を攻撃痕跡として抽出することを特徴とする。
【００１７】
次に，ガード変数によりバッファオーバーフローを検出する手法は，バッファとガード変数との間に他の変数が配置されないように，ローカル変数の配置を変更したり，ガード変数を挿入したりすることで，スタックのレイアウトを変更する。
【００１８】
そこで本発明では，このようにスタックのレイアウトが変更されることを考慮し，レイアウトが変更される前で同様のオーバーフローが生じた際に上書きされるフレームポインタとリターンアドレスとオペレーティングシステムによっては例外ハンドラへのポインタを割り出し，それぞれの値を攻撃の痕跡として抽出することを特徴とする。
【００１９】
また本発明では，不正アクセス対処ルール生成装置において，あらかじめネットワーク経由でのプログラムに対する入力をパケットログとして保存する点を特徴とする。続いて，上記処理で得られた攻撃の痕跡と，ネットワーク経由でのプログラムに対する入力パケットログを比較し，一致したバイト列を含むパケットの持つヘッダ情報（ＩＰヘッダ・ＴＣＰへッダ・ＵＤＰへッダなどの情報）を得る。そして，そのようにして得たスタックスマッシング攻撃の痕跡のバイト列と，そのバイト列を含むパケットの持つヘッダ情報とをルール要素とする不正アクセス対処ルールを生成する。
【００２０】
スタックスマッシング攻撃を成功させるためには，リターンアドレスやフレームポインタ，またはオペレーティングシステムによっては例外ハンドラヘのポインタ等をある限定された値で上書きする必要がある。そこで本発明では，このスタックスマッシング攻撃の性質を利用し，リターンアドレスやフレームポインタ，またはオペレーティングシステムによっては例外ハンドラヘのポインタをスタックスマッシング攻撃の痕跡として抽出した後に，入力パケットログと比較し，不正アクセス対処ルールを生成することで，攻撃の度に攻撃プログラムを変更するような高度なスタックスマッシング攻撃に関しても，ネットワークで対策することが可能となる。
【００２１】
すなわち，本発明の不正アクセス対処ルール生成装置は，外部から送信されてくる不正なパケットをフィルタリングするために用いられる不正アクセス対処ルールを生成する装置であって，外部ネットワークから送信されたパケットを保存する手段と，メモリコピー関数のコピー先のバッファサイズをチェックしてバッファオーバーフローを検出する手段と，前記コピー先バッファが属する関数フレームの位置から，前記バッファオーバーフローが発生したときに書き込まれることになる，フレームポインタとリターンアドレスとオペレーティングシステムによっては例外ハンドラヘのポインタを割り出す手段と，
前記保存されたパケットを検索対象として，前記割り出されたフレームポインタ，リターンアドレスまたはオペレーティングシステムによっては例外ハンドラヘのポインタの値と一致するバイト列を検索する手段と，前記検索されたバイト列を含むパケットの持つヘッダ中の情報を取得する手段と，前記バイト列と前記ヘッダ中の情報とから，フィルタリングするパケットについて記述する不正アクセス対処ルールを生成し記録する手段とを備えることを特徴とする。
【００２２】
また，本発明の不正アクセス対処ルール生成装置は，外部から送信されてくる不正なパケットをフィルタリングするために用いられる不正アクセス対処ルールを生成する装置であって，外部ネットワークから送信されたパケットを保存する手段と，スタックメモリのバッファとフレームポインタとの間にガード変数を挿入して前記スタックメモリのレイアウトを変更する手段と，前記スタックメモリのバッファとフレームポインタとの間に挿入されたガード変数が破壊されたかをチェックしてバッファオーバーフローを検出する手段と，レイアウトが変更される前の前記スタックメモリのレイアウトから，前記バッファオーバーフローが生じた際に書き込まれることになる，フレームポインタとリターンアドレスとオペレーティングシステムによっては例外ハンドラヘのポインタを割り出す手段と，前記保存されたパケットを検索対象として，前記割り出されたフレームポインタ，リターンアドレスまたはオペレーティングシステムによっては例外ハンドラヘのポインタの値と一致するバイト列を検索する手段と，前記検索されたバイト列を含むパケットの持つヘッダ中の情報を取得する手段と，前記バイト列と前記ヘッダ中の情報とから，フィルタリングするパケットについて記述する不正アクセス対処ルールを生成し記録する手段とを備えることを特徴とする。
【００２３】
また，本発明の不正アクセス対処装置は，前記不正アクセス対処ルール生成装置から，前記不正アクセス対処ルールを受信し記憶装置に登録する手段と，前記登録された不正アクセス対処ルールをもとに，不正アクセス対処ルールにおけるヘッダ中の情報およびバイト列と，受信したパケットにおけるヘッダ中の情報およびバイト列とを照合し，一致する場合に受信したパケットは不正なパケットとして，外部から送信されてくる不正なパケットをフィルタリングする手段とを備えることを特徴とする。
【００２４】
また，本発明のスタックスマッシング攻撃対策システムは，前記不正アクセス対処ルール生成装置と，前記不正アクセス対処装置とから構成されることを特徴とする。
【００２５】
本発明が，先に本発明者等が特願２００３−１３０９５０号において提案した方法と最も異なる点は，不正アクセス対処ルールに登録するバイト列の抽出の仕方である。すなわち，先に提案した方法では，不正なリターンアドレスの指す位置をスタックスマッシュ攻撃の痕跡の開始位置として，その痕跡のバイト列を抽出していたのに対し，本発明では，リターンアドレスやフレームポインタ，またはオペレーティングシステムによっては例外ハンドラへのポインタ等の値そのものを攻撃痕跡として抽出する点が異なる。
【発明の効果】
【００２６】
本発明によって得られる効果は，攻撃コードを攻撃の度に変化させるスタックスマッシング攻撃に対しても，適切な不正アクセス対処ルールを生成することが可能になることである。
【００２７】
従来の不正アクセス対処ルール生成方法では，攻撃コードを攻撃の度に変化させられることで，パケットを遮断することができなかったり，不正アクセス対処ルールが攻撃の度に生成され，その数が増えることで不正アクセス対処装置のパケット処理性能が低下していた。
【００２８】
これに対して，本発明では，リターンアドレスやフレームポインタ，またはオペレーティングシステムによっては例外ハンドラへのポインタ等をある限定された値で上書きする必要がある，というスタックスマッシング攻撃の性質を利用して，リターンアドレスやフレームポインタ，またはオペレーティングシステムによっては例外ハンドラへのポインタ等の値そのものを攻撃痕跡として抽出し，入力パケットログと比較して生成した不正アクセス対処ルールを利用することで，より高度なスタックスマッシング攻撃に関しても，ネットワークで対策し，ネットワーク全体をスタックスマッシング攻撃から守ることが可能になる。
【発明を実施するための最良の形態】
【００２９】
次に，本発明の実施の形態について図面を参照して詳細に説明する。図１に，本発明により実現されるスタックスマッシング攻撃対策システムのシステム構成例を図示する。
【００３０】
この図に示すように，本発明により実現されるスタックスマッシング攻撃対策システムは，上述した本発明の不正アクセス対処ルール生成装置の一例であるパケットフィルタリングルール生成装置１と，そこで得られたパケットフィルタリングルールを用いてパケットを遮断する，上述した本発明の不正アクセス対処装置の一例であるパケットフィルタリング装置２とから構成される。
【００３１】
ここで，パケットフィルタリングルール生成装置１は，例えば特定のホスト上に構築され，一方，パケットフィルタリング装置２は，ネットワークのゲートウェイ，もしくはネットワーク上に存在する任意のホスト上に構築されることになる。
【００３２】
図１を用いて，本発明によるスタックスマッシング攻撃対策についての大まかな処理の流れについて説明する。まず，外部ネットワークからスタックスマッシング攻撃によるパケットが，パケットフィルタリングルール生成装置１に送信されてくる。これを受けて，パケットフィルタリングルール生成装置１は，そのスタックスマッシング攻撃に対処するためのパケットフィルタリングルールを自動生成し，パケットフィルタリング装置２に対して，その自動生成したパケットフィルタリングルールを通知する。
【００３３】
パケットフィルタリング装置２は，パケットフィルタリングルール生成装置１から通知されたパケットフィルタリングルールを受信し，以後，外部ネットワークから入ってくる，そのパケットフィルタリングルールに含まれるスタックスマッシング攻撃と一致するパケットを遮断することにより，スタックスマッシング攻撃を遮断する。
【００３４】
図２に，この本発明によるスタックスマッシング攻撃対策についての処理を実現すべく用意されるパケットフィルタリングルール生成装置１の一構成例を図示し，図３に，この本発明によるスタックスマッシング攻撃対策についての処理を実現すべく用意されるパケットフィルタリング装置２の一構成例を図示する。
【００３５】
パケットフィルタリングルール生成装置１は，図２に示すように，プログラム毎の入力パケットを保存する入力パケット保存部１０と，外部ネットワークから送信されてくる入力パケットをログとして入力パケット保存部１０にロギングする入力パケットロギング部１１と，所定のサーバ処理を実行するサーバプログラム１２と，あらかじめサーバプログラム等に組み込まれて，バッファオーバーフロー（すなわち，スタックスマッシング攻撃の有無）を検出するバッファオーバーフロー検出部１３と，スタックスマッシング攻撃の痕跡を抽出するスタックスマッシング攻撃痕跡抽出部１４と，スタックスマッシング攻撃を遮断するためのパケットフィルタリングルールを生成するパケットフィルタリングルール生成部１５と，パケットフィルタリング装置２に対して，生成されたパケットフィルタリングルールを通知するパケットフィルタリングルール通知部１６とを備える。
【００３６】
ここで，入力パケット保存部１０は，スタックスマッシング攻撃の痕跡を特定するために用意されるものであって，図４に示すように，プログラム毎に，そのプログラムに送信されてきたパケットのへッダ情報（プロトコル種別，送信元ＩＰアドレス，送信元ポート番号，送信先ＩＰアドレス，送信先ポート番号など）と，そのパケットのペイロードなどを保存することになる。
【００３７】
一方，パケットフィルタリング装置２は，図３に示すように，スタックスマッシング攻撃を遮断するためのパケットフィルタリングルールを保存するパケットフィルタリングルールテーブル２０と，パケットフィルタリングルール生成装置１から送信されてくるパケットフィルタリングルールを受信するパケットフィルタリングルール受信部２１と，受信されたパケットフィルタリングルールをパケットフィルタリングルールテーブル２０に登録するパケットフィルタリングルール登録部２２と，パケットフィルタリングルールテーブル２０に保存されるパケットフィルタリングルールをもとに，外部から送信されてくるスタックスマッシング攻撃のパケットを遮断するパケットフィルタリング部２３とを備える。
【００３８】
次に，パケットフィルタリングルール生成装置１の実行するスタックスマッシング攻撃の痕跡の抽出処理について説明する。図５と図６では，標準的なメモリコピー関数の呼び出しをプログラム実行時にフックすることで，コピー先のバッファのサイズをあらかじめチェックし，バッファオーバーフローを検出することにより，スタックスマッシング攻撃の痕跡を抽出する処理を説明する。
【００３９】
また，図７と図８では，保護対象プログラムに対して，コンパイル時にリターンアドレス等の保護のための特別の値であるガード変数を挿入して，関数のリターン処理の直前に，ガード変数の有効性を確認することで，バッファオーバーフローを検出することにより，スタックスマッシング攻撃の痕跡を抽出する処理を説明する。
【００４０】
図５中に示す１００は攻撃対象プログラムのスタックメモリ，２００は攻撃者が入力可能なコピー元バッファである。スタックスマッシング攻撃の攻撃者は，用意した攻撃プログラムに制御を渡すために，コピー先バッファサイズよりも大きいデータをコピー元バッファ２００に格納し，フレームポインタやリターンアドレス，またはオペレーティングシステムによっては例外ハンドラへのポインタを，スタックメモリ１００に上書きすることで，攻撃を実行する。
【００４１】
このスタックスマッシング攻撃の有無を検出するために，パケットフィルタリングルール生成装置１は，標準的なメモリコピー関数をフックし，現在のフレームポインタを起点にフレームポインタを辿ることで，コピー先バッファがどの関数フレームに属するかを決定する。そして，コピー先バッファの先頭から次のフレームポインタが格納されている場所の手前までの長さを，コピー先バッファのサイズとし，このサイズがコピー元バッファ２００のサイズより小さい場合に，スタックスマッシング攻撃が行われたと判断する。
【００４２】
パケットフィルタリングルール生成装置１は，スタックスマッシング攻撃が行われたことを検出した場合には，スタックメモリ１００に上書きされるであろうフレームポインタやリターンアドレス，またはオペレーティングシステムによっては例外ハンドラへのポインタの値を，スタックスマッシング攻撃の痕跡として抽出する。
【００４３】
図６は，パケットフィルタリングルール生成装置１の実行するスタックスマッシング攻撃の痕跡抽出処理フローである。パケットフィルタリングルール生成装置１は，標準的なメモリコピー関数の実行をフックし，図６の処理フローに示すように，まず，ステップＳ１０でコピー先バッファのサイズがコピー元バッファ２００のサイズより小さいかどうかを判断し，大きいかもしくは等しいときには，スタックスマッシング攻撃が行われなかったと判断して，そのまま処理を終了する。
【００４４】
一方，ステップＳ１０で，コピー先バッファのサイズがコピー元バッファ２００のサイズより小さいことがわかり，スタックスマッシング攻撃が行われたと判断したときには，ステップＳ１１に進み，スタックスマッシング攻撃が設定したリターンアドレスやフレームポインタ，またオペレーティングシステムによっては例外ハンドラヘのポインタの値をスタックスマッシング攻撃の痕跡とする。
【００４５】
図７中の３００は攻撃対象プログラムのスタックメモリ，４００はガード変数やローカル変数の入れ替えが生じない通常コンパイル時のスタックメモリ，５００は攻撃者が入力可能なコピー元バッファである。
【００４６】
スタックスマッシング攻撃の攻撃者は，用意した攻撃プログラムに制御を渡すために，コピー先バッファサイズよりも大きいデータをコピー元バッファに格納し，フレームポインタやリターンアドレス，またはオペレーティングシステムによっては例外ハンドラへのポインタを，スタックメモリ３００に上書きすることで，スタックスマッシング攻撃を実行する。
【００４７】
このスタックスマッシング攻撃の有無を検出するために，パケットフィルタリングルール生成装置１は，バッファとフレームポインタの間に，特別の値であるガード変数を挿入する。また，バッファとガード変数との間に他の変数が配置されないように，ローカル変数の配置を変更する。そして，関数のリターン処理の直前に，このガード変数の有効性を確認する。この確認で，ガード変数が破壊されていることがわかった場合，スタックスマッシング攻撃が行われたと判断する。
【００４８】
パケットフィルタリングルール生成装置１は，スタックスマッシング攻撃が行われたことを検出した場合には，ガード変数の挿入やローカル変数の入れ替えが生じる前のスタックメモリ４００を通常コンパイル時のスタックメモリ使用ルールから想定することで，攻撃者が上書きしようとしたリターンアドレスやフレームポインタ，またはオペレーティングシステムによっては例外ハンドラヘのポインタの値を割り出し，それらの値をスタックスマッシング攻撃の痕跡とする。
【００４９】
ここで，スタックスマッシング攻撃の攻撃者は，ローカル変数が入れ替わっていたり，ガード変数が挿入されていることを知らないため，本来のリターンアドレスやフレームポインタ，またはオペレーティングシステムによっては例外ハンドラへのポインタの格納位置とは異なった場所を，書き換えようとする。
【００５０】
図８は，パケットフィルタリングルール生成装置１の実行するスタックスマッシング攻撃の痕跡抽出処理フローである。パケットフィルタリングルール生成装置１は，関数リターンの直前で，図８の処理フローが示すように，まず，ステップＳ２０で，ガード変数を読み取り，続くステップＳ２１で，その読み取ったガード変数が書き換えられているか否かを判断し，ガード変数が書き換えられていない場合には，スタックスマッシング攻撃が行われなかったと判断して，そのまま処理を終了する。
【００５１】
一方，ステップＳ２１で，ガード変数が書き換えられていることでスタックスマッシング攻撃が行われたと判断したときには，ステップＳ２２に進み，スタックスマッシング攻撃が設定したリターンアドレスやフレームポインタ，またはオペレーティングシステムによっては例外ハンドラへのポインタの値をスタックスマッシング攻撃の痕跡とする。
【００５２】
次に，図９の処理フローに従って，パケットフィルタリングルール生成装置１の実行するパケットフィルタリングルール生成処理について説明する。まず，スタックスマッシング攻撃の痕跡の検出処理が完了すると，次にステップＳ３０で，入力パケット保存部１０に保存される攻撃対象プログラムに送られてきたパケットを検索対象として，リターンアドレスやフレームポインタ，またオペレーティングシステムによっては例外ハンドラへのポインタの値と一致するバイト列を探し出し，そのバイト列をスタックスマッシング攻撃の痕跡とする。
【００５３】
続いて，ステップＳ３１で，入力パケット保存部１０を参照することで，その検索したバイト列を含むパケットの持つヘッダ情報を取得する。すなわち，プロトコル種別や送受信ＩＰアドレスや送受信ポート番号などを取得する。ステップＳ３２では，検索したバイト列と取得したへッダ情報とから，遮断するパケットについて記述するパケットフィルタリングルールを生成する。ここで生成するパケットフィルタリングルールは，例えば図１０に示すように，プロトコル種別が“ＵＤＰ”で，送信先ポート番号が“５３”で，ペイロード（バイト列）が“４０  １１  ｂ７  ａ１  ｃ０  …”のパケットについては，スタックスマッシング攻撃のパケットであるので，それについては遮断する必要があるということについて記述するデータである。続いて，ステップＳ３３で，パケットフィルタリング装置２に対して，生成したパケットフィルタリングルールを通知して，処理を終了する。
【００５４】
この通知を受けて，パケットフィルタリング装置２は，図３に示した構成に従って，パケットフィルタリングルール生成装置１から通知されたパケットフィルタリングルールを受信して，パケットフィルタリングルールテーブル２０に保存する処理を行う。これによって，パケットフィルタリング装置２のパケットフィルタリングルールテーブル２０には，図１１に示すようなルール構造をもつパケットフィルタリングルール（複数のこともある）が格納されることになる。
【００５５】
次に，図１２の処理フローに従って，パケットフィルタリング装置２の実行するパケットフィルタリング処理について説明する。パケットフィルタリング装置２は，外部ネットワークから送信されてくるパケットを受信すると，図１２の処理フローに示すように，まず，ステップＳ４０で受信したパケットのペイロードを抽出する。
【００５６】
続いて，ステップＳ４１で受信したパケットのヘッダ情報から，プロトコル種別と送信先ポート番号とを取得する。続いて，ステップＳ４２で，取得したプロトコル種別と一致するプロトコル種別をルール要素とするパケットフィルタリングルールがパケットフィルタリングルールテーブル２０に登録されているか否かを判断し，登録されていないと判断したときには，受信したパケットがスタックスマッシング攻撃のパケットではないので，ステップＳ４３に進み，受信したパケットを送信先ホストに転送して処理を終了する。
【００５７】
一方，ステップＳ４２で，プロトコル種別が一致するパケットフィルタリングルールがパケットフィルタリングルールテーブル２０に登録されていると判断したときには，ステップＳ４４に進み，そのパケットフィルタリングルールの持つ送信先ポート番号が取得した送信先ポート番号と一致するか否かを判断し，一致しないと判断したときには，受信したパケットがスタックスマッシング攻撃のパケットではないので，ステップＳ４５に進み，受信したパケットを送信先ホストに転送して，処理を終了する。
【００５８】
一方，ステップＳ４４で，プロトコル種別が一致するパケットフィルタリングルールが送信先ポート番号についても一致すると判断したときには，ステップＳ４６に進み，そのパケットフィルタリングルールの持つペイロードが抽出したペイロードと一致するか否かを判断する。一致しないと判断したときには，スタックスマッシング攻撃のパケットでないので，ステップＳ４７に進み，受信したパケットを送信先ホストに転送して，処理を終了する。また，ステップＳ４６で，ペイロードについても一致すると判断したときには，受信したパケットがスタックスマッシング攻撃のパケットであるので，ステップＳ４８に進み，受信したパケットを遮断して，処理を終了する。
【００５９】
このようにして，パケットフィルタリング装置２は，プロトコルと送信先ポート番号とペイロードとがパケットフィルタリングルールと一致するパケットを受信する場合に，その受信したパケットを遮断するように処理する。
【００６０】
ここで，バッファオーバーフローの脆弱性が存在するサービスを外部ネットワークに提供したくない場合には，運用によってパケットフィルタリングルールとして用いるルール要素を減らすこともできる。
【００６１】
以上のパケットフィルタリングルール生成装置１およびパケットフィルタリング装置２が行う処理は，コンピュータとソフトウェアプログラムとによって実現することができ，そのプログラムをコンピュータ読み取り可能な記録媒体に記録して提供することも，ネットワークを通して提供することも可能である。
【図面の簡単な説明】
【００６２】
【図１】スタックスマッシング攻撃対策システムのシステム構成例を示す図である。
【図２】パケットフィルタリングルール生成装置の一構成例を示す図である。
【図３】パケットフィルタリング装置の一構成例を示す図である。
【図４】入力パケット保存部に保存されるデータ構成の例を示す図である。
【図５】スタックスマッシング攻撃の痕跡の抽出を説明する図である。
【図６】スタックスマッシング攻撃の痕跡抽出処理フローを示す図である。
【図７】スタックスマッシング攻撃の痕跡の抽出を説明する図である。
【図８】スタックスマッシング攻撃の痕跡抽出処理フローを示す図である。
【図９】パケットフィルタリングルール生成処理フローを示す図である。
【図１０】パケットフィルタリングルールの一例を示す図である。
【図１１】パケットフィルタリングルールテーブルに格納されるパケットフィルタリングルールの一例を示す図である。
【図１２】パケットフィルタリング処理フローを示す図である。
【符号の説明】
【００６３】
１  パケットフィルタリングルール生成装置
２  パケットフィルタリング装置
１０  入力パケット保存部
１１  入力パケットロギング部
１２  サーバプログラム
１３  バッファオーバーフロー検出部
１４  スタックスマッシング攻撃痕跡抽出部
１５  パケットフィルタリングルール生成部
１６  パケットフィルタリングルール通知部
２０  パケットフィルタリングルールテーブル
２１  パケットフィルタリングルール受信部
２２  パケットフィルタリングルール登録部
２３  パケットフィルタリング部
【図１】
2005151492.tif 000003
【図２】
2005151492.tif 000004
【図３】
2005151492.tif 000005
【図４】
2005151492.tif 000006
【図５】
2005151492.tif 000007
【図６】
2005151492.tif 000008
【図７】
2005151492.tif 000009
【図８】
2005151492.tif 000010
【図９】
2005151492.tif 000011
【図１０】
2005151492.tif 000012
【図１１】
2005151492.tif 000013
【図１２】
2005151492.tif 000014