301 Moved Permanently

Moved to https://vow.g.hatena.ne.jp/vow/

素朴な疑問

そもそもMoEの認証鯖ってブルートフォースで突破できるほど頑丈だったっけ?

(続き)

ブルートフォースというのは諸刃の剣なのですよ実際。攻撃対象の鯖が総当たりの負荷に耐えられなければ不正にすらログインできない。もちろん過負荷時に正規の認証すっ飛ばして何故かログインしちゃうぜテヘ☆ みたいな間抜けバグがあるなら話は別ですが、そうでない限りにおいては認証鯖が「弱い」ことは防御要素として純然たるプラスであって、むしろ耐ブルートフォースとしてはログイン試行レートを制限するのは全く正しい対処です — 制限の仕方が妥当であるかどうかは別として。


ここ最近のMoEの同時接続数は3鯖合計して4000程度だそうです。うちメンテ直後に突入するのが(メンテあけのタイミングで多少違いますが)30分かけて1000程度。直近の事例ですとエイプリルフールカオスでプチ城オンラインになっていましたが、仮にカオス場内の350人が全員一度に蹴落とされて全員一度に再ログインを試みていたとしても、たかが1000に過ぎません。

以上の状況からかなり大甘に見積もって、MoEの認証鯖には毎秒1000件の認証要求を処理する能力が有るとしましょう — 直感的にはこの見積もりは既にゼロ一つ多すぎる気がしますが、予想というものはとりあえず“悪め”にしておくものです。この全てが総当たり攻撃に消費された場合、log2(1000)より毎秒10ビット分程度の鍵空間が走査されることになります。

一方パスワードは最低8文字、最初の1文字はアルファベット26文字の大文字小文字で52通り、残り7文字は数字も使えるので62通りです。よってパスワードを乱数生成している場合、最低長でもlog2(52×627)で47ビット強に相当する鍵空間があります。

47ビットの鍵空間全体を毎秒10ビット分の走査速度で虱潰しするには、247-10秒かかります。ざっと26万年です。平均的には半数を走査したあたりで正答を引くはずなので、期待値としては13万年ほどで不正ログインに一回成功することになります。どこかで見積もりを根本的に間違えていて、仮に実際の認証鯖の性能が1000倍あったとしても、ただ一件の不正ログインを成すのに平均して130年かかります。


パスワードが辞書攻撃に対して脆弱なものであった場合は話が別です。たとえば6万語の辞書に載っている単語がそのままパスワードであった場合、パスワード自体の長さ(文字数)には関係なく鍵空間はlog2(60000)で16ビット分弱しかありませんので、1分ほどで確実に突破されます。

しかし、たとえ同辞書に載っている単語でも、それを2つ組み合わせて繋げれば、倍の32ビット分の鍵空間になりますので、平均して4年くらいはかかるようになります。3単語組み合わせて48ビット分の鍵空間にすれば、最初に例示した8文字の乱数パスワードと同程度の強度になります。

ただ辞書攻撃に対する強度をいい加減な平均値で考えるのは少々危険で、たとえば敵が「あなたがパスワードに使うであろう単語」を1000語程度に絞り込んでいて、しかもこの推測が正しかった場合には、2単語の組み合わせでも20ビット分の鍵空間にしかならず、ほんの10分程度で突破されてしまいます。3単語に増やしても1年しか保ちません。あるいは単語の繋ぎ方に意味や文法の上で規則性があることを敵に見透かされていた場合、単語数を増やしても単純には鍵空間が倍加されない可能性があります。

一般的に言って、辞書の収録語数を増やせば(無限に試行を繰り返せると仮定した場合の)攻撃成功率は向上しますが、攻撃が成功するまでにかかる試行数も増加するので、トレードオフの関係にあります。要は「ありがちな単語だけをきっちり集める」ことが重要で、実地での攻撃成功速度は辞書の品質に依存します。

人間可読なパスワードを設定している人はその辺のところに十分な注意を払ってください。言っておきますが、辞書攻撃に対して脆弱なパスワードの設定は全くユーザの責任です。いくら鯖側でブルートフォース対策を講じたところで、脆弱なパスワードでは守れるはずのものも守れません。


