クロスサイトリクエストフォージェリ(Cross-site request forgery/CSRF)という言葉をご存じでしょうか。
情報セキュリティ上の問題点である脆弱性の1つです。(脆弱性についてはこちらのブログもご覧ください。)
今回は、そのCSRF攻撃を防ぐための対策についてお伝えします。
CSRFとは?
クロスサイトリクエストフォージェリ(CSRF)攻撃は、悪意のあるウェブサイト、電子メール、ブログ、インスタントメッセージ、またはアプリケーションで行われるサイバー攻撃の一種です。
このタイプの攻撃は、ユーザーのウェブブラウザを騙して、安全なウェブサイト上で不要なアクションを実行させるものです。ブラウザは通常、ウェブサイトへのリクエストを行う際にセッションクッキーを付与します。そのため、サイト側では、認証された正当なリクエストと偽造されたリクエストを区別することが難しくなります。
CSRF攻撃は、攻撃者がユーザーセッションを乗っ取り、機密情報にアクセスすることを可能にするため、非常に有害です。また、Webページに悪意のあるコードを挿入したり、製品の購入や送金、リンクのクリックなどのユーザーの意図していない動作を引き起こしたりするために使用されることもあります。
CSRF攻撃が成功すると、公開されたアプリケーションの機能やユーザーの権限に応じて、深刻な被害が発生する可能性があります。
例えば、被害者が知らないうちに、送金、パスワードの変更、商品の購入などに利用される可能性があります。言い換えれば、CSRF攻撃は、攻撃者が被害者の同意や知識なしに、被害者のブラウザを通じて、不正な取引が完了するまで、ターゲットシステムにその機能を実行させることができます。
1)CSRF攻撃はどのように実行されるのか?
クロスサイトリクエストフォージェリ攻撃を成功させるためには、2つの重要なステップがあります。
1つ目は、被害者を騙してリンクをクリックさせたり、ソーシャルエンジニアリングや悪意のあるリンクを使ってページを読み込ませたりすることで行われます。2つ目のステップとして、被害者のブラウザから標的のWebサイトへ、巧妙に作られた正規のように見えるリクエストを送信します。このリクエストには、攻撃者が指定した値や、被害者がそのWebサイトに関連付けたクッキーが含まれます。
クロスサイトリクエストフォージェリは、被害者が特定のサイトの正規ユーザーである場合にのみ効果を発揮します。つまり、攻撃が成功するためには、被害者がそのサイトにログインしている必要があります。
CSRF攻撃は認証プロセスをバイパスするために使用されるため、サイトの一部の要素は、これらの攻撃に対して保護されていないにもかかわらず、影響を受けない場合があります。
例えば、ウェブサイト上の公開された問い合わせフォームは、誰でもアクセスできるため、CSRFから安全です。誰もがアクセスできる環境ではなく、被害者だけがアクションを実行できる状況でのみCSRFが適用されます。
2)CSRF攻撃を防ぐためには?
CSRF攻撃を防ぐために、銀行や商用のサイトでは、セッション追跡を行うCookieの代わりに、動的に生成されるセッショントークンを使用する必要があります。そうすれば、攻撃者がクライアントのセッションを入手することがより困難になります。
CSRF攻撃を防止するためのコントロールが施されているサイトがあったとしても、すべてのサイトが安全であるとは思わないでください。多くのサイトでは、現在はこれらのコントロールがあっても、アップグレードやコードの変更後に、後から削除される可能性があります。したがって、常に注意を払い、この種の攻撃を防ぐための対策を講じることがベストです。
CSRF攻撃は、ユーザーが特定のWebサイトで既に認証されている場合にのみ可能です。このような攻撃の最も一般的なターゲットは、サイトの利用率が高いこともあり、銀行サイトやそのほかの金融取引を扱うWebサイトとなります。
CSRFを防ぐための5つのベストプラクティス
1.アンチウィルスソフトの使用と定期的なスキャン
悪意のあるスクリプトやウイルスからコンピュータを保護するために、アンチウイルスソフトを常に最新の状態に保つことが不可欠です。CSRFの脆弱性は、開発者によって、または外部のソフトウェアやライブラリを通じて入る可能性があるため、Web脆弱性スキャナを使用してWebアプリケーションを定期的にスキャンし、さまざまなアプリケーションとその機能をチェックすることが重要です。
2.アンチCSRFトークンの使用
アンチCSRFトークンは、クロスサイトリクエストフォージェリ攻撃からの最も確実な保護方法です。CSRFトークンを利用するには、CSRFGuard for JavaやCSRFProtector for PHPのような確立された実装を使用してください。もし、作業環境に既存のソリューションがない場合は、独自のCSRF防御機構を開発する必要があります。
3.Same Site Cookieの使用
クッキーの SameSite 属性を Strict に設定することは、Web アプリケーションを CSRF 攻撃から保護するのに役立つ良い方法です。もしこれがウェブアプリケーションの機能を壊してしまうのであれば、SameSite属性をLaxに設定することができますが、決してNoneには設定しないでください。すべてのブラウザがSameSiteクッキーをサポートしているわけではありませんが、ほとんどのブラウザがサポートしています。アンチCSRFトークンとともにこの属性を追加保護として使用することで、ウェブアプリケーションを安全に保つことができます。
4.機密性の高いアクションには追加認証を使用する
重要なアクションや機密性の高い機能では、ユーザーに再認証を求めることで、Webサイトのセキュリティを最適化しましょう。CSRFやその他の危険な攻撃から保護するために、ワンタイムパスワード、CAPTCHA、パスワードバリデーションなどの方法を採用することを検討してください。
5.カスタムリクエストヘッダ技術を使用する
カスタムヘッダ保護は、CSRF保護に対する一つの有効なアプローチです。これは、有効なCSRFトークンの状態を変更するリクエストをチェックするサーブレットフィルタを追加することに基づいています。CSRFトークンはカスタムヘッダとして渡され、ユーザーのセッションの間は有効です。このようなセキュリティは、通常エントリーポイントページからアクセスできないREST APIのセキュリティにとって、特に重要です。
まとめ
より多くの金融取引がオンラインで処理されるようになるにつれて、CSRF攻撃は増加し続けるでしょう。また、ソーシャルネットワークの利用が増えたことも、こうした攻撃を仕掛けるスクリプトの広がりに寄与しています。上記のブログで紹介されている予防策に従うことで、CSRF攻撃の被害に遭う可能性を低くすることができます。
こちらの記事はAppknox, Xysec Labs社の記事より引用して作成しています。
参照元:
How To Prevent a CSRF Attack
https://www.appknox.com/blog/how-to-prevent-a-csrf-attack
三和コムテックのスマホアプリ診断製品ページもございます。
Webアプリ診断(Web画面やWebAPIの診断)はこちらになります。
こちらもぜひご覧ください。
- トピックス:
- セキュリティ