PHP2Shell脆弱性の侵害調査と対策記録

ConoHa VPS(AlmaLinux 8.10)における「PHP2Shell(CVE-2026-109618 / CVE-2026-109619)」脆弱性の侵害有無調査(フォレンジック)および恒久対策・多層防御設定を実施した際の作業報告書・計画書・AI対話ログの記録です。

※セキュリティ保護のため、具体的なドメイン名(URL)、ホスト名、IPアドレス、カスタムSSHポート番号等はすべてダミー表記(example.com, 203.0.113.10, XXXX 等)に伏せています。


1. フォレンジック調査結果および対策完了報告書 (walkthrough.md)

実施日時: 2026年10月28日
対象サーバー: ConoHa VPS (203.0.113.10(サーバーIP) / AlmaLinux 8.10)

1-1. 結論サマリー(侵害の有無)

結論:外部からの攻撃スキャン試行は2回ありましたが、すべて不発に終わっており、サーバーへの侵入・改ざん・被害は一切ありません(シロと断定できます)。

発見された攻撃試行(2件)と不発に終わった理由

ログを詳細に突合した結果、PHP2Shell の公開(10月21日)以降、以下の 2回の自動スキャン/攻撃試行 が記録されていました。

発生日時 (JST) 送信元IP リクエスト内容 サーバー側の挙動と結果
2026/10/23 15:24:02〜28 192.0.2.101(攻撃元IP-1) GET / (200)
POST /index.php (404)
POST /index.php (503)
大量POSTにより PHPのリクエスト初期化時に128MBメモリ上限到達(Allowed memory size exhausted in Unknown on line 0)➔ ワーカーが即座に終了(code 70)し 503 で切断。
2026/10/25 12:57:39〜41 192.0.2.102(攻撃元IP-2) GET / (200)
POST /index.php (404)
POST /index.php (503)
同上(ワーカーが code 70 で即座に終了・再生成され、503 で切断)。

なぜ被害を受けずに済んだのか?

  1. トップ階層に /var/www/html/index.php が存在しなかったため:
    攻撃ボットは決め打ちで /index.php に対して攻撃リクエストを送っていましたが、当サーバーのドキュメントルート直下は index.html であり、/index.php が存在しなかった(AH01071: Primary script unknown)ため、スクリプト実行や後続リクエストによる Use-After-Free の悪用が成立しませんでした。
  2. ファイルシステム・OS領域に改ざんやバックドアが一切存在しないことを確認:
    • Web領域の ctime(タイムスタンプ偽装が不可能なinode変更時刻)検査:
      10月21日以降に変化があったのは、WordPress標準のサイトヘルスチェック(wp-cron.php)と FSWiki のアクセスログのみで、不正な .php ファイル(Webシェル)の作成や既存ファイルの改ざんは 0件 でした。
    • 一時ディレクトリ・永続化領域の検査:
      /tmp, /var/tmp, /dev/shm、各ユーザーの crontab、/etc/passwd、/root/.ssh/authorized_keys、SSHログイン履歴(last)のすべてにおいて異常は 0件 でした。

1-2. 実施した対策内容(恒久対策+多層防御)

① PHPパッケージのセキュリティアップデート(恒久対策)

AlmaLinux 8 AppStream リポジトリより、2026年10月21日付でリリースされた PHP2Shell 修正パッチ(CVE-2026-109618 / CVE-2026-109619 対応) を適用しました。

  • 更新前: php-7.4.33-4.module_el8.10.0+4209+2ed16ff0
  • 更新後: php-7.4.33-8.module_el8.10.0+4321+cf5fd4bb

RPM Changelog によるパッチ適用確認結果:

* 水 10月 21 2026 Jitka Plesnikova <jplesnik@redhat.com> - 7.4.33-8
- Avoid state corruption via bailout
  CVE-2026-109618, CVE-2026-109619

② PHP設定(/etc/php.ini)および PHP-FPM(/etc/php-fpm.d/www.conf)の堅牢化

今後、未知の脆弱性が発見された場合にもリモートシェル起動(RCE)やメモリ汚染を防ぐため、以下の多層防御設定を追加しました(変更前の設定は .bak.20261028 としてバックアップ済み)。

設定ファイル 項目 変更前 変更後 対策効果
/etc/php.ini disable_functions (未設定) exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec 万が一PHPコード実行を許しても、OSコマンド(シェル)の起動をブロック
/etc/php.ini expose_php On Off HTTPヘッダー(X-Powered-By)からPHPバージョン情報を隠蔽
/etc/php-fpm.d/www.conf pm.max_requests ;500 (無効) 500 (有効) ワーカープロセスを500リクエストごとに定期再起動し、メモリ状態の長期残留を防止

