2019年8月15日
常識を疑え!ハッカー視点のセキュリティ
筆者)株式会社トライコーダ 上野宣
第18回 攻撃者が破りやすいパスワード文字列とは
毎日のように起きている不正アクセス事件ですが、SQLインジェクションなどの脆弱性を利用した攻撃による不正アクセスもありますが、認証を突破されることによる被害が後を絶ちません。また、ペネトレーションテストでも客先のシステムに侵入する際にもパスワードを破ることがあります。
今回はほとんどのWebサイトが採用している「ユーザーID」と「パスワード文字列」を使った認証方式に対する不正アクセスについて説明します。
総当たり攻撃と辞書攻撃
攻撃者がネットワーク越しにWebサイトの認証を突破する方法の基本は、正規ユーザーと同様のログイン画面から認証を行う方法です。その際には多くの認証を試行するためにオンラインでパスワードを試行するツールを使います。
攻撃者がパスワードを破る前にまず必要なのは「ユーザーID」です。当たり前ですがこれがわからないと、どのユーザーのパスワードも破ることができません。攻撃者はユーザーIDを推測するか、どこからか入手する必要があります。
ユーザーIDがわかったら、次は正しい「パスワード」を見つけるわけですが、その方法としては「総当たり攻撃」と「辞書攻撃」があります。
「総当たり攻撃」はパスワード文字列として使える文字の種類と文字長のすべての組み合わせを試すものです。
たとえば、銀行の暗証番号のような4桁の数字を使ったパスワードだとしたら「0000」〜「9999」までのすべての組み合わせを試します。この方法の良いところは、すべての組み合わせを試すのでその中に必ず正解のパスワードがあることです。
しかし、この方法はあまり使用されません。多くの場合パスワードはもっと複雑な文字種と長い文字長が使われていますので、正解のパスワードを導き出すのには何十年、何百年、もしかするとそれ以上の年月が掛かる可能性もあるからです。
そこで多用されるのが「辞書攻撃」です。用意したパスワードの文字列候補のリストを辞書として試すものです。
たとえば、銀行の暗証番号のような4桁の数字の場合、「誕生日に設定している人が多いのでは?」と推測します。その推測に基づいて「0101(1月1日)」〜「1231(12月31日)」までの組み合わせを辞書として用意して試行します。推測が正しければ正解のパスワードにたどり着くのは、総当たり攻撃よりは現実的な時間で行うことができます。
攻撃者がよく使うパスワード辞書
ここで重要になるのが、どういう辞書を使うかです。当たり前ですが辞書に載っていないパスワードを破ることはできないので、攻撃の成否は辞書の質に依存します。質の良い辞書とはなるべく少ない候補で、成功率が高いことです。しかし、万能な辞書など存在しません。
ペネトレーションテストでよく使用する辞書は、世界中のパスワード漏えい事件などから集められたパスワード文字列を基に統計を取ったものです。下記はその上位10件の抜粋です。
1. 123456
2. password
3. 12345678
4. qwerty
5. 123456789
6. 12345
7. 1234
8. 111111
9. 1234567
10. dragon
かなり単純なパスワードが並んでいるように見えますが、この辞書が特別なわけではなく、他の統計を基にした辞書もだいたい同じような文字列が並んでいます。
単純な文字列以外にも「qwertyuiop」や「1qazxsw2」のようなキーボードの並びというものもあります。一昔前のガラケー向けWebサイトに多かったのは「adgjmp」といった「123456」のキーを押したときのアルファベットの並びというものもありました。
攻撃に掛けることができる時間に応じて、このような辞書のワースト100だったり、ワースト10,000といったものを使用します。
ペネトレーションテストではターゲットに合わせて辞書を作ることもあります。たとえば、社内で共通で使われているパスワードなどを発見すると、それを辞書に追加していきます。また、パスワードの定期変更をやっている会社などをターゲットとして、そのパスワード文字列の後ろに数字や「!,#,$」のように記号を足した文字列を辞書に加えたりもします。
パスワードの使い回しはなぜ良くないのか?
Webサイトに対する攻撃で増えているのが、他所のサイトから漏えいしたユーザーIDとパスワードをセットにした辞書を使った「パスワードリスト型攻撃」と呼ばれる攻撃です。たとえば、FacebookとTwitterで同じパスワードを使っているとしたら、一方が漏えいしたとしたらそのユーザーIDとパスワードのリストをもう一方に対して辞書攻撃で使用します。
ある統計によると、この攻撃の成功率はおよそ1%前後だそうです。これは非常に高くて、パスワード漏えい事件などは1万件以上漏えいすることはざらにあります。1万件の1%だとしても、100件は不正ログインに成功するわけです。
WebサイトのユーザーIDはメールアドレスを使用していることが多いので、パスワードを使い回していると被害に遭う可能性が高くなってしまいます。
Webサイトなどが辞書攻撃やパスワードリスト型攻撃などの被害に遭わないようにするためには、ワースト10,000などのパスワード辞書に載っているような単純な文字列を登録できないようにしたり、アカウントロックというたとえばパスワードを10回間違えると、その後1時間はログインさせないといった対策や、二要素認証などの複数要素認証を導入するなどの対策が効果あります。
利用者としてはパスワードの使い回しをせず、パスワード管理ツールなどを使ってWebサイトごとに異なる長いパスワード文字列を使用することが望ましいでしょう。