クロスサイトリクエストフォージェリ(CSRF)の脆弱性 
-Webアプリケーションの脆弱性入門 4-

Share

Security NEWS TOPに戻る
バックナンバー TOPに戻る

「クロスサイトリクエストフォージェリ(CSRF)」は、Webアプリケーションの脆弱性の一つです。この記事では、クロスサイトリクエストフォージェリが何であるか、その攻撃の具体的な仕組みや流れ、想定されるリスクについて解説します。またクロスサイトスクリプティング(XSS)の脆弱性との違い、実際にどのような予防策を取るべきかについても触れます。そしてどのようにして自分のWebサイトやアプリケーションを保護するかについて解説します。

前回までの内容

セッション管理の不備は、Webアプリケーションの脆弱性の一つです。セッションIDが日付・誕生日・ユーザ名など、推測可能なもの作られたりしているなどの問題があると、セッションハイジャック(攻撃者が他のユーザのセッションIDを盗み取り、そのIDを使用してユーザのアカウントに不正アクセスする行為)のリスクを高めます。セッションハイジャックが成立するリスクを高める要因となる脆弱性および攻撃方法には、セッションIDの固定化(セッションフィクセーション)やセッションIDの推測などがあります。脆弱性を悪用した攻撃を防ぐためには、セッションIDを推測困難な値にする、ログイン・ログアウト時に新しいセッションIDを発行する、ワンタイムトークン付与やIPアドレスによる確認などの対策が必要です。

アクセス制御の不備は、Webアプリケーションにおいて、本来付与されている権限の範囲内でのみ動作するような制御が実装されていない問題を指します。これにより権限昇格やパストラバーサル(パラメータを操作することで、本来制限された領域外のファイルやディレクトリにアクセスする行為)などのリスクが生じます。主な対策方法として、権限に基づく機能制限、適切なアクセス制御ポリシーの実装などが挙げられます。

セキュリティ対策の実施は常に最新のセキュリティ情報を踏まえて見直し、強化していくことが重要です。セキュリティ専門家に相談するなどして、適切な対策を実施しましょう。

前回記事「セッション管理の不備/アクセス制御の不備の脆弱性 -Webアプリケーションの脆弱性入門 3-」より

クロスサイトリクエストフォージェリ(CSRF)とは

クロスサイトリクエストフォージェリ(CSRF)とは(困る女性)イメージ

クロスサイトリクエストフォージェリ(CSRF)は、攻撃者が罠として用意した偽サイトを用いてリンクや画像をクリックさせることで、ユーザが意図していないリクエストを強制的に行わせることができる脆弱性です。例えば、SNS(ソーシャルネットワーキングサービス)で「いいね!」をする、銀行の振り込み操作など、被害者がログインしているWebサービスの操作を攻撃者が悪用することが可能です。

クロスサイトリクエストフォージェリ(CSRF)攻撃とは

クロスサイトリクエストフォージェリ攻撃の仕組みは、Webサイトでログインしたユーザからのリクエストがそのユーザが意図したリクエストであるかどうかを識別する仕組みがない場合、外部サイトを経由してユーザが意図しないリクエストを送信させ、それをサーバに受け入れさせるというものです。例えば、銀行のサイトにログインしている状態で攻撃者が仕掛けた罠サイトのリンクURLをクリックすると、ユーザの意図しない送金処理などが実行されてしまう恐れがあります。

クロスサイトリクエストフォージェリ(CSRF)攻撃のリスク

クロスサイトリクエストフォージェリ攻撃の特徴は、攻撃者によってユーザが意図しないリクエストを実行させられ、強制的に、情報の変更や購入処理を実行させられてしまうところにあります。注意すべきは、クロスサイトリクエストフォージェリは、システムやアカウントが保有する機能や権限によって様々な被害を受ける可能性があることです。例えば、ユーザの意図しない売買成立での金銭請求、ログイン情報の変更によるアカウントの乗っ取り、データ削除処理の実行によるデータ消失などがあげられます。

クロスサイトスクリプティング(XSS)とクロスサイトリクエストフォージェリ(CSRF)の違い

