ITとは切っても切れない関係にあるのが、不正ログインです。パソコンなどのコンピューターシステムだけではなく、スマートフォン、フィーチャーフォン(ガラケー)にもパスワードを付けてプライバシー保護をするようになっています。
ウェブサイトも同様で、誰でも見られる記事の部分ではなく、管理画面はパスワードなどで保護されています。古典的かつ今でも一般的な不正ログインは正解のパスワードに当たるまで何度も何度もログインを試みる方法で、「ブルートフォースアタック」と呼ばれています。
Brute Force Attack
ブルートフォース攻撃は、パスワードが当たるまでひたすら繰り返すという単純な方法です。単純ですが、時間をかければいつか正解に当たる可能性があります。
例えば、よくある、数字を4桁入力すると開く電子錠では、0~9までの10通りを4桁ですから、10000回試すまでに必ず開いてしまいます。(ゾロ目だったり、住所地だったり、電話番号だったりが設定されていると、真っ先に試されるので危険です。)
一回1秒かかるとしたら、最大でも3時間弱、期待値としては1時間ちょっとです。危ないです。
ブルートフォースアタックへの対処
これをなんとかするための方法は、「間違った番号が入力されるとしばらく反応しなくなる」「管理人に通報する」といったもので、大抵のオートロックの建物についています。
パソコンの場合は、そういえばあまり対策らしいことをしたことがない(!)のですが、落とすと結構大変なことになるスマートフォンには、iPhoneの場合「10回間違えると中身が消去される」という設定があります。
ウェブサイトの場合、特に何も設定しなければ世界中のどこからでもアクセスできる状態で置かれています。サーバーが乗っ取られた場合、個人のウェブサイトでも「他のサイトへの攻撃に使われる」ので色々な意味で危険ですから、何かの対策が必要です。
(注:マンションのオートロックなどは、上記の対策がされているかどうかと関係なく、セキュリティ機能は低いですので、くれぐれもオートロックがあるからと玄関を開けておいたり、窓をあけておくことのないように・・・・)
ウェブサイトのブルートフォースアタック対策
WordPressなどで設定できる対策方法は、
一定時間内に何度か間違ったパスワードでログインしようとした人(IP)を一定期間(もしくはずっと)出入り禁止(アクセス禁止)にする
という方法です。決まったIPアドレス以外は受け付けない、海外からのアクセスは拒否するようにしたり、という方法もあります。
最近のブルートフォースアタック
私のサイトの場合、3回間違えると1週間アクセス禁止+管理者にメール通知、2度目になるとブラックリスト入り、で設定しています。
最近更新が滞っていたせいか、最近は通知が少なかったのですが、今日は不正アクセスの試みは250回に対して、ブロックされたIPアドレスは1件だけとかなり捕捉率が低くなっています。
(これは最近始まったことではないのですが)ブルートフォースアタックに使われるIPアドレスが分散していて、世界中のIPアドレスから少しづつログインを試みられているために、ブロックされるに至っていないのです。
時間差?ボットネット?
昨年のログと見比べてみると、昨年末あたりから同一IPアドレスからのアクセスが3~5時間おきにアクセスを試みています。特に最近のアクセスは8時間以上空けたアクセスもあります。
今日の250回分のログを見てみると、ブロックされた1件以外は、すべて違うIPアドレスからのアクセスでした。そもそも別IPからのアクセスは、普通のプラグインでは攻撃を止められませんが、少なくとも同じIPからのアクセスは少なくとも24時間以内のアクセスをカウントしておいたほうがよさそうです。
対策
個人のウェブサイトで、特に狙われるような理由がない場合、結局最後はパスワードがしっかり設定されているかだと思います。他にやっておくと良さそうな対策は
.htaccessもしくはレンタルサーバー設定
- 海外IPからのアクセス拒否
レンタルサーバーの中には、海外からのアクセスを拒否出来るように設定出来るところがあります。例えば、私のお気に入りのサーバー、「ミニバード」はWordPressの管理画面を海外IPアドレス拒否するように簡単に設定できました。(xmlprc.phpへのアクセスが拒否されるかどうかはわかりません)
自分で設定する場合は、.htaccessに日本国内のIPアドレスを許可し、他のIPアドレスを拒否する設定をします。
このまま書くと、海外からのアクセスをすべて弾いてしまうので、海外からのページビューをすべて失ってしまいます。たぶん、Googlebotも・・・。
なので、<Files …>などの設定をしてWordpressの場合はwp-admin.php、xmlprc.phpを設定しておけば良さそうです。
WordPress
WordPressの場合は、そのまま使っていると投稿ユーザー名としてログインユーザーIDが表示されていたり、?author=1でログインユーザー名が曝されてしまっています。
不正ログインは今のところすごく手が込んでいるわけではないですが、ここで曝されているユーザー名を使ってログインを試みてきます。ここを隠しておくと、通常のブルートフォースアタックは正しいユーザー名を使ってログインを試みることができなくなるので、安全度が飛躍的に増します。プラグイン「Edit Author Slug」が便利です。
Joomla!
Jooma!でも、wp-adminの代わりにURLにadministratorを入力すると管理画面へのログインを試みることができます。(たぶん)WordPressのxmlprc.phpのような機能はないはずです。
Joomla!ではログインユーザー名(表示名)とログイン時に入力するIDを分けて設定することができますので、WordPressよりはログインIDが露出しにくくなっています。
さらに、プラグイン「AdminExile」を入れると単純にadministratorとURLに入力した場合には管理画面へログインできず、?<キー>=<値>もしくは?<キー>をURLの末尾に入力しないとアクセスできないように設定できます。
CloudFlareなどのCDN
私は今のところCloudFlare(クラウドフレア)一筋なので他のCDN(コンテンツ・デリバリー・ネットワーク)のことは知りませんが、CloudFlareを使っていると、実際のサーバーに直接アクセスするのはCloudFlareのIPです。
したがって、アクセス拒否されてしまうのはCloudFlareのIPアドレスになってしまい、不正アクセスに関係ないアドレス(ウェブマスター自身も含めて)も拒否してしまいます。また、クラウドフレアのサーバーが日本にも設置されていますが、確実に日本のサーバーからアクセスされるともいえないので海外IP拒否でも不都合が生じます。
これを対策するには、CloudFlareが配布しているmod_cloudflareをApacheサーバーにインストールする必要があります。(ウェブサイト上に設置するのではなく、レンタルサーバーでは通常アクセス不可能な領域です)
CloudFlareのパートナーに認定されているレンタルサーバーでは、最初からmod_cloudflareが入っていますので設定は必要ありませんが、世界中に450件以上ある認定パートナーの中に、日本国内業者はありません。(たぶん)
日本国内でレンタルサーバーを使って運営するようなページが、(当サイトも含めて)海外をターゲットにしていることが少ないので、CloudFlareのようなサービスを必要とする弱小サイトがあまりないのでしょう。WordPressサイトにCloudFlareを入れるのも一時期は流行りましたがオーバーヘッドが大きいので最近は使われなくなってきているのでしょうね。(私は好きで使っていますが・・・)
国内レンタルサーバーを使う場合は、VPSにするか、個別にサポートに頼んでみるしかないでしょう。
傾向と対策
サイト開設時から変わっていない傾向として、ブルートフォースアタックの場合、ユーザーIDに
- 投稿者名(WordPressの場合)
- admin
- サイトドメイン名(当サイトの場合はtek2tech)
- administrator(特にJoomla!の場合)
を設定してアクセスされます。この4つ以外で不正アクセスを受けたことは、今のところありませんので、ログインIDとしてこれ以外を設定しておけば、ひとまずは安心です。
コメント