1-3. サービス再開と動作確認結果

php-fpm および httpd を起動し、すべてのサービスが最新のパッチ適用済みプロセスで正常稼働していることを確認しました。

  • トップページ (https://example.com/): HTTP/1.1 200 OK
  • WordPress (https://www.example.com/blog/): HTTP/1.1 200 OK(X-Powered-By ヘッダーの非表示も確認)
  • FSWiki (https://example.com/tips/wiki.cgi): HTTP/1.1 200 OK
  • MediaWiki (https://www.example.com/tips_/index.php): HTTP/1.1 200 OK
  • SVN / Git リポジトリ (https://repo.example.com/svn/): 正常応答(SVN/1.10.2 稼働確認)

2. 調査・対策計画書 (implementation_plan.md)

2-1. 「PHP2Shell」脆弱性の概要

PHP2Shell は、2026年10月21日に公開された PHP コア(処理系)における極めて深刻なリモートコード実行(RCE)脆弱性(CVSS 9.2 Critical)の通称です。

  • CVE-2026-109618: メモリ不足(OOM)エラー発生時の処理(longjmp() 等)において、未初期化のメモリ領域が解放・参照されることでメモリ破損や任意コード実行に至る脆弱性。
  • CVE-2026-109619: 致命的エラー処理の過程でグローバル状態が解放済みメモリを指したまま残留し、同一の php-fpm ワーカー等で処理される後続リクエストで悪用される Use-After-Free 脆弱性。
  • 特徴と危険性:
    WordPress などのアプリケーションコードが動く「前」の段階(PHPエンジンのリクエスト処理・エラー処理フェーズ)で発動するため、PHP が稼働している Web サーバー全体(PHP 5.4 〜 8.5)が広範囲に影響を受けます。

2-2. 作業全体の進め方(ロードマップ)

サーバー停止状態から、起動直後に外部から攻撃を受けたり、万が一潜伏している不正プログラムが通信したりするのを防ぐ手順で安全に進めました。

[STEP 0: サーバー起動とWeb通信の一時遮断]
  ↓
[STEP 1: 侵害有無の調査(フォレンジック調査)]
  ↓
[STEP 2: PHP2Shell 対策(アップデート&設定強化)]
  ↓
[STEP 3: Webサービス再開と動作確認]

2-3. 各ステップの詳細内容

【STEP 0】サーバー起動と Web 通信の一時遮断(安全確保)

  1. ユーザー作業: ConoHa コントロールパネルより VPS(203.0.113.10(サーバーIP))を起動。
  2. 一時隔離(AI作業): 起動後ただちに SSH(ポート XXXX(カスタムSSHポート))で接続し、調査と対策が完了するまでの間、httpd および php-fpm サービスを一時停止。これにより、調査中に外部から攻撃リクエストが入るのを完全に防止。

【STEP 1】すでに影響(侵害)を受けていないかの調査

サーバー停止前までのログおよびファイルシステムを徹底的に検査し、攻撃試行や侵入の痕跡(IoC)がないか確認します。

  1. PHP2Shell 特有の攻撃兆候(クラッシュ・OOMログ)の検査
    • PHP2Shell の攻撃では、意図的にメモリ不足(OOM)や致命的エラーを引き起こしてメモリを破壊するため、php-fpm ワーカーのクラッシュ(SIGSEGV / segfault)が多発する特徴があります。
    • 調査対象:
      • /var/log/php-fpm/error.log、www-error.log
      • /var/log/httpd/error_log、example.com-error_log
      • /var/log/messages および journalctl(カーネルの segfault や OOM Killer 発動履歴)
  2. Webアクセスログの不審アクセス調査
    • 調査対象: /var/log/httpd/*access_log
    • 特に脆弱性公開日(2026年10月21日)以降を中心に、異常に巨大なリクエスト、不審な POST リクエスト、存在しない .php ファイルや Web シェル名へのアクセスがないか抽出。
  3. Web領域(/var/www/html)の改ざん・不正ファイル(Webシェル)検査
    • 直近で新規作成・更新されたファイル(特に .php, .sh, .cgi, .ico 等)の洗い出し。
    • 難読化されたコードや危険な関数(eval(, base64_decode(, shell_exec(, passthru(, system( 等)を含む不審な PHP ファイル(Webシェル)が設置されていないかスキャン。
  4. OSレベルの不正侵入・バックドア(永続化)の検査
    • 一時ディレクトリ(/tmp, /var/tmp, /dev/shm)に不審な実行ファイルやスクリプトがないか確認。
    • apache ユーザーや root ユーザーの crontab、/etc/cron*、/etc/systemd/system/ に見覚えのない自動実行タスクがないか確認。
    • /etc/passwd の不正ユーザー追加や、~/.ssh/authorized_keys の改ざん有無を確認。
    • last / lastb / /var/log/secure による不正ログイン履歴の確認。

【STEP 2】PHP2Shell 脆弱性の対策(アップデート&多層防御)

  1. PHP パッケージのセキュリティアップデート
    • 現在インストールされている PHP バージョンと導入元リポジトリを確認。
    • Red Hat / AlmaLinux による CVE-2026-109618 / CVE-2026-109619 バックポート修正済みパッケージへ dnf upgrade "php*" でアップデート。
    • rpm -q php-cli --changelog 等で当該 CVE の修正が含まれていることを確認。
  2. PHP 設定(php.ini / php-fpm)の堅牢化(ハードニング)
    • OSコマンド実行関数の無効化: php.ini の disable_functions に、Web経由でのシェル起動に使われる危険な関数(exec, passthru, shell_exec, system, proc_open, popen 等)を追加。
    • バージョン情報の隠蔽: expose_php = Off を設定し、HTTPレスポンスヘッダーからPHPバージョンを隠蔽。
    • ワーカープロセスの定期リフレッシュ: php-fpm のプール設定(/etc/php-fpm.d/www.conf)にて pm.max_requests = 500 を設定し、メモリ状態の長期残留を防止。

3. 対話ログ(2026年10月28日)

👤 ユーザー
コノハのサーバーをメンテしてもらっていました。
覚えていますか?

🤖 AI (Antigravity)
はい、しっかり覚えています!
2026年7月に実施した、旧サーバー(CentOS 7)から ConoHa VPS(AlmaLinux 8.10 / IP: 203.0.113.10(サーバーIP))への移設・統合およびメンテナンスですね。

当時の主な構成・作業内容は以下の通りでした:
・対象ドメイン: example.com(www含む)および repo.example.com
・SSH接続: セキュリティ強化のためポートを XXXX(カスタムSSHポート) に変更(22番ポートは閉塞)、秘密鍵(~/.ssh/id_ed25519_migration)および ~/.ssh/config を設定済み
・Web・アプリケーション: WordPress・MySQLデータベースの移行、FSWiki(/var/www/html/tips/wiki.cgi)の Perl バージョンアップに伴う正規表現エラーの修正、Let’s Encrypt(Certbot)による HTTPS 化と自動更新タイマーの設定
・リポジトリ統合: 別サーバーで運用していた SVN / Git / hwp を同サーバーへ統合

本日はこちらの ConoHa サーバーに関して、どのようなメンテナンスやご確認をご希望でしょうか?なんでもお申し付けください!

👤 ユーザー
php2shell脆弱性わかりますか?
これの対策と、すでに影響を受けていないか知りたいです。
計画を立てて欲しい。
現在サーバーは停止しています。

🤖 AI (Antigravity)
はい、2026年10月21日に発表された PHP の深刻なリモートコード実行(RCE)脆弱性 「PHP2Shell」(CVE-2026-109618 / CVE-2026-109619、CVSS 9.2 Critical) ですね。

現在サーバーを停止していただいているのは、被害拡大を防ぐ上で非常に的確なご判断です。
「すでに影響(侵害)を受けていないかの調査」 と 「恒久対策(パッチ適用・設定強化)」 を安全に進めるための計画書を作成いたしました。
(※上記「2. 調査・対策計画書」を提示)

👤 ユーザー
(計画書 implementation_plan.md を承認・Proceed)

🤖 AI (Antigravity)
サーバーの起動を確認いたしました!
ただちに STEP 0(httpd および php-fpm の一時停止によるWeb遮断) と、現在のPHPバージョンの確認コマンドを実行いたしました。
(中略)
PHP2Shell 脆弱性(CVE-2026-109618 / CVE-2026-109619)に関するフォレンジック調査(侵害有無の確認)と、セキュリティパッチ適用・設定強化、およびWebサービスの再開・動作確認がすべて完了いたしました。(※上記「1. フォレンジック調査結果および対策完了報告書」を提示)

めでたし。

Follow me!