トップ ライブラリ/Framework/CMS WordPress カスタマイズ セキュリティ対策

WordPress(ワードプレス)のセキュリティ対策―WPScanの使い方など。

WPScan(WordPressの脆弱性診断ツール)の使い方や各種セキュリティの設定方法など、WordPress(ワードプレス)のセキュリティ対策についてまとめています。

▲記事トップへ

目次

この記事の目次です。

1. WordPressの脆弱性診断(セキュリティチェック)
2. WordPressの脆弱性診断ツール(WPScan)
3. セキュリティ対策1(不要プラグイン、テーマの削除)
4. セキュリティ対策2(本体やテーマ・プラグインの更新)
5. セキュリティ対策3(.htaccessで行える対策)
6. セキュリティ対策4(テーマで行える対策)
7. セキュリティ対策5(ダッシュボードで行える対策)
8. セキュリティ対策6(脆弱性情報を収集して確認する)

もっと知識を広げるための参考
更新履歴

1. WordPressの脆弱性診断(セキュリティチェック)

アプリケーションやシステムのセキュリティ対策のためには、脆弱性診断(セキュリティチェック)が必要です。 WordPressも同様にWordPressのセキュリティ対策を行うには、まずセキュリティチェックを行う必要があります。 ここでは、簡単にセキュリティ用語を補足しておきます。

脆弱性診断

脆弱性診断とは、その単語のとおりで、OSやアプリケーション、ネットワークを含めたシステムの脆弱性を検査することをいいます。

ブラックボックス検査

プログラムのバグを見つけるのと同様に脆弱性もテストを行って見つけます。 脆弱性検出関連のテストの種類には大きく、設計書やソースコードを基にしたホワイトボックス検査と実際に疑似的な侵入や攻撃手法などを用いて行うブラックボックス検査があります。 通常は脆弱性検査という場合はブラックボックス検査のことをいうことが多いです。

ブラックボックス検査には、「セキュリティホール検査」、「セキュリティスキャン」、「セキュリティ診断」、「脆弱性診断」、「ペネトレーションテスト」、「侵入検査」、「侵入テスト」などの呼称があります。

ペネトレーションテスト

ペネトレーションテストは、公開Webサーバや組織のネットワークの脆弱性を探索し、 サーバに実際に侵入できるかどうかを確認します。

2. WordPressの脆弱性診断ツール(WPScan)

WordPress専用のWordPressの脆弱性診断ツールです。 本体、プラグインの公開されている脆弱性やPHP、Webサーバの設定確認、ログインなどの設定のチェックが行えます。

WPScanのインストール方法

以下はローカルPC内のVM上にインストールしたCentOS7へのインストール例です。

CentOS7のインストール

minimalでインストールします。

前提パッケージインストール

前提パッケージとアップデートを行います。

su -
yum -y groupinstall base
yum -y groupinstall development
yum -y update
yum -y install openssl-devel readline-devel libxml2 libxml2-devel libxslt libxslt-devel libcurl-devel patch bzip2
yum remove ruby

Rubyのインストール

Rubyをインストールします。

cd /root
git clone https://github.com/wpscanteam/wpscan.git
git clone https://github.com/sstephenson/rbenv.git /root/.rbenv
echo 'export PATH=$HOME/.rbenv/bin:$PATH' >> /root/.bash_profile
echo 'eval "$(rbenv init -)"' >> /root/.bash_profile
source /root/.bash_profile
git clone git://github.com/sstephenson/ruby-build.git /root/.rbenv/plugins/ruby-build
cd /root/.rbenv/plugins/ruby-build
./install.sh
cat /root/wpscan/.ruby-version
rbenv install <確認したルビーバージョン例:2.6.2>
rbenv rehash
rbenv global <確認したルビーバージョン例:2.6.2>
rbenv local <確認したルビーバージョン例:2.6.2>

WPScanインストール

WPScanをインストールします。

cd /root/wpscan
gem install bundler && bundle install
gem install wpscan

WPScanの使い方

データベースのアップデートは以下で行えます。

wpscan --update

標準スキャン+ユーザID抽出する場合は以下で行えます。

wpscan --url <WordPressのURL> --enumerate u

