本文へスキップ
株式会社オープンナレッジ
株式会社オープンナレッジ Open Knowledge Inc.
1. 基本と全体像

この記事の要点と4つの章のご案内

この記事の3つの要点(まずここだけ読めば安心です)に関するイメージ写真
この記事の3つの要点(まずここだけ読めば安心です)
なぜ日本全国の企業・医院・団体のホームページが次々と書き換えられているのか?に関するイメージ写真
なぜ日本全国の企業・医院・団体のホームページが次々と書き換えられているのか?
サポート終了PHPと古いCMS放置による国内サイト大量改ざんの実態と、根本からの解決策 の各章におけるテーマと要点一覧表
章構成 主なテーマ 要点と確認ポイント
1. 基本と全体像 この記事の3つの要点(まずここだけ読めば安心です) 「更新していないから安全」ではなく「放置された動的プログラム」が狙われます: 5〜10年前に制作したホームページで、サーバー上のPHP(バージョン5.x / 7.x / 8.0等のサポート終了版)やCMSプラグインがそのまま動いていると、自動巡回ボットによって数分で乗っ取られる危険があります。
2. 現場での進め方と対策 なぜ日本全国の企業・医院・団体のホームページが次々と書き換えられているのか? 改ざんされたサイトは「偽のブランド通販サイト」や「詐欺メールの送信元」に悪用されます: トップページは一見普通に見えても、検索エンジン経由でアクセスした時だけ偽のショッピング画面を表示する「条件付き改ざん(クローキング)」が多発しています。
3. 関連する制度とルール いま稼働している自社サイトの「危険度比較」と、安全な見直し手順 まずは本ページの図解と3項目チェックリストでご自身でできる範囲からお試しください。もし設定や判断に迷われたときは、過度な営業のないご相談窓口(お助け隊・お問い合わせ窓口)へいつでもご相談いただけます。
4. 詳しい技術仕様としくみ PHP-CGI 引数インジェクション(CVE-2024-4577)のバイト列解剖とRead-Only Static Edge境界検証 ——「昔作ったホームページをそのままにしている」ことが、なぜ今、自社と訪問者を傷つける最大の入り口になるのか
第1章〜第4章では、実務チェックリスト・公的制度基準・詳しい技術仕様を確認できます。
Web改ざん対策・PHP脆弱性解剖 監修・執筆:登録情報処理安全確保支援士(第007617号)・上級医療情報技師 加藤 明生

サポート終了PHPと古いCMS放置による国内サイト大量改ざんの実態と、根本からの解決策

——「昔作ったホームページをそのままにしている」ことが、なぜ今、自社と訪問者を傷つける最大の入り口になるのか

この記事の3つの要点(まずここだけ読めば安心です)

  • 01. 「更新していないから安全」ではなく「放置された動的プログラム」が狙われます: 5〜10年前に制作したホームページで、サーバー上のPHP(バージョン5.x / 7.x / 8.0等のサポート終了版)やCMSプラグインがそのまま動いていると、自動巡回ボットによって数分で乗っ取られる危険があります。
  • 02. 改ざんされたサイトは「偽のブランド通販サイト」や「詐欺メールの送信元」に悪用されます: トップページは一見普通に見えても、検索エンジン経由でアクセスした時だけ偽のショッピング画面を表示する「条件付き改ざん(クローキング)」が多発しています。
  • 03. 公開サーバーからPHPとデータベースをなくす「静的Web化(Astro+Rust)」で改ざんリスクは消滅します: 頻繁なシステム更新が難しい会社案内サイトこそ、サーバー上でプログラムを実行しない静的HTML配信へ移行することで、毎月のプラグイン保守と改ざんリスクを同時にゼロにできます。
第1章:背景と仕組みの図解

1. なぜ日本全国の企業・医院・団体のホームページが次々と書き換えられているのか?

「うちのホームページは会社案内だけで、ネット通販も個人情報入力もしていないから狙われない」と思われがちです。しかし攻撃者が求めているのは、あなたの会社が長年培ってきた「ドメインの社会的信用(検索エンジンからの評価)」と「サーバーの送信機能」です。正規の企業ドメインを乗っ取って偽の詐欺ページを何千ページも勝手に生成することで、一般の消費者を騙す踏み台にしているのです。

図1:事象の発生構造と3段階の対策フロー

