クロスサイトリクエストフォージェリ(Cross-site request forgery/CSRF)という言葉をご存じでしょうか。
CSRFは情報セキュリティ上の問題点である脆弱性の1つです。(脆弱性についてはこちらのブログもご覧ください。)CSRFはユーザー(ブラウザ)とWebサーバーのセッションを悪用し、不正なリクエストを送る攻撃です。CSRFによってユーザーが意図しない送金やパスワード変更が行われる被害が発生します。
当記事では、CSRFの実際の被害事例を確認して恐ろしさをご認識いただき、CSRF攻撃を防ぐための対策を解説します。
CSRFとは?
クロスサイトリクエストフォージェリ(CSRF)攻撃は、悪意のあるWebサイト、電子メール、ブログ、インスタントメッセージ、またはアプリケーションで行われるサイバー攻撃の一種です。
このタイプの攻撃は、ユーザーのWebブラウザを騙して、安全なWebサイト上で不要なアクションを実行させるものです。ブラウザは通常、Webサイトへのリクエストを行う際にセッションクッキーを付与します。そのため、サイト側では、認証された正当なリクエストと偽造されたリクエストを区別することが難しくなります。
CSRF攻撃は、攻撃者がユーザーセッションを乗っ取り、機密情報へのアクセスを可能にするため、非常に有害です。また、Webページに悪意のあるコードを挿入したり、製品の購入や送金、リンクのクリックなどのユーザーの意図していない動作を引き起こしたりするために使用されることもあります。
CSRF攻撃が成功すると、公開されたアプリケーションの機能やユーザーの権限に応じて、深刻な被害が発生する可能性があります。
例えば、被害者が知らないうちに、送金、パスワードの変更、商品の購入などに利用される可能性があります。言い換えれば、CSRF攻撃は、攻撃者が被害者の同意や知識なしに、被害者のブラウザを通じて、不正な取引が完了するまで、ターゲットシステムにその機能を実行させることができるということです。
1)CSRF攻撃はどのように実行されるのか?
CSRF攻撃を成功させるためには、2つの重要なステップがあります。
1つ目は、被害者を騙してリンクをクリックさせたり、ソーシャルエンジニアリングや悪意のあるリンクを使ってページを読み込ませたりすることで行われます。2つ目のステップとして、被害者のブラウザから標的のWebサイトへ、巧妙に作られた正規のように見えるリクエストを送信します。このリクエストには、攻撃者が指定した値や、被害者がそのWebサイトに関連付けたクッキーが含まれます。
CSRFは、被害者が特定のサイトの正規ユーザーである場合にのみ効果を発揮します。つまり、攻撃が成功するためには、被害者がそのサイトにログインしている必要があります。
CSRF攻撃は認証プロセスをバイパスするために使用されるため、サイトの一部の要素は、これらの攻撃に対して保護されていないにもかかわらず、影響を受けない場合があります。
例えば、Webサイト上の公開された問い合わせフォームは、誰でもアクセスできるため、CSRFを受けません。誰もがアクセスできる環境ではなく、被害者だけがアクションを実行できる状況でのみCSRFが適用されます。
2)CSRF攻撃を受けた際の影響・リスク
CSRF攻撃を受けてしまった場合の影響やリスクとして、主に以下の2点があります。
- ログインユーザーが利用できるサービスを悪用
- ログインユーザーが編集可能な情報の改ざん
CSRFはユーザーとWebサーバーのセッションを利用した攻撃です。よって「ログインユーザーができること」に影響があることがポイントです。
2-1)ログインユーザーが利用できるサービスを悪用
CSRF攻撃を受けると、ログインユーザーができるサービスを悪用されるリスクがあります。
CSRFは認証を終えてログインしたユーザーになりすまして、攻撃を仕掛けます。攻撃の結果、例として以下のような被害が生まれます。
- 送金
- 商品の購入、契約
- 退会
- 個人情報の確認(不正アクセス)
CSRF攻撃を受けた場合、どの被害もユーザーが意図していない、実施した覚えがない操作が行われてしまうことが特徴です。
ユーザーが攻撃を受けたことに気付くのは、上記の操作が行われた後の通知メールなどです。攻撃の最中に気付くことは難しいでしょう。Webサイト運営側も認証している(正しいユーザーだと信じている)状態で操作が行われています。ユーザー側から申告を受けなければ気が付けません。
2-2)ログインユーザーが編集可能な情報の改ざん
CSRF攻撃を受けると、ログインユーザーのみが編集可能な情報の改ざんが行われるリスクがあります。
2-1の攻撃と同様に、攻撃者はログインしたユーザーになりすまして、以下のような操作を実施します。
- 個人情報の変更
- パスワードの変更
- 掲示板やコメントの書き込み
CSRF攻撃を受けると、個人情報は漏えいするだけでなく、パスワードなどを勝手に変更されてしまう可能性があります。変更されてしまえば、ユーザーは次回以降、サービスを利用できなくなる被害も生じるでしょう。
また掲示板やコメント欄に書き込みが勝手に行われるケースもあります。特にユーザーが困るケースは、モラルのない犯罪予告や誹謗中傷などのコメントが投稿されてしまうケースです。場合によっては、ユーザーが管理者側から強制退会させられてしまうこともあるでしょう。
3)CSRF攻撃を受けやすいサイトの特徴
CSRF攻撃を受けやすいWebサイトの特徴として、以下の認証を実施していることが挙げられます。
- Cookieによるセッション管理
- Basic認証
- SSLクライアント認証
CookieはWebサイトの訪問済みユーザーを見分けるためのファイルです。Cookieを持っていると次回訪問時にWebサーバーが「すでに認証済みのユーザーだから認証しなくてよい」と判断します。このCookieがCSRFに悪用され、悪意を持った行動をします。
Basic認証はパスワードとユーザー名を用いたシンプルな認証です。Basic認証も1度認証されると、その後は認証が不要となるため、CSRF攻撃に認証された状態を悪用されます。
SSLクライアント認証は、クライアント証明書を用いるユーザー認証方式です。SSLクライアント認証自体は安全な手法ですが、クライアント証明書が盗まれてしまった場合に問題があります。悪意のあるサイトに誘導されてしまい、クライアント証明書を盗まれると、攻撃者も認証されるため、CSRF攻撃ができる環境が整います。
4)CSRF攻撃を防ぐためには?
CSRF攻撃を防ぐために、銀行や商用のサイトでは、セッション追跡を行うCookieの代わりに、動的に生成されるセッショントークンを使用する必要があります。そうすれば、攻撃者がクライアントのセッションを入手することがより困難になります。
ですが、CSRF攻撃を防止するためのコントロールが施されているサイトがあったとしても、全てのサイトが安全であるとは思わないでください。多くのサイトでは、現在はこれらのコントロールがあっても、アップグレードやコードの変更後に、後から削除される可能性があります。したがって、常に注意を払い、この種の攻撃を防ぐための対策を講じることがベストです。
CSRF攻撃は、ユーザーが特定のWebサイトで既に認証されている場合にのみ可能です。このような攻撃の最も一般的なターゲットは、サイトの利用率が高いこともあり、銀行サイトやその他の金融取引を扱うWebサイトとなります。
CSRFとXSSの違い
CSRFとXSS(クロスサイトスクリプティング)の違いは攻撃対象の違いです。CSRFはユーザーとWebサーバーのセッションを悪用するのに対し、XSSはユーザーが入力した内容を悪用します。
XSSはWebサイトやアプリケーションに悪意があるプログラムを埋め込んで、ユーザーが入力した情報を盗む、操作する攻撃です。例としてSNSやメールなどの身近なサービスで考えてみましょう。攻撃者がユーザーがクリックするであろう悪意のあるリンクを仕掛けておき、ユーザーがクリックします。その後、画面が遷移し、ユーザーが不正なスクリプトを実行してしまうことで、情報漏えいやマルウェア感染などの被害が発生する仕組みです。
CSRFとXSSはどちらもユーザーの脅威になる攻撃です。
【事例】実際にあったCSRF攻撃の被害・事件
実際に起こったCSR攻撃の被害として以下があります。
- 勝手にメッセージ投稿される
- CSRF攻撃によりマルウェアに感染させ、パソコンを遠隔操作する
1つ目の事例はCSRF攻撃により、SNSに勝手にメッセージが投稿されてしまう被害が発生していました。情報漏えいや送金といった被害はなく、メッセージが投稿されるのみで済んだ事例です。
2つ目の事例はCSRF攻撃により、複数人のパソコンにマルウェアを感染させました。マルウェアに感染したパソコンは、掲示板サイトに殺害予告や爆破予告をしています。パソコンの持ち主は誤認逮捕にまでつながっており、CSRF攻撃の怖さを知らしめる事例となりました。
CSRFを防ぐための8つの対策
本章では、CSRFを防ぐための対策を8つご紹介します。
1.アンチウィルスソフトの使用と定期的なスキャン
悪意のあるスクリプトやウイルスからコンピュータを保護するために、アンチウイルスソフトを常に最新の状態に保つことが不可欠です。CSRFの脆弱性は、開発者によって、または外部のソフトウェアやライブラリを通じて入る可能性があるため、Web脆弱性スキャナを使用してWebアプリケーションを定期的にスキャンし、さまざまなアプリケーションとその機能をチェックすることが重要です。
2.アンチCSRFトークンの使用
アンチCSRFトークンは、CSRF攻撃からの最も確実な保護方法です。CSRFトークンを利用するには、CSRFGuard for JavaやCSRFProtector for PHPのような確立された実装を使用してください。もし、作業環境に既存のソリューションがない場合は、独自のCSRF防御機構を開発する必要があります。
3.Same Site Cookieの使用
クッキーの SameSite 属性を Strict に設定することは、Webアプリケーションを CSRF 攻撃から保護するのに役立つよい方法です。もしこれがWebアプリケーションの機能を壊してしまうのであれば、SameSite属性をLaxに設定することができますが、決してNoneには設定しないでください。全てのブラウザがSameSiteクッキーをサポートしているわけではありませんが、ほとんどのブラウザがサポートしています。アンチCSRFトークンとともにこの属性を追加保護として使用することで、Webアプリケーションを安全に保つことができます。
4.機密性の高いアクションには追加認証を使用する
重要なアクションや機密性の高い機能では、ユーザーに再認証を求めることで、Webサイトのセキュリティを最適化しましょう。CSRFやその他の危険な攻撃から保護するために、ワンタイムパスワード、CAPTCHA、パスワードバリデーションなどの方法を採用することを検討してください。
5.カスタムリクエストヘッダ技術を使用する
カスタムヘッダ保護は、CSRF保護に対する1つの有効なアプローチです。これは、有効なCSRFトークンの状態を変更するリクエストをチェックするサーブレットフィルタを追加することにもとづいています。CSRFトークンはカスタムヘッダとして渡され、ユーザーのセッションの間は有効です。このようなセキュリティは、通常エントリーポイントページからアクセスできないREST APIのセキュリティにとって、特に重要です。
6.定期的に脆弱性診断を実施する
CSRF攻撃の対策として、定期的に脆弱性診断を実施しましょう。CSRF攻撃は脆弱性を突いてセッションを悪用し、被害をもたらします。よって事前に脆弱性を見つけ、適切に対処することが必要です。
脆弱性になり得る箇所の候補は多く、自社でのチェックには多くのコストを要します。しかし、業務を進めなければならないなかでのチェック作業に、コストをかけることは望ましくありません。
脆弱性診断のツール導入や外部委託を検討して、定期的に診断を実施しましょう。
7.セキュリティ対策ソフトを導入する
CSRF攻撃の対策に、セキュリティ対策ソフトやサービスを導入しましょう。例えば、WAF(Web Application Firewall)やブラウザのセキュリティ機能が役立ちます。
WAFはWebアプリケーションのさまざまな攻撃をブロックできるサービスです。ブラウザのセキュリティ機能を各パソコンに導入しておくことで、意図しないプログラムの実行を防げます。
またOSやアプリケーション自体の脆弱性によって、CSRF攻撃を仕掛けられるケースも多いです。よってセキュリティパッチの適用や、ソフトウェアの最新化は欠かさず行うように義務付けましょう。
8.問題が生じたらすぐにセキュリティ担当部署に報告するように徹底
従業員が業務中に問題を発見したら、すぐにセキュリティ担当部署に報告するルールを作りましょう。
CSRF攻撃は気が付きにくい攻撃です。しかし、他のサイバー攻撃も含めて「何かがおかしい」と感じたら、すぐに報告させるルールを作っておきましょう。異常を早い段階で検知できることで、その後の対策も早くなります。また早い段階の検知は被害を小さくする点においても重要です。
まずは、セキュリティ担当部署への連絡先や、連絡方法を明確にしておきましょう。特にパソコンに異常がある場合にはパソコンを使用すると、被害を広げてしまう可能性があります。緊急時は電話で連絡できるように準備しておくなど、メールやチャット以外の連絡方法も用意しておきましょう。
CSRF攻撃には定期的な脆弱性診断が有効
CSRF攻撃への対策として、定期的な脆弱性診断が有効です。CSRF攻撃はアプリケーションの脆弱性を突いてセッションを悪用します。脆弱性診断によって、脆弱性の把握、対策をしておくことでCSRF攻撃への防御が可能です。
脆弱性診断をするためには外部の専門家に依頼する、または脆弱性診断ツールを導入します。それぞれのメリット・デメリットは以下の通りです。
- 外部の専門家に依頼
- メリット
- 対応策を提示してくれる
- CSRF攻撃以外の脆弱性も指摘してもらえる
- デメリット
- コストが高くなりやすい
- 診断のタイミングを選べない
- メリット
- 脆弱性診断ツール
- メリット
- コストを低く抑えられる
- 好きなタイミングで診断できる
- デメリット
- 対応策を提示してくれないツールがある
- 限定的な範囲しか診断できない
- メリット
メリット・デメリットを踏まえて、脆弱性診断の利用を検討しましょう。
まとめ
より多くの金融取引がオンラインで処理されるようになるにつれて、CSRF攻撃は増加し続けるでしょう。また、ソーシャルネットワークの利用が増えたことも、こうした攻撃を仕掛けるスクリプトの広がりに寄与しています。上記のブログで紹介されている予防策に従うことで、CSRF攻撃の被害に遭う可能性を低くすることができます。
まずは、セキュリティ診断を実施してみましょう。三和コムテックのセキュリティ診断では、Webアプリケーション診断、プラットフォーム診断、スマホアプリ診断など、さまざまな側面からの診断が可能です。
セキュリティ無料診断と相談会も行っていますのでぜひ、参考にしてください。
https://product.sct.co.jp/product/security
こちらの記事はAppknox, Xysec Labs社の記事より引用して作成しています。
参照元:How To Prevent a CSRF Attack
三和コムテックのスマホアプリ診断製品ページもございます。
Webアプリ診断(Web画面やWebAPIの診断)はこちらになります。
こちらもぜひご覧ください。
- トピックス:
- セキュリティ