先日、このブログと同じサーバーで運営しているブログが不正ログインを受けました。
ブログをご覧のみなさまには大変ご迷惑をかけたことを、まずはお詫びいたします。
不正ログインはすでに対応し、現在は復旧しております。
解決には同じような経験をされた方のブログ記事がひじょうに参考になりました。
自分の経験もなにかの役に立つのではないかと思い、不正ログインされてからやったことをこの記事にまとめます。
さきに復旧方法を知りたい人は不正ログインされたブログの復旧手順からどうぞ。
前兆〜不正ログインまでの経緯
不正ログインがあった1日前か2日目前ぐらいに自分のブログにアクセスした時のこと。
いつもは瞬時にページ表示されるのに、表示されるまで数秒かかったことがありました。
わたしの使っているサーバー(mixhost)は不正ログインがあった1日前にも「mixhostにおけるDDoS対策の現状について」というお知らせが来ていたので、またサーバーが攻撃されているのかなと思っていました。
不正ログインがあったブログにはSiteGuardプラグインを入れていて、ブログにログインするとメールで通知が来るようになっていました。
そんな中、メールにログイン通知が届きます。ログイン時間は2:22。
「そんな時間にログインしてないよな……でもブログを書いていると気づかないあいだに1時を回っちゃうことも結構あるから自分が気がつかなかっただけなのかな……」と不審に思いつつも、まだ確信はできていませんでした。
通知メールにはIPアドレスも記載されるのですが、通知メールに書いてあるIPアドレスは自分のIPアドレスだったことも確信が持てなかった理由の1つです。
SiteGuardプラグインから送られてくるメールのログイン時刻はWordPressのタイムゾーンの設定が反映されます。
不正ログインがあったブログは東京(UTC+9)からUTC+0に変えられていました。
最初は不正ログインされたあとで設定を変えられたのかなと思っていましたが、ログインの時刻が2:22なのにメールが11:22に飛んできているのをみると、ブログのタイムゾーンの設定を変えられたあとでログインされた可能性があります。
(2:22 + 9時間でちょうど11:22になるため)
次にサーチコンソールからメールで通知がきました。
「新しい所有者を追加しました。」
追加されたアカウントは「wenhanchang971@gmail.com」。
めっちゃ中華業者的な名前です。
あきらかにヤバいやつです。
夜にこのメールを見て、ようやく不正ログインに気づきました。
不正ログインの被害
不正ログインされたブログは1つだけでしたが、不正ログインされたブログと同じサーバーで運営しているほかのブログに不正なファイルをアップロードされました。
- WordPressの不正ログイン(1つのブログ)
- サーチコンソールにオーナー権限で所有者を追加される
- サーバーに不正なファイルをアップロードされる(4つのブログ)
サーバーには不正ログイン当時、8つのWordPressがインストールされていましたが、被害がなかったブログもありました。
不正ログインされた時のブログの状況
不正ログインのあったブログは、WordPressサイトのセキュリティ対策 13選をしてSiteGuardプラグインを入れていました。
ただ、WordPressサイトのセキュリティ対策 13選のApache関連のところはよくわからなかったので一部対応できていないところもありました。
また、WordPressの本体やプラグインのアップデートが最新ではありませんでした。
同じサーバーで運営しているサブブログはメインブログよりもセキュリティが甘く、ユーザー名を隠すなどはやっていたもののセキュリティ系プラグインが入っていなかったです。
おそらくセキュリティが弱いサブブログでパスワードがやぶられ、そこから同じサーバーに置いてあったメインブログにも被害が広がったと思われます。
不正ログインされたブログの復旧手順
パソコンのウィルスチェック
あまりないケースかと思いますが、パソコンがウィルスに感染していてパスワードが盗まれている場合、いくら対応しても再度ハックされてしまいます。
まずはウィルスチェックをします。
わたしは普段は無料のAvastを使っています。
→Avast公式サイトダウンロードページ
今回は念には念をいれて、Avastでスキャンしたあとトレンドマイクロのオンラインスキャンでもスキャンして2重のチェックをしました。
→トレンドマイクロ オンラインスキャン
セキュリティ対策系プラグインを入れる
ブログにセキュリティ対策系プラグインが入っていない場合はインストールして有効化します。
わたしは「SiteGuard」と「Wordfence」を入れるようにしました。
パスワード総当たり攻撃を防ぐ機能やログイン通知機能はWordfenceにもあるので、英語が苦手じゃなければSiteGuardはなくてもいいかもしれないです。
できればブログのログインを2段階認証を有効にしておくとより安心です。
WordfenceではGoogle認証システムを使ってブログの2段階認証ができるようになります。
→Google認証システム
Wordfenceインストール後、ダッシュボードのメニューからWordfence→Login Securityを選び、画面に表示されたQRコードを認証アプリで読み込みます。
認証アプリ側にサイトが追加されるので、表示されている一時パスワードを画面右側のACTIVATEボタンの上にあるボックスに入力、ACTIVATEボタンを押すことで有効にできます。
スクリーンショットを取り忘れたので、Wordfenceで2段階認証する方法はこちらのページを参考にするとよいです。
→WordPress管理画面ログインを2段階認証にできるプラグイン4選
Google認証システムのパスワードは30秒ごとに切り替わります。
たまに30秒たっているのにアプリ側の画面が更新されない時があるので、時間がたってもパスワードが変わらない・表示されているパスワードを入力しているのに認証できない場合は一度アプリを立ち上げなおすとなおります。
管理者アカウントを作りなおす
「不正ログインされている=IDとパスワードが知られている」なのでなにはともあれ、アカウントを作りなおします。
ダッシュボードのユーザーから新しい管理者ユーザーを作成します。
いちどログアウトして新しく作ったユーザーで入りなおし、削除するユーザーにチェックを入れます。
一括操作から削除を選び、適用をクリックします。
確認画面で旧管理者が書いた記事は新管理者の記事になるように設定すれば、今までに書いた記事も引き継げます。
FTPパスワードを変更する
不正にファイルがアップロードされている場合は、FTPパスワードも変更します。
レンタルサーバーのコントロールパネルから、たぶん変更できるはず。
(mixhostではコントロールパネルのログイン画面から変更できました)
メンテナンスモードにする
復旧にはそれなりに時間がかかるので、念のためメンテナンスモードにしてほかの人からはアクセスできないようにした方が安心です。
WP Maintenance Modeプラグインをインストール、有効化してプラグインの設定からメンテナンスモードを有効にします。
複数ブログがある場合は、ブログの数だけ同じことを繰り返します。
わたしは最初、不正ログインのあったブログだけ先に対応して不正ファイルの消去などをしていましたが、1つでも穴があるブログがあるとファイルを消しても再アップロードされてしまいます。
さきに全ブログのログインを強化した方がよかったです。
サーチコンソールの所有者の削除
サーチコンソールに所有者を追加するには、いくつかの方法で認証を行なう必要があります。
今回の場合、乗っ取ってきた相手はHTMLファイルのアップロードによる認証を行なっていましたので、FTPソフトを使ってドメイン直下に置かれた自分のものではない認証ファイル(google(英数字).html)を削除しました。
被害届を出すつもりなら、ファイル削除前に証拠となるスクリーンショットを取っておくとよいです。
次にサーチコンソールの設定から所有者を削除します。
サーチコンソールで設定→ユーザーと権限をクリックします。
右側の…をクリックし、「プロパティ所有者の管理」をクリックします。
所有者の一覧が表示されるので、相手のアカウントを「未確認にする」にするで所有者からはずせます。
不正なアップロードファイルの確認する
Wordfenceのスキャンでコアファイルにないファイルをチェック
Wordfenceを入れると、WordPressのファイルのスキャンができます。
不正にアップロードされたファイルを見つけるのに役に立ちました。
Wordfenceをインストールするとダッシュボードの左メニューにWordfenceが表示されます。
Wordfence→Scanをクリックし、 「START NEW SCAN」をクリックしてスキャンします。
スキャンボタンの下の欄に、スキャンの進行状況が表示されます。
File ChangesやMalware Scanが△になっているとサイトが改ざんされている可能性があります。
スキャンが終わると、Results Foundというタブに結果が表示されます。
もともとのWordPressに存在しないファイルを見つけると警告が出ます。
検索結果をクリックして、Delete Fileをクリックすることで削除できます。
たまにエラーで削除できない時がありますが、時間をおいてから再度やると削除できます。
ウィルスがアップロードされていないかチェック
ハックされた直前・直後のバックアップデータをダウンロードし、ウィルススキャンを実行します。
たぶん1日ごとに自動バックアップ取ってくれているレンタルサーバーが多いはず。
mixhostはcPanel(コントロールパネル)のJETBACKUP→「File Backups」からダウンロードできます。
ウィルススキャンでひっかかったファイルがあれば、サーバーからも削除します。
レンタルサーバーによっては、コントロールパネルからサーバーファイルのウィルススキャンができるところもあります。
mixhostだとcPanelの詳細→ウィルススキャナーでできました。
スキャンにひっかからないけど不正にアップロードされたファイルをチェック
ファイルが不正にアップロードされていても、Wordfenceのスキャンにひっかからない場合もあります。
WordPress公式から新しいWordPressのファイルをダウンロードしてきて、サーバーのファイルと比較します。
ただしインストール後に追加したプラグインやテーマに関するファイルなどは新しいWordPressには含まれていないので、そこの判断がちょっと難しいです。
わたしの場合はドメイン直下に「widgets」と「web_map」というフォルダが作られていました。
widgetsフォルダはいかにもシステムファイルっぽい名前ですが、WordPress本来のwidgetsフォルダは別の場所にあります。
中身を確認したところ、スパムファイルっぽい感じだったので削除しました。
不正なリダイレクトの確認
.htaccessを確認する
.htaccessが改ざんされて不正ファイルにリダイレクトされることがあります。
.htaccessを開き、不正にアップロードされたフォルダやファイルの名前がないかチェックします。
Googleで「site:サイトURL」で検索し、検索結果を確認する
直接URLを打ちこんだ時は正常に表示されても、検索結果からアクセスした時に不正なサイトにリダイレクトされるケースがあるようです。
Googleで「site:サイトURL」で検索すると自分のサイトの検索結果が表示されるので、不正なリダイレクトが発生していないかチェックします。
アドセンスコードの確認(Googleアドセンスを貼っている場合)
わたしのケースではなかったのですが、不正ログインされたあとに自分以外のアドセンスのコードが貼られている場合もあるみたいです。
サイトの管理画面にログインするとメールが来る様になってるけど1週間位前に2回身に覚えのないログイン通知が来て慌ててパスワード変えた。アドセンス広告を貼った画面を今見たら何ヶ所かdata-ad-client="ca-pub-の後の数字が違う物がある。私詳しくないけどあそこの数字が変わる事ってありますか?
— ももりんご@ブログ初心者 (@momo_rin__go) November 18, 2019
ブラウザからソースを表示して、アドセンスのIDが自分のものになっているか、自分以外のIDのものがないかをチェックした方がよいでしょう。
セキュリティイベントの確認
GoogleアカウントのページからGoogleアカウントの設定変更などの履歴を見ることができます。
お使いのアカウントを保護しますの欄から「使ってみる」をクリックします。
最近のセキュリティイベントで身に覚えのない行動がないか調べます。
不正アクセスの対応で2段階認証化したりメールのアーカイブを取ったりしたのでスクリーンショットでは4件となっていますが、自分がなにもやってなければ0件かと。
その他設定の見直し
サーチコンソールのターゲット国が「英国」、不正ログインされたブログのタイムゾーンが「UTC+0」にされていたのでそれぞれ元に戻しました。
再度不正ログインされないために(恒久対処)
更新があったらすぐ更新する
WordPress本体やテーマ、プラグインのアップデートがあったらなるべく早く更新します。
不要なテーマ、プラグインを削除する
デフォルトで入っているTwenty〜など、現在使用していないテーマがあれば削除します。
テーマを有効化していなくても、テーマ管理画面に残っているとファイルも残ったままになるので管理画面から削除しておくといいでしょう。
更新のないプラグインの使用を再検討する
見出しから目次を作成する「Table of Contents Plus」や、プログラムのコードを色分け表示する「Crayon Syntax Highlighter」は使っている人も多い人気プラグインですが更新が数年前から止まっています。
更新がないとセキュリティに穴が見つかったときに修正されないままになってしまうので、できれば現在も更新されているプラグインに乗り換えた方がよいです。
わたしも代替プラグインを試してみようと思います。
常時SSL化する
運営しているブログはSSL化はしていましたが、非SSL(http://~)でもSSL(https://~)でもアクセスできるようになっていました。
これを非SSL(http://~)ではアクセスできなくし、常時SSL化しました。
わたしの場合は「mixhost 常時SSL」で検索して出てきたページのコードを.htaccessに書き加えただけです。
使わない機能を無効化する
WordPressの機能の中には攻撃に使われやすいものもあるようです。
うちの場合、サイトのアクセスログを見てみたらwp-cron.phpへのアクセスがかなりありました。
予約投稿やテーマのアップデートなど、時刻にかかわる機能で使われているようです。
わたしは予約投稿をけっこう使っているので無効化はしませんでしたが、調べている過程でxmlrpc.phpも攻撃に使われやすいことを知りました。
こちらはアプリでリモート投稿をするための機能で使われているみたいで、自分には必要ないものだったのでアクセスできないように対策をしました。
参考にさせていただいたページ
- WordPressサイトのセキュリティ対策 13選
- 【未解決】PVが急に下がる&サイトに知らない所有者が追加→ほぼ確実に乗っ取りなので対策を
- Google Search Consoleから身に覚えのない“新しい所有者を追加しました”
- WordPress管理画面ログインを2段階認証にできるプラグイン4選
- Mixhostでサイトを常時SSL化(リダイレクト設定)する方法
- WordPressで攻撃を受けやすいファイルとそのセキュリティー対策まとめ
- wordpressのxmlrpc.phpに対するブルートフォースアタックを防ぐ
ハックされたブログ復旧までにしたことをぜんぶ解説まとめ
ブログの復旧は1個だけでもなかなか手間がかかります。
わたしは8ブログあったから、この作業を8回やるハメになってめっちゃ大変でした。
放置して管理できないなら、きちんとサーバーからもファイルを消してブログを閉鎖する。
身の丈にあった運用が大事だと痛感しました。
こんな大変なめにあわないためにも、不正アクセスされる前にきちんとセキュリティ系対策をしておくのがおすすめです。