従来の危険な状態:古いPHP+動的CMS放置 ・サポート切れPHP(7.x/8.0)やCVE-2024-4577 ・数年前に導入したままの未更新プラグイン ・公開サーバー上に書込可能なPHPとDBが同居 ※主な発生要因の整理 攻撃の手口:ボットによる自動侵入と改ざん ・24時間巡回するボットが脆弱性を自動検知 ・バックドア(不正PHPファイル)を密かに設置 ・検索流入時だけ偽通販サイトへ誘導(気付かない) ※初期設定と運用手順 根本解決:Astro+Rust 静的分離設計 ・公開サーバーにPHPもDBも一切置かない ・読み取り専用のHTML/CSS/WASMのみを高速配信 ・プログラム実行エンジン不在=遠隔コード実行ゼロ ※システム層での保護機構
実態 01:CVE-2024-4577の衝撃

CVSS 9.8:認証なしで遠隔から命令実行

Windows環境等のPHP-CGIにおける文字コード変換の隙を突き、ログインすら不要でサーバーを乗っ取る深刻な脆弱性が国内外で悪用されています。

実態 02:プラグインの連鎖脆弱性

本体を更新しても20個の追加機能が穴になる

動的CMSでは、お問い合わせフォームやSEO用プラグインの1つにでも脆弱性が見つかると、そこからデータベース全体が書き換えられます。

実態 03:検索結果の汚染(SEOポイズニング)

「自社名で検索すると偽ブランド品が出る」被害

管理者が直接URLを開くと正常に見えるよう偽装されるため、取引先や顧客からの指摘で初めて発覚するケースが後を絶ちません。

場面別の実務確認ポイント

ご家庭・シニア・初めて学ぶ方へ 難しい専門用語を覚える必要はありません。上の図解の「真ん中の箱(手順 02)」と、実践チェックリストの3項目を1つずつ確認するだけで十分に安全を高められます。
経営者・総務・医療や現場の責任者の方へ 比較表と実践手順をそのまま社内の点検シートとしてお使いいただけます。高額な機器契約の前に確認すべき判断基準も明記しています。
ろう者・難聴者・発達障害のある方へ 音声や動画のみに頼らず、すべて視覚的な図解と文字で完結しています。画面右上の「文字拡大」「シンプル表示」や、A4印刷にも対応しています。
情報システム担当・エンジニア・研究者の方へ 第3章にて、RFC・CVE・NIST SP 800シリーズ等の一次仕様に基づく数理モデルと、Rust Edition 2024(unsafe禁止)による検証コードを公開しています。
第2章:実践手順とセルフチェック

2. いま稼働している自社サイトの「危険度比較」と、安全な見直し手順

現在のホームページがどのような仕組みで動いているかによって、必要な対策と今後の維持コストが大きく変わります。以下の表で現状を確認してみてください。

構成タイプ改ざん・乗っ取りリスク毎月の保守・更新負担推奨される今後の対策
古いPHP(5.x / 7.x / 8.0)+ 未更新の動的CMS 極めて高い(自動攻撃ボットの即時標的) 放置状態(更新すると画面が崩れるため触れない) 早急に公開サーバーから動的PHPを撤去し、静的Web構成へ移行する
最新PHP + 毎月プラグインを手動更新している動的CMS 中〜高(ゼロデイ脆弱性や更新忘れの隙が残る) 毎月数時間〜数万円の保守・バックアップ確認が必要 ログイン画面のIP制限・パスキー化を順守するか、静的配信(Astro)へ移行する
Astro + Rust WASM 静的生成(本サイト 2026.ok.st の構成) 極小(公開サーバー上にPHPもDBも存在しない) 毎月のプラグイン更新作業ゼロ・表示速度も0.3秒以下 読み取り専用配信のため改ざん耐性が極めて高く、長期にわたり安心が続く

今日から無理なく進めるための4ステップ実践手順

手順 01(所要時間:約15分)

現状の棚卸しと「見えにくいリスク」の把握

新しい機器やソフトを購入する前に、現在使っている機器・アカウント・契約先を紙1枚に書き出します。被害の大半は「昔作ったまま誰も管理していない古い機器や共有アカウント」から始まります。

手順 02(所要時間:約30分)

費用をかけずにできる「3つの基本設定」

01 パスキー(FIDO2)または二要素認証の有効化、02 ルーター・VPN・OSの自動更新設定、03 バックアップ用外付けHDDの常時接続解除(切り離し保管)の3点を実施します。

手順 03(所要時間:約15分)

異変に気づいたときの「責めない連絡ルール」

不審なリンクを開いたり偽警告が出たりした際、「怒られるかも」と隠すことが被害を広げます。「迷ったら6秒深呼吸して手を止め、すぐ共有してくれた人を褒める」ルールを共有します。