クロスサイトスクリプティングとクロスサイトリクエストフォージェリは、Webアプリケーションのセキュリティ脅威として知られていますが、その仕組みや対策には明確な違いがあります。クロスサイトスクリプティングの基本的な手法は、悪意のあるスクリプトをWebページに挿入し、他のユーザがそのページを閲覧する際にスクリプトが実行される攻撃です。主に出力に対するエスケープ処理の不備が原因で発生します。一方、CSRFは、ユーザがログインしている状態で、攻撃者が仕掛けた誘導URLをクリックさせることで、ユーザの意図しない操作を実行させる攻撃です。この攻撃は、セッション管理やトークンの処理が不適切な場合に主に発生します。企業や開発者は、これらの違いを理解し、それぞれの脅威に対する徹底的な対策や対応を導入することが求められます。注意深くシステムの保護と保守を行い、ユーザの情報を守ることが重要です。

クロスサイトリクエストフォージェリの原因

脆弱性が発生する原因は、Webサイト側でユーザからの正規のリクエストと外部サイトを経由して偽造されたリクエストを区別できないことにあります。セッション管理のためにCookie、Basic認証、またはSSLクライアント認証を使用しているWebサイトでは、このような問題が発生する可能性があります。特に、影響を受けるWebサイトのうち、ログイン後に重要な処理等を行うサイトは、大きな被害につながる可能性があるため、注意が必要です。

クロスサイトリクエストフォージェリ攻撃の対策

クロスサイトリクエストフォージェリ(CSRF)攻撃の対策として、送信されたリクエストが正しい画面遷移によるものであることを確認し、不正な場合には処理を実行しない仕組みを実装してください。画面遷移の制御に利用可能な要素としては、下記が挙げられます。

1. 推測困難かつランダムな文字列(トークン)

2. Originヘッダやカスタムヘッダの値

3. 再認証による本人確認

トークンはセッション単位のリクエストごとに有効とし、別のリクエストに対して使用不可としてください。

セキュリティ対策の取り組み

セキュリティ対策の取り組み(アンケートバインダー)イメージ

このような攻撃を理解し適切な対策を導入することは、Webセキュリティを保護する上で非常に重要です。また、クロスサイトスクリプティング攻撃により、クロスサイトリクエストフォージェリの緩和策が無効化される場合もあるため、多方面からの脆弱性対策の実施も重要です。企業担当者はこの攻撃の仕組みを理解し、常に最新の対策情報を取得して、安全な環境を保持する必要があります。特に自社のWebサイトを運営する場合、定期的な調査や検証を行い、対策を強化することが求められます。

まとめ

クロスサイトリクエストフォージェリ(CSRF)は、ユーザがログイン状態のWebサイトにおいて、攻撃者が偽造したリクエストを送信させることで、強制的に情報の変更や購入処理等を行わせるものです。例えば、SNSで「いいね!」をする、銀行の振り込み操作など、被害者がログインしているWebサービスの操作を攻撃者が悪用することが可能です。この攻撃を防ぐためには、サイトが正規のリクエストと偽造されたリクエストを区別するために、正しい画面遷移によるリクエストであることを確認する仕組みを実装することが推奨されます。また、企業やサイトの運営者は、この問題をよく知って、対策をしっかりと行う必要があります。

Security NEWS TOPに戻る
バックナンバー TOPに戻る


資料ダウンロードボタン
年二回発行されるセキュリティトレンドの詳細レポート。BBSecで行われた診断の統計データも掲載。
お問い合わせボタン
サービスに関する疑問や質問はこちらからお気軽にお問合せください。

Security Serviceへのリンクバナー画像
BBsecコーポレートサイトへのリンクバナー画像
セキュリティ緊急対応のバナー画像
セキュリティトピックス動画申し込みページリンクへのバナー画像

クロスサイトスクリプティング(XSS)の脆弱性
-Webアプリケーションの脆弱性入門 1-

Share

Security NEWS TOPに戻る
バックナンバー TOPに戻る

クロスサイトスクリプティングはWebアプリケーションの脆弱性の1つです。この記事では、クロスサイトスクリプティングとは何か、その仕組みや種類、そしてそれに関連する脆弱性や攻撃手法について詳しく解説します。さらに、クロスサイトスクリプティングとクロスサイトリクエストフォージェリとの違いや、クロスサイトスクリプティング攻撃を防ぐための対策方法も紹介します。

