今回はセッションに関連したぜい弱性について解説する。まずは,クロスサイト・リクエスト・フォージェリ(CSRF)を取り上げよう。

 CSRFのぜい弱性とは,「サイト利用者が意図しないところで,何らかの情報変更を無理やり実行させられてしまう」問題のことである。例えば,「自分の名前で勝手にブログに書き込まれる」,「パスワードがいつのまにか書き換えられる」などといった問題が発生することになる。

 攻撃は次のように実行される。

  1. ユーザーが,ターゲット・サイト http://target.example.com にログインする。
  2. http://target.example.comのサーバーが,ユーザーのブラウザにクッキーをセットする。
  3. ユーザーが,メールによる誘導などによって,罠を仕掛けられた攻撃者のサイト http://attacker.example.com にアクセスする。

罠の例:ブログへの意図しないコメントの書き込み
<body onload="document.form.submit();"/>
<form name="form" action="http://target.example.com/addComment" method="post">
<input type="hidden" name="entry_id" value="12345"/>
<input type="hidden" name="comment" value="HelloHello"/>
</form>
  • ユーザーのブラウザに,攻撃コードが送られる(図1)。
  • 2で発行されたクッキーを付加して,http://target.example.comに勝手にアクセスし,攻撃コード(コメントの不正な入力)を実行する。
  • 図1●クロスサイト・リクエスト・フォージェリのぜい弱性を突いた攻撃の例
    図1●クロスサイト・リクエスト・フォージェリのぜい弱性を突いた攻撃の例

     例に挙げた罠は,ページが読み込まれたら勝手にターゲット・サイトにコメントを書き込むという攻撃コードである。この罠は攻撃者のサイト上にしかけられ,ユーザーが攻撃者のサイトにアクセスすることで発動する。ターゲット・サイトへの入力コメントは攻撃者からではなく,ユーザーのブラウザから勝手に送られる,ということに着目してほしい。入力コメントを送る際には,ブラウザからクッキーを送るため,サーバー側では正当なユーザーからのアクセスだと判断して処理を続ける。

     攻撃の内容が,例として挙げた「ブログへの意図しないコメントの書き込み」程度なら,さほど大きな被害をもたらすものではない。ただ,この攻撃は以下の特徴を持つことから,甚大な被害をもたらす可能性があることを認識しておきたい。

    ・インターネット上に公開されていないアプリケーションも攻撃の対象となるx (例えば,開発環境上で動作する管理画面や,ルータの管理画面など)
    ・ベーシック認証により管理されているアプリケーションも攻撃の対象となる
    (ベーシック認証情報が送信される条件はクッキーが送信される条件と類似している)
    ・罠にかかったユーザーの権限が高いほど被害は大きくなる

     第1回で説明したクッキーのexpires属性が指定されていると,この攻撃が成功する可能性が高くなる。この場合,ブラウザが起動されている必要はないから,インスタント・メッセンジャーなどで送られたURLのリンクを踏むだけで攻撃が成立する可能性がある。

    対策

     この攻撃が成立してしまう要因は,「正常な通信と,罠経由での通信に違いがない※1」ことである。逆に言えば,対策は「正常な通信と,罠経由での通信に差分を発生させる」ことである。例えば,「攻撃者が推測できない値を,処理実行のために必要な値として含める」ことで実現できる。

    1.処理完了の前画面へのアクセス時に,クライアントにひも付けたランダムな値(トークン)を発行する(図2
    2.その値をhiddenに含め,処理完了時画面へのアクセス時に送信させる
    3.処理完了画面では,送信されてきたトークンが正しいものであることを,処理実行前にチェックする

    図2●利用の都度変わるTokenを利用すればCSRFの攻撃は防げる
    図2●利用の都度変わるTokenを利用すればCSRFの攻撃は防げる

     この際,クライアントにひも付けたランダムな値を,クッキーで管理してはいけない。クッキーはブラウザによって自動的に送信されるから,この対策は意味を持たない。トークンとして,アプリケーション全体で同一の値を使わないようにすることも大切だ。攻撃者にとってその値が既知のものとなってしまうと,正常な通信と,罠経由での通信に差分を発生させる要件が満たせなくなる。

     次回は,もう一つの代表的なぜい弱性であるセッション・フィクセーションについて解説する。


    安西 真人
    ユービーセキュア 技術本部 テクニカルサービス部 セキュアナレッジコンサルタント 兼 Webアプリケーション検査ツールVEX開発エンジニア
    プログラマを経て2年前からセキュリティ業務に従事している。