SMS認証はやめてくれい

電話回線を使う習慣がないため、いちいちSMSを受信するのが面倒くさい。それは仕方ないとしよう。たが、手間の割にSMSは堅牢な仕組みでもない。YubiKeyやTOTPであれば、通信環境さえ必要ないのだけれど、なぜわざわざ脆弱性が問題視されているSMSを使うのだろうか。

脆弱性の悪用・利用

携帯の通信には、回線交換方式とパケット交換方式があるが、脆弱性が問題視されているのは、回線交換方式である。そのため信号線も音声回線(つまり、電話もSMS)も同じく脆弱性にさらされている。

脆弱性が悪用・利用されているという話は、ときどき話題にはなっている。

例えば、

  • 中国がカリブ海諸国のネットワークを悪用して、アメリカ人の監視をしている
  • サウジアラビアがアメリカ在住のサウジアラビア人の位置情報を取得している
  • SS7の脆弱性が利用され、ドイツの銀行からお金が引き出された

といったような話がたまにニュースになる。

脆弱性の箇所

脆弱性があるのはSS7であるが、SS7とは、回線交換網(PSTNとか3G・LTE)で利用されている1970年代に登場したプロトコルで、電話やSMSを利用する際に用いられる。もともとは、事業者間の閉じたネットワークを想定して利用されてきたプロトコルであるため、2000年にIPネットワークで利用できるようになってからは認証や暗号化等のセキュリティ上の問題が浮上した。

通信事業者の登録や規制に厳しくない国で、SS7ハブを用意できれば、世界を対象にその脆弱性を利用できる。自分で用意できなくても、闇市場ではその仕組みを利用できる権利みたいなものを取引している。

とはいっても外国からの通信をブロックすればいいじゃないという発想もありそうだが、正規の利用方法としてのローミングも同時にできなくなる。なら不正に利用されたものだけブロックすればいいじゃないとなるが、不正かどうかを判別する仕組みがSS7にはない。かくして、すべてのコマンドが処理されるようになっている。

脆弱性の利用例

プロトコル自体の脆弱性のため、攻撃のベクターは複数あるだろうが、一例を挙げてみる。

特定の電話番号あてにSMSを送りたいですよというリクエストを発行すると、HLR(Home Location Register:携帯の加入者情報を管理するデータベース)から、以下の情報が返って来る。

  • IMSI(International Mobile Subscriber Identity:加入者の識別番号で、携帯内かSIMカードに格納されている)
  • MSC(Mobile Switching Center:現在の移動通信交換局)
  • VLR(Visitor Location Register:加入者の位置情報の一時的データベース)

このリクエストをすることで、HLRのアドレスとIMSIがわかるので、より細かいコマンドを実行できるようだ。 例えば、細かい位置情報を割り出すことができたり、通話の傍受、SMSを乗っ取ることもできる。

SMSが認証に利用されてる理由

こうした脆弱性があるのに、SMSを認証として利用しているのは、なぜか。

  • 登録数制限(1人1個とか)
  • 身分証明書の代わり(日本の場合、基本的に身分証明しないと携帯電話番号は使えない)
  • 簡易的に2段階認証を実装できる(というセキュリティーシアター)
    • アプリをインストールする必要がない、別途トークン端末を用意する必要がない

見通し

通信事業者

4G、5Gと世代を経るに連れ、より安全なプロトコルになるにしても、下位互換のために実際の解決まではまだ時間がかかるのだろう。例えば、VoLTEの場合、電話に関してはパケット交換方式を用いるようなので、SS7の影響はなさそうだが、通話する双方がVoLTEじゃないと影響は残る。

サービス提供者

SMS認証を廃止するつもりは当座ないだろう。2008年より、SS7の脆弱性が指摘されてはいるものの、多くのサービスでSMSを認証方式として採用している現状は、2段階認証を否定的に受け入れているからだろう。セキュリティを主眼においたらこの判断にはならない気がする。通信規格がアップデートされるのを待つ方が早いかも知れない。

2段階認証は、本来セキュリティ上の理由で採用するのだろうが、SMSだとその点が効果的ではない。SS7の脆弱性がマイナス要素にはならなかったとしても、2段階認証だから安心だと考えるユーザーがいるならば、パスワードの強化・管理に対する意識を軽んじた結果、セキュリティ上反対の効果を生むことになる。

まとめ

緊急時、災害時であったり、通信手段の1つとしてSMSを利用すること自体はいいのだが、それを認証に利用することは望ましくない。根本的な解決策は、通信事業者側が対応するか、サービス提供側がSMS認証やめるか・選択肢をもたせるかしかない。

ユーザーが対応できることは限られている。仮にSMSを暗号化できるSilenceというアプリを用意してもC2Cのサービスだから、SMS認証ではどうしようもない。

できることは、

  • SMS認証を使用するサービス自体を避けるか、他の認証方法を選ぶこと
  • 緩和策として、
    • 認証のときだけ使用する番号を用意する(まだましくらい)
    • SMS認証は当てにはせず、パスワード強化・管理、アクセスログの確認等を重視する
  • その他、不必要にSMSへのアクセス権限を求めるアプリは使用しない

以上、SMSを2段階認証に使わないでくれいという話であった。