Skip to main content

コンテンツセキュリティポリシーでXSSなどの脆弱性を防ぐには?

著者

Luke Watts

Webinar header LP

2020年2月9日

0 分で読めます

サイバー犯罪が横行する時代にコードを安全に保つのは簡単ではありません。何十年も前からある手法の多くは、20年前と同じように今も有効です。Webへの攻撃に関しては、最新のブラウザーでセキュリティが大きく進歩しました。コンテンツセキュリティポリシーなどを活用すれば、今も驚くほど広く使われている古典的な手口の多くを防げます。

インジェクション攻撃はインターネットの黎明期から存在し、2020年になった今も問題となっています。ここでは、悪名高いXSSの脆弱性について詳しく見ていきます。堅牢なコンテンツセキュリティポリシーを実装することで、サイトが悪意のあるコードの侵入経路になるのを防ぐうえで大きな効果が期待できます。

XSSの脆弱性とは?

クロスサイトスクリプティング(XSS)は、Webアプリケーションに共通する脆弱性を悪用する攻撃です。この攻撃では、ハッカーがWebアプリケーションを利用し、Webサイト自体に「注入」したコードを通じて、別のユーザーにマルウェアを送信します。マルウェアにはさまざまな動作がありますが、最も一般的なのは他のユーザーのCookieを盗むことです。

Cookieを盗むと、ハッカーはサイトにアクセスする際に被害者になりすますことができます。Cookieを盗むには、HTMLを読み取れるフォーム(商品一覧、Webコメント、検索バーなど)を介して、JavaScriptコードをサイトに挿入します。コメントや商品一覧、検索結果に悪意のあるコードが埋め込まれたリンクにアクセスした人は、誰でも自動的に自分のコンピューターにマルウェアを受け取ってしまいます。

そのマルウェアはユーザーのセッションからCookieを抜き取り、ハッカーに送信します。ハッカーはそのCookieを自身のブラウザーに読み込ませます。標的のサイトにアクセスすると、サイトはハッカーを標的のユーザーとして認証します。あとは、ユーザーの請求情報を探したり、アカウントのパスワードを変更したりするだけです。

XSSはHTMLの黎明期から存在しています。メール、ECサイト、オンラインバンキング、オークションサイトなどで悪用されてきました。問題があまりにも広がったため、Facebook、Twitter、YouTubeでさえ被害を受けたサイトに含まれています。セキュリティが大きく進歩したにもかかわらず、XSSは今も問題であり続けています。2019年には、すべてのWebサイトの84%がjQuery XSSに対して脆弱なままだと推定されています。

コンテンツセキュリティポリシーを使ってXSSを防ぐ方法

コンテンツセキュリティポリシー(CSP)は、XSSを利用したものを含むインジェクション攻撃の検出と緩和を目的としたセキュリティレイヤーです。サイトの正規ユーザーからデータやCookieを盗み取るために、ハッカーが悪意のあるコードを注入することを大幅に困難にします。

CSPを使うと、開発者は次のことができます。

  • 許可するリソースとそのオリジンを許可リストで指定する:つまり、Webアプリケーションの実行に必要なスクリプトやコードは、指定されたオリジンからのものに限り許可されます。それ以外はすべてブロックされます。

  • CSPディレクティブを定義する:デフォルトではポリシーはdefault-srcですが、変更できます。必要に応じてCSPの特定の要素を制御するためのディレクティブが複数用意されています。

  • インラインスクリプトやeval()を許可するかどうかを決める:デフォルトでは、CSPヘッダーはインラインスクリプトとeval()関数の両方を悪意のあるものとしてブロックします。

  • HTMLでスタイル属性を許可するかどうかを決める:CSSは悪用される可能性があるため、CSPのデフォルト設定では、ブロックやHTML内の属性は許可されません。

  • ポリシー違反をサーバーに報告する機能を利用する:これにより、不正利用の発生状況を追跡できます。

CSPは通常サーバー上で実装され、その手順は大きく異なる場合があります。ただし、サービスプロバイダーがサーバー設定を制御できるようにしていない場合でも、metaタグを使ってサイトのヘッダーでCSPを有効にできます。

また、WebサイトをスキャンしてHTTPのセキュリティヘッダーの使用状況をテストし、現在の状態を確認できます。あるいは、CSP設定を強化するツールとしてCSP Evaluatorを利用できます。

コンテンツセキュリティポリシーを使う理由

複雑なWebアプリケーション、ログイン機能、ユーザーCookieを扱うWebサイトでは、CSPを使うことをおすすめします。

1. XSSは広く蔓延し、深刻な被害をもたらす

XSSはブラウザーの仕組み、特に正規のコードと注入されたコードをブラウザーが自力で区別できない点を悪用します。ユーザーデータやその他の機密情報にアクセスするための、事実上のバックドアとなります。

2. 見つけにくいXSSの脆弱性への対策になる

ログイン機能のサポートにCookieを利用するWebアプリケーションは、設計が適切であってもXSSに対して脆弱な可能性があります。ハッカーは執拗に攻撃を続けるため、一見安全なコードベースにも、開発者が見落とした脆弱性が残っていることがあります。

3. 他のセキュリティのベストプラクティスを支える

CSPは、多くの操作を制限し、許可するオリジンの一覧を絞り込むことで、セキュリティのベストプラクティスの徹底に役立ちます。そのため、テンプレートシステム、脆弱性スキャン、手動でのセキュリティレビューなど、他のセキュリティ対策と組み合わせることで最も効果を発揮します。

サイトを無防備なままにしない

ビジネスやDevOpsのセキュリティが重視されるなか、Webサイトが今もハッキングされる可能性があり、実際に被害に遭っていることを見落とす人も少なくありません。XSSは昔からある脆弱性ですが、適切なコンテンツセキュリティポリシーが導入されていないサイトは今も攻撃を受ける可能性があります。幸い、CSPの実装は比較的簡単です。今すぐ対策を講じて、Webサイトもビジネスの他の部分と同じように安全な状態に保ちましょう。

セキュアコーディングのスキルを向上

いつでもどこでも学べる、無料で質の高い開発者向けセキュリティ教育。

カテゴリー: