WordPressの不正ログイン対策8つと誤った対策方法について

不正ログインの方法と手順
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

管理者に気づかれずサイトに不正ログインし、重要な情報を盗み出したり、訪問者をフィッシングサイトやスパムサイトへの誘導を行うためのコードを設置する・・・。

まるで、警備が厳重な城に忍び込む戦国時代の忍者のようなハッカーたち。
彼らは一体どのようにして、サイトのセキュリティをすり抜けて目的を果たすのでしょうか?

今回は実際に使用されている一般的なWordPressサイトの不正ログインの方法と対策を解説します!
かなり詳しくご紹介しますが、悪用は厳禁です!
(正確には悪意がある場合はクラッカーと呼びますが、ここではハッカーで統一します)

不正ログインの目的

不正ログインを企むハッカー

不正ログインの目的の多くは、投稿記事やファイルの改ざん、悪意のあるコードの埋め込み(クロスサイトスクリプティング)です。
訪問者にスパム広告を配信したり、フィッシングサイトへリダイレクトさせたり、不正誘導するためのコードを埋め込みます。

不正ログインの被害

管理者IDでの不正ログインを許すと、ほぼ何でもできる状態になります。
被害は下記のようにかなり深刻な内容が予想されます。

  • テーマファイル(header.php等)の不正改ざん
  • 投稿記事の不正改ざん
  • セッションハイジャック
  • 元々の管理者IDが削除され、ログインできなくなる
  • サイトユーザーの個人情報の漏洩

不正ログインの方法・手順

それでは、ここからは実際に不正ログインの方法と手順について解説していきます。

1、ユーザー情報の取得

まずは、管理画面にログインするために必要なユーザー情報取得を目指します。
ユーザー情報を取得する方法はいくつかありますが、以下の方法が代表的です。

「WPScan」ツールを使用

WPScanという無料ツールをインストールし、ターミナルで以下のコマンドを実行します。

これで、そのWordPressのユーザー一覧を表示させることができます。

※注意:WPScanは、本来は脆弱性をチェックするためのツールです。
自分のサイトのセキュリティを保つために使用しましょう。

特殊なURLリクエストを送信する

サイトURLの後ろに「?/author=<数字>」つけてアクセスします。すると、その数字に対応するユーザーが存在していれば、サイトに「(ユーザー名)のすべての投稿」と表示されたり、URLに「/author/(ユーザー名)/」のようにURLに表示されてしまいます。
特に、デフォルトで変更をしていない場合、「?/author=1」は一番最初のユーザー=管理者のユーザー名が表示されてしまいます。

2、パスワードを特定する

ユーザー名が取得できれば、続いて対応するパスワードの特定です。
パスワードを特定するためには、いくつかの手法があります。

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

いわゆる総当たり攻撃とも言われます。ツールを使用して、4桁の数字なら「0000」〜「9999」までひとつずつ試すというものです。理論的には時間さえあればどのようなパスワードでも突破することが可能です。パスワードが英語のみ、数字のみ等簡単であればあるほど、突破までの時間は短くなります。

辞書攻撃

よくパスワードとして使用される文字列やユーザー名などから、パスワードとして予測される文字列をリスト化し、それを順に試していくというものです。確度の高い情報があれば、ブルートフォースよりも短時間でログイン認証を突破することができます。「qwerasdf」や「password」等、使用されやすいパスワードはリストにまとめられているため、高確率で突破されます。

不正ログインへの対策

不正ログインに対するセキュリティ対策

不正ログインへの対策は、①ログイン画面にアクセスさせない、②認証を突破させない、③万が一入られた場合への備え、という3つの防衛策が考えられます。基本は①と②についての対策をしっかり行い、まず、管理画面に入らせないということが重要です。ただし、どんなにセキュリティ対策をしても100%侵入を防ぐことはできませんので、③についても対策をしておくことが重要です。

対策方法1:管理画面にアクセス制限をかける

「①ログイン画面にアクセスさせない」方法として、最も有効なのはIPアドレスによるアクセス制限をかける方法です。
アクセス制限は「.htaccess」ファイルにコードを追加することで簡単に実行することができます。

  1. wp-login.phpと同階層にある「.htaccess」の先頭に以下のコードを追記
    ※他の記述に影響しない場所ならどこに記述しても良い
  2. 「123.123.123.123」の部分をアクセスを許可したいIPに変更
    ※複数のIPを許可したい場合は、「Allow from 123.123.123.123」の行を追加していく。
  3. 「/wp-admin/」配下に「.htaccess」ファイルを新規に作成
  4. 作成した「.htaccess」に以下のコードを記述

    ※adamin-ajax.phpは管理画面以外でも利用されるので、認証がかからないように記述されています。
  5. 「123.123.123.123」の部分をアクセスを許可したいIPに変更
    ※複数のIPを許可したい場合は、「Allow from 123.123.123.123」の行を追加していく。

