「WordPress」ブログ、不正コードで乗っ取られた話——Perplexity Proで復旧するまで

ブログ乗っ取り発生 Mac

本サイト「monkhimself」は、不正なコードを仕込まれ閲覧不能な状態になっていました。
AI検索「Perplexity Pro」の助けを借りて復旧し、現在は元の状態に戻っています。
今回は、私が初めて経験したブログ乗っ取り事件の発生から復旧までの顛末をレポートします。

真っ黒な画面が出現

3月25日に記事を公開した時点では、何の問題もありませんでした。通常どおり投稿でき、閲覧も可能でした。

異変が起きたのは、その後の3月某日のことです。
ブログにアクセスすると、画面が真っ黒になり、謎の英文が表示されていました。
翻訳してみると「メンテナンス中」という内容でした。
真っ黒な画面にはギョッとしましたが、「レンタルサーバーのメンテナンスだろう」と思い、そのままスルーしてしまいました。

しかし、長年利用しているレンタルサーバー「Value Domain」で、このような真っ黒で不審な表示のメンテナンス画面になったことは一度もありませんでした。この時点で気づくべきだったと、今となっては反省しています。
サーバー側も「このWebサイトは乗っ取られています」とは表示できないため、「メンテナンス中」と表示していたのでしょう。

通常のメンテナンスであれば1日もかかりませんし、そもそも真っ昼間に実施するものではありません。数日経っても「メンテナンス中」のまま——ここでようやく異常に気づきました。
気づくのが遅すぎましたね。深く反省しています。

レンタルサーバーのサポートへ連絡

おかしいと感じ、まず「Value Domain」のサポート窓口に問い合わせフォームで連絡したのが3月27日です。

すると「Value Domain」から、

不正なコードが設置されている状態です。

との返答がありました。「メンテナンス中」とばかり思い込んでいたので、大変驚きました。
Webサイトを20年以上運営してきて、「不正コードが設置された」という事態に遭遇したのは初めてです。
対応策として、以下の案内がありました。

サーバー管理画面「ツール」内の[バックアップ・復旧ソフトウェア]をクリックして遷移するページ(「JetBackup」)の「Restore & Download」にバックアップデータがあります。

この時点では「バックアップから復元すれば解決する」と楽観視しており、事態の深刻さを理解できていませんでした。

さっそく「JetBackup」を確認したところ、毎日自動バックアップを取ってはいるものの、保存期間は最長7日間でした。

残念ながら、「JetBackup」にアクセスした時点で、すでに1週間以上が経過していたのです。
経過日数を振り返ると、次のとおりです。

・黒画面を「メンテナンス中」と勘違いして放置:3〜4日
・「Value Domain」サポートへの問い合わせから返答まで:2日
・実際に「JetBackup」にアクセスするまで:3日ほど

さらに、乗っ取りが発生した日からも何日か経過しているはずです。
以上を考え合わせると、7日間分のバックアップの中に「正常な状態」のものは残っていないことは明らかでした。

その旨をサポート窓口に伝え、他の対策を問い合わせましたが、「それ以上の対応はサポート範囲外」との回答でした。

「UpdraftPlus」のバックアップも失敗

「Value Domain」のサポートでは解決できないと判明したため、次の手段として「WordPress」のバックアッププラグイン「UpdraftPlus Backup/Restore」を試みることにしました。

「WordPress」の運用開始当初から、万が一に備えてインストールしていたプラグインです。幸いにもそれまで一度も使う機会はありませんでしたが、今回がまさにその「万が一」でした。

私のブログは更新頻度が低いため、「UpdraftPlus」のバックアップ間隔は2週間に1回、過去3回分を保存する設定にしていました。つまり、最大で約1ヶ月半前まで遡れる計算です。1ヶ月半前まで戻れれば問題ないだろうと考えていました。

ところが、今回の乗っ取りが発生したのは1ヶ月半以上前だったのです。
症状が表面化したのは1ヶ月半以内でも、不正コードが侵入したのはそれより前だったようです。最も古い1ヶ月半前のバックアップから復元しても改善しなかったため確かです。

AI検索「Perplexity Pro」に依頼

「Value Domain」のサポートも、「UpdraftPlus」のバックアップも、どちらも解決に至りませんでした。
「詰んだ!」——正直、そう感じました。自分にできる手段はすべて尽きたと思ったからです。

しかしここで、新たな解決策を思いつきました。それが「AI検索」です。

半年ほど前から、私は「Google」などの従来型検索をほとんど使わなくなり、AI検索に切り替えていました。最初にメインで使っていたのは「ChatGPT」で、調べ物のほかにブログ記事の校正や HTML・CSS のコード生成にも活用していました。

その後、約半年の利用を経て、AI検索「Perplexity」の有料版「Perplexity Pro」を先月契約したことは、3月下旬の記事「AI検索『Perplexity Pro』を契約した。」に書いた通りです。