Webアプリケーションの脆弱性入門

Webアプリケーションの脆弱性入門(3つのブロックにアイコンマーク)イメージ

脆弱性は、プログラムの不具合や設計ミスによって発生するセキュリティ上の欠陥です。Webアプリケーションに脆弱性が存在する場合、攻撃者がシステムに侵入し、機密情報を盗み出したり、サービスを乗っ取ったりするリスクがあります。Webアプリケーションの主な脆弱性にはSQLインジェクション、クロスサイトスクリプティング(XSS)、クロスサイトリクエストフォージェリ(CSRF)、セッション管理の不備、アクセス制御の不備があります。脆弱性が悪用されると、機密情報の漏洩、データの改ざん、サービスの停止や遅延、金銭的損失、企業の信頼喪失などの深刻な影響をもたらす可能性があります。対策方法としては、正しい権限管理の実施、定期的なセキュリティチェックの実施、最新のセキュリティパッチの適用などが挙げられます。これらの対策により、脆弱性の早期発見と修正が可能になり、攻撃のリスクを減らすことができます。企業のセキュリティ部門担当者は、社内の機密データや取引先の顧客情報等を守るためにも、脆弱性対策に取り組むことが重要です。

前回記事「Webアプリケーションの脆弱性入門」より

クロスサイトスクリプティング(XSS)とは

クロスサイトスクリプティングとは、動的にHTMLを生成するWebアプリケーションで、ユーザの操作を介して不正なスクリプトを実行させる(できる)事象を指します。

このクロスサイトスクリプティングの脆弱性を悪用した攻撃手法をクロスサイトスクリプティング攻撃と呼びます。まず悪意のある第三者が事前にターゲットのWebサイトに特定の文字列のスクリプトを入力値として挿入すると、そのWebサイトにアクセスしたユーザのブラウザ上で挿入したスクリプトが実行されます。これにより、第三者によってブラウザを不正に操作され、ユーザの個人情報が漏えいする、という仕組みになっています。

クロスサイトスクリプティング(XSS)の種類

クロスサイトスクリプティングの脆弱性には主に3つの種類があります。

  1. 反射型XSS…攻撃者がリクエストに混入させたスクリプトなどが、Webサーバからのレスポンスに含まれる形で実行されるもの
  2. 蓄積型XSS…攻撃者がWebサーバ上に何らかの方法でスクリプトを格納したうえで、被害者がアクセスすることでスクリプトが実行されるもの
  3. DOMベースXSS…Webサーバ側がスクリプトで動的にHTMLを生成する場合にスクリプトタグを生成してしまうことに起因し、ブラウザ側での処理の際に不正なスクリプトが実行されるもの

クロスサイトスクリプティング(XSS)とクロスサイトリクエストフォージェリ(CSRF)の違い

クロスサイトスクリプティング(XSS)とクロスサイトリクエストフォージェリ(CSRF)は、Webアプリケーションのセキュリティ脅威として知られていますが、その仕組みや対策には明確な違いがあります。クロスサイトスクリプティング攻撃の基本的な手法は、攻撃者がWebアプリケーションの脆弱性を悪用し、ターゲットのWebサイトに悪意のあるスクリプトを挿入し、ユーザがブラウザを閲覧する際にスクリプトが実行されるという仕組みです。主に出力の検証が不十分な場合に発生します。一方、クロスサイトリクエストフォージェリ(CSRF)は、ユーザがログインしている状態で、攻撃者が仕掛けた誘導URLをクリックさせることで、ユーザの意図しない操作を実行させる攻撃です。この攻撃は、セッション管理やトークンの処理が不適切な場合に主に発生します。

クロスサイトスクリプティングの脆弱性が発生する原因

クロスサイトスクリプティング(XSS)の脆弱性の主な原因は、出力の検証や処理が不十分であることです。悪意のある攻撃者が特定の文字列やスクリプトを入力し、その内容が未検証のままWebページに表示される場合、クロスサイトスクリプティング攻撃が実行されるリスクが高まります。特に、公開されている企業のWebサイトやアプリケーションで、ユーザからの入力値が適切に処理されず、そのままWebページへの出力処理される場合、情報の漏洩や不正な操作が可能となります。

