AIに見張らせる?Kubernetesで自動切り替え?「止まらない」と「破られない」は別の話

AIに見張らせる?Kubernetesで自動切り替え?「止まらない」と「破られない」は別の話

PHPの重大な穴(PHP2Shell)の夜、こんなアイデアが浮かびました。

「エージェント(AI)にサーバーを常に見張らせて、異常があったら自動でサイトを落とすのはどうだろう」
「Kubernetesを組んで、1が落ちたら2が起動する、を作るのは?」

考えてみると、片方はとても効いて、片方は思ったほど効かないことが分かりました。

見張り役は、2種類に分けると効く

① ニュースの見張り(いちばん効く)

PHPの公式発表や脆弱性の情報を数分おきに見て、「重大」が出たら自動でサイトを閉じ、スマホに知らせる。

夜中に公表されても、攻撃が本格的になる前に閉じられます。
今回、私が手でやった「入口で閉じる」を、そのまま自動にする形です。

AIに見張らせる?Kubernetesで自動切り替え?「止まらない」と「破られない」は別の話

ここで大事なのは、閉じる・知らせるは単純なプログラムで十分ということ。
AIの出番は、「この発表は自分のサイトに関係あるか」の判断や、朝のまとめくらいです。確実に動いてほしい部分は、迷わない仕組みにしておきます。

② サーバーの異常の見張り

  • PHPのファイルが勝手に増えた・変わった
  • 知らない管理者が増えた
  • 急に重くなった

こうした変化を見つけたら知らせる、という見張りです。

ただし弱点があります。

  • 気づいたときには、もう入られている:データを抜くのは数秒。②は「防ぐ」ではなく「広げない」ための仕組み
  • 見張り役も消される:同じサーバーの中に置くと、入った犯人に止められる。見張りは外に置く
  • まちがえて閉じる:勘違いでお店のサイトが止まるのも事故。自動で閉じる条件は厳しめに

Kubernetesの自動切り替えは「止まらない」ための仕組み

「1が落ちたら2が起動する」は、サイトを止めないためには強力です。
でも、今回のような穴には、思ったほど効きません。

  • 代わりに立ち上がる2も、同じPHPの同じ版で動いている → 同じ手口ですぐやられる
  • そもそも乗っ取りは「落ちない」ことが多い。犯人はこっそり居座るので、1は元気に動いたまま

同じ鍵の家を何軒建てても、同じ合鍵で全部開いてしまうのです。

AIに見張らせる?Kubernetesで自動切り替え?「止まらない」と「破られない」は別の話

それでもコンテナが効くところ

KubernetesやDockerのようなコンテナの仕組みには、別の良さがあります。

  • サイトごとに部屋を分けられる:1つ破られても、そこで止まる
  • 修正版への入れ替えが速い:修正済みのひな形を作れば、数分で全部入れ替えられる
  • 汚れたら作り直せる:まっさらなひな形から立ち上がるので、仕込まれた裏口も消える(データは別に守る)

数サイトの規模なら、Kubernetesは大がかりすぎます。管理の手間そのものが、新しい穴になります。
まずはVPS1台にDockerでサイトごとのコンテナを並べる、くらいがちょうどいいと感じました。

守りたいものごとに、効く手は違う

守りたいもの 効く手
止まらないこと Kubernetesの自動切り替え
破られないこと 早く修正版にする・入口で人を絞る・ニュースの見張り
破られても広げないこと サイトごとに部屋を分ける・異常の見張り

「何から守りたいのか」を先に決めると、道具を選びまちがえずにすみます。

今回のPHPの穴について、まず自分のサイトでできることは、こちらにまとめました。

PHPの穴はエンジンにあった レンタルサーバーのWordPressで、自分にできること・できないこと

ブログ

BLOG

PAGE TOP