SSD Nodes Learn 🎉 VPS $4.99/月〜
ガイド Matt Connor著者 Matt Connor

VPSは安全ですか?自分で管理するリスクと対策

VPSはhypervisorで他の顧客から分離されますが、安全性を左右するのは自分の設定です。開いたポート、使い回した鍵、未更新のpackage、漏えいしたsecretが主な侵入口です。

VPS ホスティングは安全ですか?簡潔な答え

はい。VPS ホスティングは、多くの人が利用する目的に対して安全であり、shared hosting よりも実質的に優れています。VPS(virtual private server)は、独自の kernel、memory、disk、user account を持つ仮想マシンです。VPS を実行する hypervisor によって、これら 4 つすべてから他の顧客が隔離されます。同じ物理マシン上で隣のサーバーを借りている利用者が、あなたのファイルを読み取ったり、プロセスを一覧表示したり、サーバーにログインしたり、ネットワークトラフィックを確認したりすることはできません。

正確に説明すると、要点は 2 つあります。ハードウェアと hypervisor はプロバイダーが管理します。仮想マシンの内部はすべて利用者が管理し、実際のインシデントのほとんどはそこから始まります。サーバーへの侵入は、開いたポート、脆弱な SSH password、更新されていない package、または公開されたファイル内の secret を通じて発生します。hypervisor を通じて侵入されることは、ほとんどありません。

ハイパーバイザーが実際に分離するもの

ハイパーバイザーは、1 台の物理ホスト上で仮想マシンを実行するソフトウェアです。KVM VPS(KVM は kernel based virtual machine の略で、Linux ホストの標準です)では、サーバーは完全な仮想マシンとして動作します。独自のカーネルを起動します。ホストは物理メモリの固定領域を割り当て、プロセッサのメモリ管理ユニットはその領域外へのアクセスを拒否します。そのため、別のゲストで実行されているコードがこちらの RAM をアドレス指定することはできません。共有ファイルシステムも共有ユーザーテーブルもないため、隣接するサーバーのファイル権限がこちらのサーバーに影響することはありません。

共有ホスティングは仕組みが異なります。多数のサイトが、1 つのオペレーティングシステム上で、1 つの Web サーバーと 1 つの PHP インストールを共有し、通常のユーザーアカウントとして動作します。境界になるのはファイル権限だけです。そのため、権限設定の誤りや、過剰な読み取り権限を持つユーザーとして動作する脆弱なプラグインによって、別のアカウントのファイルにアクセスされる可能性があります。この隔たりを 共有ホスティングから VPS へ移行すること によって解消できます。

購入する内容を確認してください。VPS として販売されているすべてのプランが仮想マシンとは限りません。コンテナベースのプラン(OpenVZ、LXC、Virtuozzo)はホストのカーネルを共有し、ハードウェア仮想化の代わりに namespace と cgroup で顧客を分離します。これは境界が弱い構成です。ホストのカーネルにバグがあれば、それはサーバー上のカーネルのバグにもなるためです。また、これらのプランではカーネルモジュールをロードできないため、一部のソフトウェアが利用できません。安全性を優先するなら KVM が標準的な選択です。支払う前に、どの方式かを確認してください。

近隣ユーザーの影響

物理ホストを共有すると速度が低下します。共有によるコストは速度だけです。1 台のマシン上のゲストは、物理 CPU とディスクを共有します。CPU が他のユーザーの処理でビジー状態になると、仮想 CPU は待機します。Linux はこの待機時間を steal time として報告します。これは topvmstat%st フィールドで確認できます。steal time が数時間にわたって数パーセントを超える場合、ホストのリソースが過剰に割り当てられています。これは、誰かがデータを読み取っているという意味ではありません。別のプランまたは別のプロバイダーに変更するのが対策です。判断する前に、実際に割り当てられた CPU とディスクを測定することもできます。

顧客間の影響として知っておくべきことが 1 つあります。ただし、これはセキュリティホールではありません。VPS からメールを送信すると、IP アドレスは他の顧客も使用するアドレス範囲に含まれます。近隣の顧客がスパムを送信すると、そのアドレス範囲の一部がブロックリストに登録されることがあります。その結果、自分が原因でない理由により、メールが迷惑メールフォルダーに振り分けられます。不正利用を厳しく管理しているプロバイダーは、よりクリーンなアドレス範囲を維持しています。メールが重要な場合は、この点を確認してください。

悪意のある同居ユーザーにできないことと、例外的にできること

同じホスト上の別の顧客が、あなたのファイルへ到達する経路はありません。相手の仮想マシン内には、あなたのプロセスを見たり、ディスクをマウントしたり、サーバー上でシェルを開いたりするためのものが存在しないためです。1 つだけ例外があります。プロバイダーのプライベートネットワークは、見知らぬ相手と共有するネットワークとして扱ってください。見えないものと決めつけず、そのネットワークを通過するデータを暗号化します。

