ブログ、ハッキングされたってよ
WordPressはセキュリティ対策が肝。そう実感させられる経験をしました。
そう、先日このブログがハッキングされたのです。
何が起こったのか、原因は何だったのか、また同じことを防ぐためにどのようなセキュリティ対策を行ったのか、長くなりましたがメモしておきます。
ブログダウンは突然に
そう、それは突然のことでした。私が利用しているエックスサーバーさんから、こんなメールが届きます。
平素は当サービスをご利用いただき誠にありがとうございます。
エックスサーバー カスタマーサポートでございます。
お客様のサーバーアカウントにおいて、サーバーに対する負荷が著しく高い状況を確認いたしました。
この度の負荷上昇に際してプロセスの稼働状況を確認しましたところ、以下の不正なプロセスが多数稼働しておりました。
▼稼働していた不正なプロセス
(cron.php のプロセス)
これを受け、当サポートにてセキュリティ調査を行いましたところ、お客様がご利用のプログラムにセキュリティ上致命的なバグ(脆弱性)が存在し、当該脆弱性を第三者に悪用されてしまった可能性が非常に高い状況でございました。
そのため、事後のご案内となり大変恐縮でございますが、緊急措置として下記制限を実施しております。
▼サポートにて実施した制限内容
・当該サーバーアカウントに対する緊急的なWebアクセス制限を実施
※上記処理に伴い、Webアクセスを行うと403エラーとなる状況です。
スパムメールの大量送信やフィッシングサイトの開設などの『不正アクセス』によるさらなる被害の発生を防ぐため、上記対応を実施しましたことを何卒ご了承くださいますようお願いいたします。
実際にサイトにアクセスしてみると、403エラーが出て完全にブログがダウンしています。
原因は何か
エックスサーバーさんからのメールが続きます。
▼不正アクセスの根本原因
——————————
(1)お客様が運用中のプログラムにおいてセキュリティ上問題の
→該当プログラムが「どんなコマンドでも実行可能」である場合、該当プログラムを経由して不正なコマンドの実行や、不正なファイルの設置が行えてしまいます。
(2)お客様のサーバーアカウントに関するFTP情報が流出し、第三者に不正にFTP接続をされた。
→FTP操作自体によるファイル改ざんはもとより、任意のプログラムを設置することでどんなコマンドでも実行できて
——————————
お客様のサーバーアカウントにおいては不審なFTPアクセスが見
また、今回の調査では不審なアクセスは見受けられませんでしたが
CMSをご利用の場合、パスワードをより強固な物へ変更するなど
エックスサーバーさんからの回答と、自分自身の状況から読み取れたことは下記。
- エックスサーバーさんのメールによると、FTP情報流出によるものではない。原因は「運用中のプログラムにおいてセキュリティ上問題のある致命的なバグ(脆弱性)が存在し、第三者に脆弱性を利用された」から。
- WordPressのダッシュボード経由でのログインではなさそう。プラグイン「SiteGuard WP Plugin」を使用しており、誰かがログインするとメールが飛んでくる仕様。
- サイトはSSL導入済。WordPressのバージョンは最新。
- 海外在住のため、エックスサーバーさんの「WordPressセキュリティ設定」の「ダッシュボードアクセス・REST API アクセス制限」をOFFにしていた。
- 海外在住かつエディタ「MarsEdit」を使用していた関係で、エックスサーバーさんの「WordPressセキュリティ設定」の「XML-RPC API アクセス制限」もOFFにしていた(WordPressで攻撃を受けやすいファイルのひとつとして、よくxmlrpc.phpが挙がる)。
- 無料テーマ「Xeory Base」を使用しており、プラグインが15個くらい入っていた。不正なファイルログ一覧の中に、「/xeory_base/functions.php」や「/plugins/wp-social-bookmarking-light」が含まれていた。
これ、4〜6どれから起こっていてもおかしくないやつ……!っていうか海外在住とはいえ、自分でセキュリティ弱くしてるし国外からのアクセス許してるってもう自業自得……!!
という訳で、しっかり反省してサイトを復旧させ、4〜6のセキュリティ対策を練ることになりました。
バックアップだけは最低限取ってて本当良かった……。
サイトの復旧で大変だったこと
ドメイン上のデータ全削除
エックスサーバーさんからの指示は、結構大変なものでした。
また、プログラムはその仕組み上、上位フォルダに対するファイル操作(ファイルの設置や編集)も行えてしまいます。
そのため、凍結の解除にあたっては、検出された不正なファイルだけではなく、サーバーアカウント全体のすべてのファイルを削除していただくようお願いしております。
不正アクセスによる被害の発生・再発を防ぐための措置でございます。何卒ご理解くださいますようお願いいたします。
ご不明な点などございましたら、お気軽にお問い合わせください。
地道にサイトを設定しなおして復旧
そこからはもう、地道・地道な復旧。エックスサーバー利用者向けの備忘録として簡単にステップを載せておきます。
- エックスサーバーさんからの指示に従い、独自ドメインをすべて削除。初期ドメインを初期化。FTPで、なにか余計なファイルが残っていないか確認。データも何もかも綺麗さっぱり消えました。
- エックスサーバーさんに連絡。サポート体制がしっかりしているので、翌日には連絡が来て、とりあえず403エラーを解除。
- ドメインを再設定。サイトにアクセスすると、こんな表示になりました。
- WordPressをインストール。エックスサーバーのサーバーパネル、左メニューから「WordPress簡単インストール」を選択し、必要な情報を地道に入れていきます。一番下の「データベース」にて、これまで使っていたデータベースを使用しようとするとエラーが出ます。「空状態のデータベースをご指定ください」となっているので、しぶしぶ新しいデータベースを指定した後、後からwp-config.phpのデータベース諸々を入れ替えました。
この辺り、ベターな方法をご存知の方いらっしゃれば教えてほしいです……。 - WordPressが無事にインストールできたら、バックアップデータを開き、FTP経由で必要なファイルを入れ直します。「wp-content」と「wp-includes」フォルダから、テーマ・プラグイン・画像データなど、必要なものだけを戻します。
バックアップだけは最低限取ってて本当良かった……(2回目)。 - ここまですると、とりあえずサイト復旧は完了。ただ、根本原因であるセキュリティは別途対策する必要があります。
WordPressサイトのセキュリティを強化するうえでやったこと
当たり前なところから点検し、手をつけて行きました。
- WordPressのパスワードを、より強固なものに変更。FTPなどのパスワード含めて、弱そうなもの・使いまわしていたものは全部変更。
- WordPressのバージョンが最新であることを確認。自動更新もOnに。
- エックスサーバーのサーバーパネルから「php.ini設定」を確認。これはエックスサーバーさんからのメールで、PHPプログラムを利用している場合はここの設定をOFFにすることを強く推奨されていたため。「allow_url_fopen」と「allow_url_include」がどちらも「無効(Off)」であることを確認。
- WordPressのセキュリティプラグイン「SiteGuard WP Plugin」を入れ、ログイン画面を変更。「<サイト名>/wp-admin/ 」で誰でもアクセスできてしまう状況を変更し、別のログイン用URLを発行する。
- さらに、WordPressのセキュリティプラグイン「miniOrange 2 Factor Authentication」を入れ、WordPress管理画面の二段階認証を設定。
- プラグインの見直し。15個以上プラグインが入っていたため、どうしてもプラグインが多いと脆弱性が生まれやすい状況ではありました。私の場合、ここは無料テーマから有料テーマの「THE・THOR(ザ・トール)」に変更することで解決。入れているプラグインは自動更新をOnに。※実はこの決断が思った以上に良かった。正直ザ・トールのおかげでサイト管理に関する色んな面の悩みが減り、コンテンツに集中できるようになりました。現在プラグインで入れているのは、上記のセキュリティプラグイン、アンチスパム、バックアップ、画像最適化など6つだけ。
- 有料テーマ「THE・THOR(ザ・トール)」のセキュリティ設定から、WordPressログイン画面にIDではなくメールアドレスでログインできるように設定(実はログインIDを推測するのは簡単)。
- 海外在住者にとってはここが肝。エックスサーバーの「WordPressセキュリティ設定」内にある、国外IPアクセス制限の項目をすべてOnに変更。日本在住かつMarsEditなどのエディタを使わない場合はここの設定をそもそもOffにする必要すらありません。
- とはいえ、海外在住の場合はこれをやると、自分のサイトにアクセスできなくなってしまいます。対策として、個別のIPアドレス(自分のIPアドレスだけ)を指定して制限を解除することで、この設定をOnにしたまま海外からでもアクセスできます。詳細はこちらの記事にお世話になりました。
- XML-RPC APIアクセス制限を解除することでMarsEditを使えなくなりました。オフラインでガンガンブログを編集できるので、このブログを始める前、世界一周をしながら仕事をするうえではすごく役に立っていたのですが、現状コロナウィルスの影響もありオフライン作業をする必要もなくなりました。現在はアクセス制限をOnにしたうえで、WordPressエディタで編集しています。が、たまに標準エディタで予想外のバグが生じることがあるので、将来的にはなにか対策をしようかなと考えています。
- サイトの常時SSL化。
- エックスサーバーの「SSL設定」から「独自SSL設定追加」を選択。
- サイトを常時「https://~」にしたい(常時SSL化)場合、.htaccessを編集をする必要があります。下記を参照してください。
独自SSLの設定が完了した時点では、自動的に「https://~」のURLへ転送されません。
Webサイトにおけるすべての表示を常時SSL化する場合は、「.htaccess編集」で以下の記述を追加します。
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]「http://~」のURLでアクセスした際、自動的に「https://~」のURLへ転送されていれば設定完了です。
ハッキングの標的になって思ったこと
- WordPressブログを運用するうえでセキュリティ対策は必須。ハッキングされる前にやっておく。
- いざというときのためのバックアップ大事(3回目)。
思い切って購入してよかったなと感じることが多いです。特に良かったのは、PHPやCSSなどを直接編集する必要がほとんどなくなり、書くことに集中できるようになったこと。現在のデザインは、ザ・トールのテンプレートのひとつを、一切コード編集をせずに、UI上でカスタマイズしているだけです。プラグインの数も半分以下に減り、セキュリティ面での心配も減りました。
無料テーマから有料テーマへの切り替えを考えている方、気になる方はぜひチェックしてみてくださいね。
▼もっと詳しいThe Thor(ザ・トール)の感想・レビューはこちら▼
WordPressテーマ「The Thor(ザ・トール)」レビュー:実際にこのサイトで使って感じた長所と短所、向いてそうな人を正直に書いてみた