WordPressのセキュリティを
意識した設定flowとか
これらのトラブル経験からサイトの管理運営を最適化したサービス「DtA Web Master」を始めました。
DtA Web Master
( 現状、メモに近い書きかけのコンテンツです )
- インストール時に、dbのprefixを設定する。これは昨今、サーバ会社さんの方で自動で割り振られたりしているので比較的スタンダードになっている。まずは安心。もし、そうでない場合は、意図的にprefixを追記する必要がある。
- インストールするディレクトリ名は、一時期、/wp/以外にすると良いといわれましたが、結局、サイトができた際に、ソースをみるとわかってしまうので、ディレクトリ名は、それほど注意する必要はない。
- インストールで一番のポイントは、管理者IDとしてのadminである。つまり、デフォルト(初期状態)だと、管理者IDはadminになってしまう。これが、問題で、ハッカー達は、まずはIDはadminでアタックしてくるので、管理IDはadminにしない事が必須である。
- あと、admin+御社名やadmin+ドメイン名とかも、ハッカーはトライしてきますので、それ以外にしてください。弊社の例ですと、admindtaとかadmindt-aというのは良くないという意味です。ログインIDは、特定の方法で外部から簡単に取得できてしまいます。
- パスワードはある程度の長さで、推察されにくいパスワードにしてください。御社名や電話番号、社長の名前、御社サービス名など、サイトに掲載されるワードはさけてください。意味不明なパスワードが良い、とされていますが、これは間違いではないのですが、ポイントはハッカーにとって意味不明である事が重要です。ハッキングでDictionary Attackという辞書に掲載されている単語を中心にアタックする手法がとられたりします。
- IDやパスワードで問題になるのは、保存方法で、平文(見たまま判読できるテキスト)での保存は避けた方がよいです。意外なほどに、お使いのマシン(PC)から情報が漏洩しているケースがあります。IDとパスワードが書かれたテキストデータでしたら、開封パスワードをかけて圧縮する、とか、最低限エクセルなどのデータで開封パスワードを設定してください。チーム間で共有する場合、メールで共有する場合は、パスワードを設定したファイルにしてください。メール文中に直接記載するのはオススメしません。そして、そのファイルにパスワードを設定してください。
- この平文というのが良く理解されないようなので説明しますと、例えば、admindtaというIDを保存する場合、このままでは、保存したマシンがハッキングされれば、即、IDはadmindtaとわかってしまいます。それを、保存時には、管理自社、としておきます。つまり、使用する際に、管理→admin、自社→dtaと変換する訳です。
- こういったルールを複数組み合わせたり、セキュリティ管理の起点となる日をチームで共有する事で、ある日付に一定の数字追加するなどして、より簡単には判読できない方法をとる事も可能です。
例えば、セキュリティパスワード変更をチームで7月1日に共有した場合、0701に、一定の数字、たとえば、1234と決めておけば、セキュリティパスワードのメールの日付(0701)に1234を加算する、1935、これをパスワードの末尾や先頭に追加するだけでも、平文での保存よりセキュリティレベルがあがります。 - 上記2つを合算しますと、パスワードを、管理自社防衛(セキュリティを防衛としました)、として保存していた場合、実際のパスワードは、admindta1935となります。なので、平文で保存しない、といのはこういう事です。ここに大文字や特殊文字(@、(、)、’、_、)を追加して、@dmin’(DtA)_1935、とでもするとセキュリティレベルは向上します。※)これは一例で実際にはもっと難解なパスワードを生成しているケースもあります。
- 初期設定時に、ユーザーIDがサイトに表示されない設定も重要です。方法は、ユーザー→ニックネームを編集→ブログ上の表示名からニックネームの方を選択。これで大丈夫です。デフォルト(初期状態)では、ユーザーIDがそのままブログ上の表示名として使用されるので、管理画面へのアタックの際に、アカウントIDとして使用されてしまいます。アタッカー(ハッカー)のレベルが高くなると、これでもIDを突き止められてアタックされます。
- 弊社では、All in One WP Security & Firewall を活用しています。←は英語のページですが検索すれば使い方を解説したサイトは多数あります。
- このプラグインの、すべての設定を実行する必要はないと考えておりまして、
弊社が設定しいてるのは、管理IDをadminにしてしまった場合に、このpluginが有効になります。User Accountsから、admin以外に変更が可能です。もしくは、他に管理アカウントを作成して、ログインし直して(一端ログアウトの後、新しい管理アカウントでログインする)、adminアカウントを削除する。 - SettingsのWP Version infoにチェックをいれるとソース部分で表示されるwordpressのバージョン表記を削除できます。どんなメリットがあるかといいますと、ハッカーはwordpressのバージョンに対応した方法でアタックをしてきます。なので、まず、こちらのバージョンをクローズにする事で、アタック方法を(少しですが)制限できるのです。
- User Loginでは、Login Lockdownを設定します。初期状態では、5分間に3回ログインをミスすると60分間アクセスできなくなる、という設定です。ここを120分とかに設定しています。このUser Loginの中のNotify By Emailにメールアドレスを記載して、チェックをいれておくと、不正アクセスがあった場合、メールでお知らせがとどきます。
ログインしてLogin Lockdownを設定している場合、複数回のミスでログインできなくなった場合、設定した時間おいて(経過して)再トライする、もしくは、違うIPアドレスからアクセスする方法が必要なります。身近な方法ですと、スマホのテザリング、もしくはお使いのルーターを再起動する事で可能です。
管理画面から、LockOutさせられたIPアドレスを確認・解除する方法もあります。UserLogin→LoginLockDownタブのしたの方、Currently Locked Out IP Adrdress Rangeの中にLocked IP Addressのリンクがありますので、そのリンク先でロックされたIPアドレスを確認・解除する事ができます。これは、チームで作業していて誰かがロックされてしまった場合にロック解除するようなケースで使用します。 - Firewallもチェックをいれていますし使用しないにしても、コメント機能やpingbackは制御にチェックをいれます。
- Brute Forceは管理画面への不正アクセスをプロテクトする機能です。wordpressの場合、ログイン画面へのアクセスURLが容易に推察できてしまうので、ログインURLを変更する機能です。
一部のthemeが原因なのか、この機能が使用できないケースもあります。つまり、設定をしても反映されず、単に、404エラーになったりします。この場合、ログインができなくなりますので、このページの一番下に書かれた方法(22)でリカバリーする必要があります。 - ログイン画面に、簡単な計算式を追加して自動でBrute Forceアタックしてくるスパムアクセスに対してハードルをあげる事も可能です。Brute Force→Login Captchaです。パスワードを忘れた際の「パスワードをお忘れですか?」にもこのキャプチャを設定できます。
- 他にも、htaccessやwp-configファイルのパーミッションもこのツールで設定しています。
- さらに、不正なアタックがどれくらいあるのか、上記All in One WP Security & Firewall の管理画面にアクセスしてログインエラーをしたログをみる事ができます。
User Login→Failed login Recordsに表示されます。
この場合、アクセス元のIPの末尾が、*(アスタリスク)になった表記もありますが、これは、このまま、BlackListManagerに登録すれば、より広範囲の近いIPもプロテクトされます。もし、広範囲なIPのプロテクトが気になる場合は、アクセス元IPの*(アスタリスク)を含まないタイプを登録する事で解決できます。 - ログインユーザーのチェックも重要です。User Login→Account Activity Logsで、ログイン履歴の確認ができます。ログインの日付、IPアドレスをチェックしてください。普段アクセスしないIPからのアクセスは要注意です。
- 不正アクセスが確認できた場合、そのアクセス元のIPアドレスを、All in One WP Security & FirewallのBlacklist Managerに設定することもお忘れなく。
ただ、スパムアクセスをしてくるようなところですので、IPアドレスも自在に変更しているとは思いますが、一応、弊社では、スパムアタック元のIPアドレスは、このBlacklist Managerに登録する事にしています。
この設定をしますと、wordpressディレクトリのhtaccessに追記されますので、ある時、htaccessを確認して、不明な記述がある、とならないようにしてください。 - さて、ここで上記方法でセッティングをしたとして、ログインができなくなるケースがありました。つまりログインURLを変更したのですが、そのURLにアクセスしても、404エラーとなってしまったケースです。
この場合、FTPでサーバにアクセスしまして、pluginディレクトリの中のall-in-one-wp-security-and-firewall このディレクトリをいったんダウンロードした上で削除すると、初期状態のログインURLからログインできます。パーミッションを000にする事でも同じです。 - wp-adminディレクトリにbasic認証をかけると良いという情報がネット上にありますが、これは間違っていまして(個人的な意見です)、設定しますと、一部ページ閲覧時にbasic認証のIDとpasswordが要求されます。
- 管理画面から、プラグインやシステムファイルの編集をできなくする事も有効です。wp-config.phpの末尾に、
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true );
といった記述を追加します。問題点としては、アップデートの際には上記の記述をいったん削除した上で実行する必要があります。
これらのトラブル経験からサイトの管理運営を最適化したサービス「DtA Web Master」を始めました。
DtA Web Master