ハイパーバイザーエスケープは実際に発生します。仮想化層のバグによって、あるゲスト内のコードがホストへ到達し、ホストを経由して同じホスト上のすべてのゲストへ到達できる場合があります。このようなバグは発見され、CVE(common vulnerabilities and exposures)識別子を付けて公開され、修正パッチが提供されます。ホスティングプロバイダーは事業全体をこの層に依存しているため、迅速にパッチを適用します。この攻撃を実行するには、特定のハイパーバイザーのバージョンで動作するエクスプロイトが必要です。小規模なホスティングアカウントに使うには、コストの高い手段です。

ゲスト間のサイドチャネルも実際に存在します。Spectre と Meltdown のファミリーが該当し、共有プロセッサキャッシュを悪用して境界を越えた少量のデータを推測します。マイクロコードとカーネルを更新すると影響を軽減できます。公開された研究における漏えい速度もごく小さいものです。公開事例は、大規模な攻撃ではなく、研究上の実証です。リスクがゼロというわけではありません。ただし、あなたに被害を与える可能性がある問題の中で、優先順位の上位に来るものとは到底いえません。

プロバイダーの責任範囲と、あなたの責任範囲

プロバイダーは、設備、ホストハードウェア、ハイパーバイザーとホストカーネル、物理ネットワーク、そしてサーバーの起動、停止、再構築、スナップショット作成を行えるコントロールパネルを管理します。これらに障害が発生した場合は、プロバイダーが修正する責任を負います。

オペレーティングシステム以上の層は、すべてあなたの責任です。インストールするパッケージ、開放したままにするポート、ログインに使用できるアカウントと暗号鍵、適用する更新、バックアップ、自分のアプリケーションコードが含まれます。ほとんどの VPS プランはアンマネージドであり、プロバイダーが代わりにサーバーへパッチを適用したり、サポートチケットで対応したりすることはありません。購入前にマネージドとアンマネージドの違いを確認してください。責任範囲のどれだけが自分に割り当てられるかが決まるためです。

自分の責任範囲の中でも、忘れやすい部分があります。ホスティングのコントロールパネル自体です。そのログイン情報を持つ人は、サーバー内部のパスワードを知らなくても、サーバーを再構築したり、ディスクをレスキューシステムへ接続したりできます。ホスティングアカウントでは二要素認証 (2FA) を有効にし、そのパスワードを他の場所で再利用しないでください。

ホスティングプロバイダーはデータを確認できますか?

はい。原則として確認できます。これは、VPS が提供できる保護の正直な限界です。ディスクイメージはプロバイダーのストレージ上にあります。プロバイダーのコンソールから、仮想マシンの画面レベルの操作が可能です。レスキューモードでは、ディスクを接続した別のシステムを起動できます。VPS は他の顧客からユーザーを保護しますが、プロバイダーはその保護の対象外です。

ホスト側に対しても読み取れない状態にする必要があるデータを扱う場合は、書き込む前にアプリケーション内で暗号化してください。ゲスト内でのフルディスク暗号化は、保存中のコピー済みイメージに対する保護には有効です。ただし、サーバーの稼働中は鍵をメモリ内に置く必要があるため、プロバイダーを信頼対象から外すことはできません。同じ信頼関係は、1 台で借りる 専用サーバーにも適用されます。ただし、共有される層が 1 つ少なくなります。

VPS に実際に侵入される原因

すべてのインターフェースで待ち受けるサービス。 データベース、キャッシュ、メッセージキュー、管理パネルは、デフォルトで 0.0.0.0 に bind することがよくあります。これは、パブリックインターフェースを含むすべてのネットワークインターフェースで待ち受けるという意味です。インターネット全体を対象にしたスキャンは常時自動で実行されているため、新しい IP アドレスはオンラインになってから数分以内に、最初の未承諾プローブを受けます。パスワードを設定していない Redis、認証のない Elasticsearch ノード、2375 番ポートで公開された Docker API、デフォルトのログイン情報を使い続ける管理パネルは、あなたが誰かを知らないスキャナーにも、この方法で発見されます。ローカルマシンだけが必要とするサービスは 127.0.0.1 に bind し、それ以外はファイアウォールでブロックしてください。

Docker にファイアウォールを回避されること。 コンテナのポートを公開すると、ufw (uncomplicated firewall) のルールより先に評価される network address translation (NAT) ルールが書き込まれます。そのため、ufw status ではそのポートを拒否しているにもかかわらず、コンテナがインターネットから到達可能になる場合があります。これは、ほかの対策をすべて正しく行った人にも起こります。コンテナのポートを公開する前に、Docker のポートが ufw を無視する理由を読んでください。

