SCAN DISPATCH :ブラウザ・ヒストリのCSRF対策用トークンを発見する方法、研究者が発表 | ScanNetSecurity
2024.04.25(木)

SCAN DISPATCH :ブラウザ・ヒストリのCSRF対策用トークンを発見する方法、研究者が発表

 SCAN DISPATCH は、アメリカのセキュリティ業界及ハッカーコミュニティから届いたニュースを、狭く絞り込み、深く掘り下げて掲載します。

国際 海外情報
 SCAN DISPATCH は、アメリカのセキュリティ業界及ハッカーコミュニティから届いたニュースを、狭く絞り込み、深く掘り下げて掲載します。

──

 クロスサイトリクエストフォージェリ(Cross site request forgeries,CSRF)は、攻撃者が、あらかじめWebページを用意し、そこに訪れたユーザのブラウザを使用し、ユーザが少し前に訪れたWebメールやWebショップのアカウントを操作する攻撃。この攻撃は、ユーザが気がつかない間に行われること、正規のWebページであっても、セキュリティが万全でない場合に何者かによって攻撃コードを埋め込まれる可能性があることに加え、ユーザにとっては被害が膨大になる可能性がある攻撃だ。

 CSRFを防止する方法として使用されているのが、トークンの使用だ。その実装方法は開発者によって異なっているが、ポピュラーなものにURLの一部にランダムに生成されたトークンをアペンドする方法がある。

 この方法は、トークンのブルートフォースがほとんど不可能であることから、安全と考えられている。その理由は、例えばBase16で5文字のトークンの場合、組み合わせは393,216にもなり、これだけの数のリクエストをサーバに試みれば必ず検知されてしまうこと、通常、間違ったトークンを使用して30回以上のリクエストが行われた場合には、セッションを無効とするようにアプリケーションはプログラムされているからだ。

 ところが、SecureThougts.comというWebページのInfernoというセキュリティ研究者が、URLにアペンドされた5文字程度のトークンならば、クライアント側でこのトークンを探し出してCSRF攻撃が行えると発表した。『ウェブアプリケーション セキュリティ』などの著書で知られている金床 氏こと、株式会社ビットフォレスト 取締役CTO、株式会社セキュアスカイ・テクノロジー 技術顧問の佐藤匡氏は、この攻撃について「面白いテクニックですね。私が知る限りでは新しい発見(攻撃手法)です」とコメントしている。

 この攻撃方法について、Inferno氏とのメールインタビューを交えて紹介したい。

 この攻撃、「Hacking CSRF Tokens using CSS History Hack」とタイトルがついており、Jeremiah Grossman氏が3年前に発見したCSSヒストリーハックをベースとしている。攻撃は、(1)同一セッション内ではトークンが同じ、あるいは、(2)同一セッション内ならば、古いフォームに使われたトークンも有効、というどちらかの条件があれば可能だ。大手IT企業のセキュリティ部をリードするInferno氏は「調査をしたところ、大手企業のWebショップなどでこの脆弱性を多数発見した」と述べており、実際、アメリカの大手家電販売社、BestBuy.comでこの脆弱性が確認されている。また、サーバにリクエストをかける必要が無いため、サーバ側では阻止できないだけでなく、悪意のあるWebページ側では、JavaScriptを使わずにCSSだけで攻撃が行えることもわかっており、ユーザーがJavaScriptを無効にしても攻撃が可能となるため、日本の開発者も至急対策を講じる必要があろう。

 そもそも、CSRF対策の方法自体がきちんと理解されていないことも事実だ。東京支社でアプリケーション・セキュリティを担当している、Stach & Liu社のシニア・セキュリティ・アソシエイツ、ジャスティン・ヘイズ氏によれば、「現在のWebアプリケーションは、CSRF攻撃に概して無防備である。いくつかの対策方法が存在するものの、開発者にきちんと理解されておらず、アプリケーションやユーザを保護することができない、いいかげんな実装が行われる結果となっている」そうだ。また、佐藤匡氏も「(日本でも)ここ1〜2年間、新しく開発されるアプリケーションではCSRF対策が考慮されるケースが少しずつ増えているようです。ただ、実際の割合などの統計的なデータは存在していないだろうと思います」と述べている。

 さて、JavaScriptとCSSを使ったこの攻撃のコンセプト実証がInferno氏のWebページにある。まず、

http://securethoughts.com/?param1=val1&csrftoken=b59fe

を訪れてb59feを英字から始まる5文字のbase16のストリング(つまり、>a0000)に変更してから、

http://www.securethoughts.com/security/csrfcsshistory/csrfscan.html

を訪れると、Webページでアクティブなトークンを表示する。

 Inferno氏はサーバ開発者側の対策として…

【執筆:米国 笠原利香】

【関連リンク】
Inferno氏のブログ
http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/
──
※ この記事は Scan購読会員向け記事をダイジェスト掲載しました
購読会員登録案内 http://www.ns-research.jp/cgi-bin/ct/p.cgi?w02_ssw
《ScanNetSecurity》

Scan PREMIUM 会員限定記事

もっと見る

Scan PREMIUM 会員限定記事特集をもっと見る

カテゴリ別新着記事

「経理」「営業」「企画」「プログラミング」「デザイン」と並ぶ、事業で成功するためのビジネスセンスが「セキュリティ」
「経理」「営業」「企画」「プログラミング」「デザイン」と並ぶ、事業で成功するためのビジネスセンスが「セキュリティ」

ページ右上「ユーザー登録」から会員登録すれば会員限定記事を閲覧できます。毎週月曜の朝、先週一週間のセキュリティ動向を総括しふりかえるメルマガをお届け。(写真:ScanNetSecurity 名誉編集長 りく)

×