WordPressでサイトを作成した際、最低限しておくべき7つのセキュリティ対策

新年明けましておめでとうございます。
今年も宜しくお願い致します。
どーも、ナースヨシダです。(※女装癖はありません)

早速なのですが、「WordPressでサイトを作成したことがある」という人はたくさんいると思いますが、特に何もせずデフォルト設定のまま運営していませんか?実はそのままにしておくと、セキュリティ対策が施されておらず、サイトの改ざん、情報の漏洩などの危険性があります。ということで今回はその7つの脆弱性とセキュリティ対策方法を簡易的ではありますが紹介していきます。前回までの記事で取り上げたものもまとめてあるので、詳しくは各ページを参考にしてください。よくわからないところがあれば、お気軽にヨシダまでお問い合わせしてください。

では7つの脆弱性、対策を紹介していきます。
テストサイトは毎度おなじみヨシダのブログサイト(https://www.yoshidamasaaki.com

〜脆弱性その1〜
WordPressのユーザー名を取得することができる


WordPressは投稿者アーカイブ機能があるため、ユーザー名(ログインID)が外部から閲覧可能となっています。攻撃者がブルートフォースアタックを行う際の手助けとなり、容易に管理画面に不正アクセスされる可能性があります。例えば、僕のサイトでは「https://www.yoshidamasaaki.com/?author=02」にアクセスすると「https://www.yoshidamasaaki.com/author/yoshida/」が表示され、「yoshida」というユーザー名が確認できます。こちらは「サイトURL/?author={数字}」でアクセスするとユーザー名が露呈するWordPressの仕様による脆弱性になっており、改善策としてはユーザー名が表示されるページを非表示(トップページにリダイレクト等)や、URLに表示されるユーザー名を変更する必要がございます。一番簡単な方法としてプラグインで対応することができます。「Edit Author Slug」こちらのプラグインは、ユーザー名を判らなくするために外部表示時のユーザー名を設定することができます。プラグイン「Edit Author Slug」を導入して、「https://www.yoshidamasaaki.com/?author=04」にアクセスすると「https://www.yoshidamasaaki.com/author/tst/」が表示されるのを「https://www.yoshidamasaaki.com/author/abc/」が表示されるように設定してみました。

これにより「サイトURL/?author={数字}」で検索されても、ユーザー名が露呈されないようになりました。管理画面にログインする際のユーザー名はそのままですが、サイトに表示されてしまうユーザー名だけを変更したことになります。また、以下のコードを
functions.phpに追記すれば、「サイトURL/?author={数字}」で表示しても、ホーム画面にリダイレクトすることもできます。

function knockout_author_query() {
// disable author rewrite rule
global $wp_rewrite;
$wp_rewrite->flush_rules();
$wp_rewrite->author_base = '';
$wp_rewrite->author_structure = '/';
// for author query request
if (isset($_REQUEST['author']) && !empty($_REQUEST['author'])) {
$user_info = get_userdata(intval($_REQUEST['author']));
if ($user_info && array_key_exists('administrator', $user_info->caps) && in_array('administrator', $user_info->roles)) {
wp_redirect(home_url());
exit;
}
}
}
add_action('init', 'knockout_author_query');


あまりプラグインで対応したくない人は、PHPだけで対応してもいいでしょう。

参考ページ:https://www.leon-tec.co.jp/yoshida/7747/

〜脆弱性その2〜
強制ブラウジングによるWordPress管理画面の閲覧が可能


WordPressは「サイトURL/wp-login.php」にアクセスすると管理画面が表示されることがわかっているので、ログインすることによって管理機能の奪取等が容易に成功してしまい、サイトの改ざん、情報の漏洩の危険性があります。改善策として管理機能への外部からの閲覧制限(IP認証や最低限ベーシック認証の導入等)があります。今回は管理画面にBASIC認証をかける方法を紹介します。まず自分のサイトを運営しているサーバーへSSH接続して、WordPressがあるディレクトリ以下などに「.htpasswd」ファイルを作成します。コマンドは「htpasswd -c -b {.htpasswdを作成するディレクトリルート(例:/var/www/html/wordpress/.htpasswd)} {ユーザー名(例:yoshida)} {パスワード(例:pass1234abc)}」で作成できます。

画像のように.htpasswdの中身を見ると暗号化されているのがわかります。暗号化されてはいますが、もちろんパスワードは「pass1234abc」なんかじゃなくて、もっと複雑にしてください。次にhttpd.confに以下のコードを追記(例:vi /etc/httpd/conf/httpd.conf)します。

<Directory “{wp-login.phpまでのディレクトリルート(例:/var/www/html/wordpress/wp-login.php)}”>
AuthUserFile {.htpasswdを作成したディレクトリルート(例:/var/www/html/wordpress/.htpasswd)}
AuthGroupFile /dev/null
AuthName “Basic Auth”
AuthType Basic
Require valid-user
</Directory>


追記したら保存(etc+:wq)してApacheを再起動(service httpd restart)します。一応サイトの管理画面にアクセスして確認してください。

ちゃんとBASIC認証がかかっていれば完了です。

参考ページ:https://www.leon-tec.co.jp/yoshida/7532/

〜脆弱性その3〜
バージョン情報の露呈


バージョン情報をもとに仕様や公開されているバグ情報など攻撃の方法が絞り込めるため、リスクが増します。対策として、よくバージョンが表示されてしまっているApache、PHP、WordPressそれぞれのファイルを修正します。まずはApacheのバージョン非表示設定ですが、httpd.confに「ServerTokens Prod」を追記してApacheを再起動します。

次にPHPのバージョンを非表示にするために、httpd.confに「Header unset X-Powered-By」を追記してApacheを再起動します。

またはphp.iniの「expose_php = On」を「expose_php = Off」に変更しても、非表示に設定することができます。

最後にWordPress本体のバージョンを非表示設定は、管理画面にログインして「テーマの編集」からfunctions.phpに「remove_action(‘wp_head’,’wp_generator’);」を追記して「ファイルを更新」してください。

これでApache、PHP、WordPressのバージョン非表示設定が完了です。

参考ページ:https://www.leon-tec.co.jp/yoshida/7855/

〜脆弱性その4〜
ログイン画面の設定不備(アカウントロック)


ログイン失敗回数に制限がない場合、パスワード辞書の使用や総当たりによるパスワードクラッキング攻撃が成功する恐れがあります。連続でパスワードを間違えたアカウントは一定時間または管理者が解除を行うまでの間ログインできないようにする機能 (アカウントのロック機能)を実装してください。ロック機能を実装することで、攻撃者によるパスワードクラッキングの試みが困難となり、不正ログインの成功率が大幅に低下します。なお、ロックまでの回数は、少なすぎる(2, 3回)とユーザの利便性が低下します。5~10回程度の回数が設定されているサイトが多くなっています。こちらはプラグインで対応することができます。プラグイン「SiteGuard WP Plugin」は、管理ページとログインページを保護することができます。プラグイン「SiteGuard WP Plugin」を導入したら、設定の「ログインロック」から「期間」「回数」「ロック時間」をそれぞれ設定することができます。

このプラグインはそのほかにも、「管理ページへのアクセス制限」「ログインページのURL変更」「画像認証の導入」「ログインに関するエラーメッセージの無効化」「ログインアラートの設定」「フェールワンス」「XMLRPC防御」「アップデートの通知」「WAFチューニングサポート」「IPアドレスの取得方法を設定」「ログイン履歴の閲覧」をすることができます。

参考ページ:https://www.leon-tec.co.jp/yoshida/7532/

〜脆弱性その5〜
HTTPSによる暗号化通信が行われていない


HTTPでは通信内容の暗号化が行われないために、個人情報の盗聴が行われる可能性があります。そのため、個人情報などの機密性を要するデータの送信を行うページにはHTTPSでのみ通信が行えるように設定します。また最近では、サイト全体をSSL化するのが一般的になってきています。こちらはプラグイン「Really Simple SSL」で対応することができます。インストールして有効化したら、管理画面上部に確認メッセージとともに表示される「はい、SSLを有効化します」ボタンをクリックします。これで完了です。もちろんSSL証明書を先に発行しておかなければいけません。AWSを利用すれば無料で発行することもできます。詳しくは下記の参考ページをご覧ください。

参考ページ:https://www.leon-tec.co.jp/yoshida/7570/

〜対策その6〜
バックアップによる対策


ウィルスや不正プログラムというものは日々進化していますし、システムというのは(既知・未知含め)何かしらの脆弱性を含んでいるものです。なので、もしもハッキング被害(クラッキング)に遭った時のために、バックアップをとっておく事は必須になります。しかし、その作業が面倒、やり方がわからないなどの理由からバックアップ作業を怠る人が多いです。WordPressサイトでバックアップすべき項目は3つあります。まず1つ目はWordPressのフォルダ・ファイル一式です。こちらは、サーバーとFTP(FTPS、SFTP)接続してファイルをローカルにダウンロードするだけで大丈夫です。

2つ目はWordPress管理画面からエクスポートできる各記事・固定ページ・カテゴリ・タグ等の情報です。こちらはXML形式でローカルに保存できます。やり方は管理画面の「ツール」から「エクスポート」を選択して「エクスポートファイルをダウンロード」をクリックするだけです。

3つ目はWordPressで利用しているデータベースのバックアップです。こちらはコマンド「mysqldump -u root -p -x –all-databases > XXX.sql」などでMySQL内の全データをファイルXXX.sqlに出力することができますが、phpMyAdminを使用すればWebからの操作でも簡単にバックアップがとれます。詳しくは下記の参考ページをご覧ください。

参考ページ:https://www.leon-tec.co.jp/yoshida/7927/

〜対策その7〜
セキュリティアップデートによる対策


WordPressは、オープンソースで最も有名なCMSのため、ハッカーのターゲットになりやすく、脆弱性も発見されやすいです。脆弱性が発見された場合、Wordpressは、その都度バージョンアップをして対策をしています。なので、最新バージョンは既知の脆弱性がなく、逆に古いバージョンは、古ければ古いほど脆弱性が多くなります。基本的な事ですが、WordPress本体、テーマ、プラグインは常に最新版にしておきましょう。更新の詳細は、「ダッシューボード」の「更新」から確認できます。もしアップデートしていないものがあれば、すぐにアップデートしておきましょう。

また、未使用のプラグインについてですが、こちらは「停止」にするだけじゃなく、「削除」しておくのが良いとされています。「削除」しておかないと、プラグインに脆弱性が存在した場合、その脆弱性が狙われる可能性があるからです。

【最後に一言】

「これでセキュリティ対策はバッチリね♡」というわけにも本当はいかないのです。まだまだ脆弱性というのは存在していますし、こちらはWordPressの場合に限るものです。セキュリティ診断を行いたい方はお気軽にレオンテクノロジー吉田までご連絡ください。(誰がこんな女装するような奴に依頼するか)とか思わないでくださいね。僕もきっと30歳くらいになったら、何でこんな変なアイキャッチ画像にしたんだろうって後悔していると思います。若気の至りってやつですね。最後までご覧いただきありがとうございました。

LINEで送る
Pocket

こんな記事も読まれています