クロスサイトスクリプティングの脆弱性による影響

脆弱性を放置した場合の影響は、情報の漏洩から不正な操作まで多岐にわたります。攻撃者が悪意のあるスクリプトを挿入することで、顧客の情報を搾取したり、企業の内部情報にアクセスしたりする可能性があります。

クロスサイトスクリプティング攻撃の手法と例

クロスサイトスクリプティング攻撃の手法は、攻撃者が悪意のあるスクリプトを入力し、その内容がそのままWebページへの出力処理に使用されることで、ユーザのブラウザ上でスクリプトが実行されるというものです。例えば、コメント欄や検索ボックスなど、ユーザからの入力を受け付ける部分にスクリプトを挿入することで、他のユーザのCookie情報等を搾取することが可能となります。

クロスサイトスクリプティングの脆弱性への対策

根本的な対策とその重要性

根本的な対策とその重要性(ブロックと紙飛行機)イメージ

クロスサイトスクリプティングの対策は、リクエストに不正な文字列が含まれていても、それをスクリプトとして機能させないことです。Webページに出力する要素に対して、スクリプト言語等において、その言語にとって特別な意味を持つ文字や記号を別の文字列に置き換える「エスケープ処理」を行います。

対策の重要性は、企業の信頼性や顧客情報の保護に直結しています。特に、自社のWebアプリケーションが公開されている場合、定期的なセキュリティ調査や対策の更新が不可欠です。最後に、社内での知識共有や外部の専門家との相談を通じて、最新の脅威や対策についての知識を更新し続けることが求められます。

WAFを活用したクロスサイトスクリプティングの防御方法

WAF(Webアプリケーションファイアウォール)は、Webアプリケーションへの様々な攻撃を検知し、防御する機能を持っています。通信をリアルタイムで監視し、攻撃と判断された通信を遮断することで、Webサイトの脆弱性が悪用されるのを防ぎます。クロスサイトスクリプティング攻撃やSQLインジェクション攻撃などには、Webアプリケーションへの入力値のチェックなどを行うWAFを用いた防御も考えられます。WAFの導入により、Webサイトのセキュリティレベルを向上させ、ユーザ情報の漏洩やサービスの停止を防げる可能性も高まります。ただしWAFを使った防御では、そもそもの脆弱性を解消するという本質的問題解決とはならない点に注意が必要です。

まとめ

クロスサイトスクリプティング攻撃の基本的な手法は、攻撃者がWebアプリケーションの脆弱性を悪用し、ターゲットのWebサイトに悪意のあるスクリプトを挿入し、ユーザがブラウザを閲覧する際にスクリプトが実行されるという仕組みです。クロスサイトスクリプティングの脆弱性の主な種類には「反射型」「蓄積型」「DOMベース」があり、それぞれ異なる攻撃方法が特徴です。また、XSSとクロスサイトリクエストフォージェリ(CSRF)は両方ともWebアプリケーションの脅威として知られていますが、攻撃の仕組みや対策が異なります。クロスサイトスクリプティングの脆弱性は、出力の検証が不十分な場合に発生し、情報の漏洩や不正な操作が可能となるリスクがあります。対策としては、出力の検証、エスケープ処理などが求められます。

基本的な対策は、Webサイトにおいて、セキュリティ診断によるチェックを定期的に実施してリスクを可視化し、適切なセキュリティ対策を実施することにより、脅威から自社や顧客の情報を保護することとなります。また、企業や組織は、セキュリティ対策の実施や知識の更新をする必要があります。Webアプリケーションのセキュリティを向上させるための知識として、また、日々の開発や運用の中での参考として、本記事を活用してください。

Security NEWS TOPに戻る
バックナンバー TOPに戻る


資料ダウンロードボタン
年二回発行されるセキュリティトレンドの詳細レポート。BBSecで行われた診断の統計データも掲載。
お問い合わせボタン
サービスに関する疑問や質問はこちらからお気軽にお問合せください。

Security Serviceへのリンクバナー画像
BBsecコーポレートサイトへのリンクバナー画像
セキュリティ緊急対応のバナー画像
セキュリティトピックス動画申し込みページリンクへのバナー画像

クロスサイトリクエストフォージェリ(CSRF/XSRF)とは?狙われやすいWebアプリケーションの脆弱性対策

