前回は、WordPressのセキュリティ設定について紹介しました。
しかし、実感として「そんなにシビアになる必要があるの?」
「そんな簡単にログイン認証を突破されることなんてあるの?」という疑問もあると思います。
そこで、今回はWordPressのユーザ情報とパスワードを取得してみたいと思います。
1.ユーザ情報の取得
まずは、ユーザ情報からです。
WordPressの場合、ログインユーザ名を入手するのはとても簡単です。
試しにWordPressを普通にインストールしただけのサイトで確認してみます。
ブラウザでWordPressで作ったサイトに、以下のURLでアクセスしてみます。
http://<ホスト名>/?author=1
すると、画面には、通常は管理者ユーザ(admin)で作成した記事のアーカイブが表示されますが、そのアーカイブには、「adminのすべての投稿」という内容で表示されてしまい、このWordPressの管理者ユーザ名が露呈することになります。
WordPressの設定で「ブログ上の表示名」を設定すれば、この表示を修正することができますが、これでもまだ不十分です。
なぜなら、ブラウザの画面上には表示されませんが、上記のアーカイブページのソースを見てみると、以下のように、ばっちり管理者情報が表示されてしまうからです。
<body class=”archive author author-admin author-1 single-author”>
これは、管理者ユーザを「admin」以外で作成しても同じで、作成した管理者ユーザ名が見えてしまいます。
また、「?author=1」の数字を変えれば、他のユーザ名も表示することが出来てしまいます。
バージョンや環境によっては、「http://<wordpressのホスト>/?author=1」にアクセス後に遷移するURLが
http://<wordpressのホスト>/author/<ユーザ名>
と表示されたりしてしまうなど、至るところにユーザ情報が表示されます。
このように、WordPressのユーザ情報は簡単に入手することが出来ます。
これを表示させないようにするには、「Edit Author Slug」というプラグインなどを使うと簡単です。
ここでは、プラグインの使い方は紹介しませんが、興味のある人は試してみるといいかと思います。
2.パスワード情報の取得
では、次はパスワード情報です。
簡単なパスワードだと、いとも簡単にパスワードを抜き取られることを実験してみます。
- パスワード「asdf1234」の場合
これは、キーボードの並び順でパスワードを作ってしまった場合です。
案外使ってる人も多いのではないでしょうか。
では、実際にツールを使って、adminユーザに対してブルートフォースアタックをかけてみます。
ツールは、WPScanというWordPressのセキュリティチェックアプリを使います。
# time wpcan –url <wordpress_host_URL> –wordlist password.txt –username admin
[SUCCESS] Login : admin Password : asdf1234
real 5m59.602s
user 0m0.284s
sys 0m3.765s
この通り、約5分でパスワード「asdf1234」を取得することが出来ました。(実際には緑色ではありません。)
このコマンドでは、パスワードになりそうな文字列を列記した「password.txt」を読み込んで、「admin」ユーザで順にログインアタックをしてみました。
- パスワード「a1b2c3d4」の場合
time wpcan –url <wordpress_host_URL> –wordlist password.txt –username admin
[SUCCESS] Login : minami_admin Password : a1b2c3d4
real 1m23.330s
user 0m0.221s
sys 0m1.583s
このパスワードでは、約1分半でパスワードを取得することが出来ました。
このコマンドでは、実際にwp-login.phpへアクセスしているので、アクセスログに「/wp-login.php」へのアクセスログが大量に出力されます。
ちなみにこのツールでは、以下のようなコマンドで、ユーザ情報を取得することも可能です。
# wpscan –url <wordpress_host_URL> –enumerate u
まとめ
今回使ったパスワードファイルは、パスワードクラッカーで有名な「John the Ripper」の開発元が公開しているパスワードファイルを使用してみました。「a1b2c3d4」や「qwaszx」のようなよく使われるパスワードは、すでにこういった形で公開されていて、簡単に突破されてしまいます。
では、複雑なパスワードを使えば絶対安心か、というとそうではありません。
網羅的なパスワードファイルを用意して時間さえかければ、パスワードを取得できてしまうからです。
ただし、その分だけパスワードファイルのサイズが肥大化してしまうので、「攻撃者がどこまで準備するか」、という「想像との戦い」になってしまいます。
そうは言っても、最低限の対応として、パスワードは「完全ランダムな8文字以上の英数小文字入り」などにしておくのが望ましいです。
(「TBのパスワードファイルを用意される可能性は低いだろう」という前提の元にはなりますが)
後は、前回紹介したような、.htaccessによるログイン画面のアクセス制限や、ログインURL自体を変えてしまうプラグインを利用する等の対策が考えられます。
さらにセキュリティ強度をあげるなら、切りがありませんが、どこまで費用をかけるか、どこまでシステムを複雑化させるか、といったこととのトレードオフになってくると思います。
また、防止という観点での対策は切りがないので、攻撃を受けた際にどれだけ早く検知できるか、どれだけ早くリカバリできるか、といった事後対応の速さも検討のポイントになると思います。
ちなみに、当社でもセキュリティ情報を定期的に発信していますので、参考にしていただければと思います。
[定期配信!! セキュリティ情報]
▼次回予定
今回は、WordPressセキュリティの実際的な一面を見てみました。
次回は、少し触れましたWPScanについてもう少し詳しく紹介しようと思います。
更新予定は、11月中旬頃です。