パスワードを有効にした SSH。 パブリックサーバーで /var/log/auth.log を読むと、Failed password for root from 203.0.113.10 port 54312 ssh2 のような行が昼夜を問わず数千件見つかります。ボットは、よく使われるユーザー名とパスワードを順番に試します。パスワードログインが有効で、root アカウントによるログインも受け入れているなら、攻撃者に必要なのはそれだけです。鍵認証だけにして root ログインを無効にすれば、その通信は無視できるノイズになります。

1 つの秘密鍵をどこでも使うこと。 すべてのノート PC とすべてのサーバーに同じ鍵をコピーすると、1 台の盗難ノート PC からすべてにアクセスできてしまいます。また、SSH 鍵は期限切れにならないため、2 年前に請負業者へ渡した鍵が現在も使える可能性があります。ユーザーごと、マシンごとに 1 つの鍵を用意するのに費用はかからず、1 つの盗難鍵で到達できる範囲を制限できます。

誰も更新していないパッケージ。 Web サーバーやアプリケーションフレームワークに対して公開された CVE は、攻撃方法を示す公開情報になります。スキャナーは数日以内に、その脆弱性の有無をテストし始めます。セキュリティ更新は利用できる最も安価な防御策であり、自動実行も可能です。Ubuntu の自動セキュリティ更新を参照してください。

漏えいした Secret。 データベースのパスワードや API キーは .env ファイルに保存されます。これらのファイルが公開リポジトリに commit されたり、誤ったディレクトリを参照する Web サーバーから配信されたりします。AI コーディングエージェントのコンテキストに貼り付けた情報も、ログに記録される可能性があります。この問題については、エージェントから Secret を遠ざける方法を参照してください。

すべてを root として実行すること。 アプリケーションを root として実行すると、アプリケーション内の 1 つのバグだけでマシン全体を制御されます。サーバー内部に、その影響の拡大を止める境界が残っていないためです。

担当する作業

以下はすべてハイパーバイザーの作業ではありません。すべてあなたの管理範囲にあり、VPS の安全性を左右する作業です。

サーバーが起動する時点で、プロバイダー側の作業はすでに完了しています。初日はあなたの作業に約 1 時間かかり、その後は月に数分で済みます。まだ選択肢を比較している場合は、VPS とは実際に何かで、これらすべての基礎となる仕組みを説明しています。

FAQ

同じ物理サーバー上の別の顧客が、私のファイルを読み取ることはできますか?

いいえ、KVM VPS ではできません。サーバーは独自の kernel と仮想ディスクを持つ仮想マシンであり、ホストが割り当てた物理メモリ領域も専用に使用します。プロセッサは、その領域の外部へのアクセスをブロックします。ゲスト間で共有されるファイルシステムはないため、隣接するサーバー内のファイル権限が、あなたのサーバー内で意味を持つこともありません。OpenVZ や LXC などのコンテナベースのプランはホストの kernel を共有するため、分離境界が弱くなります。購入するプランの種類を確認してください。

VPS は shared hosting より安全ですか?

分離という点では、安全です。shared hosting では、1 つの operating system 上で多数のサイトが動作し、境界はファイル権限だけです。そのため、別のアカウントの設定ミスによってファイルが公開される場合があります。VPS では、境界が仮想マシンになります。一方、shared hosting のパッチ適用はホストが行いますが、unmanaged VPS のパッチ適用は利用者が行います。更新を実際に適用し、ポートを閉じる場合に限り、VPS はより安全です。

hosting provider は私のデータを読み取れますか?

原理上は可能であり、VPS 製品によってこの点が変わることはありません。ディスクイメージは provider のハードウェアに保存され、コンソールから実行中のマシンを画面レベルで操作でき、rescue mode ではディスクを接続した別のシステムを起動できます。ホストから読み取られたくないデータがある場合は、書き込む前にアプリケーション内で暗号化してください。ゲスト内のディスク暗号化でも、サーバーの実行中は key がメモリに残ります。そのため、provider を信頼する必要がある点は変わりません。

VPS が breached される最も一般的な方法は何ですか?

圧倒的に多いのは、公開されたサービスまたは弱い SSH ログインです。自動スキャナーはすべての公開 IP アドレスを継続的に探索します。そのため、パスワードなしで 0.0.0.0 に bind されたデータベースや、デフォルトの認証情報のまま公開された管理パネルは、数か月ではなく数分で見つかります。公開サーバー上の /var/log/auth.log には、その SSH 側の状況が表れます。世界中のアドレスから、Failed password for root 行が繰り返し記録されます。hypervisor escape も存在しますが、高価値の標的を狙う研究レベルの攻撃です。通常の breaches の原因ではありません。

#vps#security#isolation#hypervisor#shared-hosting