Share

Security NEWS TOPに戻る
バックナンバー TOPに戻る

今回は、クロスサイトスクリプティング(XSS)のような「大物の脆弱性」と比較すると、一見地味に見えてしまう「CSRF」の意外な危険性について取り上げます。CSRFの脆弱性リスクやXSSとの違い、さらに実際の診断の現場での検出頻度や、見つかった際に行うべき対応、予防策についてもご紹介します。安全なWebサイト運用のために必読です。

クロスサイトリクエストフォージェリとは

クロスサイトリクエストフォージェリ(Cross Site Request Forgery)は、Webアプリケーションの脆弱性の一つで、略称「CSRF」とも呼ばれます。読み方は「シーサーフ」です。英語で「Cross」は「X」と表記することがあるため、CSRFを「XSRF」と表記することもあります。

「クロスサイト」は「Webサイトをまたぐ」という意味で、「リクエスト」はユーザがWebアプリケーションなどに処理を要求すること、「フォージェリ」には「偽造品」などの意味があります。CSRFの脆弱性を悪用することで、ユーザが意図していないリクエストを強制的に行わせることが可能になります。攻撃者は罠として用意した偽造サイトを用いてユーザーに意図しないリクエストを強制的に送信させます。結果として、ユーザーの認証情報を利用した不正な操作や、個人情報の流出が引き起こされる可能性があります。

クロスサイトリクエストフォージェリとクロスサイトスクリプティングの違い

クロスサイトリクエストフォージェリと似た名前の脆弱性に「クロスサイトスクリプティング(XSS:Cross Site Scripting)」があります。クロスサイトリクエストフォージェリとクロスサイトスクリプティングは、どちらもサイトを横断(Cross Site)してサイバー攻撃が行われる点が共通していますが、発見される頻度や攻撃による影響、対策方法は異なります。

  • XSS:Webサイトに悪意のあるスクリプトを埋め込む
  • CSRF:ユーザの意図しないリクエストを強制的に実行させる

脆弱性診断の現場にみるCSRFの実態

あなたがいまご覧になっているサイト「SQAT.jp」を運営する株式会社ブロードバンドセキュリティでは、日々、さまざまなお客様のシステムに対して脆弱性診断を行っています。

ブロードバンドセキュリティが2024年上半期に総数3,536のシステムに対して行った脆弱性診断の結果、CSRFを含む「セッション管理関連の脆弱性」は15%のシステムで検出され、その中にCSRFは44%含まれていました。つまりCSRFの脆弱性が存在したシステムは全体の6%になります。ここの数字をどうとらえたらよいのか、このあと、CSRFの攻撃例やリスクを紹介しながら考えていきます。

CSRFによる攻撃と被害例

CSRFの脆弱性を悪用した攻撃事例としては、掲示板等に本人が全く意図していない書き込みをさせた例(「遠隔操作ウイルス事件」や「はまちちゃん事件」が有名)があります。

もしCSRFが脆弱性診断で見つかったら、すぐに対応が必要な場合もあります。特に、個人情報の登録や変更などに関わるログイン後のページで発見された場合は、すぐに修正を行わなければなりません。

意図しない掲示板の書き込み以外にも、CSRFの脆弱性を悪用すれば、たとえば「サイトAにログインして会員登録を行っているつもりが、実際には攻撃者が罠として用意したサイトBにログインしており、そこで個人情報を抜き取られる」ような攻撃が行われる危険性もあります。もしそうなれば、サイト運営者としての責任が厳しく問われることは間違いありません。

対策を怠ると他サイトへの遷移ができなくなる可能性も

また、主要なWebブラウザは、XSSやCSRFなどからの保護のために、脆弱性のあるWebサイトをブラウザに表示させない仕様を整えつつあります。たとえばGoogle Chromeは、Chrome 80以降、サイトを越えてCookie情報をやり取りするためのSameSite属性に対して制限を加え、CSRFを防御可能な設定値のみを許容する方向へと段階的に進んでいます*1 。CSRFを防御可能な設定値については他の主要ブラウザも同様の方向に進んでおり、Webアプリケーション開発においてCSRF対策は(他の対策とともに)取らないわけにはいかないものの一つとなりつつあります。

