WordPressのようなコンテンツ管理システムのウェブセキュリティを向上させる
コンテンツ管理システムは、コンテンツの作成、更新、管理を容易にします。しかし、これらはサーバーの侵害やデータの盗難につながる脆弱性を引き起こす可能性もあります。
このような攻撃を防ぐために使用できるCloudflareの機能は多数ありますが、ログインや画像のアップロードなど、通常の管理プロセスを妨げる可能性もあります。適切に構成することで、重要な機能を失うことなく、攻撃からサイトを保護できます。
このステージでは、ゾーンのセキュリティ機能を強化しており、例外が適用されるまで管理機能に追加の混乱を引き起こす可能性があります。そのため、これらの変更は予想される管理のダウンタイムを考慮して行うことをお勧めします。
以下は推奨されるセキュリティアクションの概要であり、包括的なガイドではありません。特定の製品や機能についての詳細は、開発者ドキュメントを参照してください。
WAF管理ルールセットは、さまざまな攻撃に対して即座に保護を提供する事前構成されたルールセットで、定期的に更新されます。多くのルールはデフォルトでオンになっていますが、すべてではありません。Cloudflare管理ルールセットを閲覧して、コンテンツ管理システムにタグ付けされた追加のルールを見つけて有効にすることをお勧めします。

これらの管理ルールセットをカスタマイズする機能は有料プランが必要ですが、無料Cloudflare管理ルールセット ↗は、新しいCloudflareゾーンに自動的に展開されます。このルールセットは、非常に広範なトラフィックタイプに対して誤検知を最小限に抑えるよう特別に設計されています。現在、このルールセットには以下のルールが含まれています:
- URIおよびHTTPヘッダー内のペイロードに一致するLog4Jルール;
- Shellshockルール;
- 非常に一般的なWordPressの脆弱性に一致するルール;
さらに、OWASPコアルールセットの多くの側面を構成できます。異常閾値、パラノイアレベル、個別のルールなどです。良い実践の一つは、XSSおよびSQLインジェクションに関連するルールが有効になっていることを確認することです。
最小権限の原則を使用して、管理パネルからいくつかのテストアクションを実行し、何がブロックされ、何が許可されているかを監査できます。この情報をもとに、正確な例外を作成できます。動作が期待通りでない場合は、以下を確認してください:
- DNSレコードがプロキシされていること
- WAFに干渉するルール(セキュリティを無効に設定したページルールなど)がないこと
ファイアウォールイベントに良好なサンプルが記録されるまで十分なリクエストを生成した後、管理ルールセクションで取られたアクションを観察します:

次に、この情報を使用して、管理アクションを妨げるルールのみを除外するスキップルールを作成できます:

このルールは、特に以下に示す追加の保護なしで、できるだけ厳密に定義することをお勧めします。具体的な内容はサイト固有になりますが、使用する可能性のあるフィールドは以下の通りです:
- IPソースアドレス
- AS番号
- クッキー
- ユーザーエージェント
ルールはCMSの管理部分にのみ適用するようにしてください。たとえば、WordPressの場合、条件を「*URIパスが/wp-admin/*を含む」と設定できます。
これらのフィールドのいずれも偽装可能であるため、これだけではセキュリティ対策にはなりません。目的は、必要な条件にのみ管理機能を復元し、他のツールや機能(CMSログインの強力なパスワードを含む!)を使用してアクセスを保護することです。
次に、ファイアウォールログからの情報を使用して、例外を追加することでスキップするルールを選択します。WordPressの場合、以下のルールを選択しました:

これが完了したら、ログインを妨げるルールセットに対しても同様のルールを作成する必要があります。私の使用ケースでは、「OWASPコアルールセット949110」をスキップするだけで済みました。
注意: CMSの特定のルールがサイトの非CMSセクションで問題を引き起こす場合は、それらをスキップするルールを追加することも検討してください。上記の手順に従い、上記で有効にしたCloudflare管理ルールセットのルールをスキップするように設定できます。ホスト名、URI、またはクッキーに基づいて、等しくない、マッチしない、または含まない演算子を使用して設定できます。
スキップルールの優先度を実行ルールよりも高く設定してください。
公開されているサイトの部分を攻撃から保護し、必要な管理機能を復元したので、弱いまたは露出したログイン資格情報の場合に備えて、管理パネルへのアクセスをさらに制限できます。
ゼロトラスト ↗ウェブアプリケーションは、管理パネルへのアクセスを制限する最良の方法です。デバイスではなくユーザーに基づいてアクセスを制限でき、非常に詳細な制御が可能です。自己ホスト型ウェブアプリケーションの設定は非常に簡単で、詳細についてはゼロトラスト開発者ドキュメントの自己ホスト型アプリケーションセクションを参照してください。
ウェブアプリケーションを構成した後、ユーザーは制限されたコンテンツにアクセスする前に何らかの方法で認証を受ける必要があります。デフォルトの方法は、メールの多要素認証を通じて行われます:

ログインを実行できない機器の認証用に設計されていますが、mTLSを使用してデバイス証明書に基づいて認証する別の多要素認証手段(知っていることと持っていること)として使用できます。
以下を実行します:
- クライアント証明書を作成し、証明書とキーの両方をデバイスに保存します。
- 証明書をコンピュータのキーストレージにインポートします。macOSのキーチェーンを使用する場合は、ブラウザでテストに記載されている手順を使用できます。
- 正しいホストを追加してmTLSを有効にする。
- SSL/TLS > クライアント証明書で、mTLSルールを作成を選択します。
- 受信リクエストが一致する場合に、ルールのスコープを管理セクションに絞るためにURIパスフィールドに値を入力します。そうしないと、訪問者が公開コンテンツにアクセスできなくなります。
- クライアント証明書が検証されていない場合、管理パネルへのリクエストをブロックするようにルールを設定します。
- デプロイを選択します。これにより、管理セクションへのすべてのリクエストに対して有効なクライアント証明書を確認するWAFカスタムルールが作成されます。
注意: 証明書の検証に問題がある場合は、プライベートウィンドウでページにアクセスしてみてください。これが機能する場合、以前の成功したTLS状態がブラウザにキャッシュされている可能性があります。
レート制限ルールは、アカウントパスワードを推測しようとする攻撃者からログインページを保護するのに役立ちます。ブルートフォース攻撃 ↗を使用して。リクエストが一致する式に対してレート制限を定義し、レート制限に達したときに実行するアクションを定義できます。
レート制限ルールは、すべてのプランで無制限に利用可能です。詳細については、開発者ドキュメントを参照してください。