ウチのWordPressがサイバー攻撃にさらされていた
危ないのは「セキュリティ意識の低い管理者」
- アナリティクスからではわからないサイバー攻撃
- 自分のサイトが攻撃された時の対応
- あなたのサイトのセキュリティは大丈夫?
- はっきり言って、IDなんて筒抜けだ
- 別に自分のアカウントを乗っ取っても得にはならないでしょ?
- そんなパスワードで大丈夫?
- パスワード強度の考え方
- まとめ
僕はこのサイトにGoogleアナリティクスを導入しています。 アクセス解析はこのアナリティクスとWebマスターツールで行っているのですが ここのところ怠けていて、この二つのチェック以外あまりしていませんでした。
その結果発見が遅れてしまったのですが、ここ数週間ほど 断続的にこのサイトに対してブルートフォースアタックが行われていたのでした。
ブルートフォースアタックとは?(Wikipedia)
気付くきっかけになったのはつい先日、以前Wordpressでサイトを制作させていただいたクライアント様から
「不正アクセスがあったのでログインをロックした、とサーバーから連絡があった」
とのお知らせを受けて、対応した件があったため。
そこで思い出したように、自分のサイトのWordpressも念のためセキュリティを強化しておこうか・・
と思ってサーバー内をいろいろチェック・調整していた時だった。
ウチはよく負荷率がサーバーから注意されるレベルに近づくので
「最近はどうかな~」くらいの軽い気持ちでチェックしてみたところ・・・
とんでもない負荷率が並んでいたので慌てて調べた。
すると、「リクエスト数」が尋常ではない数値を叩きだしているではないか。
「これは何事か・・?」
アナリティクスからではわからないサイバー攻撃
(公開するにはちょっと恥ずかしいこの驚くべきほど低いアクセス数・・!笑)上がアナリティクスのアクセス数を示すグラフ。そして下がサーバーにログインして調べられる「アクセスログ(※サーバーによって名称は異なる)」のリクエスト数の数値。 特に負荷率が高かった3/26と3/31のグラフと数値を見比べていただけるとよく分かると思う。
アクセス数が100未満なのに対して、リクエストがその数十倍というちょっとおかしな数値。
一つのページを開くのにそこまで多くのファイルリクエストは必要としない。
僕のBlogの書き方ならば、多くて1ページ20ファイルほど。ここまでアクセス数とリクエスト数の開きがでるのは不自然である。
アナリティクスは「トラッキングコード」と呼ばれるコードをページ内に埋め込んで使用する。
当然、このトラッキングコードが入っていないページのアクセスは取得することができない。
Ex.管理画面のアクセス数(たいていここにはトラッキングコードを入れてない)、ページではない「ファイル」個体へのアクセス
もう少し詳しく調べてみよう
このリクエストの詳細をチェックしてみましょう。
1が参照元ホスト
2が参照ファイル
を表しています。
- 1.4000を超えるリクエストがあった.comドメインの大半をしめるホストを発見。
- 2.リクエストされたファイルの割合と回数。
ここでほぼ「確定」。
見ての通りphpファイルが他のファイルに比べて極端にリクエストが多い。
これは不自然極まりない。phpファイルはページのベースになる部分。
ページを構成する各種のパーツとなる画像ファイルなどよりリクエストが多くなるのは通常では考えられない。(※具材より器のほうが多いなんておかしいですよね?)
そしてその数が4000超・・不審なアクセスの数と合致する。
じゃあどこにアクセスされてるのかな・・?
※wp-login.phpは初期設定時の名称。お使いの環境によって名称、ファイルパスが異なる場合があります。あ・・・確定。
WordPressの管理画面に入るための「wp-login.php」へ4000を超えるリクエストがされている。
これはもう疑いの余地なくブルートフォースアタックだ。。
「wp-login.php」はログイン、ログアウトの際に呼び出されるプログラムファイル。
正規のユーザーであれば管理画面に入るのにそこまで何度もアクセスすることはありえない。
大抵1回ないし2回だけ。一日に何度もログインしてもせいぜい10回でことたりる。
しかも、上記の通り「wp-login.php」はログイン、ログアウトの際に「呼び出される」プログラムの為、 普通に管理画面へアクセスする際はリクエストは内部的に処理される。 つまり、正規のログインの場合はこのリクエストが出てくることは無いのである。(URLに直接このwp-login.phpを打ち込むことはない)
ようするに、このリクエストを行う者は確実に悪意をもってアクセスしているということ。
しかしながら、なぜにこれだけの数の不正アクセスを許したのか・・?
と、サーバーの設定を見てみたら・・
Wordpress管理画面ログインへのアクセス試行回数制限が設定されていないじゃないか!!
いくら自分のものへのモチベーションが低いとはいえ、なんと間抜けな・・(絶句)
さすがにこれをこのまま放置はできないな、と早急に対策をとりました。
自分のサイトが攻撃された時の対応
とりあえず管理画面へのログインはできていたので、自分のアカウントは生きていたということで(これで安心しないこと!)
- 自分の安全を確保する
即座にパスワードを変更。まずは破られていたとしても、またログインできないように+アカウントを乗っ取られないように。 - 再侵入を防ぐ
ユーザーが追加されていないかチェック。
別ユーザーがいれば、そのID・パスワードでもログインできる為。管理画面のユーザー一覧の「人数」(※)とデータベースのテーブル内もチェック。もし見つけたら削除。 ※隠しユーザーのような感じで、ユーザー一覧には表示されないように仕込むケースもあったそう。でも「人数」には出るらしい。 データベース側をチェックしたほうが確実かな・・? - 荒らされた形跡が無いか調べる
見知らぬファイルが増えていないかチェック。もしあれば詳細を確認して削除。
ファイルの中身が改変されていないかチェック。データベースの中身もチェックしておくこと。 - 侵入を難しくする
多重ロック、アクセス制限をかける。
扉と鍵の組み合わせは多いにこしたことはない。 ファイル、ディレクトリごとにそれぞれ細かくアクセス制限など
4の箇所での設定はApacheや.htaccessを用いますが、慣れない人には苦手意識やなかなか敷居が高く感じるかもしれません。 そんな時には便利なプラグインも沢山出ています。
こちらのブログ記事などは参考になるかな、と。WordPressのセキュリティ対策プラグイン14選http://netaone.com/wp/wordpress-security/中でも
- Limit Login Attempts:ログイン試行回数制御
- Login LockDown:ログイン試行回数制御
- Stealth Login Page:ログイン画面に認証キーを追加
- SI CAPTCHA Anti-Spam:ログイン画面(他)に画像認証を追加
- Crazy Bone(狂骨):ログイン履歴を保存
などのプラグインは手軽で便利じゃないかなと思います。 お好みで試してみて下さい。
例としては、
「Limit Login Attempts」か「Login LockDown」で特定の回数以上ログインに失敗するとそのIPからのアクセスを(任意の時間)ブロック、という対策を行いながら
「Stealth Login Page」と「SI CAPTCHA Anti-Spam」を管理画面に設けて
ID、パスワード、認証キー×2の「同時に4種類の暗号が揃わなければ開かない鍵」であれば、その組み合わせを見つけるのは2種類よりはるかに困難になります。
(※「SI CAPTCHA Anti-Spam」は画像認証を付けるだけなので人間相手には無力ですがbot相手にならまだ多少は有効かな・・ということで)
・・このあたりは改めて次回にでも詳しく書きましょうか。
あなたのサイトのセキュリティは大丈夫?
ここまではWordpressやCMS系のサイトを運営しているケースの話をしてきましたが、危ないのは何もそれらのケースだけではありません。ここまで読んで「自分はサイトなんてもってないから関係ないもーん」なんておっしゃる方もいらっしゃるかもしれません。
でも、本当に?
Webサイト(ホームページ)そのものは持っていなくとも、ブログは?
facebookは?twitterは?LINEは?
・・ブログやSNSもサイトなんです。
今やどこでもかしこでも「セキュリティ」について聞いていると思います。 でも、やっぱりまだどこか「自分とは遠いところの話」、「それほど関係の無い話」という感覚があるのではないでしょうか?
ちょうど身近(?)なヤツが実際にサイバー攻撃にあっていた・・なんて話をネタにしたので、この機会にちょっと、みなさまにもサイトのセキュリティについて少し意識を高めてもらういい機会かな、と思いここからの話を続けていきたいと思います。
では「サイトのセキュリティ」とはどのようなものがあるでしょう?
サイトの様々な設定を行える管理画面・・ここが家の中だと考えて下さい。
まずはその家への入り口がいくつあるか?
大抵の場合はログイン画面の一択ですね?
そして、たいていのサイト管理画面へのログインにはIDとパスワードが必要ですね?
ようするに、家に入る為の扉には二つの鍵が付いていると考えてください。
この「鍵」・・つまり、IDとパスワードという不明な文字列・文字数の組み合わせであるだけに、組み合わせのパターンは無限に近い。
なので、「そうそう破られることなんてない」
そう考えている人も多いのではないでしょうか?
はっきり言って、IDなんて筒抜けだ
アメーバーブログはじめ、ブログサービスや各種SNSでは無造作にIDがさらされているケースなんてザラ。
URLがIDになっていることもある。
つまりはいくら2重鍵になっていても、鍵は片方しかかけていないのと同じなのです。
あるいは、IDがEmailの場合でも、連絡先だったりにご丁寧に書き込んでいるユーザーさんもいるくらいだ。
(「お問い合わせはコチラ→○○@email.com」なんて書いていたり、「mailto:」でメーラー起動にしているものも)
※例え、同サイト内に記載していなくとも、他のSNSやブログ、サイトなどの連絡先に使用しているEmailアドレスをログイン認証用に使っていたりするケースも少なくない。(というか多い)
そんなものすぐに見つけられる。
なので、セキュリティの考え方としてはIDは「知られている」前提で考える必要がある。
このことをしっかりと理解しておいてほしい。
言うなれば、特別にセキュリティ対策を施していない場合、今あなたは大切な個人情報がたくさんつまっている部屋の扉に、たった一つの鍵しかかけていないのだ。
パスワードさえ分かれば、自由に出入りし、あなたになりすますことができてしまうのです。
ちなみに言うとWordpressでも同様で、
ちょっと知っている人なら簡単に調べがつく。
よくいろんなサイトで「IDはadminから変えておけ!」なんていうように言われていますが、
それをやっただけではまったく意味はない。
別に自分のアカウントを乗っ取っても得にはならないでしょ?
たまにこんなことを思う人もいる。
これも非常に大きな間違い。
自分になりすまされるのですよ?
そこで繋がってる人たちに何かをしでかしたとしたら、とんでもない発言を繰り返したら、それは「あなたがしたことになる」。
少なくともあなたと繋がっている人たちはそう思う。
害は自分だけではなく、まわりの人に及ぶ。
SNSで繋がってる人は何人いる?
ブログで繋がってる人は何人いる?
その人たちに「一見それとは分からない」ウイルス付きのメッセージを大量に流されたら?
あなたからのメールだから、と信用して開けてしまう人は何人いるだろう?
・・当然、その人たちは全員ウイルスに感染する。
ブログやWebサイトであれば、悪意のあるプログラムを注入することも容易です。
あなたのサイトがウイルスをばら撒く温床になったら・・?
あなたのサイトにハッキングプログラムを埋め込まれたら?
あなたのサイトを訪れた人すべてに害が起こり、そのサイトを訪れた人の情報を抜き取るなど被害は更に広がっていくこともありうる。
あなたが罪に問われることもありうる。
その他、SNSなどのアカウントには住所他様々な個人情報が登録されていたりもする。
それが本当に無価値だろうか?
その個人情報だけで契約できてしまうサービスがあるのでは・・?
また、他のSNSと連携させてたりしないだろうか?
そうであれば一つのSNSのアカウントを乗っ取るだけで、その人のアカウントをまとめて手中に収めることができてしまう。
さらに言えば、アカウント情報には基本的にEmailアドレスがある。
ネットワークセキュリティに意識が高くない方は、大抵いろんなもののパスワードを共通にしていたり
同じメールアドレスを認証用に使っていたりする。
一つのアカウントをクラックすることで、あなたという人物が利用しているありとあらゆるWebサービス(ネットバンキングや決済サービスも含めて)にアクセス可能になることだってあり得るのです。
挙句に利用するWebサービス全般が乗っ取られることもありえる。
そうなったら・・・?
それでも「得はない」と言い切れますか?
忘れないで下さい、攻撃者は自分よりはるかに賢く、またコンピューターやWebの仕組み・構造について精通しています。
そんなパスワードで大丈夫?
前項で、2重鍵だと思って安心していたセキュリティは実は1重しかかかっていないお粗末なセキュリティレベルだったことがお分かりいただけたと思います。
では、その一つしかかかっていない鍵でどれくらい攻撃者の攻撃をしのげるのか?
そして、どうやって自分を守るのか?について話をすすめていきましょう。
基本的にパスワードなんて、文字の数しか組み合わせのパターンが無いものです。
かつ、「何文字以上、何文字未満」と範囲もある程度限られている訳です。
使用する文字列をすべてのパターンで組み合わせれば、その中に必ず「正解」がある。
つまり、攻撃者はその鍵束の中に必ず「正解の鍵」を持っているのです。
2重鍵だからこそ破られにくいのであって、一つしかない鍵なら「下手な鉄砲数撃ちゃ当たる」で 片っぱしから鍵を試していけばそのうち当たりを引く。 それがブルートフォースアタックなのです。
それだけに、「パスワード強度」は大変重要です。
先述のWikipediaのブルートフォースアタックのページ下部にあった「パスワード長と解読時間の関係」 の項目をもう一度思い出してみましょう。
6文字の大小いずれかの英字だけのパスワード Pentium 100MHzのPCで5分間~8.5時間 の「Pentium 100MHzのPC」とは約20年ほど前のPCのこと。
今のPCから比べれば20分の1程度の計算能力しか持たない性能のPCです。
コアの数やメモリーの容量などを合わせた処理能力も考えればもっと性能は低いと考えてもいいでしょう。
ちょっとここで自分が使っているパスワードを思い返してみて下さい。
6文字の大小いずれかだけのアルファベットのパスワードをもし使っているなら、現行の一般的なPCの20分の1以下の性能のPCですら半日かからず解析できてしまう・・ということ。
ようするに、いつ破られてもおかしくない、というか「破って下さい」と言っているレベル。
※余談ですが、現行PCでは7文字のアルファベットのみパスワードならわずか13分で
8文字の大小いずれかの英文字だけ+数字のパスワードでも15時間、つまり一日かからずに解析が完了してしまう、というデータもあります。
パスワード強度の考え方
文字数の数しか組み合わせのパターンが無い訳ですから
この文字数が少なく桁数が少ないほど、そこから出来上がるパスワードの種類は少なくなります。=正解を引き当てるまでの回数、時間が少なくなる。
- 数字の組合せは0~9の10文字なので10^桁数
- 大小いずれかアルファベットはa~zの26文字^桁数
例えば数字のみの6桁のパスワードであれば
10^6で100万通りしかない。
大小いずれかのみのアルファベット6桁のパスワードであれば
26^6で308,915,776‥約3億通り。
ヤマカンや統計も加えれば引き当てるまでの回数は更に減る。
僕のところが受けたブルートフォースアタックは5000回ほどのアタックだったが
これはたった2時間の間にされた回数。
攻撃者が本気で破ろうとすれば毎秒数百万回のアクセスを行うこともそれ以上のアクセスを行うことも可能なのです。
そうなれば数字のみ6桁なら1秒足らず・・まさに「あっという間に」破られるということ。
アルファベットですら数分あれば破られるということ。
確かに一日にそれだけのアクセスがあればサーバーがダウンしたり アクセス不能になったりするでしょうが、期間を置いて断続的に行われていたら・・?
攻撃方法やパターンは多種多様です。 そこまで大事と捉えず、「いつの間にか破られていた」なんてことも起こります。
パスワードのみで守らなければならない時の考え方
1.パターン数を増やす
相手が数の暴力でくるなら、こちらも数の暴力で対抗しよう。
3億通りが数分くらいで破られると考えるなら、 それを43,200倍(60×24×30)にすれば1カ月もつ(可能性がある) それを12倍すれば1年もつと考えられる。
ということで約155.5兆通り以上の組み合わせパターンがあれば1年持つ(可能性がある)
・・と仮定しよう。
よくある小文字のみ+数字の組み合わせで8桁の場合
(10+26)^8 2.8211099×10^12・・約2.8兆
おや・・まるで足りない。。 では、こうしよう。
大文字、小文字、数字の組み合わせで10桁
(10+26+26)^10
で8.3929937×10^17・・つまり、約83京
※京は兆の10000倍
ふむ、これでそこそこ安心か・・? いや、まだだ。やっぱり念には念を入れておくべきだ。
大文字、小文字、数字の組み合わせで12桁
(10+26+26)^12
で3.2262668×10^21・・つまり、約32垓
※垓は京の10000倍、兆の億倍。
最近のパスワードには記号32文字が使えるので
大文字、小文字、数字、記号の組み合わせで12桁
(10+26+26+32)^12 4.7592031×10^23 で約4760垓
というパスワード強度のものも作れる。
記号を加えるだけで、アルファベットと数字だけのものの約150倍ほど強度のあるパスワードが作成できます。
WordPressを利用している方は最低でもこれくらいのものを利用しておくべきでしょう。
※SNS等によっては使える記号の種類に制限があります。その場合は桁数を増やすなどして対処してください。
確かに個人のサイトにここまでの試行回数を行うことは よほど標的にされる要因が無い限りありえないでしょうが、「パスワードでしか守るものが無い」というケースにおいては強度は高ければ高いほどいい。
2.いやいや、そんなにチャレンジされてたまるかよ!
WordPressの項でも出てきましたが、「アクセス回数制限(試行回数制限)」という機能もあります。
例えば、5分間に3回ログインに失敗すれば1時間その回線からはアクセスを拒否する・・といったものです。
アクセスを拒否された回線からは、その時間中何をやってもアクセスすることができなくなります。
「鍵穴を隠す」という手法です。
何もご丁寧にずっと試させる必要はありませんよね?
アクセスされ続けるということはその間ずっとサーバー側のプログラムも稼働している訳です。当然負荷もどんどん上昇します。 不正なアクセスの為に限りあるメモリーを裂いてやる必要はありません。
例えば、「一日に3回ずつしか試せない」となると垓もあるパターンからたった一つの正解パスワードに辿りつくのはちょっと現実離れしていますよね?
攻撃者の意欲を削ぐにはもってこいです。
(※ただし昨今のブルートフォースアタックは何百・何万ものホストからのアタックのものが多い為、厳密にはホスト数×3回試行される、ということをお忘れなく・・ほんっとうに数の暴力なんですよ。)
※みなさまがお使いのブログサービスやSNSでもこうしたアクセス制限をしてくれているところがあります。(※すべてではありません)
3.こっそり鍵穴を変えておく・・
以前試した鍵をもう一度来た時に改めて試し直す・・そんな悠長な攻撃者はそんなにいません。
もしあなたが「標的」にされていて、メンバーやグループで情報を共有している攻撃者に効果的。
とはいっても、すでに試されたことがある鍵をつけておくのはあまりに不用心。
この方式の真骨頂は「あなたが今どんな鍵穴にしているか」を推測しにくくすること。
例えば、以前は12桁だったものにもう一桁加えたとしましょう。
一桁増えるだけでも使っている文字の種類倍パターンが増えていきます。
こうしていけば、攻撃者はこれまで使っていた鍵束では役に立たなくなります。
また、時折桁数を減らしたりしてみるのも一つの方法。
20桁だったものを18桁に・・など、統計やヤマカンで20桁以上を入力されていればすべてハズレになります。
(※減らす方式は元々桁数が十分にある時のみご利用下さい。12桁以下の場合は危険度が大きく上がります。
基本は桁数を「増やす」!)
こういう言い方をすると何ですが、「的はいくらでもある」訳です。
無理にガードの固いところを攻めるよりは、ユルいところを攻めたほうが効率がいいと考えます。
なので、「ガードが固いと思わせる」ことは標的から外される要因にもなります。
まとめ
- 自分も狙われる
- 悠長な管理者は自分が攻撃されていることにも気づいていなかったりする
- 実名アカウントはもちろん、HNアカウントであっても乗っ取って得がある
- 多くの場合、パスワードが分かれば乗っ取り可能
- パスワードは大小合わせたアルファベット+数字+記号を用いて12桁以上で
- パスワードは定期的に変える
上記のパスワード強度による保護はあくまでも理論上でしかありません。
決して過信しないことが大切です。攻撃者側のプログラムのアルゴリズムや乱数によって運悪く1発で引き当てられることもあります。
桁数は多いにこしたことはありませんが、その桁数が相手に分かってしまっていては
事前計算によって強度は半減してしまうでしょう。
また、結局のところパスワードも「データ」です。
コンピューターのどこかに照合する為の正解データが保存されています(※サーバーもPCも携帯端末も結局中身はコンピューター)。そこを突かれてしまっては元も子もなく、例え暗号化されていようとそのデータを引きぬかれてしまってはいずれは解析されてしまいます。
あるいは、あなたのPCにキーロガーやウイルスが入っていたらそこから情報は筒抜けです。
これらのケースではどれだけパスワード強度が高くても意味がありません。
攻撃者のとる手段、方法も様々にあり、複雑・高度化もしています。
・・そういった情報も知っていかなければ対策の取りようもありません。
自分の身は自分で守らなければならないのです。その為にもセキュリティに関する情報も随時仕入れていきましょう。
- 情報を与えないこと
- 漏らさないこと
- 端末の保全を徹底すること
- 定期的に情報をアップデートすること
この4つを忘れないで下さい。
次回はもう少し突っ込んだセキュリティについてもお話ししていこうと思います。
あとがき
個人的には早く「ひらがな」「カタカナ」「漢字」でもパスワードが認証できるようになってほしいと願うばかりです。
ひらがな・カタカナはそれぞれ48字、漢字に至っては・・ですね?
大小のアルファベットと数字、記号にこれらの3種を織り交ぜてパスワードを作成できるようになればパスワード強度は非常に高まります。
(・・といっても結局これもイタチごっこになるのですが)
Comments