セキュリティ企業が見るCSRFのリスクとは

なお、わたしたちセキュリティ診断サービス会社にとってCSRFとは、一定頻度で検出されるものの、CSRF単体ではそれほどリスクは大きくない脆弱性です。事実、CSRFだけを使った攻撃事例はあまり多くないのです。

CSRFで注意すべきは、他のサイバー攻撃手法と組み合わされることでリスクや被害が大きくなることです。

たとえば「セッションフィクセーション」と呼ばれるセッションIDを強制・固定化する攻撃と、CSRFの脆弱性を悪用した攻撃を組み合わせることで、「セッションハイジャック」と呼ばれるサイバー攻撃が成立すれば、セッションの乗っ取りが行われ、オンラインバンキングでの不正送金などにつながる可能性があります。

CSRFのリスクは低い? 高い?

CSRFだけを考えてしまうとリスクはそれほど高くないため、対応は後回しにされがちです。しかし実際のサイバー攻撃はそう単純ではなく、いくつもの方法が複合されて行われます。「見つかったらすぐに対応が必要な脆弱性のひとつ」とわたしたちが考える理由がそこにあります。

CSRFは、単体では攻撃者にとってそれほど使い勝手の良い脆弱性ではありません。しかし、CSRFはいわば、自身では主役は張れないものの、サイバー攻撃の主役を引き立てるために機能する、名脇役のような脆弱性と言えるかもしれません。

CSRF脆弱性への対策

最も効果的な対策は「トークン」呼ばれる推測困難な文字列の使用です。

  • ユニークな推測困難な文字列を生成
  • リクエスト時に追加検証
  • PHP、Java、ASP.NETの主要フレームワークで実装可能

CSRFの脆弱性を悪用した攻撃で最も警戒すべきはログインしたユーザをターゲットとした攻撃になります。この場合、ログインしたユーザからの正しいリクエストであることを証明するために、「トークン」を使って確認を行うことや再度の認証を行うこと*2などで攻撃を防ぐことができます。

事実、PHP、Java、ASP.NET等の開発言語で提供されている、Webアプリケーションフレームワーク(Laravel、Spring等)は、CSRFの脆弱性を悪用した攻撃を防ぐために、ユニークなトークンを発行する仕組みを持つようになっています。しかし、それでもなおCSRFの脆弱性が見つかることがあるのです。これはどうしてでしょう。

注意!トークン実装の落とし穴

フレームワークに機能があっても、実際のコーディング時に1行追加することを忘れがちです。「機能がある=安全」ではありません。

開発フレームワークがトークンを発行する機能を持っているのにWebアプリケーションでCSRFの脆弱性が発見される理由は、単純そのもので「そもそもトークンを発行するための1行がかかれていない」*3から、ということが多いのです。「機能があるから大丈夫だろう」という思い込みが思わぬリスクを招きます。

前半で、ブロードバンドセキュリティが行った脆弱性診断の結果、約6%でCSRFの脆弱性が検出されたとお伝えしましたが、リスクを知り、適切な対策を確実に実装することで、この数字をもっと少なくすることができるでしょう。

まとめ:CSRFは名脇役、されど油断大敵

  • CSRFとは、「シーサーフ」と呼ばれる、攻撃者が罠として用意したサイトを用いて、ユーザが意図しないリクエストを強制的に行わせることを可能にする脆弱性です。
  • CSRFは単独では大きな脅威ではありませんが、他の攻撃手法と組み合わさることで深刻なセキュリティリスクになり得ます。
  • CSRFとXSSは、どちらもサイトを横断してサイバー攻撃を行う点だけは共通していますが、発見頻度やリスク、対策方法は異なります。
  • 定期的な脆弱性診断と、最新のセキュリティ対策が何より重要です。

Security NEWS TOPに戻る
バックナンバー TOPに戻る


資料ダウンロードボタン
年二回発行されるセキュリティトレンドの詳細レポート。BBSecで行われた診断の統計データも掲載。
お問い合わせボタン
サービスに関する疑問や質問はこちらからお気軽にお問合せください。

Security Serviceへのリンクバナー画像
BBsecコーポレートサイトへのリンクバナー画像
セキュリティ緊急対応のバナー画像