シンボリックリンクの脆弱性を緩和する
Apache または nginx が静的ファイルを提供する際はシンボリックリンクをフォローします。リンク先のファイルが別のシステムユーザに所有されている場合も同様です(たとえば、別の契約に対応するものなど)。その結果、ある契約へのアクセス権を持つ攻撃者が別の契約からファイルを読み込むことができてしまいます。これには、WordPress やその他の CMS のパスワードや設定が含まれるファイルも含まれます。
脆弱性を緩和する
ファイルシステムのパーミッション
WP Toolkit を使用している場合、WordPress インスタンスの脆弱性を緩和する最も簡単な方法は Toolkit を使用する方法です。
- WP Toolkit に移動します。
- WordPress インスタンスをすべて選択して[セキュリティをチェック]をクリックします。
- [ファイルとディレクトリのパーミッション]が OK とマークされていることを確認します。
- OK でなければ、[セキュリティ保護]をクリックします。
WP Toolkit を使用していないか、WordPress 以外の CMS をセキュリティ強化する必要がある場合は、保護したいすべてのファイルのパーミッションを手動で修正する必要があります。これには、以下のコマンドを実行して、「その他」グループのすべてのパーミッションを禁止に設定します。
chmod o-rwx <file_name>
注釈: この方法で、すべてのウェブアプリケーションや CMS に適合する保護対象ファイルのリストはありません。あるウェブアプリケーションを保護するために実際にパーミッションを変更すべきファイルは、アプリケーションによって異なります。
Apache の構成
この方法で脆弱性を緩和するのは、ウェブサーバとして Apache を使用する契約に最適です([ホスティングと DNS] > [Apache と nginx の設定] で「プロキシモード」がオンになっていれば、この契約は Apache を使用しています)。
注釈: Plesk Obsidian 18.0.30 以降では、このソリューションがデフォルトで適用されています。Plesk のバージョンがそれより古い場合、以下の手順に従って脆弱性を緩和してください。
脆弱性を緩和するには、以下の手順に従います。
- [サービスプラン] > 特定のプラン > [ウェブサーバ]タブ(または、特定の契約 > [ウェブサイトとドメイン] > [ホスティングと DNS] > [Apache と nginx の設定])に移動します。
- [シンボリックリンクのフォローを制限する]チェックボックスをオンにします。
サービスプランに対してこの操作を行うと、このサービスプランをベースにしたすべての契約の脆弱性が緩和されます(つまり、攻撃者がある契約に対するアクセス権を得たとしても、他の契約に対して攻撃を実行することはできません)。契約に対してこの操作を行うと、この契約の脆弱性のみが緩和されます。
注釈: 自らのファイルに対してシンボリックリンクを使用するウェブサイトは、 .htaccess
ファイルで “FollowSymLinks” オプションを使用していなければ動作を続けます。これは、デフォルトで “SymLinksIfOwnerMatch” オプションが有効になっているためです。このようなサイトが .htaccess
ファイルで “FollowSymLinks” オプションを使用している場合、このサイトは停止します。
ご用心: このソリューションを適用しても、Apache の “SymLinksIfOwnerMatch” オプションに関連する “time-of-check to time-of-use” の競合状態に対して脆弱なままです。この脆弱性も緩和するには、こちらのパッチを Apache に適用するか(Plesk はこのパッチを検証していません。ご利用は自己責任でお願いします)、後ほど説明するカーネルベースのシンボリックリンク保護オプションを使用してください。
nginx の構成
この方法で脆弱性を緩和するのは、nginx を使用して静的ファイルを直接提供している契約に最適です([ホスティングと DNS] > [Apache と nginx の設定] で「プロキシモード」がオフになっているか、「プロキシモード」がオンで[静的ファイルを nginx で直接処理]がオンになっていれば、この契約は nginx を使用しています)。
脆弱性を緩和するには、以下の手順に従います。
- [サービスプラン] > 特定のプラン > [ウェブサーバ](または、特定の契約 > [ウェブサイトとドメイン] > [ホスティングと DNS] > [Apache と nginx の設定])に移動します。
- [シンボリックリンクのフォローを制限する]チェックボックスをオンにします。
サービスプランに対してこの操作を行うと、このサービスプランをベースにしたすべての契約の脆弱性が緩和されます(つまり、攻撃者がある契約に対するアクセス権を得たとしても、他の契約に対して攻撃を実行することはできません)。契約に対してこの操作を行うと、この契約の脆弱性のみが緩和されます。
注釈: このオプションは Linux カーネルバージョンが 2.6.39 までのコンピュータには適用できません。そのようなマシンで脆弱性を緩和するには、OS を最新の安定バージョンにアップグレードするか、以下に挙げるカーネルベースのシンボリックリンク保護メカニズムのいずれかを使用することをお勧めします。
CloudLinux の場合、mod_hostinglimits の SecureLinks
CloudLinux を実行するコンピュータの場合、Symlink Owner Match Protection メカニズムを有効にすることで脆弱性を緩和できます。このメカニズムは Apache 向け HostingLimits モジュールの一部として提供されています。詳しくは CloudLinux のドキュメンテーションをご覧ください。
CentOS 7 の場合、KernelCareシンボリックリンク保護パッチセット(無料提供)
CentOS 7 を実行するコンピュータの場合、CloudLinux が無料提供するシンボリックリンク保護パッチセットをインストールすることで脆弱性を緩和できます。詳しくは CloudLinux のドキュメンテーションをご覧ください。
grsecurity(Linux カーネル用のセキュリティ強化パットセット。有料サブスクリプションが必要です)
脆弱性の緩和に上記のいずれも使用できない状況では、grsecurity Linux カーネル用のセキュリティ強化パッチセットをインストールして GRKERNSEC_SYMLINKOWN を構成してください。grsecurity は無料では使用できず、1 年間のサブスクリプションを購入する必要があります。