これだけで、管理画面にIPによるアクセス制限をかけることができました。

注意点として、携帯型のwifiやモバイルからアクセスする場合、IPが変動するため、この方法は使えません。他の方法での対策を行ってください。

対策方法2:ユーザー情報を保護する

上記の不正ログインの攻撃手順で解説したように、攻撃者が最初に狙うのはユーザー名です。そこで、ユーザー情報を隠すことが、「②認証を突破させない」最初の対策になります。

ユーザーにニックネームを設定する

デフォルトではユーザー名がそのままサイト上に表示されてしまいます。管理画面のユーザー情報の編集画面では、ユーザーにサイト上で表示するニックネームを設定可能で、その下のブログ上の表示名の項目でニックネームを選択すれば、サイト上にユーザー名が表示されなくなります。

『Edit Author Slug』でAuthor slugを変更する

上記でサイト上には表示されなくなりましたが、サイトURLに「?/author=<数字>」をつけてアクセスするとURLバーにユーザー名が表示されるのは変わっていません。そこで、おすすめなのが『Edit Author Slug』。これをインストールして有効化すれば、ユーザー情報編集画面で、Author slugをユーザー名から好きな文字列に変更することができます。

対策方法3:パスワードは予測できない複雑なものを設定する

「②認証を突破させない」方法として、最も基本的でありながら見逃されがちなのがこの項目。ここが甘いとブルートフォースアタックや辞書攻撃で簡単に突破されてしまいます。改めて、下記の3原則を確認しておきましょう。

  • パスワードは使い回さない
  • 英語、数字、記号等を組み合わせた複雑なものにする
  • 名前、サイト名、誕生日等、予測されやすい文字列は避ける

対策方法4:SiteGuardプラグインを使用する

「②認証を突破させない」方法として、「SiteGuard WP Plugin」を使用する対策方法があります。
SiteGuardプラグインを使用すれば、ログイン画面にセキュリティ対策を施すことが可能です。プログラムによる自動攻撃に対しては特に効果的です。

  • ログインページURLの変更
  • ログイン時の画像認証の追加
  • 複数回アクセスに失敗したユーザーをブロックする
  • ログインの通知

対策方法5:バックアップを定期的に取っておく

「③万が一入られた場合への備え」として、不正改ざんでサイトに不具合が出た場合、すぐに正常な状態に戻せるよう、定期的にバックアップをとっておくことをオススメします。WordPressでは、『UpdraftPlus WordPress Backup Plugin』などのバックアップに関するプラグインが多数出ていますので、スケジュールを組んで自動でバックアップする設定をしておくと良いでしょう。

対策方法6:管理画面からテーマファイルを編集できないようにする

攻撃者の多くは「header.php」や「footer.php」といったテーマファイルに悪意のあるコードを仕掛けることを目的としています。そこで、「③万が一入られた場合への備え」として、万一、管理画面に侵入された場合でもテーマファイルを改ざんできないようにしておくことをオススメします。

下記コードをwp-config.phpに追記するだけで、簡単にテーマ編集の項目を削除することができます。

SQLインジェクションによる不正ログイン

SQLインジェクション

WordPress本体やプラグインの特定のバージョンにはSQLインジェクションへの脆弱性が存在します。SQLインジェクションは、入力フォームなどを利用してデータベースに直接不正な命令を実行させる攻撃です。これを悪用することで、直接、管理者ユーザーを新規作成することもできてしまいます。

近年では、2017年2月2日のWordPress4.7.2リリース時には、4.7.1と4.7.0を使用している150万サイトが不正改ざんの被害があったとされています。また、2017年10月31日のWordPress4.8.3のリリース時に、4.8.2にもSQLインジェクションに対する脆弱性があることが発表されました。

SQLインジェクションへの対策

SQLインジェクションの脆弱性は、結果としてはセキュリティ被害が発生しますが、本質的にはWordPress本体やプラグインに問題です。ですから、ユーザー側で事前に察知して防ぐということが難しいのが実情。ただ、WordPressを使う以上は避けて通れませんので、被害を受ける確率を少しでも避ける方法は知っておきましょう。

対策方法7:WordPress、プラグインを最新の状態に保つ

基本中の基本ですが、WordPressやプラグインに新たなバージョンがリリースされれば、出来るだけ早くバージョンアップしましょう。特にセキュリティに関するアップデートの場合、古いバージョンを使用しているサイトに対してゼロデイ攻撃(脆弱性の発表からサイト管理者の対応までの間に行われる攻撃)が行われる可能性があるため、非常に危険です。

対策方法8:SQL命令文で使用される特殊文字へのバリデーション・エスケープ

さらに専門度が高くなりますが、一番確実な方法です。
SQLインジェクションで使用されるSQL命令文では、「’」「;」といった特殊文字が使用されます。そこで、これらの特殊文字がそもそもフォームで入力できないようにしたり(バリデーション)、送信された場合は別の文字に自動変換させる(エスケープ)といった方法が有効です。