以上を総合するに、特段の脆弱性がない認証系に対して、何の事前情報もなしに不正ログインを成すのは、よほどパスワードが脆弱でない限り、言うほど簡単なことではありません。意気地のない認証鯖に感謝しましょう。

かなり端折った説明なのでこのまま鵜呑みにされると少々危なっかしい点はあるのですが、大筋ではそう間違っていないはずです。逆に言って、事実として不正ログインが易々と可能であったならば、この前提条件のどこかに穴があります。

  • 運営側の認証系に特段の脆弱性があり、単純な力尽く総当たりより効率の良い攻撃を許している場合
    • 設計ミスあるいは実装上のバグによる認証系自体の脆弱性 (鍵長不足や分割統治攻撃等)
    • 設計ミスあるいは実装上のバグによる認証のバイパスやセッションハイジャック
    • 認証情報の漏洩 (インジェクションないしサイドチャネル攻撃等)
    • 中間者攻撃 (あるいは単なる盗聴) に対する防御不備&c...
  • 敵方が何らかの事前情報を運営側から得ている場合
    • 根本的なバグ/設定ミスによる認証情報の漏洩
    • 不正プログラムによる認証情報の漏洩 (バックドア等)
    • 認証情報の漏洩に対する防御 (塩漬け暗号化等) の不備
    • オペレータの過失あるいは内通者による犯行
    • 物理的サーバあるいはハイパーバイザへの侵犯
    • 廃棄物の漏洩&c...
  • 敵方が何らかの事前情報を運営以外から得ている場合
    • ユーザがフィッシング(phishing)に引っかかってみる
    • ユーザが不正プログラム (いわゆるウィルス類) に感染してみる
    • ユーザが第三者にパスワードを教えている (他のネットワークサービスを含む)
    • ユーザが認証情報の保管を安全にしていない (メールボックス等)
    • 運営側から平文でメール送付されたパスワードをユーザが変更していない
    • 実はジサクジエンでした&c...
  • ユーザの設定したパスワード自体が脆弱である場合

さてどれだ。


運営側が漏洩経路を同定できていない段階で、自身からの漏洩を公式に認めるところまで踏み込めないのは、気分の問題はさておき私企業の動作論理としてはわからないでもないんですが、かといって万が一にもパスワードの漏洩まで疑われるようであれば、少なくとも推定漏洩範囲内は無条件にパスワードリセットかけるくらいの手をさっさか打たないと余計に泥沼になるんじゃないかなー・・・と思ったものの、よくよく考えたら問答無用でパスワードリセットかけて隠滅を謀るという手があった。馬鹿正直に漏洩したのでとか言わずとも、とりあえず不正アクセスとみられる接続を確認しましたためとか何とか言っておけばユーザはまず反論できないもんなぁ。大人きたない。

・・・いやこういう陰謀論めいた言い方をするのは我ながら多少アレだと思うのだけど、MoEの運営には過去につまらない嘘を吐いた前科があるからなー。勿論それ自体は比較的些細な事であって特段に目くじらを立てるような事じゃないのだろうけど、かといってこの確信が私の側にある限りそう簡単に手放しで信用する気にもなれないわけで。

念のため申し添えておくと、それでも何もしないよりはマシだと思います。下を見ればキリがないこの世の中じゃ・・・。



130609追記

昨日のメンテあけの挙動からすると、認証鯖だけならもう少し処理能力が有るかもしれない気がしてきました。というかゲーム内やマイページからの負荷とでどんぶり勘定になっている悪寒がする。ただいずれにせよ一般論として、辞書攻撃が成立しないだけの情報量があるリモートのパスワードに対して、単純なブルートフォースが成立する見込みは限りなく小さい、という大筋の話に変わりはありません。つまり、もし脆弱ではないパスワードに対して不正なログインが成立した事実があるならば、その敵は確実にパスワードについて何らかの事前情報を持っていたに違いないのです。それを漏洩したのがユーザ側であるか運営側であるかは別として。