WordPress便利だけど怖い
今月、新しくWebサイトを作りました。
今回はWordPressをメインに据えてWebサイトのベースとして利用しました。
WordPressでWebサイトを作るのは簡単!
でしたが、簡単過ぎる分、攻撃対象となった時には脆さも併せ持つな、と思いました。
とりあえずこのままセキュリティ対策を施さない状態でWordPressを運用するのは恐ろし過ぎるのがありますので、何らかのセキュリティ対策を取りたいと思います(^^)/
ログインガード
まず最初に思いつく対策として必要なのは
ログイン画面のガード
が必要であると思います。
ここを突破されてしまえば、後は好きにやられ放題になりますので(-_-;
昨日のブコメでもご指摘頂いてました。
id:weepさん
wp だとわかったら、すぐに wp-admin ディレクトリにアクセスしてしまう症候群。
これは何を仰っているかと言うと、WordPressのサイトのTOPページURLの後ろに「/wp-admin/」と入力すると、WordPressのログインページに辿りつく事が出来ます。
WordPressユーザーの方にはお馴染みのページですね。
ここでユーザー名とパスワードを入力し一致すればログインする事が出来ます。
で、ここに総当たり攻撃(ユーザー名とパスワードの組み合わせをドンドン試す攻撃)をされてしまい、突破されてしまえばサイトが乗っ取られてしまいます(>_<)
不正ログインという奴ですね(-_-;
「ユーザー名とパスワードの組み合わせなんて星の数ほどあるから、なかなか突破されないんじゃない?」
と思われるかもしれませんが、実際に突破されて不正ログインされている事がままあります。
記憶に新しい所としては、レンタルサーバー「ロリポップ」のWordPressが不正アクセスされた被害が結構大きく思い出されます。
「ロリポップ!」のWordPress利用者に不正アクセス被害
レンタルサーバーの「ロリポップ!」を運営するpaperboy&co.は8月28日、ロリポップ!サーバーで、CMSソフトウェア「WordPress」をインストールしているユーザーに対する不正ログイン事例を多数確認しているとして注意喚起を行った。
ユーザーサーバーにWordPressをインストールしており被害に遭ったアカウント数は4802件。なお、同社のサーバーに対するハッキングなどの事実は確認されていない。
この攻撃によって、WordPressに不正ログインした攻撃者が不正なファイルの設置を行ったほか、サイトを改ざんした事実が確認されている。
この時には総当たり攻撃(ブルートフォース・辞書攻撃)ではなくて「アカウントリスト攻撃」と呼ばれる新しい手法で突破された人が多く、4802件もの被害が出てしまったようです。
不正ログイン事件が急増した要因としては、「アカウントリスト攻撃」が挙げられる。これまでの不正ログインを行う手法としては「ブルートフォース・辞書攻撃」が多く行われていた。これは、1つのIDに対して攻撃者自身が用意した様々なパスワードを試していくことでログインを行うというもの。例を挙げると、IDを「mynavinews」と固定しておき、「1234」、「abcd」、「Password」といったパスワードを何十種類も試行していく手法だ。
一方で「アカウントリスト攻撃」は、特定サイトで侵入することができたID/パスワードの組み合わせをセットでリスト化し、他サイトでもログイン試行を行う。ユーザーが様々なWebサイトを利用する中で、多様なID/パスワードを使い分ける煩わしさから同一のものを使ってしまう盲点を突く攻撃と言える。攻撃者としてはログインの成功率が高いため、より多くのサイトに対する効率性の高い攻撃が可能となる。
「アカウントリスト攻撃」に対抗するためには
他のサイトで使用したIDとパスワードを自分のWordPressサイトに使用しない!
事が重要です。
忘れてしまう可能性はありますが、きちんと捨てたりすることのない手帳などに「IDとパスワードをメモ」しておき重複して使う事の無い様にしましょう。
ブルートフォース対策
でもアカウントリスト攻撃対策だけでは不十分ですね。
WordPressは普通に使っていると、IDはバレてしまう事が多いからです。
記事を書いた人のIDは普通に記事の最後に載っていたり、URLの後ろに「/?author=1」と入力すればユーザーIDが表示されてしまったりします(;_;)
IDがバレてしまうという事は、後はパスワードさえ分かれば不正ログインされてしまいます(>_<)
パスワードの総当たり攻撃だけで突破されかねません。
そこでユーザーIDが外部からは見えなくする対策がまずは有効なようです。
1-1-1.ユーザー名とブログ上の表示名を別のものにする
デフォルトの設定だと、ログインに使うユーザー名と、記事の執筆者であるブログ上の表示名は同一です。よって記事を見るだけで、ログインIDがわかってしまいます。
そこで以下の手順で、ユーザー名とは別の執筆者名のみを公開するように設定します。
1.ダッシュボードの「ユーザー」→「ユーザー一覧」とクリックし、表示されたユーザー名の下の「編集」をクリック
2.「ニックネーム(必須)」にすでに設定されているユーザー名と別の名前を設定。「ブログ上の表示名」で、新しく作ったユーザー名を選択。
こうすることで、記事の執筆者名とログインIDを別個のものにできます。
上記の方法で、WordPress表面に見えてくる執筆者名と、ログイン時に使うユーザーIDとを別の物に変える事が出来ますので、敵の目を欺くのに有効です(^^)w
ただし、まだ抜け道もある様なので下記の「Edit Author Slug」プラグインの導入も良い様です。
1-1-2.Edit Author Slugを導入する
ただし1-1-1で解説した対策法だけでは、「記事URL+/?author=1」と入力することで、設定によってはアドレスバーにユーザー名が表示されてしまう仕様に対して無力です。
1.ダッシュボードの「プラグイン」→「新規追加」とクリックし、検索ウィンドウに「Edit Author Slug」と入力してエンターを押す。
2.Edit Author Slugが表示されたら、「いますぐインストール」をクリック。
3.「プラグインを有効化」をクリック。
4.ユーザーの編集画面に進む
5.Author Slugを、ユーザー名とは別のものに変更
このふたつの設定を行うことで、ログインにはIDとパスワードが必要になるため、IDが露出していてパスワードのみの場合とくらべ、特定される可能性は大きく減少します。
ここまでやれば、ログインIDを外部に知られる事はなくなるので、多少安全性は上がるのかな、と。
ログインページへのアクセス制限
ただしログインIDを見えなくしても
ログインIDとパスワードの総当たり攻撃
をされた場合にはいずれ突破されかねません(>_<)
そこで有効になるのが
ログインページのアクセス制限
です。
下記のサイトで詳しく対策が載っていましたのでご紹介させて頂きます。
自分(自社)のWebサイトを持っていて、外部に公開している場合、そのサイトの管理画面へのアクセスは「自分」のみ許可し、外部からのアクセスは遮断しなければなりません。
一般的に遮断する方法としては、ログイン画面を用意し、「ユーザー名」と「パスワード」での認証方式が一般的ですが、昨今「ブルートフォースアタック」や、不正にアカウント情報を得ることによる、「不正ログイン」が多発しています。
なので、そもそも「ログイン画面」に外部からは一切アクセスさせないようにする必要があります。
そこで、「.htaccess」を利用して、自分のPC(グローバルIP)のみアクセスを許可し、その他のマシンへはアクセス制限をする設定をしました。
「.htaccess」ファイルをレンタルサーバーのWordPress設置フォルダに配置して、アクセス制限を掛ける方法ですね。
確か「エッチティーアクセス」ファイルとかって読むはずです(^-^;
「.htaccessファイルって何?何が出来るの?」
という方は下記サイトをご覧ください。
簡単に説明しておくと「アクセス制限・ユーザー認証・リダイレクト(自動転送)・エラーページのカスタマイズ」などの制御ができるとても便利なファイルになります(^^)w
ただ使い方を間違うと、自分もログインページにアクセス出来なくなったりする場合がありますのでご注意をば(^-^;
今回はログインページファイルである「wp-login.php」と、管理画面一式が格納されている「wp-admin」ディレクトリをガードする「.htaccess」ファイルを作って格納してみましょう(^-^)w
通常だと固定IPアドレスを使っている人なんて少数派なので、普通にプロバイダー契約されている方を対象に書きます。
まずは自分のプロバイダーで使用されているホスト名を取得します。
上記サイトにアクセスすると自分の使っているプロバイダーのホスト名が取得出来ます。
こんな感じに表示されます。
ホスト名の後ろの方が大事です。
私はプロバイダーが「BIGLOBE」なので「.mesh.ad.jp」というホスト名になります。
この「.mesh.ad.jp」を「.htaccess」ファイルに書いて指定する事で、BIGLOBE以外のプロバイダーを利用している人がアクセスできなく制限を掛けることが出来ます。
具体的には下記の様に「.htaccess」ファイルに書いて保存します。
<files wp-login.php> order deny,allow deny from all allow from .mesh.ad.jp </files>
あ、5行目の「allow from .mesh.ad.jp」の.mesh.ad.jpの部分はご自身のプロバイダーのホスト名に書き換えて下さいね(^-^)/
ただしWindowsの場合だと「.htaccess」という名前のファイルは保存する時に怒られるので、「wp-login.htaccess」の様なファイル名にして保存します。
そしてFFFTP等のFTPツールを利用してWordPressのインストールフォルダに「wp-login.htaccess」ファイルをアップロードします。
そしてアップ後にファイル名を「.htaccess」に変更します。
ただし、WordPressフォルダに「.htaccess」が存在する場合には上書きせずに、「.htaccess」ファイルをダウンロードしてそのファイルの内容も「wp-login.htaccess」ファイルにコピペで追記してからアップする様にして下さい。
元々必要で書かれていた「.htaccess」ファイル内容が消えてしまうと色々な制限が外れたりする恐れがありますので、ご注意を!
続いて、管理画面ファイルが格納されている「wp-admin」ディレクトリをガードする「.htaccess」ファイルを作ります。
Windowsでは「wp-admin.htaccess」の様なファイル名を付けて下記の内容を貼り付けて保存します。
order deny,allow deny from all allow from .mesh.ad.jp
4行目の「allow from .mesh.ad.jp」の部分はご自身のプロ台だーホスト名に書き換えて下さい。
FFFTPで「wp-admin」ディレクトリ内に移動して、そこに「wp-admin.htaccess」ファイルをアップロードし、アップ後に「.htaccess」にリネームします。
これでアクセス制限が掛かりました(^-^)w
実際に効いているのか試してみましょう!
まずはプロバイダー経由でアクセスします。
自宅のWi-Fi経由ですね。
普通に表示されます。
続いて、Wi-Fiを切ってdocomoのSIMから繋ぎます。
LTE接続です。
「Forbidden」と怒られました(^o^)/
成功です!
こうしてあげる事で、同じプロバイダーの人間意外からは攻撃されない様に出来ました♪
大抵の攻撃は海外サーバー経由で攻撃されますので、日本国内のプロバイダーからしかアクセスできない様にする事で、ほとんどの攻撃を防ぐことが出来ます(^o^)v
これで不正ログイン対策はまずはOKかな、と♪
まとめ
- WordPress乗っ取りの手口はログインページからの「総当たり攻撃」と「アカウントリスト攻撃」がある。
- 他サイトのログインIDやパスワードをWordPressに使い回さない!
- ユーザーIDが分からない様にする対策でまずは防御!
- 「.htaccess」ファイルを利用してアクセス制限も掛ければ更に万全!