これらの方法は、また別記事で詳しく取り上げます。

誤った不正ログイン対策

間違った対策方法

こちらでは、他のWeb上で不正ログイン対策として紹介されているものの、効果が見込めない、あるいは、逆に危険性を高める対策方法を紹介します。

管理画面にBASIC認証をかける

これは、IPによるアクセス制限が難しい場合の代替手段としても紹介されますが、当社としてはオススメしません。
理由としては2つです。

管理画面がSSL化されていない場合、ログイン情報が傍受される

管理画面にBASIC認証をかけるということは、当然、自分でログインする場合にもIDとパスワードを入力が必要になります。
ただ、管理画面がSSL化されていない場合、自分で送信したIDとパスワードがハッカーに筒抜けになります。
例えて言えば、泥棒が横で見ている前で番号入力型のキーを入力するようなものですね。これではせっかくの認証も意味がありません。

なら、管理画面がSSL化していればきちんと機能する、と思われるかもしれませんが、もう一つの懸念があります。

Dos攻撃の対象になりやすい

BASIC認証はサーバー側で行われる処理です。WordPressのログイン画面(php)のように、複数回ログインに失敗したユーザーをブロックするなど、Dos攻撃を防ぐための条件を設定できません。そのため、Dos攻撃を受けると送られてくる認証リクエストをバカ正直に処理することになり、サーバーに負荷がかかってダウンしてしまう危険性があります。
不正ログインについては防ぐことができても、新たなリスクを背負ってしまうことになります。

データベースの接頭辞を変更する

こちらはSQLインジェクションへの対策として紹介される方法です。

SQL命令文の無効化を狙った対策方法

WordPressのデータベースでは、データの種類を分類する際(table)に「wp_」という接頭辞が設定されています。ハッカーもそのことをよく知っていますので、SQLインジェクションで偽の命令文を打つ際には「wp_〇〇」のtableを操作する、という命令文を書きます。この時、接頭辞が「wp_」以外であれば、命令文は無効になるという理屈です。
「All In One WP Security & Firewall」などのセキュリティ対策プラグインには、この接頭辞を変更する機能もあります。

一時期、注目を集めた方法ですが、残念ながらこの方法は全く効果がありません。

接頭辞はデータベースへ問い合わせることが可能

問題は、独自のテーブル名に変更するのではなく、接頭辞のみを変更しているに過ぎないことにあります。
「wp_postmeta」というテーブルがあったとして、「〇〇_postmeta」に変更しているということですね。

なぜ、意味がないのかというと、攻撃者は次のようなクエリを実行するからです。

クエリの出力結果は次のようになります。

出力結果

はい、接頭辞が「wp_」であることが表示されています。
上記のクエリはデータベースに「このテーブルの接頭辞は何?」と問い合わせるクエリで、出力結果はデータベースからの回答というわけですね。

ハッカーはこの簡単な一手間を加えるだけで、どんな接頭辞であっても簡単に暴くことが可能なんです。これはハッカーからすれば常識レベルの話ですので、全く有効なセキュリティ対策にはなりえません。

データベースを編集するリスク

効果がほとんどなかったとしてもやらないよりはマシでは?と思われるかもしれませんが、エンジニアではない人がデータベースの値を触るのは、それだけでリスクになります。

最悪、サイトの表示が崩れてしまったり、サイト全体のデータが破損してしまうなど、不具合が起きる可能性があります。特に意味がないだけでなく、サイトに致命的なエラーを生じさせるリスクにもなりえます。

不正ログインを防いで安全なWordPress運営を!

明るい未来

ここまで、不正ログインに対する対策をご紹介してきました。
一度不正ログインを許してしまうと、原因調査、現状の脆弱性への対策、改ざんされたデータの復旧など、事前の対策など比べ物にならないほどの手間と時間が必要になります。場合によっては、個人情報や企業の機密が漏洩して取り返しのつかない事態になることも十分に考えられます。

「自分のサイトは大丈夫」などと、軽く考えず、しっかりと不正ログインへの対策を行いましょう。

また、自社内でセキュリティ対策のリソースが取れない、ネット上の情報の真偽の判斷がつかない、自分でやるのは不安だという場合は、WordPressの専門家に保守サービスを依頼するのもひとつの方法です。その際は、保守サービスごとの対策内容の違いや対応や保証の範囲についてしっかりと確認しておきましょう。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

記事が気に入ったら
wp.supportを "いいね!"
Facebookで更新情報をお届け。

WordPressの保守・セキュリティ対策なら「wp.support」

WordPressのプロによる保守サービス

ワードプレスのバージョンアップセキュリティ対策
お悩みではないですか?
「何かが起きる前に!」
WordPressのプロフェッショナル集団が対応します。
初期費用は一切頂きません。月額4万円〜
SSL対応、定期バックアップもお任せ下さい。