こんにちは。ワラゴンです。
さて、前回の更新からずいぶん日が経ってしまいましたが、
今回はwordpressのセキュリティについて語りたいと思います。
WordPressは世界で最も成功しているCMS(Contents Management System)です。
ブログとしてだけでなく、企業のコーポレートサイトを制作する用途でも
開発工数を大幅に削減することができるため、非常に多くのサイトで採用されています。
しかし、Wordpressと聞いて、「安全性は大丈夫なの?」とか
「最もハッキング被害に遭っているCMSなんでしょ?」といった疑問を持つ方も少なくないでしょう。
確かに、Wordpressのサイトがハッキングされたという話は後を絶ちませんが、
私個人の感想として、Wordpress自身のセキュリティ性能は非常に高いと考えています。
ワラゴンは以前、Web関係のお仕事をしていたのでよく分かるのですが、
これほど強固なセキュリティを備えたシステムを作るのは決して簡単な事ではありません。
考えてもみてください。Wordpressは世界で最も有名なCMSです。
それを制作する人々は、世界のトップクラスと言っても良いでしょう。
そんな優秀な人たちが作っているんです。強固であって当たり前なのです。
それでもWordpressのサイトがハックされる理由は、大きく2点あります。
一つ目は、攻撃者が多いということ。
最も有名で、利用人数が多いことから攻撃者にとっては
ハックのしがいのあるシステムであるということになります。
要は、攻撃者にとってWordpressは、脆弱性を見つけて自慢するための標的になりやすいということです。
そして二つ目は、運用に問題があるという点です。
手軽に導入できるため、Webに関する知識があまりなくても運用することができます。
しかしその反面、知識がないことから、セキュリティ面での対策が
おろそかになっているケースが多いのです。
そこで、本記事ではWordpressを攻撃から守るために、
元技術者の視点から簡単かつ効果の高い対策に焦点を絞って紹介したいと思います。
WordPressに限らず、Webサイトがハックされる侵入経路は、
究極的には以下の2つしかないと考えて差し支えないでしょう。
A. ソフトウェアの脆弱性を突かれる
B. 管理画面、あるいはFTPのログイン情報を知られる
ですので、Wordpressのセキュリティ対策は、最終的にはソフトウェアを最新の状態に保つことと、
管理画面(やFTP)へのログインを困難にさせる、という点に集約されることを念頭に置いておきましょう。
また、あなたのサイトが必要とするセキュリティレベルを把握することは非常に大切なことです。
別の記事でも書きたいと思いますが、サイトの特性によってハックされた場合のインパクトが異なります。
例えば個人ブログよりもコーポレートサイトの方がダメージは大きいでしょう。
ここでは簡単かつ汎用的な対策しか挙げていないので、
サイトによってはもっと高度な対策が必要になるかもしれないことをご了承ください。
さて、前置きが長くなってしまいましたが、それでは行ってみましょう。
【目次】
1. 定期バックアップを取る
2. 強固なパスワードを設定する(WP以外も!)
3. Adminユーザは使わない + 新しく管理者ユーザを作成しない
4. ログインユーザ名を秘匿にする
5. WordPress本体、テーマ、プラグインは最新のバージョンに保つ
6. セキュリティ対策プラグインを導入する
1. 定期バックアップを取る
セキュリティ対策とか言っておきながら最初にこれを持ってきてごめんなさい。
しかし、それでも、これが最も確実で、かつダメージを最小限に抑えるための最良の第一手なのです。
どのセキュリティ対策よりも先に、まずは定期バックアップの設定を終わらせるべきです。
まだ設定ができていないのなら、以降の項目を読む前にバックアップの設定をするべきです。
バックアップの重要性については、探せばいくらでも出てくるのでここでは触れませんが、
これ以降の対策を実施する過程でも何かの手違いでサイトが動かなくなるなどのトラブルが
起こるかもしれません。そんな時のために、必ずバックアップを取りましょう。
バックアップの取り方にもいろいろありますが、ほとんどの場合は以下の2種類に絞られます。
・バックアップ用のプラグインを入れる
・OSの定期処理(LinuxのcronやWindowsのタスクスケジューラ)でバックアップスクリプトを書く
バックアップ用のプラグインも探せばたくさん出てきますが、
ワラゴンは特にこだわりがないのでいろんなサイトで紹介されている
BackWPupというプラグインを使っています。
最近、バックアップのためにUpdraftPlusというプラグインを導入しました。
復元までボタン一発でできる優れものです。
まだBackWPup使ってるの?復元までこなすWordPressのバックアップおすすめプラグイン UpdraftPlus
しかし、何かの事情でプラグインをインストールできない場合もあるでしょう。
(新規プラグインを入れるのが怖い、あるいは禁止されているなど。)
そんな時は2つ目の手法で行くしかないのですが、これについては
時間があれば別の記事で取り上げたいと思います。
2. 強固なパスワードを設定する(WP以外も!)
最近のWordpressでは、強固なパスワードを自動生成する機能が備わっていますので、
まずはそちらを使用するのがよいでしょう。
以降の項目で、Adminアカウントを消すとか、ログインユーザ名を秘匿にするといったことを書きますが、
それらはあくまでも補助的な対策に過ぎません。
強固なパスワード設定は、管理画面を守るために最初に着手するべき対策です。
最初に着手しますが、最後の砦だと思って下さい。
Adminアカウントが存在していても、ログインユーザ名が露出していても許容できますが、
絶対にパスワードだけは強固なものを設定するようにしてください。
さらに、Wordpressだけではありません。
WordPressのセキュリティ対策について検索すると、
「Wordpressの管理画面を守るために、良いパスワードを設定しましょう」
といった記事を見かけます。
しかし、Wordpressの管理者ユーザのパスワードを強固にするだけで済むなら、
そんなに簡単な事はありません。
実際にはFTPアカウントも、契約しているサーバなどの管理パネル情報も、
全て強固なパスワードを設定しなければ意味がないからです。
まず、FTPに関しては、そもそも必要かどうかを検討した方がいいのですが、
多くの場合、FTPの利用を止めるのは難しいことが多いのではないでしょうか。
ですので、強固なパスワードを設定することが、より重要になってきます。
FTPアカウントをお客さん用に作っている場合は、少しパワーが必要ですが、
何とかお客さんを説得してパスワードを変更させてもらうように相談しましょう。
次に、当然ですがレンタルサーバの管理パネルのパスワードも強固なものにする必要があります。
第三者に管理パネルの情報が渡った場合の事を想像してみてください。
まさに何でもできてしまいますよね?
WordPressのセキュリティを語る上で、これらは結構置き去りにされがちなので、
ぜひ設定を見直してみてください。
3. Adminユーザは使わない + 新しく管理者ユーザを作成しない
こちらも、管理画面を守るための対策になります。
古いWordpressの場合、あまり何も考えずにインストールすると、
管理者のユーザ名が「Admin」となってしまっていました。
もし、あなたのサイトが誰かから譲り受けたものの場合、
「Admin」ユーザが残っている可能性があります。
そんな時は、Wordpress自体が古い場合も多いため、
Wordpress本体のバージョンアップをすると同時に、
Adminユーザを削除する必要があります。
また、サイトによっては、複数のユーザーアカウントを作成する場合があります。
例えば、お客さん自身に記事を作成してもらうため、
お客さん用のアカウントを「管理者」で発行するなど、です。
ここで、そのようなアカウントを編集者、投稿者など、別の権限として
運用できないかを検討してください。
とは言っても現実的には、既にお客さんに管理者権限をあげている場合、
格下げする旨を打診するには相当なパワーが必要になります。
ですので、ワラゴンの個人的な意見として、このような場合は、
既存の管理者アカウントは据え置き、今後、新規ユーザ追加する場合は、
なるべく管理者権限を避ける、というスタンスでも良いと思います。
4. ログインユーザ名を秘匿にする
Adminユーザが存在しないからと言って安心しているあなた。
あまい。
WordPressでは割と簡単にユーザ名が露出してしまうという問題があります。
有名な露出経路としては以下の2つの経路があります。
・ニックネームからログインユーザ名が露出
・http://ドメイン.com/?author=1から露出
これらの詳細については別の記事で取り上げることとし、
ここでは簡単にそれぞれの対策方法を紹介します。
ニックネームを変更する
WordPressではインストール時に設定した管理者のユーザ名が
そのままニックネームとして設定されるという親切(お節介?)機能があります。
まずは現在の設定を確認しておきましょう。
管理画面で「ユーザー」 → 「あなたのプロフィール」と選択し、
「ユーザー名」 と「ニックネーム(必須)」に設定されている値が同一であることを確認します。
同一である場合、「ニックネーム(必須)」と「ブログ上の表示名」を変更しましょう。
ここで注意点として、「ブログ上の表示名」を必ず変更してください。
というのも、ここに設定した値が最終的にブログ上に表示される仕様になっているためです。
もし、異なる設定がされている場合、特に何もする必要はなので次に進みましょう。
http://ドメイン.com/?author=1から露出を防ぐ
まずはあなたのサイトの現状を確認しましょう。
http://ドメイン.com/?author=1とブラウザのURLに入力して、
表示される画面の中にあなたのユーザ名が露出していませんか?
露出していなくても、最後の1の部分を2,3,4くらいまで変えて試してみましょう。
露出していたらアウトです。
さっそく対策を施しましょう。
ワラゴンが知る限り、この問題に対して対策できるプラグインが2つあります。
もちろん他にもあるでしょう。
・Edit Author Slug
・Wordfence
どちらが良いかはケースバイケースです。
Edit Author Slugは、このユーザ名露出問題対策に特化したプラグインです。
一方、WordfenceはWordpress全体のセキュリティを高めてくれるプラグインで、
ユーザー名露出問題への対策は数ある機能のうちのひとつに過ぎません。
ひとつの判断材料としては、Wordfenceのほうは比較的規模が大きいプラグインですので、
少なからず既存のサイトに影響を及ぼす可能性があるということです。
ですので、既存のサイトにすでに別のセキュリティプラグインが入っている場合や
そうでなくても多数のプラグインが入っていて、影響範囲が大きいと判断できる場合は
まずはEdit Author Slugで対応しておく、というのもひとつの判断かと思います。
逆に、まだサイトオープンして間もない場合や、自分で十分に検証できる環境がある場合、
Wordfenceは総合的に見ても導入する価値の高いプラグインですので、
一度検討してみてください。
ちなみに、Wordfenceを入れた場合、デフォルトでこの機能は有効になっていますが、
設定内容をきちんと確認したい場合は「All Options」の中に以下のような項目があるので、
そのチェックボックスをONにするだけです。
Prevent discovery of usernames through '/?author=N' scans, the oEmbed API, and the WordPress REST API
もうひとつ、Edit Author Slugは日本語ですが、
Wordfenceの設定画面は全て英語です。
5. WordPress本体、テーマ、プラグインは最新のバージョンに保つ
これはWordpressを保守する上で、最も重要で最も難しいセキュリティ対策ですね。
バージョンを最新にしておかないと、どのようなリスクがあるかというと、
SQLインジェクションやクロスサイトスクリプティングのようなWeb特有の攻撃が成功する可能性が高くなります。
冒頭に書いた、「ソフトウェアの脆弱性を突かれる」というものです。
これらの攻撃が成功すると、以下のような被害を受けます。
・データベース内の情報を読み取られる
・他サイトへの攻撃の踏み台にされる
・コンテンツを改ざんされる
各種ソフトウェアのバージョンを常に最新にしておくことで、
上記のような被害に遭うリスクを低減することができます。
これから開始するブログについては、それほど難しくはないでしょう。
なるべく信頼できる開発元のプラグインやテーマを選び、
Wordpressの本体と共に常に最新の状態にアップデートしていくことです。
しかし、既存のサイトが既に非常に古かったり、
素性の分からないプラグインが大量に入っている場合は大変です。
バージョンアップがどこにどう影響を与えるか分からないのですから。
個人ブログであれば、サイトがダウンすることも覚悟の上で決行するのも
ひとつの手ではありますが、企業サイトの場合はそうもいきません。
予算に余裕のあるプロジェクトならWAFを導入することで
ソフトウェアの脆弱性の大部分にフタをすることができるので、
検討するのも良いでしょう。
それも難しい場合、次の項目で説明するwordfenceなどの
WAF機能付きのセキュリティソフトの導入を検討しましょう。
しかし、世の中には上記のどの対策も取ることができない場合が山ほど存在します。
そんな時は、残念ながら特効薬的なものは存在せず、
正攻法で対策するしかありません。
具体的には以下のような流れになると思いますが、
かなりの苦痛を伴う作業になるでしょう。
・予算の確保(作業時間の確保)
・分析(不要なプラグインの洗い出し、既存機能の洗い出し、テーマやプラグインの再選定等)
・テスト(テスト環境の構築と、実際のバージョンアップ後のテスト)
・修正
・適用
実際の被害がないうちは、セキュリティ対策用の費用を計上できる
お客さんも少ないと思います。
apacheのログなどで攻撃を受けている証拠を提示するなどして、
何とかお客様を納得させるように頑張ってみましょう。
6. セキュリティ対策プラグインを導入する
セキュリティ用のプラグインも色々あり過ぎて困る、
という人も多いと思います。
ここでは私がこれまで運用してきて、ある程度実績のあるものを紹介したいと思います。
・Wordfence
・Sucuri
・SiteGuard WP Plugin
※どれも無料で使えます
上記、3つを並べましたが、多くの場合インストールするのはひとつです。
少なくとも、WordfenceとSucuriを同一サイトにインストールする、
ということは通常やりません(Wordfence + SiteGuardならひとまず動きそうではありますが)。
まずはWordfence。
この記事を書いている2018年の時点では、
おそらく最も人気の高いプラグインではないかと思います。
Wordfenceの最大の特徴は無料版でもWAFがついていることです。
もちろん、WAFの機能は限定されていますが、ないよりははるかにマシです。
その他、バージョンチェックやスキャン機能も無料版で提供されています。
唯一の難点は、英語であることくらいですが、
デフォルト設定のままでも十分に高いセキュリティ対策ができます。
次にSucuri。
Wordfenceと並んで人気の高いプラグインです。
しかし、無料版ではWAFはついてきません。
このプラグインの良いところは、サイトがブラックリストに登録されているかどうかをチェックしてくれる機能です。
これは無料版のWordfenceにはありません(有料版ではある)。
それ以外ではSucuriに特筆すべき点はなさそうですので、
これから導入するのであれば断然wordfenceをおススメします。
そして最後にSiteGuard。
これは国産のプラグインです。
ただし、管理画面への不正ログインを防ぐための機能に特化しているように見えます。
例えば、ログイン画面のURLを任意のものに変更したり、
ログイン画面に画像認証を入れる、などです。
このような機能はWordfenceやSucuriにもない機能で、
管理画面を守るためには、非常に高い効果を期待できます。
手元の環境では、Wordfenceとは共存しても問題なく動いているようです。
ですので、どうしても「管理画面のURLを変更したい」という要望がある場合は
検討しても良いプラグインです。
まぁ、色々とごちゃごちゃ書きましたが、結局のところワラゴンのおすすめはWordfenceということです。
まとめ
以上、思ったより長くなってしまいましたが、
あまり深い知識がなくても導入できる対策をまとめてみました。
今回紹介した対策が現実的に適用できないケースも多々あると思います。
そんな時は、もう少しレベルの高い対策で補強するという方向に
持っていく、というのもアリだと思います。
そんなもう少し難しい対策のほうは、別の機会にご案内できればと思います。
それでは。