「サイトがおかしい、ウイルスに感染したみたいで……」
そんな連絡が、長年お世話になっている方から届いたのは、ある平日の朝のことでした。
お話を聞くと、運営しているWordPressサイトにマルウェアが仕込まれ、サイトが正常に表示されない状態になっているとのこと。「駆除してほしい」というご依頼でした。
作業を終えたのは、日が暮れた後でした。
開けてびっくり、「外注の海外丸投げ」サイト
サイトを作ったのは国内の制作会社だったそうですが、ソースコードの中に海外の開発者の署名が残っていました。よくある話です——国内の会社が受注して、実装は海外に発注している。
問題はコードの品質でした。
WordPressには「プロジェクトの中にファイルを置く」という基本的な構造があるのですが、このサイトはその外にファイルを置いて参照するという、かなり特殊な作りになっていました。セキュリティの観点からも、保守性の観点からも、首をかしげたくなる実装です。
マルウェアが「無限増殖」する仕掛け
感染の状況を調べると、ファイルの書き込み権限が不正に書き換えられていました。本来は書き込めないはずの場所に、外部からでも書き込めるような状態になっていたのです。その権限を悪用したスクリプトが、.htaccessを正しい内容に修正しても、すぐさま改ざんされた内容に書き戻し続ける——そういう仕掛けになっていました。
怪しいファイルを削除しても、また現れる。削除しても、また現れる。まるでモグラたたきのような状態です。
最終的には、まっさらなWordPressを新しく用意して、必要なファイルだけを移し替えるという方法で解決しました。丸1日かかりました。
幸いにも、このサイトはそれほど集客に使っていなかったため、ビジネスへの影響は最小限で済みました。でも、もし予約受付や問い合わせの窓口として使っていたら——と考えると、背筋が冷えます。
なぜWordPressは狙われやすいのか
WordPressは世界中のWebサイトの約40%を占めるCMSです。これほど普及しているということは、攻撃者にとって「攻略法を研究する価値がある」ターゲットでもあります。
WordPressへの攻撃の主な原因として、プラグインの脆弱性が全体の約56%を占めるという調査結果もあります。プラグインは便利な反面、更新が止まったものや管理が行き届いていないものが放置されると、そこが侵入口になります。
動的サイトのリスクをまとめると:
- WordPressの本体・テーマ・プラグインを定期的に更新しないと脆弱性が積み上がる
- 管理画面(wp-admin)がインターネットに公開されているため、総当たり攻撃を受けやすい
- データベースへの接続情報を盗む標的になりやすい
- ファイル権限の設定ミスがあると、今回のような「無限増殖」状態に陥る
特に「作って終わり」で放置されたサイトは、セキュリティパッチが当たらないまま何年も動き続けることになります。今回のケースも、メンテナンスされていなかったことが根本的な原因のひとつでした。
静的サイトはなぜ安全なのか
ふくふくが桑名市の事業者向けにご提案している構成は、Next.js(フレームワーク)+Cloudflare Workers / KV(ホスティング)+Sanity CMS(コンテンツ管理)の組み合わせです。
この構成が安全な理由を、少し具体的にお伝えします。
ページはビルド時に生成され、エッジに格納されます。
Next.jsでビルド時にページを生成し、それをCloudflare KV(世界中に分散したエッジのストレージ)に格納します。ユーザーがサイトを開くと、Cloudflareが最寄りのエッジからそのページをそのまま返すだけです。WordPressのように「リクエストのたびにPHPが動き、データベースに問い合わせて画面を組み立てる」という処理が発生しません。攻撃者が突ける「実行中のプログラム」も「データベースへの接続口」も、存在しないのです。
Sanity CMSの編集画面は、公開サイトとは分離されています。
WordPressは管理画面(wp-admin)と公開サイトが同じサーバー上にあります。管理画面に侵入されれば、サイト全体を乗っ取られます。Sanityの場合、コンテンツを編集する画面は公開サイトとは別の場所にあります。編集画面にアクセスするには認証が必要で、仮に編集画面が攻撃されても、すでに生成・配信済みの公開サイトには直接影響しません。
攻撃者が「入り口」にできるものがない。
wp-adminのような狙いやすい管理画面が存在しない。プラグインという「攻略可能な追加部品」がない。データベースへの接続情報を盗む標的がない。攻撃者にとって、この構成は「とっかかり」を見つけにくい設計になっています。
さらに、Cloudflare自体がDDoS攻撃への防御やWAF(Webアプリケーションファイアウォール)をインフラレベルで提供しているため、個別に設定しなくても基本的な防御が整っています。
メンテナンスいらず、維持費は年1,500円
静的サイトのもう一つのメリットは、メンテナンスがほぼ不要なことです。
WordPressはWordPress本体・テーマ・プラグインそれぞれの更新が必要で、更新のたびに動作確認も必要です。怠るほどリスクが積み上がります。
この構成には、そもそも「更新しなければならないソフトウェア」がありません。コンテンツを更新したいときだけ、Sanity CMSの編集画面から操作するだけです。
ドメインの維持費も年約1,500円前後。「作って終わり」でも、セキュリティリスクが積み上がらない設計になっています。
---
今回のハッキング対応は、私にとってもあらためて考えさせられる経験でした。
「Webサイトは作ったら終わり」という認識が、まだまだ多い。そのリスクを、事業者の方にもっと知ってほしいと思います。
もし今のサイトが「WordPressで、最後に更新した日を覚えていない」という状況であれば、一度現状を確認することをおすすめします。ふくふくに相談していただければ、現状のリスクを確認するところからお手伝いします。