侵害対応で最も大きなコストは、復旧そのものより「何が起きたか分からない状態」を解消することにある。だから再発防止では、完璧な防御を目指す前に、侵入されにくく、異常に早く気づき、復旧できる状態を作る。

小規模チームでも優先度が高いものから進めればよい。

優先度1:管理経路を絞る

  • SSHは鍵認証を使い、パスワードログインを止める
  • rootの直接ログインを禁止する
  • 管理者アカウントを共用しない
  • 不要なユーザー、ポート、サービスを削除する
  • 管理画面には多要素認証を設定する

「使っていないけれど残している」が、最も避けたい状態だ。使わない入口を閉じることは、新しいセキュリティ製品を入れるより効果が大きいことがある。

優先度2:秘密情報をサーバとコードから切り離す

パスワード、APIキー、SMTP認証、JSON鍵などは、漏えいを前提に更新できる設計にする。

  • 秘密情報をGitリポジトリへ入れない
  • 公開ディレクトリやスクリーンショットに写さない
  • 用途ごとに認証情報を分ける
  • 必要最小限の権限だけを付与する
  • 発行日、用途、保管場所、失効方法を台帳化する

特にサービスアカウントは、人の退職や担当変更とは別に残り続ける。誰のための鍵ではなく、何の処理に必要な鍵かを記録しておく。

優先度3:更新とバックアップを仕組みにする

CMS本体、プラグイン、テーマ、OS、コンテナイメージは、放置するほどリスクが上がる。すべてを即日更新できない場合でも、更新確認の担当と頻度を決める。

バックアップは「ある」だけでは足りない。

  • データベースとアップロードファイルを含める
  • サーバ本体と別の場所に保管する
  • 復元手順を文書化する
  • 定期的に復元テストをする

侵害の可能性があるサーバから作ったバックアップは、そのまま安全とは限らない。復旧用バックアップの世代管理も必要になる。

優先度4:監視は少なく始めてよい

大規模な監視基盤がなくても、次の通知だけで初動は大きく改善する。

  • CPU、メモリ、ディスク使用率のしきい値通知
  • サイト死活監視
  • 管理者ログインや権限変更の通知
  • バックアップ失敗の通知
  • 不要なサービス起動や不審な外部通信の定期確認

今回の事象でも、リソースの異常が早期発見の手掛かりになった。監視は攻撃を完全に防ぐものではないが、被害時間を短くする。

最後に:インシデント対応は一度作れば次が速くなる

今回の対応で得た最大の教訓は、「誰が、どのサービスを、どの認証情報で動かしているか」を普段から把握しておく重要性だった。

緊急時に必要になるのは、複雑な手法ではない。連絡先、管理権限、バックアップ、停止判断、認証情報の再発行手順。この五つを短い手順書にしておくだけで、対応品質は大きく変わる。

侵害を完全にゼロにすることは難しい。しかし、入口を減らし、異常を早く見つけ、秘密情報を速やかに失効し、復旧できる状態を維持することはできる。それが、小規模なWeb運用で最も強い防御になる。