CSRFとは何でしょうか?

クロスサイト リクエスト フォージェリ(CSRF)攻撃は、ウェブサイトがユーザーとそのブラウザにすでに与えている信頼に付け込まれる、一般的なウェブアプリケーションの脆弱性です。CSRF攻撃では、攻撃者は通常、ソーシャルエンジニアリング技術を用いて、認証されたユーザーを操作し、その意識や同意なしに悪意のあるアクションを実行させます。電子メールやチャットメッセージに含まれる正当と思われるリンクをクリックするだけで、ユーザーは知らず知らずのうちに攻撃者に自分のアイデンティティやアクセス権限を共同利用できる力量を与えてしまう可能性があります

その時点から、攻撃者は被害者になりすまし、被害者のアカウントを使って、無防備なユーザーへのたわいもないいたずらから、被害者の銀行口座を空にする不正送金まで、あらゆることができるのです。狙われたユーザーが幅広いアクセス権限を持つウェブ管理者の場合、CSRF攻撃によってウェブアプリケーション全体が危険にさらされる可能性があります。

CSRF攻撃が成功すると、サイトを運営している企業と、サイトにアクセスしたユーザーの両方に悪影響を及ぼす可能性があります。このような攻撃は、顧客との関係に悪影響を与え、顧客の信頼を損ない、不正行為や財源の盗難を引き起こすことが可能なのです。CSRF攻撃は、GmailやFacebookなどの主要なサービスやサイトに対して行われています。

CSRFは、XSRF、シーサーフ、セッションライディング、クロスサイトリクエストフォージェリ、ホスタイル リンキングなど、さまざまな名称で呼ばれています。マイクロソフトでは、この種の攻撃をワンクリック攻撃と呼んでおり、これは同社の脅威モデリングプロセスやオンラインドキュメントの多くの箇所で言及されています。CSRFは、OWASP トップ10のA5カテゴリーの欠陥とされています。

クロスサイト リクエスト フォージェリ(CSRF)の仕組み

ユーザーがサイトにアクセスしようとするとき、ブラウザはサイトに関連する認証情報を自動的にリクエストに含め、ログインプロセスがより使いやすくなるようにすることがよくあります。これらの資格情報には、ユーザーのセッションクッキー、基本認証資格情報、IPアドレス、Windowsドメイン資格情報などが含まれます。しかし、いったんユーザーがサイトに認証されると、サイトは偽造されたリクエストと正当なユーザーのリクエストを区別する方法がありません。

CSRF攻撃によって被害者のアイデンティティとアクセスを共同利用することで、攻撃者はユーザーに意図しない行動を取らせることができます。一般的に、攻撃者は電子メールやチャットメッセージなどの通信手段を用いてソーシャルエンジニアリングの手法で被害者を丸め込み、リンクをクリックさせます。その結果、ユーザーは知らず知らずのうちに、電子メールのメッセージ内や、特定のタスクURLを要求するサイトページを読み込んだ後に、悪意のあるHTMLやJavaScriptコードに直面する可能性があります。そして、そのタスクは、直接またはクロスサイトスクリプティングの欠陥を利用して実行されます。ユーザーは、悪意のある行為が発生するまで、何が起こったのか気付いていない場合が多くあります。

CSRF攻撃は、通常、サーバーの状態を書き換える効果を狙いますが、機密データへのアクセスにも使用される可能性があります。CSRF攻撃が被害者のアカウントに対して成功すると、悪意のある行為者は、資金の送金、商品の購入、ショッピングカートへの商品の投入、配送先住所などのアカウント情報の変更、パスワードの変更など、脆弱なウェブサイトで利用可能なあらゆる効用を得ることができます。

保存されたCSRFの不具合とその影響

場合によっては、脆弱なサイト自体に直接CSRF攻撃が保存される可能性もあります。このような脆弱性は「保存されたCSRF」と呼ばれています。攻撃者は、HTMLを受け付けるフィールドにIMGやIFRAMEタグを格納するだけで、保存されたCSRFに対して欠陥を作り出すことができます。また、より複雑なクロスサイトスクリプティング(XSS)攻撃を行うことも可能です。XSS技術によって大規模にサイトが侵害された事例としては、Samy MySpaceというワームが有名です。

攻撃者がターゲットサイトにCSRF攻撃を仕掛けることができれば、その影響ははるかに深刻なものとなります。この場合、悪意のあるペイロードを含むページがサイト内に封じ込められており、完全に正当なものに見えるため、被害者はインターネット上のランダムなページよりも、攻撃を含むページを閲覧し、信用する可能性が高くなります。そして、このシナリオでは、被害者はすでにサイトに認証されているので、攻撃者はCSRF攻撃でターゲットにする機会をさらに得ることができます。

CSRF攻撃から身を守るための3つのヒント

ウェブアプリケーションのセキュリティプログラムを強化して、潜在的なCSRF攻撃の影響を受けにくくする方法がいくつかあります。他のウェブアプリケーションのセキュリティ対策と同様に最善の防御策は、定期的にウェブアプリケーションのセキュリティをスキャンし、テストすることです:

ウェブアプリケーションにCSRF対策が施されていることを確認する

ウェブアプリケーションにCSRF対策が施されていない場合、この形態の攻撃を受ける可能性があります。ウェブアプリケーションセキュリティツールは、そのような脆弱性がウェブアプリケーション内に存在するかどうかを迅速に判断し、問題を修正する手順を提示します。

高度な検証技術を使用してCSRFを削減する

ソーシャルメディアやコミュニティサイトを運営している場合は特に、サイト内のページにアクセスする可能性のある人物に対して高度な検証技術を導入することで、CSRF攻撃の可能性を低減させることができます。CSRFトークンは、CSRF攻撃を回避することを目的としているため、アンチCSRFトークンと呼ばれることもありますが、そのような例も存在します。一般的には、個々のセッションとユーザーの双方に固有の長くランダムな数字の列で構成されており、攻撃者が有効なリクエストを作成するために必要な適切なトークンを推測することを極めて難しくさせています。

CSRFトークンをフォーム送信や副作用のあるURLに実装することで、すべてのフォーム送信やリクエストが認証されたユーザーに関連付けられ、潜在的なCSRF攻撃から保護されることがより確実となります。非常に機密性の高い操作を伴う場合、OWASP は、トークンベースの緩和技術に加えて、ユーザーとのインタラクションに基づく保護(再認証/ワンタイム・トークンのいずれか)の導入も検討するべきであると指摘しています。

CSRFを特定するため、定期的なウェブアプリケーションのセキュリティテストを実施する

CSRF攻撃を可能にするようなウェブアプリケーションの脆弱性をうまく解決した後も、将来的にアプリケーションが更新されたり、コードに変更が加えられたりすることで、脆弱性が発生する可能性があります。このため、ウェブアプリケーションセキュリティツールを使用して、CSRF攻撃に関連する脆弱性を含め、ウェブアプリケーションに潜むセキュリティの脆弱性を継続的にスキャンし、テストすることが賢明です。

CSRF攻撃は、現在サイトに認証されているユーザーに対してのみ行われますが、この攻撃が成功すると壊滅的な被害をもたらします。ユーザーになりすました攻撃者は、ユーザーの知らないところで、あるいはユーザーの同意を得ずにさまざまな行為を行い、金銭を盗んだり、詐欺行為を行ったりすることができます。その結果、企業の評判は著しく低下し、顧客の信頼を失い、場合によっては規制当局からの罰金を受けることになります。包括的なアプリケーション セキュリティ プログラムを積極的に導入することで、このような攻撃の可能性を低減することができます。