WordPressサイトの乗っ取り、年に何件も相談されてきた話
※本記事にはプロモーション(広告リンク)が含まれています。
「サイトの様子がおかしいので見てもらえませんか」
この相談が、私のところには年に5件ほど来ていました。開いてみると、だいたい乗っ取られています。そして、ほぼすべてWordPressのサイトです。
先に書いておくと、この記事はWordPressを叩くためのものではありません。今も優れたCMSですし、私も長く使ってきました。ただ、どう見つかって、どこまで直せて、何が共通していたのか。相談を受け続けた立場から書いておくと、防げる被害がかなりあると思います。
乗っ取りは、こうやって見つかる
きっかけで多かったのは、こういうパターンです。
- 下層ページが、勝手に別サイトへ飛ばされる。トップは普通なのに、下層を開くと海外のオークションサイトのような偽通販ページにリダイレクトされる
- 下層ページが、まったく別のサイトになっている。自社のページだったはずのURLに、知らない商品ページが表示される
- 見た目は普通でも、中を調べるとバックドア(再侵入用の裏口ファイル)や、知らないアフィリエイトリンクが仕込まれている
厄介なのは、トップページだけは無事なことが多い点です。管理者は自分のサイトのトップしか見ないので、下層が汚染されていても気づかない。Googleの検索結果や、お客さんからの「変なページに飛ぶんだけど」という連絡で初めて発覚する、ということがよくありました。
心当たりのある方は、検索窓にsite:自社ドメインと入れてみてください。身に覚えのないページが大量に出てきたら、疑ったほうがいいです。
復旧できるかは、2つで決まる
バックアップがあるか。そして、そのサーバーに何サイト入っているか。この2つです。
復旧しやすい:1サーバー1サイト+バックアップあり
サーバーにそのサイトしか入っておらず、バックアップが残っていれば、話は早いです。汚染される前の時点に戻して、侵入経路を塞げばいい。
たとえばエックスサーバーのように、自動で毎日バックアップを取ってくれるサーバーなら、利用者が何もしていなくても過去のデータから戻せます。失う更新は直近の数日分。乗っ取られたサイトを前に途方に暮れる状況と比べれば、確実に立て直せます。
復旧の場面を何度も見てきた身としては、この勝手にバックアップされている状態は本当に大きいと感じています。
復旧が難しい:1サーバーに複数サイト+全部汚染
問題は、1つのサーバー契約の中に何サイトも同居していて、全部が汚染されている場合です。
このパターンでは、1サイトを掃除しても直りません。隣のサイトに残った汚染から再感染するからです。マルウェアの発見と削除を繰り返しても、いたちごっこになる。私が対応したケースでは、最終的にサーバー内の全データを削除して、無事な時点のバックアップから丸ごと作り直すしかありませんでした。
これはセキュリティの世界では知られた話で、同居しているサイト同士は権限的に地続きなので、1つ破られると横に広がります(クロスコンタミネーションと呼ばれます)。使っていない古いWordPressをサーバーの隅に放置しているだけで、それが入口になって本命のサイトがやられる。実際に起きます。
だから、重要なサイトはサーバー契約ごと分けるのがいい、というのが私の考えです。コストは増えますが、1つやられたら全部やられる構造を最初から断てます。少なくとも、使っていない古いサイトやテスト環境をサーバー内に放置するのは、今日やめたほうがいいと思います。
狙われたサイトに共通していたこと
相談されたサイトには、はっきりした傾向がありました。
- すべてWordPressだった。静的サイト(HTMLだけのサイト)の乗っ取り相談は、私のところには一度も来たことがありません
- ログインURLがデフォルトの
/wp-adminのままだった /author/1のようなURLで、ログインID(ユーザー名)が外から見えていた
3つ目を補足します。WordPressは初期設定のままだと、投稿者アーカイブのURLからユーザー名が推測できてしまいます。攻撃する側から見ると、ログイン画面の場所は分かっている、ユーザー名も分かっている。あとはパスワードを機械的に総当たりするだけです。
パスワードの強度まではこちらでは分かりません。ただ、狙われる条件はかなり揃っていました。
ログインURLの変更、ユーザー名を隠す、ログイン試行の制限、二段階認証、そして本体・プラグインの更新。この基本を揃えるだけで、狙われにくさは大きく変わります。特別な技術の話ではなく、設定の話です。
私のサイトもやられました
偉そうに書いていますが、自分も食らっています。
当時使っていたレンタルサーバーが改ざんされ、中に入れていた4つのサイトがすべて壊れました。まさに上で書いた同居サイト全滅のパターンです。WordPressのログイン通知や不正アクセスの通知が来るたびに、心臓に悪い思いをしていました。
この一件のあと、自社サイトはWordPressをやめて、Astroで作った静的サイト+Cloudflareの構成に移しました。管理画面もデータベースも持たないので、乗っ取る入口がほぼありません。移行の詳細は別の記事に書きましたが、あの通知に怯える生活は終わりました。
ただし、これは万能の答えではありません。更新頻度の高いサイトや複雑な機能を持つサイトは、WordPressのままのほうが合理的です。その場合は、上に書いた基本の対策とバックアップ体制をきちんと整える。サイトの性質によって守り方を選ぶ、という話だと思っています。
まとめ
- 乗っ取りは下層ページから発覚することが多い。
site:自社ドメインでの検索を一度試してほしい - 復旧の分かれ目はバックアップとサーバーの同居状況。自動バックアップのあるサーバーは強く、同居サイトの全滅は最悪のパターン
- 重要なサイトはサーバーを分ける。放置サイトは削除する
- ログインURL・ユーザー名・更新。基本の設定だけで狙われにくさは変わる
- 更新が少ないサイトなら、静的化して入口ごとなくすという選択肢もある
うちのサイトは大丈夫かな、と思った方は、まず今のサーバーのバックアップ設定を確認するところからで大丈夫です。それだけで、最悪の事態は避けられると思います。
納品して終わりではありません。サイト公開後も相談できる制作者をお探しの方は、まずはお話をお聞かせください。