Missing Anti-clickjacking Header
概要
- 脆弱性の名前: Missing Anti-clickjacking Header (Anti-clickjackingヘッダーの欠如)
- 問題の要点: Webサイトがクリックジャッキング攻撃に対する保護メカニズムを持っていないため、攻撃者がユーザーを騙して意図しない操作を実行させる可能性がある状態。
- よくある発生シーン: Webサーバーの設定ミス、フレームワークのデフォルト設定、開発者の認識不足など。クラウド環境では、複数のサービスが連携して動作することが多いため、設定ミスが問題視されています。
背景
クリックジャッキングは、攻撃者がWebページの上に透明なiframeを重ねて表示し、ユーザーが意図しないボタンやリンクをクリックさせる攻撃手法です。
Anti-clickjackingヘッダー(X-Frame-Options
やContent-Security-Policy: frame-ancestors
)は、Webページがiframe内で表示されることを制限することで、クリックジャッキング攻撃を防御します。
近年、Webアプリケーションのセキュリティ対策として、Anti-clickjackingヘッダーの設定が重要視されています。
セキュリティ上のリスク
- クリックジャッキング攻撃による、ユーザーの意図しない操作の実行。
- ユーザーアカウントの乗っ取り、個人情報の詐取、不正なコンテンツの表示。
- ソーシャルメディアでの意図しない投稿、オンラインバンキングでの不正送金。
対処方法の具体例
Apache2
誤った設定例
.htaccess
ファイルにX-Frame-Options
ヘッダーが設定されていない例:
# 誤った例: X-Frame-Optionsヘッダーが設定されていない
正しい設定例
.htaccess
ファイルにX-Frame-Options
ヘッダーを設定する例:
# 正しい例: X-Frame-Optionsヘッダーを設定
Header set X-Frame-Options "DENY"
または
# 正しい例: X-Frame-Optionsヘッダーを設定
Header set X-Frame-Options "SAMEORIGIN"
Nginx
誤った設定例
設定ファイルにX-Frame-Options
ヘッダーが設定されていない例:
# 誤った例: X-Frame-Optionsヘッダーが設定されていない
正しい設定例
設定ファイルにX-Frame-Options
ヘッダーを設定する例:
# 正しい例: X-Frame-Optionsヘッダーを設定
add_header X-Frame-Options "DENY";
または
# 正しい例: X-Frame-Optionsヘッダーを設定
add_header X-Frame-Options "SAMEORIGIN";
PHP
誤った設定例
PHPスクリプトでX-Frame-Options
ヘッダーが設定されていない例:
<?php
// 誤った例: X-Frame-Optionsヘッダーが設定されていない
?>
正しい設定例
PHPスクリプトでX-Frame-Options
ヘッダーを設定する例:
<?php
// 正しい例: X-Frame-Optionsヘッダーを設定
header("X-Frame-Options: DENY");
?>
または
<?php
// 正しい例: X-Frame-Optionsヘッダーを設定
header("X-Frame-Options: SAMEORIGIN");
?>
JavaScript
JavaScript自体でX-Frame-Options
ヘッダーを設定することはできません。WebサーバーまたはPHPなどのサーバーサイドスクリプトで設定する必要があります。
AWS
正しい設定例
CloudFrontを使用してX-Frame-Options
ヘッダーを設定する例:
- CloudFrontのBehaviorで、カスタムヘッダーを追加し、
X-Frame-Options
ヘッダーを設定します。 X-Frame-Options
ヘッダーの値として、DENY
またはSAMEORIGIN
を指定します。
検出方法
OWASP ZAPでの出力例
- Alert 名: Missing Anti-clickjacking Header
- リスク: Low
- URL: Anti-clickjackingヘッダーが設定されていないURL
- パラメータ: なし
- 詳細:
X-Frame-Options
ヘッダーまたはContent-Security-Policy: frame-ancestors
ディレクティブが設定されていないという情報
手動再現例
- Webブラウザの開発者ツールを開き、Networkタブを選択します。
- Webサイトにアクセスし、HTTPレスポンスヘッダーを確認します。
X-Frame-Options
ヘッダーまたはContent-Security-Policy: frame-ancestors
ディレクティブが存在しない場合、脆弱性が存在します。
curl -I https://example.com
上記コマンドを実行し、X-Frame-Options
ヘッダーが存在しない場合、脆弱性が存在する可能性があります。
まとめ
- CVSS 基本値: 4.3 (Medium)
- 運用チームや開発者が意識すべきポイント:
- Webサイト全体で
X-Frame-Options
ヘッダーまたはContent-Security-Policy: frame-ancestors
ディレクティブを設定する。 X-Frame-Options
ヘッダーの値として、DENY
またはSAMEORIGIN
を適切に選択する。Content-Security-Policy: frame-ancestors
ディレクティブを使用する場合は、許可するオリジンを明示的に指定する。- 定期的にペネトレーションテストを実施し、脆弱性を特定する。
- Webサイト全体で
- 再発防止:
- 開発プロセス全体でセキュリティを考慮する(Security by Design)。
- コードレビューを実施し、Anti-clickjackingヘッダーの設定漏れを早期に発見する。
- 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
- Webサーバーの設定テンプレートやIaCポリシーに、Anti-clickjackingヘッダーの設定を組み込む。
補足資料・参考URL
以上の対策と検出方法を活用して、Missing Anti-clickjacking Headerのリスクを低減してください。