api-token(https://wpvulndb.com/)を使用して、標準スキャン+脆弱なプラグインや脆弱なテーマ、ユーザID抽出、DBエクスポートなど、基本的なスキャンは以下で行えます。

wpscan --api-token <wpvulndb.comのトークン> --url <WordPressのURL> --enumerate vp,vt,tt,cb,dbe,u,m

3. セキュリティ対策1(不要プラグイン、テーマの削除)

はじめに消さないと怖くて誰も消さなくなります。 使わないプラグイン、テーマははじめに消したいです。

WPScanを掛ければわかりますが、プラグインの脆弱性情報を調べて脆弱なテーマ、プラグイン使わないようにします。

4. セキュリティ対策2(本体やテーマ・プラグインの更新)

本体やテーマ・プラグインの更新を行います。 1度きりの更新ではなく、定期的にチェックして運用を通して更新管理が必要です。

場合によってはゼロディ脆弱性(脆弱性の対策がない状態)になっている場合は該当機能を外す対処も必要です。

5. セキュリティ対策3(.htaccessで行える対策)

.htaccessでも行える簡単なセキュリティ対策についてまとめています。

HTTPレスポンスヘッダ

HTTPレスポンスヘッダの設定は.htaccessでも簡単に記述出来ますので設定しておきましょう。

<ifModule mod_headers.c>
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options sameorigin
Header always set X-Download-Options: noopen
Header always set X-Powered-By: ""
Header add Strict-Transport-Security "max-age=15768000"
</ifModule>

<IfModule mod_php5.c>
php_flag session.cookie_httponly on
php_flag session.cookie_secure On
</IfModule>

<IfModule mod_php7.c>
php_flag session.cookie_httponly on
php_flag session.cookie_secure On
</IfModule>

※「X-Frame-Options」の設定はdenyにするとElementor(ロード中で止まる)などのプラグインが動作しなくなりますので、sameoriginを設定します。

「wp-config.php」にアクセスさせない設定

.htaccessに記述します。

<Files wp-config.php>
order allow,deny
deny from all
</Files>

RSSを使用しない場合は「xmlrpc.php」もアクセスさせない設定

.htaccessに記述します。

<Files xmlrpc.php>
 Order Deny,Allow
 Deny from all
</Files>

「wp-config.php」のアクセス権限を「400」に設定、その他

サーバ―内の別のアカウントのユーザにDBの接続先が見られないようにしておきたいです。

その他、ログイン画面のパス変更、ログイン試行回数の設定を行っておきたいです。

出来れば、サイト構築中は全体にBASIC認証を設定とIP制限を設定しておきたいです。 そして、運用時はwp-login.phpに制限しておきたいです。

パスワードファイル作成は以下で行えます。

htpasswd -c .htpassword <ユーザ名>

.htaccessに以下の設定を追加します。

テスト時の例

テスト時は、.htaccessに以下を記述。

ip制限する場合(Apache 2.2以前)
order deny,allow
deny from all
allow from <許可するIPアドレス>
ip制限する場合(Apache 2.4)
Require all denied
Require ip <許可するIPアドレス>
Basic認証の場合
<Files wp-login.php>
AuthUserFile <パス>/.htpassword
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
</Files>

運用時の例

運用時はwp-login.php、.htaccessに以下を記述。

ip制限する場合(Apache 2.2以前)
<Files wp-login.php>
order deny,allow
deny from all
allow from <許可するIPアドレス>
</Files>
ip制限する場合(Apache 2.4)
<Files wp-login.php>
Require all denied
Require ip <許可するIPアドレス>
</Files>
Basic認証の場合
<Files wp-login.php>
AuthUserFile <パス>/.htpassword
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
</Files>

参考

.htaccessについて以下のサイトを参考にしました。

6. セキュリティ対策4(テーマで行える対策)

テーマで行える対策についてまとめています。

バージョン情報などの情報を出さないようにテーマのfunction.phpに以下を記述

// バージョン情報を極力開示しないようにする
remove_action('wp_head', 'wp_generator');
foreach ( array( 'rss2_head', 'commentsrss2_head', 'rss_head', 'rdf_header', 'atom_head', 'comments_atom_head', 'opml_head',
'app_head' ) as $action ) {
        remove_action( $action, 'the_generator' );
}

function remove_cssjs_ver( $src ) {
        if( !is_user_logged_in() && strpos( $src, '?ver=' ) )
                $src = remove_query_arg( 'ver', $src );
        return $src;
}
add_filter( 'style_loader_src', 'remove_cssjs_ver', 10, 2 );
add_filter( 'script_loader_src', 'remove_cssjs_ver', 10, 2 );

// ユーザID情報を開示しないようにする1(?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');

// ユーザID情報を開示しないようにする2(REST API)
function my_filter_rest_endpoints( $endpoints ) {
	if ( isset( $endpoints['/wp/v2/users'] ) ) {
		unset( $endpoints['/wp/v2/users'] );
	}
	if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
		unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
	}
	return $endpoints;
}
add_filter( 'rest_endpoints', 'my_filter_rest_endpoints', 10, 1 );

