以下のようなニュースがありました。
NTTレゾナントの「gooID」に不正なログイン要求、約3万アカウントをロックし対処
このニュースには
特定のIPアドレスから秒間30件を超える機械的なログイン要求(ブルートフォース攻撃、関連記事)があった
とあります。(ブルートフォース攻撃、関連記事)と書かれたリンク先はブルートフォース攻撃の解説が書かれたページなのですが、自分の中で整理する意味も込めてブルートフォース攻撃について考えてみました。
(攻撃方法の可能性としてどこかで漏洩したユーザ名、パスワードを用いて使い回しを行なっているアカウントを狙っている可能性は捨てきれませんが今回はこの可能性については言及しません。)
ブルートフォースとは「強引な」とか「力任せな」という意味で基本的に認証を突破する際に用いられる手法の1つです。これにはいくつかパターンが存在するので1つずつ見ていきましょう。
といってもそんなに難しいものではなく、一般的にブルートフォース攻撃と言うと基本的に下のような分類のどれかに当てはまると思います。
「リバースブルートフォース攻撃」という言葉がでてきましたがここではまだ気にしないでください。まずは「1. ブルートフォース攻撃」の「1-1. インクリメンタル攻撃」と「1-2. 辞書攻撃」を見てみましょう。
【1-1. インクリメンタル攻撃】
これはユーザ名を(ある程度)固定し、パスワードを連続した順番に試行して行くタイプのものです。
例えば以下の通り。
ユーザ名:ntsuji
パスワード:0001, 0002, 0003, 0004, 0005 0006, 0007....などなど
または
パスワード:aaaa, aaab, aaac, aaad, aaae, aaaf, aaag....などなど
【1-2. 辞書攻撃】
こちらもユーザ名を(ある程度)固定し、パスワードを順番に試行するタイプではあるのですが「1-1. インクリメンタル攻撃」が「連続した順番」に試して行くのに対し、こちらは「辞書ファイル」と呼ばれるテキストファイルなどに記載されている、よくパスワードに用いられるであろう文字列を試行していきます。
例えば以下の通り。
ユーザ名:ntsuji
パスワード:password, Password, P@ssword, 1234, 12345, asdf ...などなど
なんとなくお分かりいただけたかな?というところで
「2. リバースブルートフォース攻撃」の説明をしたいと思います。
名前を見て分かる通り「ブルートフォース攻撃」の逆(リバース)です。
「ブルートフォース攻撃」で紹介した2つが共通する部分
「ユーザ名を(ある程度)固定し、パスワードを順番に試行するタイプ」
であったのに対し、こちらはその逆
「パスワードを(ある程度)固定し、ユーザ名を順番に試行するタイプ」
と覚えればよいかと思います。
念の為先程の2つ同様説明をします。
【2-1. インクリメンタル攻撃】
パスワードを(ある程度)固定し、ユーザ名を連続した順番に試行するタイプのものです。
例えば以下の通り。
ユーザ名:0001, 0002, 0003, 0004, 0005...などなど
パスワード:1234
【2-2. 辞書攻撃】
こちらもパスワードを(ある程度)固定し、ユーザ名を順番に試行するタイプではあるのですが「2-1. インクリメンタル攻撃」が「連続した順番」に試して行くのに対し、こちらは「辞書ファイル」と呼ばれるテキストファイルなどに記載されている、よくユーザ名に用いられるであろう文字列を試行していきます。
例えば以下の通り。
ユーザ名:satou, suzuki, takahashi, tanahashi, takanashi....などなど
パスワード:1234
【雑感】
ブルートフォースはある程度クラックしたいユーザが決まっている場合に用いられるのに対し、リバースブルートフォースは特にクラックしたいユーザが決まっているのではなく、弱いパスワードを設定してしまっているユーザをクラックしたいという場合に用いられると思います。
どういった方法を用いるのかというのは攻撃者の持っている情報や状況、目的によって変わってくるのだと思います。
例えばユーザ名が連番で振られいるが、一定時間内に3回ログインに失敗したらアカウントがロックアウトされてしまうという条件がある場合では以下のようなパターンの試行が考えられると思います。
ユーザ名:1000, 1001, 1002, 1003, 1004....などなど
パスワード:1234, [ユーザ名と同一]
1ユーザに対してのログイン試行は2回までと制限をして2回の試行ごとにユーザ名を変化させていく。
これで弱いパスワードを設定しているユーザをクラックしアカウントロックもされず、少し時間をおけば再度試行するパスワードを変えて攻撃することが可能になるというわけです。
さて、冒頭で紹介したニュースはどのパターンが試行されたのでしょうか。
真相は分かりませんが状況から考えてみたいと思います。
ポイントとなるのは
調査したところ、ログイン要求を送られたアカウントの数は約3万。
の部分だと思います。3万ものユーザ1つ1つに多くのパスワードを試すことは考えにくいため1つのユーザにはあまり固執した攻撃は行なわれてないのではないかと想像できますので「1-1」「1-2」ではなく、リバースブルートフォースである「2-1」か「2-2」が用いられたのではないかと考えられます。しかし、「gooID」ではログインの際のIDはユーザが任意に設定することが可能ですので「2-1」も可能性としては考えにくいと思われます。したがって、今回は「2-2」の「リバースブルートフォースによる辞書攻撃」ないしその応用が断続的に行なわれているのではないか?という推測ができます。
では、3万ものユーザ名をどのようにして用意したのか?ということなのですが、これに関しては2つの推測ができました。
1つ目は単純にどこかからの漏洩や売買。「gooID」は「gooメール」@よりも前で用いられているので、メールアドレスのリストの漏洩、もしくは購入で入手することも可能だと思います。もう1つは「gooID」を用いるサービスから。
例えば「gooブログ」を設置した際のアドレスは「http://http://blog.goo.ne.jp/ユーザ名」となりますのでこのようなものから収集することも可能です。
長々と書いてきましたが、これらはすべて1つの記事と自身の経験や感覚からの「推測」や「予想」でしかありません。このあと出てくる情報に寄ってはすべてが覆る可能性は大いにあります。
そして、真実の中には一番低いと思っていた可能性や思いも寄らなかった別の可能性だったということも多々あるでしょう。
あーでもない。こーでもない。と推測するのは実に楽しいことです。
終わりそうで終わらない。いつになったら終わるんだと思いながらも見続けているアニメのように。
しかし、そこで大事なことは事実と推測を分けて表現することなのかもしれないなと思います。
そこに気をつけないと専門家として認識されている人間やメディアが発したというだけで信じてしまう方々を増やしてしまうことになってしまいますから。
このエントリが「ブルートフォース攻撃」という言葉を見聞きしたときに考えられる可能性の幅を拡げることに繋がれば幸いです。
【追記】
・このエントリを書いている最中に3万件が10万件になったという続報が入りました…
・gooIDで設定できるパスワード文字数は4文字以上32文字以下です。
・使用できる文字種は下記の通り。
英字 a~z A~Z
数字 0~9
記号 ! " # $ % & ' ( ) = ~ | - ^ \ @ ` [ ; : ] , . / { * + } < > ? _
・ブログを読んでくださった方からコメントをいただきました。
いただいたコメントは下記の通りです。
「ブルートフォース攻撃と辞書攻撃は同列であってブルートフォース攻撃に辞書攻撃を含めるべきではないのではないか?」
これに対してボクの考えは以下の通りです。
このエントリを書くときに確認する意味も込めて調べてみたのですが
ブルートフォース攻撃に辞書攻撃が含まれるかということについては諸説ある感じになっていました。
そこで悩んだ挙げ句、(reverse)brute force attack の中に incremental attack と dictionary attackを入れ込むことである程度すっきり分類することを優先しつつも、用語の使い方、認識の問題はあるものの中身に影響を与えず間違いではないという形にできるかと判断しました。
【2013/4/5追記】
・「「gooID」に不正ログイン攻撃、10万アカウントが突破される」を読んで。
実際、すでに10万アカウントという規模で不正ログインが成功しているわけだが、ログからは、その何倍ものログイン試行が失敗していることが確認されているという。
という部分から拾い物のユーザ名、パスワードの組み合わせた辞書ファイルを片っ端からぶつけてるのかもしれませんね。
オンラインパスワードクラッカー「hydra」「medusa」でいうところの-Cオプションあたり。
hydraの-Cオプション↓
-C
colon seperated “login:pass” format, instead of -L/-P options