今回のWebサイト復旧には Pro 版に切り替えていたことが功を奏しました。無料版よりも高性能な Pro 版は、今回のような複雑な問題にはうってつけですから。
それでも、完全解決まで約2週間かかりました

適切なプロンプト(指示)を最初から投げかけていれば、もっと早く解決できたかもしれません。
しかし、プログラマーではない私にとって、何が原因なのかはまったく未知の世界。原因がわからなければ質問の仕方もわからず、よって試行錯誤の繰り返しでした。

データベースを確認する際に別のデータベースを見ていたりした私自身の勘違いもありました(^.^;)
人間のサポートであれば苛立つような場面でも、「Perplexity Pro」は淡々と対応し続けてくれました。AIだからこそ助かった点です。
また、早朝でも深夜でも、自分のペースで24時間いつでもタイムラグがなく即答してもらえる点も非常に助かりました。

解決までの手順

これまで AIを検索目的で使う際は、数回のやり取りで完結していました。今回のように同じスレッドで約2週間もやり取りを続けたのは初めての経験です。
おかげで、「AI検索」の使い方が少しずつ見えてきました。

最も重要なのは、指示(プロンプト)を的確に伝えることです。
AI がいくら優秀になっても、あいまいな指示ではその能力を発揮できません。人間同士とは違い、文脈から意図を推察してくれる機能は(少なくとも現在の AIには)ありません。
つまり、AIの賢さよりも、使う人間側の「言語化能力」が問われるということです。

「Perplexity Pro」とのやり取りを詳細に書き起こすと膨大な量になりますし、細かい操作手順が今後の参考になるわけでもありません。そのため、ここでは全体の流れだけをまとめます。

問題1:クローキング攻撃(真っ黒なメンテナンス画面)

この黒画面を解消するだけで、全体の半分以上の時間を費やしました。

最初は 「public_html」内の「WordPress」をインストールしたフォルダ内を調べていましたが、解決の糸口はつかめませんでした。そこで調査範囲を「public_html」の直下まで広げたところ、身に覚えのない PHP ファイル「index_1.php」が見つかりました。

「Perplexity Pro」にアップロードし確認してもらうと、これが不正コードの原因のPHPファイルであるとの判断でした。即座に削除したところ、黒画面が解消されました。

「WordPress」フォルダ内をいくら探しても解決しなかったのは当然で、問題のファイルはそもそも「WordPress」フォルダ内には存在しなかったのです。

問題2:「404 NOT FOUND」(メインコンテンツが表示されない)

メインコンテンツ部分の不具合が継続

メインコンテンツ部分の不具合が継続

しかし、これで完全解決にはなりませんでした。
黒画面は消えてサイト「monk himself」の画面は現れたものの、サイドバーやフッターは表示される一方、肝心のメインコンテンツエリアが「404 NOT FOUND」になっていました。

症状からデータベースに問題があると推測し、「Perplexity Pro」に確認箇所を尋ねたところ、「****_options」テーブルの「home」の値を確認するよう指示されました。確認してみると、そこに記録されていた URL が、本来の「monk himself」のものではありませんでした。
正しいURLを記述し直したところ、メインコンテンツエリアの「404 NOT FOUND」が解消され、ブログ記事が表示されるようになりました。

その後、各所を確認しすべての不具合が解消されていることを確認。
こうして、不正コードによる乗っ取り問題が完全に解決しました。ヽ(^O^)ノ

AI検索の実力を体感

以上が、今回の乗っ取り事案の解決までの顛末です。

「Perplexity Pro」との経緯

「Perplexity Pro」との経緯

この経験を通じて改めて感じるのは、AI検索「Perplexity Pro」の頼もしさです。と同時に、AI を使いこなすには人間側のスキルが必要だということも痛感しました。

人間同士であれば言葉足らずでも状況を察してもらえる場面でも、AI は推測して動いてはくれません。「あとはよろしく」は通じないのです。生成 AI も AI 検索も、「LLM(大規模言語モデル)」が正確に判断できるよう、的確な言葉で伝える「言語化能力」が使う側に求められます。

まとめ

AI検索や生成 AI が生活・仕事に欠かせない存在になっていくことは、以前から想像していましたし、そのための準備もしてきたつもりでした。
しかし今回の経験から、どれだけ AI が賢くなったとしても、的確なプロンプトを投げかける人間側の能力が、問題解決のスピードを左右すると実感しました。

今回の出来事は、決して喜ばしいものではありませんでした。しかし、複雑な問題だったからこそ、これまで以上に LLM と深く向き合う機会になりました。この経験で 「AI検索」、「生成AI」の活用のスキルが確実に上がったことは間違いなく、それは今後の大きな財産になるはずです。
災い転じて福となす——そうポジティブに捉えています。

コメント