アップロード画像ページが生成されないようにする

アップロードした画像を表示するページが自動生成されると、テスト用の画像や未公開の画像が露出したり、中身のないコンテンツで集客に影響を及ぼす恐れがあります。

attachment.phpを作成して以下を記述しておくと安心です。

<?php
wp_redirect( home_url(), 302 );
?>

7. セキュリティ対策5(ダッシュボードで行える対策)

ダッシュボードで行える対策についてまとめていきます。

管理画面のログインユーザIDがわからないように表示名を変更しておく

管理画面のプロフィールのところで表示名はユーザIDにしないように設定しておきます。

8. セキュリティ対策6(脆弱性情報を収集して確認する)

セキュリティ対策を行うには、脆弱性情報の収集と確認が必要です。 脆弱性データベースのサイトを確認する、Twitterでアカウントをフォローすると効率的に情報収集が行えると思います。

patchstack

グローバルなセキュリティコミュニティのpatchstackが提供する脆弱性データベースです。 WordPressプラグイン、テーマ、およびコアセキュリティの問題が検索できます。

サイト)https://www.exploit-db.com/

Twitter)https://twitter.com/exploitdb

exploit-db

エクスプロイト(攻撃コード)の情報が収集できます。 WordPressというよりは全般的な脆弱性情報になりますが、WordPress関連も検索できます。

サイト)https://patchstack.com/database/

Twitter)https://twitter.com/patchstackapp

NIST

アメリカ政府機関公式の脆弱性データベースです。 WordPressというよりは全般的な脆弱性情報になりますが、WordPress関連も検索できます。

サイト)https://nvd.nist.gov/search

Twitter)https://twitter.com/NISTCyber

JVN

JPCERT コーディネーションセンターと独立行政法人情報処理推進機構 (IPA)が共同で運営している脆弱性データベースです。 WordPressというよりは全般的な脆弱性情報になりますが、WordPress関連も検索できます。

サイト)https://jvndb.jvn.jp/

Twitter)https://twitter.com/JVNiPedia

知識を深めるための参考

更新履歴

戻る

スポンサーリンク

サイト内のページ

言語
C・C++ /HTML /Java /JavaScript /PHP /シェルスクリプト

開発環境
Ant /Burp /Eclipse /Fiddler /gcc /gdb /Git /g++ /JDK /JMeter /JUnit /Teraterm /ZAP

技術・仕様
Ajax /CORBA /Jakarta EE(旧称J2EE、Java EE) /JNI

ライブラリ/Framework/CMS
bootstrap /jQuery /FuelPHP /Lucene /MyBatis /Seasar2 /Spring /Struts /WordPress

Web API
Google Maps

ITインフラOSとミドルウェア
Linux /Windows /シェル
ActiveMQ /Tomcat /MariaDB /MySQL /Nagios /Redis /Solr

ITインフラサーバー
公開Webサーバー

ITインフラネットワーク
プログラミング /構築

ITインフラセキュリティ
公開サーバーのセキュリティ

PC製品
ZOTAC

SI
ホームページの作り方

その他
IT用語 /ITスキル体系

スポンサーリンク

関連サイト内検索ツール

zealseedsおよび関連サイト内のページが検索できます。

IPアドレス確認ツール

あなたのグローバルIPアドレスは以下です。

18.221.41.214

HTMLの表示色確認ツール

パスワード生成ツール

文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。

ここに生成されます。

スポンサーリンク