手順 04(3ヶ月に1回・約15分)

定期的な復元テストと第三者の落ち着いた確認

季節の変わり目ごとに「バックアップから実際に1つのファイルを戻せるか」を試すとともに、退職・異動に伴うアカウント整理を行い、迷う点は専門窓口で点検します。

現場で陥りやすい3つの落とし穴と、安全な回避策

落とし穴 01:改ざんされたファイルを「手動で消しただけ」で復旧したと思い込む

一度侵入されたサーバーには、目に見えない別のフォルダやデータベース内部、定期実行タスク(cron)に複数の裏口(バックドア)が仕掛けられています。表面上の不正ファイルを削除しただけでは、数日後に必ず再改ざんされます。

落とし穴 02:制作会社に「納品後の保守契約」がないまま5年以上放置している

「制作費のみで月額保守なし」で納品された動的CMSサイトは、誰もPHPやプラグインのアップデートを行っていないケースが大半です。まずは現在のPHPバージョンとプラグイン一覧を確認してください。

落とし穴 03:テスト用に作った古いフォルダ(/test/ や /old/)をサーバーに残している

本番サイトを新しく作り直した際、同じサーバーの別フォルダに昔のWordPressや古いPHPプログラムを残していると、その古いフォルダ経由でサーバー全体が乗っ取られます。

今日からできる3項目セルフチェック(クリックして確認)

達成状況:0 / 3 項目

ご家庭や職場で現在できている項目にチェックを入れてみてください。すべてお使いのブラウザ内でのみ計算され、外部へ送信されることはありません。

上の3項目をクリックすると、現在の達成状況に応じたアドバイスが表示されます。まずは1項目ずつ順番に整えていきましょう。
理解を深める確認クイズ

会社案内やお知らせ掲載が中心のホームページにおいて、改ざん被害と毎月の保守コストを根本からなくす最も効果的な設計はどれでしょうか?

よくあるご質問と、迷ったときの判断基準

Q1. 社内に専任のシステム担当者がいないのですが、自分たちだけで始められますか?

はい、始められます。まずは費用や特別な契約を伴わない「基本の3項目(パスキー・自動更新・切り離し保管)」から1つずつ進めてみてください。途中で設定画面の見方が分からなくなったときだけ、相談窓口を頼っていただければ十分です。

Q2. 外部の営業担当者から「今すぐ専用機器(UTM等)をリース契約しないと手遅れになる」と言われました。

その場で即決せず、必ず見積書を持ち帰ってセカンドオピニオンを確認してください。公的ガイドラインや2026年SCS評価制度(★3)が求めているのは、特定メーカーの高額機器ではなく「基本的な管理の仕組み」です。

Q3. このページの内容を印刷して、職場や家族に配ってもよいですか?

もちろんです。本サイトの図解やチェックリストは、地域の企業・医院・学校・ご家庭の安全を守るための公開技術資料として掲載しています。ブラウザの印刷機能(A4縦)でそのまま読みやすく印刷できます。

4. 詳しい技術仕様としくみ:技術アーキテクチャ仕様

PHP-CGI 引数インジェクション(CVE-2024-4577)のバイト列解剖とRead-Only Static Edge境界検証

設計背景・判断基準リファレンス

本節では、CVE-2024-4577(CVSS 9.8)において Windows Shift_JIS(CP932)等の Best-Fit 文字マッピングが Unicode ソフトハイフン(0xAD)を ASCII ハイフン(0x2D)へ変換することで CGI 引数エスケープを突破するメカニズムを解剖し、これを前段で無力化する検査ロジックと静的配信設計を示す。

対象脆弱性番号
CVE-2024-4577 (CVSS v3.1: 9.8 Critical)
悪用メカニズム
Best-Fit 0xAD -> 0x2D CGI Arg Injection
危険なPHP INI指令
allow_url_include=1 + auto_prepend_file=php://input
根本対策アーキテクチャ
Astro 5 Zero-Runtime Static + Rust Edge

1. プロトコル内部構造・数理モデルと設計根拠

1. 【CVE-2024-4577 における CP932 Best-Fit Mapping の脆弱性構造】 かつての CVE-2012-1823 への対策として、PHP-CGI はクエリ文字列の先頭(デコード後)が ASCII ハイフン 0x2D(-)で始まる場合にコマンドラインオプション解析を抑止していた。しかし Windows のマルチバイト文字変換 API(WideCharToMultiByte)は、CP932(日本語 Shift_JIS)等のロケールにおいてソフトハイフン 0xAD を「最も近い文字(Best-Fit)」として ASCII ハイフン 0x2D に正規化する。この結果、HTTP層での 0x2D 検査をすり抜けた %ADd+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input が php-cgi.exe の引数配列 argv[] に直接注入され、POSTボディ内の任意のPHPコードが即時実行される。

