LINEの仕組み from did2memo.net

LINEの仕組みや使い方などについて詳しく解説します

【LINE】「乗っ取り対策『PINコード』にリトライ制限が無い」を検証→PINコードを何度間違えてもパスワードが無効化されない

LINE (1627) LINE-PINコード (21) LINE-セキュリティ (54) LINE-乗っ取り (26)

「PINコードにリトライ制限がない」的な話がこのブログコメントに残されていたのですが、さすがに信じられず、実際に試してみました。その方法と結果、気がついたことなどを書いておきます。とりあえず、実験した限り、何度PINコードを間違えても、パスワードは無効化されませんでした。

現在、PINコード必須化が大きな話題になっているところでちょうどいいので、数日前に行ったばかりの実験内容を紹介することにしました。PINコード必須化もいいですが、パスワードを無効化する力をPINコードに与えるべく、パスワード再設定システムも作っておくと、LINEのセキュリティはもっと良くなるかと思います。

LINEのPINコードについての最低限の知識

PINコードに関する基礎知識を最低限言うと、現在のLINEのPINコードは、メールアドレスとパスワードが知られてしまっていても、その後に入力するPINコードも正解しないとログインできない、という仕組みのために使われています。

つまり、パスワードリストが流出してしまっている状態であっても、PINコードもあるから大丈夫、という2重ロックの役割を果たしていることになっています。

※このPINコードは、LINEの設定画面で設定するもので、SIMカードのPINコードとは無関係です(間違える人が多いので一応)。

実験からわかったこと

実験内容は、長くなってしまうので後ろに付けておくとして、最初に結論的なことを書いておきます。

それは、何度PINコードを間違えても、パスワードのロック(無効化&再発行手続きの開始)がされないということです。

10回間違えると一時的に、PINコードを受け付けなくなりますが、1時間ほどで復活し、繰り返しPINコードを間違えても、パスワードを無効化して、登録メールアドレスにパスワードの再設定メールがLINE運営から送信されることはありませんでした

PINコード10回x3セット=30回までの検証でしたが、100回1000回やらなかった理由は、たしかに時間がかかるということもありますが、数回の失敗でパスワードをロックする気がない、ということを検証するには十分だったからということが大きいです。

また、入手したメールアドレスとパスワードのペアの一覧を使えば、がんがん総当たり攻撃を回し続けることもできそうでした。並列化すればさらに高速化できます。何より、パスワードが無効にならないことが効きます

↓シェア用Tweet

以下、実験内容です。

実験準備

「被害者用LINEアカウントA」として、iPhone端末で電話番号認証を行って作成されたLINEアカウントを用意します。PINコード設定済みです。

「被害者用LINEアカウントB」として、Android端末で電話番号認証を行って作成されたアカウントも用意しました。こちらもPINコードを適当に設定しました。

また、「攻撃者用端末A」として、Android端末(LINE 4.5.2)、「攻撃用用端末B」として、iPhoneを用意しました。つまり、計4台です。

さらに、途中で電話番号かFacebookアカウントの入力が必要になるので、Facebookアカウントを1つ用意しました。

PINコードに総当りする

攻撃者用端末Aから、被害者役LINEアカウントAへメールアドレスとパスワードを知っていて、PINコードは全く知らない、という状況で試してみました。

10パターンずつPINコードにチャレンジできる

まず、盗みだした(と想定される)メールアドレスとパスワードでLINEアカウントの最初の認証を通過します。

次に、電話番号認証があります。勘違いが多いので説明しますが、これは個人を識別するための認証ではない、入力した電話番号の持ち主かどうかを確認する認証ので、適当に用意した電話番号でOKです(今までに設定されていた電話番号は無関係)。また、Facebookアカウントと連携することによっても先に進めるので、Facebookアカウントを適当に用意しても突破できます。今回は、Facebookアカウント認証で、電話番号認証を通過しました。

そして、PINコード入力画面になるのですが、PINコードは知らないので、適当に入力すると、次のようになります。

naver-line-pin-code-retry

PINコードが間違っています。
再度入力してください。PINコードを登録していない方は、以前の電話番号の下4桁を入力してください。

9回も間違えたのに、PINコードのリトライ制限による、パスワード再発行メールのようなものは届きません

そして、10回繰り返すと、"一時的な"ロックが掛かり、メッセージが変わり、これ以降正解を入力しても通らなくなりました

メッセージが次のように変わります。

naver-line-pin-code-retry-limit

エラーが発生しました。再度入力してください。

こうなると、正解を入力しても、ログインできなくなります

※「再度入力」なんて適当なことを言わないでパターン

また、ログイン画面をパスワードの入力画面からやり直してもダメです

