AIに見張らせる?Kubernetesで自動切り替え?「止まらない」と「破られない」は別の話
PHPの重大な穴(PHP2Shell)の夜、こんなアイデアが浮かびました。
「エージェント(AI)にサーバーを常に見張らせて、異常があったら自動でサイトを落とすのはどうだろう」
「Kubernetesを組んで、1が落ちたら2が起動する、を作るのは?」
考えてみると、片方はとても効いて、片方は思ったほど効かないことが分かりました。
見張り役は、2種類に分けると効く
① ニュースの見張り(いちばん効く)
PHPの公式発表や脆弱性の情報を数分おきに見て、「重大」が出たら自動でサイトを閉じ、スマホに知らせる。
夜中に公表されても、攻撃が本格的になる前に閉じられます。
今回、私が手でやった「入口で閉じる」を、そのまま自動にする形です。

ここで大事なのは、閉じる・知らせるは単純なプログラムで十分ということ。
AIの出番は、「この発表は自分のサイトに関係あるか」の判断や、朝のまとめくらいです。確実に動いてほしい部分は、迷わない仕組みにしておきます。
② サーバーの異常の見張り
- PHPのファイルが勝手に増えた・変わった
- 知らない管理者が増えた
- 急に重くなった
こうした変化を見つけたら知らせる、という見張りです。
ただし弱点があります。
- 気づいたときには、もう入られている:データを抜くのは数秒。②は「防ぐ」ではなく「広げない」ための仕組み
- 見張り役も消される:同じサーバーの中に置くと、入った犯人に止められる。見張りは外に置く
- まちがえて閉じる:勘違いでお店のサイトが止まるのも事故。自動で閉じる条件は厳しめに
Kubernetesの自動切り替えは「止まらない」ための仕組み
「1が落ちたら2が起動する」は、サイトを止めないためには強力です。
でも、今回のような穴には、思ったほど効きません。
- 代わりに立ち上がる2も、同じPHPの同じ版で動いている → 同じ手口ですぐやられる
- そもそも乗っ取りは「落ちない」ことが多い。犯人はこっそり居座るので、1は元気に動いたまま
同じ鍵の家を何軒建てても、同じ合鍵で全部開いてしまうのです。

それでもコンテナが効くところ
KubernetesやDockerのようなコンテナの仕組みには、別の良さがあります。
- サイトごとに部屋を分けられる:1つ破られても、そこで止まる
- 修正版への入れ替えが速い:修正済みのひな形を作れば、数分で全部入れ替えられる
- 汚れたら作り直せる:まっさらなひな形から立ち上がるので、仕込まれた裏口も消える(データは別に守る)
数サイトの規模なら、Kubernetesは大がかりすぎます。管理の手間そのものが、新しい穴になります。
まずはVPS1台にDockerでサイトごとのコンテナを並べる、くらいがちょうどいいと感じました。
守りたいものごとに、効く手は違う
| 守りたいもの | 効く手 |
|---|---|
| 止まらないこと | Kubernetesの自動切り替え |
| 破られないこと | 早く修正版にする・入口で人を絞る・ニュースの見張り |
| 破られても広げないこと | サイトごとに部屋を分ける・異常の見張り |
「何から守りたいのか」を先に決めると、道具を選びまちがえずにすみます。
今回のPHPの穴について、まず自分のサイトでできることは、こちらにまとめました。
TAG
