サイトがハッキングされたら:発見、駆除、強化、再インデックス
1. ハッキング後の最初の疑問:どうやって気づくのか
まず境界を整理します。セキュリティ基準では事前の防御策の設定方法を扱い、インデックス診断ではインデックス異常の一般的な調査方法を扱います。本記事は事後対応のみを扱い、異常に気づいた瞬間からインデックス回復、振り返りが終わるまでの一連の流れとスケジュールを解説します。防御策をどれだけ整えても確率が下がるだけで、ハッキングされないわけではありません。だからこそ事後対応の流れは、サイトを持つすべての企業が知っておくべきものです。
気づくきっかけは通常4つあり、多くのB2Bサイトは最初の2つで異変に気づきます。
| 気づくきっかけ | 具体的な現れ | よくある発見経路 |
|---|---|---|
| 検索結果にスパムページが表示される | ブランド名で検索するとギャンブル、医薬品、模倣ブランドの結果が出る | 自分でブランド名を検索、顧客からの連絡 |
| Search Consoleのセキュリティ通知 | 「ハッキングされたコンテンツを検出」といった通知が届く | Search Consoleのメールとサイト内メッセージ |
| 顧客からリダイレクトの報告 | 検索エンジンからサイトに入ると見知らぬページに飛ぶ | 営業担当や既存顧客からのクレーム |
| アクセス数とログの異常 | 深夜のアクセス急増、見知らぬクローラー、管理画面への見知らぬログイン | ホストの管理画面とアクセスログ |
ここで多くの人が過小評価している事実があります。経営者自身がスパムページを見つけたときには、汚染されたコンテンツはすでに数週間インデックスされているのが普通です。企業サイトは日常の訪問者が少ないため、リダイレクトハイジャックはまず検索エンジンにクロール・インデックスされ、その後で偶然目にされることが多いのです。ですから「早期発見」という言葉よりも、毎月1回は自分のブランド名で検索して結果を確認するという習慣のほうが現実的です。この作業は月次メンテナンスチェックリストに組み込めます。所要時間は1分です。
2. 最初の1時間にやる3つのこと:まず証拠保全、次に駆除
ハッキングに気づいてからの最初の1時間にやるのは駆除ではなく、3つの準備です。順序を逆にしてはいけません。
| アクション | 具体的なやり方 | 目的 |
|---|---|---|
| スナップショットによる証拠保全 | サイトのファイルとデータベースを完全にパッケージ化して保存し、サーバーの現在時刻を記録する | 侵入の証拠を残し、駆除の過程で手がかりを失わないようにする |
| 全パスワードの変更 | ホスト、データベース、管理画面、FTP、SSH、ドメイン、メールアカウントをすべて新しいパスワードに変更する | 攻撃者の侵入経路をすべて断つ |
| 感染範囲を特定する | 単一サイトか同一ホスト上の複数サイトか、メールやドメインアカウントにも波及しているかを確認する | 対応の規模を決め、関係者への通知が必要か判断する |
なぜフォレンジックをクリーンアップより先に行うのか。理由は2つある。第一に、侵入経路の証拠(どのファイルが変更され、いつ変更され、どのアカウントからログインしたか)は、ファイルを削除したりディレクトリを上書きしたりすると消えてしまい、後から侵入原因を特定しようとしても推測しかできなくなる。第二に、いきなりファイルを操作するとバックドアスクリプトに気づかれる可能性があり、一部のバックドアは削除を検知するとデータ破壊を引き起こしたり、同一ホスト上の他のサイトに感染を広げたりする。フォレンジックパッケージはサイト外のローカルまたはクラウドストレージに保存し、感染したサーバー上に残さないこと。
パスワード変更は一度にすべて行う。1つでも漏らせばクリーンアップが無駄になる。よくある漏れはFTPとデータベースのアカウントで、管理画面のパスワードしか変えていない人が多い。感染範囲を判断する際は同一ホスト上の複数サイトに注意する。1台のサーバーに本番サイト、テストサイト、旧サイトが載っている場合、攻撃者は最も弱いサイトから侵入する。本番サイトだけをクリーンアップして同一ホスト上の他のサイトを放置すると、数日後に再び改ざんされる。
三、クリーンアップの3層:ファイル、データベース、バックドア
クリーンアップは3層に分けて進める。層ごとに検査対象と方法が異なる。
| 階層 | 検査対象 | 操作方法 |
|---|---|---|
| ファイル層 | プログラムのコアファイルと最近変更されたファイル | 公式インストールパッケージとコアファイルを照合し、更新日時の新しい順に最近の変更を調査する |
| データベース層 | 注入されたスクリプトと不審なアカウント | 記事内容のスクリプトタグを検索し、管理者アカウント一覧を確認する |
| バックドア層 | webshellと異常なスケジュールタスク | 実行可能ファイルの更新日時とコードの特徴をスキャンし、定期タスクを確認する |
バックドアが潜む場所にはパターンがある:
| 潜伏場所 | 識別の手がかり | 対応方法 |
|---|---|---|
| アップロードディレクトリ | ディレクトリに.phpファイルが出現(通常は画像とドキュメントのみ) | 削除し、ディレクトリの実行権限を制限する |
| テーマとプラグインのディレクトリ | コアファイルの末尾に長いコードが追加されている | 公式パッケージと照合して置き換える |
| サイトのルートディレクトリ | ランダムな名前のphpファイル、更新日時が侵入期間と一致 | 確認後に削除する |
| キャッシュと設定ファイル | 内容にbase64の長い文字列とeval構造が出現 | クリーンアップ後にサイト全体で同様の特徴を検索する |
3層の中でバックドア層が最も見落とされやすい。スパムページと注入コンテンツだけを削除し、バックドアファイルを1つ残すと、数日後にページが再び出現する。これが「クリーンアップしたのに再発する」最も一般的な原因であり、多くの人が「ハッキングは除去できない」と誤解する本当の理由でもある。基本はサイト全体を更新日時で並べ替え、侵入期間と一致するファイルを1つずつ確認すること。判断に迷うファイルは公式パッケージと照合する。同じ層の原則がもう1つある。クリーンアップ完了後にもう一度スキャンし、3層すべてに残留がないことを確認してから次のステップに進む。
四、バックアップからの復元:条件と落とし穴
バックアップ体制が整っていれば、復旧は階層ごとのクリーンアップより速いことが多い。ただし復旧には3つの前提条件があり、1つでも欠けると進められない。
| 条件 | 判定方法 | 満たさない場合の対応 |
|---|---|---|
| 復旧ポイントが感染時刻より前である | ログとファイルの更新時刻から感染期間を特定する | 手作業による階層ごとのクリーンアップしかない |
| バックアップが完全で利用可能である | その場で完全性を検証し、できれば復旧訓練を済ませておく | ハイブリッド対応:ファイル部分は復旧し、データベースは手作業でクリーンアップ |
| 復旧後すぐに強化する | コンポーネント更新、パスワード変更、脆弱性修正を一度に完了させる | そうしなければ二度目の被害は時間の問題 |
最大の落とし穴は、復旧ポイントが感染時刻より後になることだ。すでにバックドアが仕込まれたバックアップでサイトを復旧するのは、侵入者を招き戻すのと同じである。感染時刻を判断する手がかりには、不審なファイルの更新時刻、アクセスログに初めて現れた見慣れないIPからの管理画面ログイン、スパムページが初めてインデックスされた時刻などがある。これが2時間目のフォレンジックで取得したデータの価値でもある。もう1つのよくある誤りは、復旧後にパスワードを変更しないことだ。パスワードがデータベースに平文や弱いハッシュで保存されているケースは少なくなく、攻撃者が持つ古いパスワードが依然として有効な可能性がある。
五、5つの強化項目と侵入経路の振り返り
クリーンアップまたは復旧の後は、必ず5つの強化項目を完了させる。そうしなければ再び攻撃を受ける可能性が高い。
| 強化項目 | 具体的なやり方 | 優先度 |
|---|---|---|
| すべてのコンポーネントを更新 | コア、テーマ、プラグインを最新バージョンに上げる | 最高 |
| デフォルトのパスとアカウントを変更 | デフォルトの管理画面URLを変更し、デフォルトの管理者アカウントを削除または改名する | 高 |
| セキュリティプラグインを最小限にする | 主力のセキュリティプラグインを1つ導入し、ファイル変更の監視を有効にする | 高 |
| 管理画面ログインを制限 | ログインのレート制限、二要素認証、必要に応じて地域制限 | 中 |
| ファイル権限を厳格化 | 設定ファイルとアップロードディレクトリを最小権限の原則で設定する | 中 |
振り返りでは4つの問いに答え、1ページの文書にまとめて保管する。侵入はどこから入ったか(期限切れのプラグイン、リスト型攻撃で破られた弱いパスワード、同じホスト上の他サイトの侵害)。なぜ以前は発見できなかったか(どの監視が欠けていたか)。発見からクリーンアップ完了までどれだけかかったか。バックアップと復旧訓練は今回の事故で機能したか。この文書の価値は次回にある。ほとんどのサイトは生涯に一度ならず攻撃を受ける。同じ種類の穴を二度目に破られるのは管理上の問題である。監視アラートに不足があれば補い、その不足は月次メンテナンスのチェック項目と一致させる。
六、Googleへの申請とスパムページの収束
申請のタイミングの原則はただ1つ。クリーンアップ完了後に提出すること。途中で提出すると期間が延びる。Googleの再審査で悪意あるコンテンツが再び見つかると待ち時間がリセットされ、数日待ってから提出するよりはるかに遅くなる。
| ステップ | アクション | 説明 |
|---|---|---|
| 1 クリーンアップの完了を確認 | 3層のクリーンアップが完了し、再スキャンで残留なし | Search ConsoleのサンプルURLを含め、1つずつ確認する |
| 2 サイト自体を修正 | 悪意あるコンテンツの削除と脆弱性の修正 | 公式は、再審査時にサイトにセキュリティ問題が残っていないことを求める |
| 3 再審査を提出 | Search Console のセキュリティ問題セクションで送信する | 実施した対策とタイムラインを添えて説明する |
| 4 審査を待つ | 所要期間は通常数日から2週間 | 途中で重複して送信しない |
注入されたスパムページがすでにインデックスされている場合、対処法にはコツがあります。404 より 410(完全削除)を返すほうが収束しやすく、Google は 410 の削除処理が明らかに速いです。同時に Search Console の削除ツールで、最も重要なスパム結果を緊急非表示に申請します。その後は週に一度の進捗チェックを行い、site コマンドとブランド名検索で残存数を確認します。インデックス数が数百件から一桁まで減るには通常2〜4週間かかるので、その間、進みが遅いからといって審査を何度も再送信しないでください。
七、被害評価:戻るもの、戻らないもの
タイムラインを上司に示す前に、各段階の典型的な期間と合格基準を明確にしておきましょう。「なぜまだ復旧しないのか」と何度も聞かれずに済みます。
| フェーズ | 典型的な商談期間 | 合格基準 |
|---|---|---|
| クリーンアップと強化 | 1〜3 日 | 再スキャンで悪意あるファイルやスクリプトの残存なし |
| 再インデックスとセキュリティ警告の解除 | 1〜4週間 | セキュリティ通知が消え、スパム検索結果がほぼ一掃される |
| 順位の回復 | 1〜2か月 | 主要キーワードがインシデント前の位置付近に戻る |
被害の可逆性は2つのケースに分かれます。スパムコンテンツを載せられただけで、手動によるペナルティ通知を受けていないサイトは、クリーンアップ後に順位が通常戻ります。明確に「人為的スパム行為」と判定されたサイト(例えば埋め込まれた隠しテキストやリダイレクトがアルゴリズムに検出されペナルティを受けた場合)は、回復期間がより長く、一部のキーワードは元の位置に戻らない可能性があります。さらに、不可逆な被害がもう1つあります。ハッキング期間中に顧客がメールや検索からスパムページをクリックした場合、その失われた信頼はインデックスの回復とともに戻ることはありません。これが第1節で発見のシグナルを強調した理由です。発見が1週間遅れるごとに、汚染範囲と顧客離れが1層ずつ増えます。
FAQ よくある質問
最後に
ハッキング対応で問われるのは技術力の高さではなく、手順の順序とチェックリストの網羅性です。最初の1時間は証拠保全を先に、削除はファイル・データベース・バックドアの3層で完了、復元ポイントは感染時刻より前であること、再審査は削除完了後に申請。各ステップに明確な行動とタイミングがあり、その場の判断に頼る場面はありません。
実践の提案は3つ。”毎月ブランド名で検索”を定期チェックに組み込む。本記事の3層削除の手順を社内ドキュメントとして保存する。復元演習の所要時間を記録に残す。事故の夜に手元に何があるかは、普段何を残したかで決まります。技術人材がいない、またはサイトの現状に合わせてこの監視とバックアップの流れを整えたい場合は、お問い合わせ。覚えておくべき判断はひとつだけ。怖いのは攻撃を受けることではなく、備えのないまま攻撃を受けることだ。
