スポンサーリンク

WordPressのセキュリティ対策について記載します。
バグ修正版など最新版チェックをして更新を怠らないのはなんでも同じことです。
ここではWordpressだからこそという点にフォーカスしたいと思います。

スパムコメント対策

スパムコメント対策として以下があります。

  • コメント機能を無効にする
  • 匿名のコメントを禁止する
  • コメントを手動認証にする
  • コメントの内容に制限を与える
  • コメントはサードパティ製を使用する

Akismet Anti-Spam

プラグインによるスパムコメント対策の1例です。
Akismet Anti-Spamはサイトのコメントをチェックして、スパムのデータベースに照合して悪意のあるスパムの公開を防止します。個人ブログでは無料で使用できます。

ブルートフォースアタック対策

ブルートフォースアタックは、Webアプリケーションやサービス、システムに対してパスワードの総当たり攻撃を行い、暗号を解析し、不正にログインすることを言います。
WordPressに限ったことではありませんが、 ログインには通常ログインIDとパスワードが必要です。しかし、Wordpressの場合、管理者ユーザIDなどWordpressに登録されているユーザIDやユーザID一覧を簡単に取得することができます。以下のURLアドレスで取得できてしまいます。

https://phoenixknight.jp/?author=1

これの例では、当サイトのauthor権限のID=1のユーザIDが表示されます。
多くの場合、IDの数値が小さいと権限グループが管理者であることが推測されます。
このため、管理者のIDが簡単に取得できてしまうためあとはパスワードさえ判明すれば不正ログインが可能になります。

考えられる対策は以下の通りです。

  1. ログイン履歴
  2. ユーザ名の隠蔽
  3. ログイン試行回数の制限
  4. 管理画面のIPアドレスによるアクセス制限
  5. ログインURLの非表示
  6. パスワードの複雑化
  7. 二重のパスワード

これらを組み合わせることでより強固な対策が可能です。

ログイン履歴

いつ(日時)だれが(ユーザID)どこから(接続元IPアドレス)ログインしたのか?
WordPressの標準機能でわかりますか?
これがわからないということは、知らない間に誰かに不正ログインされたり、何度もログイン試行をされていても全く気が付きません。
例えば個人用ブログサイトを立ち上げ、管理者ユーザのみ登録して運用しており、必ず自宅のPCからログインして操作している場合、その人が外出中などの家にいない時間帯に同じユーザIDでログインに失敗していたという見覚えのないログイン試行をあなたはどう思いますか?
この後どのようなことが起こるのか予測できますか?

このような場合、悪意のあるユーザによる不正ログインのためのログイン試行や不正ログインと考えるべきです。それを知るためにもまずログイン履歴のようなログ表示がされないことには何もわかりません。

ユーザ名の隠蔽

ユーザ情報が表示される。またはネットワーク上に流れるため、悪意のあるユーザによってある方法でサイトに登録されているログインに必要なユーザIDを取得されてしまうのが問題です。
デフォルトで有効になっているWordpressの機能などから容易に取得できてしまうため、管理者が可能である意識がない状態で漏れてしまっていることが多々あります。
たとえばWP Rest APIが有効になっている場合、認証なしで情報を取得できてしまいます。
多くの情報を与えることでパスワードのヒントを与えてしまうこともあり、好ましくありません。

ログイン試行回数の制限

仮に悪意のあるユーザにユーザIDが知られてしまっても、ログインの試行が必ず行われるためログインの試行回数で制限するなり、失敗した回数で制限すればパスワードを解析する行為を妨害するもしくは遅らせることが可能です。

管理画面のIPアドレスによるアクセス制限

デフォルトの状態ではどのIPアドレスからでも管理画面にアクセスが可能です。ログインするユーザが使用するIPアドレスで管理画面のアクセス許可/拒否を設定すれば悪意のあるユーザからのログインを高い確率で防御できます。

ログインURLの非表示

ログインするためのページはWordpressでなくてもWebアプリやサービス、システムでデフォルトのURLが決まっていますので、ログインページはだれでも分かり得る情報です。
悪用されないようにURLを変更するかアクセス制限が必要です。

5番と6番についてはパスワードジェネレータなどで文字数の多い複雑なパスワードを生成しパスワード管理ソフトで管理すればよいと思います。

WP Cerber Security Antispam & Malware Scan

WP Cerber Securityを利用している理由はNginxに対応している点です。
Apacheを利用しているのであれば、普通に、SiteGuard WP Pluginの使用がおすすめです。

NGINXの設定

Nginxを使用している場合のセキュリティ設定に関して記載します。
通信の暗号化(SSL)に関しては割愛します。

HTTPセキュリティヘッダーの追加

www.owasp.org
404 - Not Found | OWASP
https://www.owasp.org/index.php/OWASP_Secure_Headers_Project#xxxsp
404 - Not Found on the main website for The OWASP Foundation. OWASP is a nonprofit foundation that works to improve the security of software.

このサイトの内容を参考に設定しました。

    ## Add Header for security
    ## Enable the builtin cross-site scripting (XSS) filter available
    ## in modern browsers.  Usually enabled by default we just
    ## reinstate in case it has been somehow disabled for this
    ## particular server instance.
    ## https://www.owasp.org/index.php/List_of_useful_HTTP_headers.
    add_header X-XSS-Protection '1; mode=block';

    ## Enable clickjacking protection in modern browsers. Available in
    ## IE8 also. See
    ## https://developer.mozilla.org/en/The_X-FRAME-OPTIONS_response_header
    ## This may conflicts with pseudo streaming (at least with Nginx version 1.0.12).
    ## Uncomment the line below if you're not using media streaming.
    ## For sites being framing on the same domqin uncomment the line below.
    add_header X-Frame-Options SAMEORIGIN;
    ## For sites accepting to be framed in any context comment the
    ## line below.
    #add_header X-Frame-Options DENY;

    ## Enable this if using HTTPS. See sites-available/example.com.conf
    ## for details.
    add_header Strict-Transport-Security "max-age=31557600; includeSubdomains; always";

    ## Block MIME type sniffing on IE.
    add_header X-Content-Type-Options nosniff;

wp-config.phpへのアクセス制限

location ~* /wp-config.php {
        deny all;
    }

wp-adminやwp-login.phpへのアクセス制限

    location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ {
        allow your IP address;
        allow 127.0.0.1;
        deny all;
        fastcgi_pass phpcgi;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

※この設定をするとjavascriptなどの実行でエラーになるため、カスタマイズページなどが表示されません。

その他

BOTを使って情報を収集していたりしますので、悪質なBOTのアクセスをユーザエージェントで判定して拒否するのもありだと思います。

感想

いろいろ対策するにも、まず何が起こっているのかがわからないとどうしようもありません。
WordPressはDrupalに比べるとその点がデフォルトで知らないでいい設定になっているようにも思います。しかし、今回、 WP Cerber Security プラグインを導入してみて初めて、ログイン試行が行われている事実を知りました。このときに使用されているユーザIDはでたらめなものではなく、先に記述した方法で取得したユーザIDを使用しています。ユーザIDを偽装した後だったので影響はありませんが、こういった不正アクセスを検知すると同じIPアドレスからのアクセスを一時的に拒否できるのもメリットです。
考えて判断するにはまず見ること知ることが重要です。

スポンサーリンク

この記事が気に入ったら
フォローしよう

最新情報をお届けします

Twitterでフォローしよう

おすすめの記事