こんちは!ゴリラ出身のフロントエンドエンジニア「ケイジャニスト」です!
さてこの記事を読んでいらっしゃる方は概ねWordPressを使って何らかサイトを運営されている方なんだと思います。お使いのWordPressサイト、セキュリティ対策は施されていますか?「まあいいや」って放置していたりしていませんか?
CMS全般に言えることですが、WordPressなど各CMSは運用していく中で必ず面倒を見てあげる必要があります。
例えばWordPressのバージョンアップについても、「このバージョンはセキュリティホールが見つかった。対策したのでそのためのセキュリティアップデート」なんて場合もあったりします。
この辺は概ねコアアップデートが多いですが、見逃すと危ないものがあります。
アップデートしないで古いバージョン使ってて、気がついたらハッキングされちゃいました(汗)。
なんてのもWordPressくらい普及したCMSであればザラにあったりするんです。
アップデートを例にとりましたが、Webサイトは作るまでがゴールではなく、その後も「ちゃんと運用してメンテナンスを施していく必要がある」というワケなんです!
というコトで今回はそんなWordPressのセキュリティについて少し書かせていただければと思い、筆を取った次第であります!
もちろんココで上げているのはほんの一部です。
セキュリティ部分はデリケートで技術の発展や進化とともに、どんどんアップデートされていくものです。
ここであげる以外にも、お使いのサーバーにもよりますが、Apacheの設定やPHP、SQLも堅牢化を施してあげるとより強固なサイトとなりますし、施せば施してあげるほど、より堅牢なサイトへと昇華することができるのです!
というわけで、みなさんもセキュアなWordPress運用について興味を持ってもらえたら嬉しいです!
目次
ユーザー名やパスワードについて
ユーザー名やパスワードについては「admin」や「test」など、単純な物を使うのはやめましょう!
著名な攻撃方法の中に、ブルートフォースアタックという総当たり攻撃があります。
「おそらくこれではないか?」というユーザー名やパスワードのリストを作り、片っ端からプログラムで試していくというなりふり構わない肉弾系波状攻撃なのですが、単純であればあるほど、予測されやすいものであればあるほど、どこかの段階で突破されてしまう確率があがってしまいます。
WordPressにはパスワードの判定をしてくれる機能がありますので、まずはそちらで「強力」と出るところまでは引き上げましょう!
※とはいえ複雑過ぎても覚えるのが大変で困りものかもしれませんが、1Passwordなどパスワード管理のアプリなどもありますのでなるだけそちらを使うようにすると運用しやすくなります。
是非お試しください!
DBテーブルの接頭辞変更
DBテーブルはデフォルトだと「wp_」と設定します。これは全世界共通のものです。
全世界共通ということは「WordPressを触ったことがある人ならみんな知っている」ということです。当然悪だくみしている人にもツーカーなワケなので、なるだけ予測不可能な一意(この世で一つのオリジナルな)の接頭辞で設定してあげるようにしましょう。
プラグインについて
未使用のプラグインについて
使っていないプラグインは極力削除するようにしましょう。たとえ停止していたとしても、運用していくなかで忘れてしまい、そのままセキュリティホールにつながる可能性があります。
新たな脆弱性が見つかっているのに更新せず、脆弱性をはらんだファイルを見つけられた挙句にやられてしまうなんてことも可能性としては考えられます。不要なものは停止ではなく、なるべく削除するようにすると良いでしょう!
そのプラグインのアップデート頻度は頻繁か?
プラグインを導入する上での選定基準として、真っ先にあげたいのがこちらの項目です。
「アップデートがずっとされていない = メンテナンスされていない」ということですので、
必ずアップデート頻度が高いものを使うようにするとセキュリティ向上につながります。
基本的に最新のものを使う
後述しますが、セキュリティアップデートなどもありますので、「アップデートして常に最新の状態を保つ」というのもセキュリティ向上のための一環です。WordPressは通知が来ますのでなるべくなら最新の物を使うようにしましょう!
公式ディレクトリのプラグインだとしても過信しない
たとえ公式ディレクトリに登録されている由緒正しいプラグインだとしても「イケてるぜぇ」と過信しないように心がけましょう。利用するプラグインは過去の事例などを調べ、もし過去に脆弱性が見つかっているのであれば、それらは更新されているかのなどを調べてから利用するようにしましょう!
自動アップデートのOn/Off
wp-config.phpでWordPress本体(コア)の自動アップデートを制御しています。
以下の設定をfunctions.phpなどで制御できます。自動アップデートがonになりますので記載しておくと良いカモです。
add_filter('auto_update_theme', '__return_true'); //こちらはテーマです
add_filter('auto_update_plugin', '__return_true'); //こちらはプラグインです
※ただ、干渉など不具合が発生する可能性がありますので、そちらには気を払う必要があります。
こちらの設定は任意で行うようにすると良いと思われます。
テーマについて
こちらもプラグインと同じお話です。最新に保てない、もしくは使う予定のないものは削除するようにしましょう!また、アップデートが頻繁かどうかも選定の基準としておくと良いです!そして最新バージョンがローンチされているなら、なるべくそちらへアップデートするようにしましょう!
インストール時の初期管理者アカウントの変更
以外に見落としがちなのがこちら。WordPressはインストール時点で管理者アカウントを1つ作るようになっており、そちらを使って管理画面からチキチキと操作できるわけですが、実は漏れなくユーザーIDが「1」です。
これも全世界共通です。ということは。。。というわけでこちらの対策として「管理者アカウントをもう1つ追加してユーザーIDが1のアカウントは削除しておく」というのはやっておくと良いです。
8つの認証キーはランダム文字列で設定されているか
普通にWordPressをインストールして稼働させているのであればまず大丈夫なはずですが、
ウィザードで自動生成するsaltの認証キーが同じ文字列で挿入されてしまうケースが状況によってはあったりするそうです。この場合は必ずランダムの文字列に変更するようにしましょう!
認証キーはwp-config.phpに記述されています。
もしwp-config.phpに記載がないようならWordPressのサイトで作成できますので、そちらから作成して設定するようにしましょう!
https://api.wordpress.org/secret-key/1.1/salt
※また、過去に構築したWordPressからの使い回しもダメです。一意のものを使いましょう!
ログインURLの変更
WordPressのログインURLは全世界共通です。なのでこちらもなるべく一意のものへと変更してあげると良いです。また、変更時に「/wp-login/」ばかりに目がいってしまいますが、「/wp-admin/」などもアクセスするとログイン画面へリダイレクトされてしまいます。
ログインURLがバレているというのはセキュリティ上好ましくないので、こちらもなるだけ変更するようにすると良いです!Login Rebuilderなど、専用のプラグインもあります。一度お試しくださいませ。
アクセス制限をかける
こちらも有効な手段です。
たとえば特定のIPアドレスからでないと管理画面にアクセスできないようにするなどすると、より堅牢になります。IP制限ですがhtaccessを使えることが必須になります。htaccessが使えるならば、こちらを利用して制限をかけるとよいでしょう。
ブルートフォースアタック対策
さきほどチラリご紹介した総当たり攻撃のことです。
可能性のあるものをかたっぱしから試しにくるので以下のような対策が有効と言われています。
・ログインURLの試行回数に上限を設ける
・プログラムによるログインではないことを証明するため、Google capchaを使う。
Googleのものはよく見かける「私はロボットではありません」というチェックボックス式のものです。こちらを使うと良いでしょう。
ユーザー登録機能の無効化
WordPressの便利機能でメンバーシップ機能があります。利用するシーンもないと思いますので「設定->一般->だれでもユーザー登録ができるようにする」の所のチェックは入れないようにしましょう。
パーミッション確認
パーミッションとはファイルの実行権限を指します。コアファイルを誰でも実行できるのはマズイですよね?おすすめは諸説あるのですが、一つの線引きとして「OWASP( Open Web Application Security Project)」という、ソフトウェアセキュリティについて話し合う世界的なコミュニティが紹介している「WordPressのセキュリティガイドライン」をご紹介します。こちらの基準に沿うならおすすめパーミッションは以下のものです
https://www.owasp.org/index.php/OWASP_Wordpress_Security_Implementation_Guideline
wp-config.php | 400 |
wp-content/uploads | 755 |
.htaccess | 400 |
ただ、使っているレンタルサーバーによっては上記でうまく動かなかったり、
パーミッション指定がある場合があります。
なるべく権限を付与しない形で、任意に調整するのが良いでしょう。
wp-config.phpファイルの移動
こちらもWordPressのドキュメントルートに設置されているのは世界共通です。
なので可能であればルートディレクトリ(ドメイン直下で表示されるディレクトリよりさらに上)に配置し、インターネット経由でのアクセスを禁止させるのも有効な手段となります。
こちらもサーバーによってできたりできなかったりしますので、確認してからやるようにしましょう。
XML-RPCの無効化
トラックバック送信用の設定ですが、無効化しておくとよいです。よく踏み台にされるケースが報告されています。
※JetPackをお使いだと最初のつなぎこみの時にうまくいかないので、JetPackを使うようでしたら、JetPackつなぎこみ後、再度有効にするようにしましょう。
セキュリティに関する情報収集はどうすればいいの?
セキュリティに関してですが、個人のブログであったり、セキュリティ団体の広報、メディアサイトの情報配信など、実に様々な形で情報が配信されています。
WordPressの良いところとして、普及されているということがあげられます。
普及されているということはそれだけ沢山の形で情報があり、比較的情報が収集しやすいということが言えるでしょう。
過去にセキュリティホールが見つかったプラグインやその後の対応なども追えるようにしてくれているサイトもあります。今回はそちらが見やすいサイトをいくつかご紹介いたします!是非一度皆さんのぞいて見てくださいね!
JVN ipedia
以下は独立行政法人情報処理推進機構が運用する、「JVN ipedia 脆弱性対策情報データベース」と呼ばれるもので、過去に起こった脆弱性リストなんかがまとめてあり、検索することが可能です。
利用中のプラグインに過去、どんな脆弱性が含まれていて、それは解決済みなのかなどを
調べることが可能です。
※図はWordPressでキーワード検索したものです。
CVE, Common Vulnerabilities and Exposures
実はソフトウェア全般のセキュリティには、そのレベルによって様々な分類分けが行われています。「CVE-年号-見つかった脆弱性番号」という感じでリスト化されているので是非一度のぞいてみてください。
※全部英語ですので、Google翻訳などを使いましょう!
※図はメニュー内の「Search CVE List」から「WordPress」で絞り込んだ検索結果です。
OWASP セキュリティガイドライン
チラリ紹介しましたが、OWASP( Open Web Application Security Project)はオープンソースソフトウェアのセキュリティを主に取り扱うコミュニティのことです。世界的にメンバーのいるプロ集団の集まりで、様々なエンジニアの方々が取り組みを行っています。
そんなOWASPでWordPressについてセキュリティガイドラインを公表しています。少し古いですが、体系的にまとめられており、基本的なガイドラインを俯瞰して考える際、とても勉強になります。こちらも英語ですが、時間がある際に翻訳(Google先生)して読んで見るのもいいとおもいます!
セキュリティは終わりなき格闘の旅
セキュリティ対策は基本的にイタチごっこです。
後から後から新しいハッキングが現れ、それの対策を施す。すると新しいハッキング方法が現れて。。。といった感じに「一度コレをやったから大丈夫」というものではなく、運用において日々メンテナンスをしておくことが肝要です。
バーっと紹介してきましたがまぁ数が多いですよねっw。
基本イタチごっこになりますので、セキュアなWordPressサイト運用を行なっていく上の心構えとして、以下2点を心にとどめておくと良いかもしれません。
(1)常に最新のものを利用するようにする
(2)定期的に情報収集するクセをつける。
上記を心がけておくことでも随分運用が変わってくると思いますよ。
ここで紹介したもののを、セキュリティ系プラグインでまとめて運用するのも良いでしょう。
「大変だよー(泣)」という方はそちらの導入を検討されて見るのも良いと思います!
みなさんもセキュアなWordPress運営、はじめてみませんか?
以上ケイジャニストでしたー!