Scanverra

セキュリティヘッダーの欠落を修正する方法

セキュリティヘッダーとは、あなたに代わってポリシーを強制するようブラウザに指示するHTTPレスポンスヘッダーです。サイトをiframe内で読み込ませない、最初のHTTPS訪問後はプレーンHTTPを拒否する、自ドメイン以外からのスクリプトを拒否する、といった具合です。これらが欠落している、あるいは脆弱なままだと、本来安全なはずのアプリケーションコードが、ブラウザレベルの攻撃クラス全体にさらされてしまいます。

ヘッダーが欠落・脆弱なままになる理由

  • デフォルトのホスティング構成には、そもそも1つも含まれていない。 ほとんどのWebサーバーやプラットフォームは、明示的に設定しない限りセキュリティヘッダーを追加しません。
  • CSPが一度追加されたきり、二度と見直されない。 アプリが新しいサードパーティのスクリプト、埋め込み、フォントを追加していくにつれ、1年前に書かれた静的なCSPがそれらを気づかぬうちにブロックしてしまいます。あるいはさらに悪いことに、誰かがエラーを止めるためにワイルドカードでCSPを緩め、ポリシー自体を無効化してしまうこともあります。
  • HSTSが、実効性を持たせるためのディレクティブなしに追加されてしまう。 max-ageが短く、includeSubDomainspreloadを伴わない素のStrict-Transport-Securityヘッダーは、見た目よりもはるかに弱い保護しか提供しません。
  • 古いチュートリアルからコピーされた非推奨のヘッダーが残り続ける。 最新のブラウザでは無視される、あるいはそれ自体がリスクを持ち込みうるX-XSS-Protectionなどがその例です。

問題の特定方法

これはScanverraの最も高度なセキュリティ機能です。セキュリティスキャナーは、base-uriform-actionobject-srcframe-ancestorsを具体的にチェックし、過度に広範なワイルドカードのソースも検出する、本物のCSPディレクティブ解析を実行します。さらに、max-ageincludeSubDomainspreloadをカバーする完全なHSTSの深度チェックも行います。特にpreloadディレクティブについては、hstspreload.orgのAPIに実際にライブで問い合わせを行い、あなたのドメインが単に主張しているだけでなく、実際にChromeのプリロードリストに登録されているかを確認します。また、X-XSS-Protectionのような非推奨のヘッダーにもフラグを立て、すべての検出結果をCWEおよびOWASP Top 10の参照にマッピングします。たとえば、HSTSヘッダーの欠落はCWE-319とOWASP A05:2021にマッピングされるため、検出結果はそのままコンプライアンス文書に転用できます。

修正方法

1. HSTSを完全なディレクティブセットとともに追加する

1年間、すべてのサブドメインにわたってHTTPSを強制し、プリロードにも登録するtypescript
1Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

preloadを追加したら、hstspreload.orgでドメインを登録してください。このディレクティブを付けるだけでは登録は完了せず、実際に登録が承認されるまでScanverraのライブチェックはこのギャップを検出し続けます。

2. サイトが実際に読み込むものに合わせたContent-Security-Policyを書く

Scanverraが明示的にチェックするディレクティブを含む、出発点となるCSPtypescript
1Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; object-src 'none'; frame-ancestors 'self'

script-src/style-srcには、必要な範囲でのみ信頼できる特定のオリジンを追加してください。コンソールのエラーを黙らせるためだけにワイルドカード(*)やスキームのみのソース(https:)に頼るのは、ポリシーの目的そのものを完全に無効化してしまうため避けてください。

3. 残りの標準的なヘッダーを追加する

クリックジャッキング、MIMEスニッフィング、リファラー保護typescript
1X-Content-Type-Options: nosniff
2X-Frame-Options: DENY
3Referrer-Policy: strict-origin-when-cross-origin

CSP内のframe-ancestorsは、X-Frame-Optionsの最新の代替であり、より柔軟です。ただし、古いブラウザはレガシーなヘッダーしか尊重しないため、両方を配信してください。

4. 非推奨のヘッダーはそのままにせず削除する

X-XSS-Protectionは非推奨であり、OWASPは何らかの値を設定するのではなく完全に削除することを明確に推奨しています。本物のCSPがその最新の代替であり、それに併用するものではありません。

Scanverraがこれをどう検出するか

Scanverraのセキュリティスキャナーは、稼働中のレスポンスヘッダーを読み取り、単純な有無のチェックではなく、本物のディレクティブレベルの解析を行います。CSPディレクティブのカバレッジとワイルドカード検出、hstspreload.orgへのライブ照会を含むHSTS値の深度チェック、そして非推奨ヘッダーの検出です。それぞれの検出結果は、該当する場合CWE、OWASP、PCIの参照にマッピングされます。

FAQ

Frequently asked questions

最初に追加すべき、最も効果の大きいヘッダーは何ですか?

欠落している場合はStrict-Transport-Security(HSTS)です。これは「HTTPSが利用可能」であることと「HTTPSが強制されている」ことの違いにあたり、CWE-319とOWASP A05:2021にマッピングされ、いずれもPCI準拠でよく求められる項目です。Content-Security-Policyが次に効果の大きい追加項目ですが、正しく調整するにはより手間がかかります。

Scanverraは、私のドメインが単に主張しているだけでなく、実際にHSTSプリロードされているかをどうやって知るのですか?

ヘッダーだけを信頼するのではなく、あなたのホスト名についてhstspreload.orgのAPIに実際にライブで問い合わせを行います。そのため、HSTSヘッダーにpreloadディレクティブが含まれていても、そのドメインが実際にはChromeのプリロードリストに登録・承認されていない場合、Scanverraはそのギャップを具体的に検出します。

なぜScanverraはX-XSS-Protectionを良いシグナルではなく問題としてフラグを立てるのですか?

これは非推奨であり、一部の古いブラウザでは、XSS脆弱性を防ぐどころか実際に持ち込んでしまう可能性さえあります。OWASPは、本物のContent-Security-Policyに置き換えて削除することを明確に推奨しています。それが存在していることはプラスの評価ではなく、削除すべき検出結果としてフラグが立てられます。

レポート内のCWEやOWASPの参照は、実際には何を意味していますか?

CWE(Common Weakness Enumeration)とOWASP Top 10の参照は、それぞれの検出結果を業界標準の脆弱性分類にマッピングするものです。単なる非公式な推奨事項としてではなく、コンプライアンスのチケットやセキュリティレビュー、あるいはSOC 2/PCI監査のエビデンスとしてそのまま貼り付けて使えるという点で有用です。

CSPはチュートリアルからコピーしてそのまま使ってよいものですか?

いいえ——汎用的なCSPは、サイトの実際のスクリプトやスタイルを壊してしまうか、あるいは緩すぎて何の効果もないかのどちらかです。Scanverraのチェックは、あなたのサイト固有のディレクティブ(base-uri、form-action、object-src、frame-ancestors、そしてワイルドカードのソース)を見るため、推測するのではなく、不足している箇所を的確に締め直すことができます。

Free - no sign-up required

セキュリティヘッダーを無料でチェックしましょう

1回のスキャンで、CWEおよびOWASPの参照にマッピングされた本物のCSPとHSTS解析を取得しましょう。

Run free audit