Paranoia
危険なモジュールの無効化、リスクのある権限の非表示、任意のPHPコード実行の防止により、Drupalサイトを安全でない設定から保護するセキュリティモジュール。
paranoia
概要
Paranoiaは、CMSの管理者が任意のPHPコードを実行することを防ぎたいシステム管理者向けに設計された防御的セキュリティモジュールです。このモジュールは、DrupalにおけるPHP実行機能に関連するセキュリティリスクを軽減するため、複数の保護レイヤーを実装しています。
このモジュールは、インストール時にPHPモジュールを自動的に無効化し、権限管理フォームから危険な権限を非表示にし、どのロールも管理者ステータスに昇格されることを防ぎます。また、user/1スーパーユーザーアカウントが他の管理者によって変更されることを防ぎ、スーパーユーザーのみが自身の認証情報を変更できるようにします。
Paranoiaは、他のモジュールが追加で無効化するモジュール、非表示にする権限、ブロックするルート、無効化するフォームを宣言できる拡張可能なhookシステムを提供します。これにより、特定のサイトセキュリティ要件に適応できる柔軟なセキュリティフレームワークとなっています。
Features
- インストール時にPHPモジュールとskinr_uiモジュールを自動的に無効化
- 権限フォームから「use PHP for settings」と「use text format php_code」権限を非表示
- AnonymousロールとAuthenticatedロールへの「restrict access」マークされた権限の付与を防止
- devel、googleanalytics、bueditor、auto_username、auto_entitylabelなどのcontribモジュールからのリスクのある権限をブロック
- すべてのロールから管理者ロールプロパティを削除し、どのロールも管理者ステータスに昇格されることを防止
- モジュール管理ページからParanoia、PHP、およびその他の無効化されたモジュールを非表示
- user/1アカウントを保護 - user/1のみが自身の名前、メール、パスワードを変更可能
- devel.execute_phpなどの危険なルートへのアクセスをブロック
- リモートコード実行(RCE)を可能にする可能性のあるリスクのあるフォームを無効化
- カスタムセキュリティ設定用の拡張可能なhookシステムを提供
- サイト要件チェックでPHPモジュールのステータスを報告
- 設計上、管理UIからアンインストールできない - drushまたはデータベース操作が必要
Use Cases
複数管理者サイトのハードニング
複数の管理者がいるサイトでは、Paranoiaはどの管理者も昇格された権限を取得したり、任意のPHPコードを実行したりすることを防ぎます。Paranoiaをインストールすることで、信頼された管理者でさえもPHP実行機能を通じて誤ってまたは意図的にサイトのセキュリティを侵害することがないようにします。
コンプライアンスとセキュリティ監査
セキュリティコンプライアンスが必要な組織は、Paranoiaを使用してセキュリティポリシーを自動的に適用できます。このモジュールは、危険な権限がUIを通じて付与されないようにし、セキュリティ監査要件を満たす追加の保護レイヤーを提供します。
侵害された管理者アカウントからの保護
管理者アカウントが侵害された場合、Paranoiaは攻撃者が実行できる被害を制限します。攻撃者はPHPモジュールを有効化したり、任意のコードを実行したり、スーパーユーザーアカウントを変更したりできず、攻撃対象領域を大幅に削減します。
誤ったセキュリティ設定ミスの防止
サイトビルダーは特定の権限のセキュリティ上の影響を認識していない場合があります。Paranoiaはこれらの危険な権限を自動的に非表示にし、サイトをコード実行の脆弱性にさらす可能性のある誤った付与を防ぎます。
本番環境での開発モジュールのロックダウン
develモジュールが誤って本番環境で有効のままになっている場合、Paranoiaはdevel.execute_phpなどの危険なルートへのアクセスをブロックし、PHP実行フォームを無効化して、潜在的なリモートコード実行の脆弱性を防ぎます。
カスタムモジュールによるセキュリティポリシーの拡張
開発者は、Paranoiaのhookを実装するカスタムモジュールを作成して、サイト固有のセキュリティ制限を追加できます。たとえば、独自の内部モジュールを管理インターフェースから非表示にしたり、機密性の高いカスタムルートへのアクセスをブロックしたりできます。
Tips
- 他の管理者が作業を開始する前にセキュリティベースラインを確立するため、サイト開発プロセスの早い段階でParanoiaをインストールしてください
- 組織固有のセキュリティポリシーを拡張するために、カスタムモジュールでParanoiaのhookを使用してください
- ParanoiaはUIからアンインストールできないことを覚えておいてください - 本番環境へのデプロイ時にこれを計画してください
- PHPモジュールが有効化されていることに関する警告がないか、サイトステータスレポートを定期的に確認してください
- 包括的な保護のために、ParanoiaをSecurity Kit(seckit)などの他のセキュリティモジュールと組み合わせてください
- カスタムモジュールを開発する際は、定義した機密性の高い権限を非表示にするためにhook_paranoia_hide_permissions()を使用してください
Technical Details
Hooks 5
hook_paranoia_disable_modules
自動的にアンインストールされるべきモジュールを宣言します。モジュール管理フォームが送信されると、このリストにある有効なモジュールはアンインストールされます。
hook_paranoia_hide_modules
モジュール管理ページから非表示にするべきモジュールを宣言します。非表示のモジュールはモジュールリストやアンインストールフォームに表示されません。
hook_paranoia_hide_permissions
権限管理フォームから完全に非表示にするべき権限を宣言します。これらの権限はすべてのロールから自動的に取り消されます。
hook_paranoia_hide_routes
アクセスを拒否するべきルート名を宣言します。RouteSubscriberはこれらのルートに対して_access要件をFALSEに設定します。
hook_paranoia_risky_forms
セキュリティ上の理由で無効化するべきフォームIDを宣言します。これらのフォームは#accessがFALSEに設定され、常に失敗するバリデーションが追加されます。
Troubleshooting 6
これは設計上の仕様です。Paranoiaはモジュール管理ページから自身を非表示にします。アンインストールするには、drushを使用してください: 'drush pm-uninstall paranoia'、またはファイルシステムからモジュールディレクトリを削除してキャッシュをクリアしてください。
PHPモジュールがParanoiaの保護をバイパスして、データベースで直接有効化されています。drushを使用してPHPモジュールを無効化してください: 'drush pm-uninstall php'、またはデータベースを直接更新して削除してください。
Paranoiaは危険な権限を権限フォームから非表示にします。これは意図されたセキュリティ動作です。これらの権限を付与する必要がある場合は、まずParanoiaをアンインストールする必要があります。
Paranoiaは、どのロールも管理者プロパティがTRUEに設定されることを防ぎます。モジュールはhook_user_role_presaveでこれをブロックし、ユーザー設定から管理者ロールセレクターを非表示にします。
Paranoiaは、user/1の認証情報の変更をuser/1自身に制限しています。スーパーユーザーアカウントの名前、メール、パスワードを変更するには、user/1としてログインしてください。
Paranoiaは、hook_paranoia_disable_modules()で宣言されたモジュールを自動的にアンインストールします。デフォルトでは、phpとskinr_uiが含まれます。カスタムモジュールがこのリストに追加していないか確認してください。
Security Notes 6
- Paranoiaは攻撃対象領域を削減する防御モジュールですが、完全なセキュリティソリューションとは見なされるべきではありません
- このモジュールはUIベースの攻撃から保護しますが、データベースの直接操作は保護をバイパスできます
- 包括的なセキュリティのために、常にDrupal coreとcontribモジュールを最新の状態に保ってください
- ブロックされた管理者ロール昇格試行に関するアラートのために、paranoiaログチャンネルを監視してください
- delete_blocked_users設定オプションは、特定のセキュリティ要件に合わせて確認する必要があります
- UIからモジュールや権限を非表示にしても、プログラムによるアクセスは防げないことを考慮してください - 追加のコードレベルの保護が必要な場合があります