しかし、このあと、ロックから1時間ほど経過すると、エラーが「PINコードが間違っています」に戻っており、再入力可能になりました(そして正解を入れれば通る状態に戻っている)。

つまり、このロックは、あくまで"一時的な"ロックであって、パスワードリセットを伴うものではありませんでした

ここまでで、1時間に10パターンという非常に遅いペースでですが、攻撃ができることが分かります。そしてなにより、PINコード認証に、パスワードを無効化するプロセスがなく、回数制限なくリトライできると予想*されることがわかりました(10回を5セットしたら無効化される「かも」しれません、自分は最終的に3セット=30PINコード試してから、それでも次のチャレンジではログインできる、ということまで試しました。面倒)。

※仮にここでロックされても、10回って結構な数。3回でメールアドレスにパスワード再発行メールを送ればいいのにと思ってしまう

最悪でも、1アカウントを乗っ取るために10パターンを10000/10=1000回繰り返せばいいので、1時間x1000で1アカウントということになります。

さすがに非効率に感じますが、パスワードリストはたくさんのパスワードを含んでいるはずなので、並列化すればその分改善可能です。

また、それ以前にPINコードを片っ端から入力する方法でログインすることが不可能ではない、というところが気になります。

全く別の切り口としては、1回10パターン"も"試すことができるので、簡単なPINコードにしていれば、突破するのに十分かもしれません。

ただ、どちらにしてもこれはLINEのセキュリティを好意的に見ているだけで、自分的にはすぐパスワードを無効化して、現在利用されているパスワードを使えないようにすればいいのに、と思わずにはいられません

1つの攻撃端末から複数のアカウントを攻撃する

「(実験で10x3セットやっても)パスワードが無効化されない、以上」を結論にしてもいいのですが、もう少し試してみます。

一度最初の画面に戻って、被害者カウントBのメールアドレスとパスワードで、同じことをしてみます。ログインに使うダミーのFacebookアカウントもそのままです。

これでPINコード入力画面まで行くと、再び「PINコードが間違っています」になります。つまり、一時的なログインロックは、端末側ではなく、被害者用アカウントAに対してであり、被害者用アカウントBには無関係ということになります

つまり、大量のパスワードリストに対して、順番に10パターンを試して失敗したら最初の画面から、次のアカウントで試す、を繰り返せば、ものすごいスピードでPINコードを試すことが出来るはずです

当然自動化しますが、手動でも1アカウント5分もあれば十分なので、やる気になれば、60分で120個のPINコードを試すことができます。これをまた並列化すれば、かなり早くなりそうです。そして、1度10回トライしてダメだったアカウントも、1時間ほど待てば再チャレンジが解禁されるので、ぐるぐる回し続けることが可能です。

複数の攻撃端末から1アカウントを攻撃する

次に、攻撃者用端末Bに変えて、もう一度、最初の被害者用アカウントAに対して、ログインを試みました。すると、PINコードの時点で、エラーが発生しました。再度入力してください」になります。したがって、いろいろな端末から、1つのアカウントに対して繰り返し絶え間なくPINコードをチャレンジすることは難しそうでした

したがって、推測しにくいPINコードが設定されている場合に、その特定の1つのアカウントを「高速に」攻撃し続けることは難しそうでした(ただし、アカウントがロックされて、パスワードが無効化されることがないのを忘れてはいけない)。

結論:PINコードをかなり間違えても「ロック」されない

実験の結果、無制限にPINコードを試すことは難しそうでした。しかし、その「回数」に制限はなさそうで、10回試して一時的にロックされたとしても、1時間もすれば復活し、その後何度でも挑戦できるようでした(30回まで検証、きりがないのでここまで)。

つまり、今回の実験範囲では、挑戦回数という意味では無制限でした

そして、ここで一番重要なのは、PINコードを何度間違えても、パスワードが無効化されないという点です。

どういうことかというと、10回20回30回と間違えたのであれば、そのうち正解されてしまうことを危惧して、運営側で、パスワードを使用不能にして、メールアドレスに、パスワードを再設定するためのリンクを送信するシステムになっていないということです。

10回x3セット=30回までしか検証しませんでしたが、その理由は時間がかかるということではなく、数回の失敗でパスワードをロックする気がないということを検証するには十分だったからということが大きいです。

ひとこと

現状、この問題を直接解決する方法は思い浮かびません。当然、サービス間ではパスワードを共有しないなどの基本的対策にするにしても、PINコードに超強力な意味(パスワードを無効化させるほどの)を持たせることは難しそうです。もちろん、足止めにはなりますが、足止めにしかなっていないといったほうがいいかもしれません

関連

コメント(0)

新しいコメントを投稿