2. 【動的CMSにおける攻撃面(Attack Surface)の指数関数的増大】 サーバー上でチューリング厳密なスクリプト解釈器(PHP)と可変ファイルシステム(wp-content/uploads 等)を同居させる構成では、プラグイン数 M に対して潜在的ガジェット連鎖が O(M^2) で増大する。これに対し、ビルド時に全ページを純粋な静的アセットへコンパイルし、不変ファイルシステム(OpenZFS readonly=on)から配信するアーキテクチャでは、RCE攻撃面が数学的にゼロ(\mathcal{A}RCE = ∅)となる。

2. 技術パラメータ・検証仕様一覧

攻撃ベクトル動的PHP / Legacy CMS の挙動Astro + Rust Static Edge の挙動リスク低減率
CVE-2024-4577 (%ADd CGI RCE) argv注入により php://input を即時コード実行 CGIインタプリタ不在・静的404/400応答で即時破棄 100% (物理消滅)
SQL Injection (Union / Blind) 動的クエリ連結の不備からDB全件漏洩・改ざん 公開エッジにRDBMS接続自体が存在しない 100% (物理消滅)
Malicious Webshell Upload 書込可能ディレクトリへ .php を配置し永続化 ZFS readonly=on かつ .php 実行ハンドラ非搭載 100% (物理消滅)
SEO Cloaking / Defacement User-Agent分岐でGooglebotに偽通販HTMLを返却 SHA-256ダイジェスト固定の静的ファイル配信 100% (改ざん検知)
3. リファレンス実装コード(crates/ok-edge-waf/src/cve_2024_4577_guard.rs) Rust Edition 2024 (#![forbid(unsafe_code)])
#![forbid(unsafe_code)]

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RequestSafety {
    SafeStaticPath,
    BlockedPhpCgiBestFitInjection,
    BlockedLegacyCmsProbe,
}

/// Inspects raw URI query & path bytes for CVE-2024-4577 (0xAD soft-hyphen best-fit)
/// and legacy CMS backdoor probes before hitting the static file server.
pub fn inspect_http_target(path: &str, raw_query: Option<&str>) -> RequestSafety {
    let lower_path = path.to_ascii_lowercase();
    if lower_path.ends_with(".php")
        || lower_path.contains("/wp-admin")
        || lower_path.contains("/wp-login")
        || lower_path.contains("/xmlrpc.php")
    {
        return RequestSafety::BlockedLegacyCmsProbe;
    }

    if let Some(q) = raw_query {
        let lower_q = q.to_ascii_lowercase();
        if lower_q.contains("%ad")
            || lower_q.contains("allow_url_include")
            || lower_q.contains("auto_prepend_file")
            || lower_q.contains("php://input")
        {
            return RequestSafety::BlockedPhpCgiBestFitInjection;
        }
        for b in q.as_bytes() {
            if *b == 0xAD {
                return RequestSafety::BlockedPhpCgiBestFitInjection;
            }
        }
    }

    RequestSafety::SafeStaticPath
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn blocks_cve_2024_4577_encoded_payload() {
        let verdict = inspect_http_target(
            "/index.html",
            Some("%ADd+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input"),
        );
        assert_eq!(verdict, RequestSafety::BlockedPhpCgiBestFitInjection);
    }
}
4. 詳しい技術仕様としくみ(システム設計・数理モデル・実装例)

動的CMS/PHPランタイム攻撃面(CVE-2024-4577等)の解剖とAstro+Rust静的分離設計

プロトコル仕様・数理モデル・Rust 2024 実装コードの詳細は、専門技術モノグラフにて公開しています。

技術モノグラフを読む →
ご質問・公的制度の活用に関するお問い合わせ窓口

掲載資料に関するご質問・公的制度活用のご案内

本ページの図解や解説内容に関するご質問、経済産業省「SCS評価制度」やIPA「SECURITY ACTION・サイバーセキュリティお助け隊サービス」等の公的制度の確認方法について、落ち着いた参考窓口としてご案内しております。売り込みや営業連絡は一切行いませんので、社内勉強会やご家庭での確認資料としてご自由にご活用ください。

図解・ビジュアルの拡大表示

図表内のテキストもそのまま選択・検索可能です(ベクターSVG描画) 枠外クリックまたは ESC キーで閉じます