あなたのサービスは大丈夫?多要素認証のログインでも危険な理由
アプリで使っているログイン方式の脆弱性を理解していますか?
パスワードはなんとなく、
「適当に入力して当たったらヤバい!」
「パスワードを見られちゃったらアウト!」
などわかると思います。
しかし上記以外にも考慮すべきことや、
パスワード+αでも脆弱性があることを理解しておかないと危ないなぁと思ったので、
いろいろな認証方式のセキュリティについてまとめてみました📝
この記事でセキュリティについて考えたことのなかった人が、なんとなく「やばくね…?」と認証について見直すきっかけになればと思います🙏
「パスワード認証のみ」はヤバい💥
なんとなく危ないということは想像できると思いますが、
特に下記のような攻撃手段があることは知っておくべきかなと思います。
フィッシング攻撃👊
これ、皆さん理解しているでしょうか?
僕はなんとなく分かっているつもりでしたが、
ちゃんと調べて、ちゃんとヤバいなと思いました。
フィッシング攻撃とは、
メールやSMSから偽のWebサイトへ誘導し、偽サイト上でID/パスワードなどを入力させる攻撃です。
下記画像のようなSMSやメールが届いたことはないですか?
これがフィッシングです。
この手法で狙われると、堅牢なパスワード設定を促しても大量のユーザーのID/Passなどが流出する可能性があるということは頭に入れておくべきかなと思います。
一見、「騙されるわけないじゃん」と思いそうですが、直近でも楽天証券などが狙われた大規模なフィッシングの記事が出ていましたね。[1]
さらに、最近では高校生がフィッシング詐欺を行い書類送検されたニュースもあり、
高度な知識がなくても可能である点でも非常に危険かと思います。
ブルートフォース攻撃👊
これは、すべての文字の組み合わせを順番に試す総当たり攻撃です。
コンピュータの計算能力では英小文字6桁 "約3億通り" に対し、
解析ツールを使えば "1秒未満" で解読可能との報告もあります(すごい) 。[2]
さらにいくつか攻撃手口に種類があり、
例えば "リバースブルートフォース攻撃" は
「パスワードに"p@ssword"などよく使われるをものを固定して、IDを総当たりする攻撃」のためIDごとで回数制限を設けていても意味がなく、
よくある 「ログイン試行回数3回まで」などでは防げない攻撃となります。
このブルートフォース攻撃の対策として、
やたらと長く複雑なパスワードを設定させられるわけですね...。
もしパスワード認証のみしか認証手段がない場合、
パスワードを定期的に変更するなどの対応で多少効果はありますが、
ID/パスワードのログインが可能なアプリは漏れなく狙われる可能性があり非常に危険なことを認識しておきましょう!
そこで登場した多要素認証!💫
多要素認証(MFA: Multi-Factor Authentication)は、
単一の"要素"だけでなく異なる種類の"要素"を組み合わせることで不正アクセスのリスクを大幅に低減させることを目的としています。
「要素」とは?
MFAを理解する上で鍵となるのが、「認証の3要素」と呼ばれる以下の3つのカテゴリーです。
MFAはこれらのうち2つ以上の異なるカテゴリーの要素を組み合わせて認証を行います 。
1. 知識🧠
ユーザー本人だけが「知っている」はずの情報。
例: パスワード、PINコード(暗証番号)、秘密の質問、画面ロック解除パターン
2. 所持📱
ユーザー本人だけが物理的に「持っている」はずのモノ。
例: スマートフォン(SMS受信、認証アプリ)、セキュリティキー(USBトークン)
3. 生体🖐️
個人を識別するための身体的な特徴に関する情報。
例: 指紋、顔、虹彩(目の模様)
2段階認証との違い📝
ちまたではよく2"要素"認証(2FA) や 2"段階"認証という言葉がよく使われますが、
これらは厳密には異なります。
- 2"要素"認証::言葉通り 「認証の3要素」のうち異なる2要素を組み合わせたもの
- 2"段階"認証:使う要素の種類は問わず2つのステップで行うもの
例えば、
パスワード(知識要素)+秘密の質問(知識要素) の場合は同じ要素で単に2つの認証をしているだけなので2段階認証となります。
セキュリティ強度としては、
一般的には2要素認証の方が2段階認証よりも安全性が高いとされており、
上記のパスワード+秘密の質問の2段階認証のパターンでは両方ともブルートフォース・フィッシングの対象であったりサイバー攻撃を受けた際に両方のデータが漏洩される可能性もあり、
「認証が強固になった!」と安心はできませんね。
しかし、パスワード(知識要素) + SMS(所持要素)の2要素認証のパターンを考えると、
パスワードがブルートフォースやフィッシング、サイバー攻撃で流出してもSMS認証はその電話番号を使用できる端末を持っていないとダメなので2段階認証と比較して、安全・安心ですね!!
……本当にそうでしょうか?
パスワード+SMS認証の限界😢
このパスワードとSMS認証は2要素認証の代表的なパターンかと思いますが、果たして安全なのでしょうか?
SIMスワップ👊
SIMカードがないとSMSはできないので、
「SMSは自分のスマホでしか使えないし安全!」と思っていませんか?
実は、別の人が自分のSIMカードをを乗っ取る可能性があります。
それがSIMスワップという攻撃手法です。
手法としては、
ユーザーの個人情報を事前に調査し、
携帯会社を騙してユーザーの電話番号と攻撃者が用意した電話番号を交換(スワップ)するというものです。
これにより、パスワードが流出するとSIMスワップにより簡単にSMS認証をすり抜けることができてしまいます。
「こんなこと可能なの?」と思いますが、
実際にXの元CEOも被害に遭っていたりなど、調べると事例は多数出てきます。[3]
通信経路が危ない👊
「無料WIFIは使うな!」という話がありますが、
SMSの通信も絶対安全…とは言えなさそうです😵💫
SMSは基本的に暗号化されておらず、
ネットワークにアクセスされると傍受される可能性があると多くのサイトで記載しています。[4]
さらに最近のニュースとして、
日本で中国の方を対象として偽の基地局を使い詐欺SMSが送信されたりなどありましたね。[5]
これは「SMS認証のコード傍受」とは別件かもしれませんが、SMSは通信経路にも危険があるということは認知しておいた方が良さそうです…!
パスワードと同様の攻撃も受けてしまう👊
SMS認証コードを6桁程度で入力する関係上、
先程のブルートフォース攻撃も考えられます。
また、怖いのがリアルタイム型フィッシングです。
下記のように攻撃者がリアルタイムで正規サイトを操作することで可能となります。
- 利用者🧑💻:偽サイトにID/パスワードを入力
- 攻撃者🥷:リアルタイムで正規サイトにID/パスワードを入力してSMS送信
- 利用者👨💻:自分のSMSに認証コードが届き疑いなく偽サイトに入力
- 攻撃者🥷:リアルタイムに認証コードを入力し正規サイトにログイン
これにより、SMS認証コードを盗み取ることが可能になってしまいます。
上記のように、「SMS認証を追加して多要素にしたから安心!」というわけではなく、
SMS特有の攻撃なども考えられることは認識しておいた方が良さそうです😿
※しかしながら、パスワード認証のみに比べて攻撃側も複数の要素に対応必要な分、
多要素認証があると格段に攻撃のリスクは低くなるということも押さえておきましょう!
その他の多要素認証の脆弱性💥
SMS認証以外にも、よく使われる多要素認証の方法がありますが、それらも絶対に安全とは言い難いです。
TOTP認証📲
Google Authenticatorなどの認証アプリを使った方法です。
これは TOTP(Time-based One-time Password) と呼ばれ、
一定時間(通常30~60秒)ごとに変化する6桁程度の数字コードを認証アプリが表示し、
それを入力して認証します。
↓GoogleAuthenticatorに表示される数字コード
認証アプリを「持っている」ことを確認するので 「所持要素」 となり、パスワード認証と組み合わせることで2要素認証となります。
さらに、認証アプリ内でコードは生成されるため、
SMSのように通信経路で傍受されるリスクが低く、
SIMスワップ攻撃などの影響も受けません。
上記からSMS認証よりは安全のように思えますが脆弱性はあり、
TOTPもSMS認証と同様で6桁程度のコード入力をするのでブルートフォース攻撃を受けてしまいます。
さらに、時間制限があるにせよ、リアルタイムフィッシングによる攻撃も考えられます。
SMSならではの脆弱性は排除できますが、まだ心配はありますね。。
また、セキュリティ以外の観点ですが、
TOTP認証は登録・ログインに少しハードルがあります。
登録にはGoogle Authenticatorなどの別アプリをインストールしてQRコードや認証コードを入力する必要があったりするので、ユーザー体験を考えるとSMS認証を設けたくなる気持ちはわかる気がします…。
プッシュ通知認証🔔
パソコンなどでログインしようとすると、
ログインしたことのあるスマホに「ログインしようとしていますか?」といった通知が届き「はい」をタップすることで認証が完了します。
↓パソコンでログインしようとするとスマホに通知が届いて
↓通知をタップしてアプリで承認!
プッシュ通知は予めログインしたアプリに届くので 「所持要素」となり2要素は成立しますね!
しかし、これにも脆弱性があります。
それが多要素認証疲労攻撃です。
攻撃者は盗んだIDとパスワードを使って何度も何度もログインを試行し、
その度にスマホにはプッシュ通知が届きます 。
間違って「はい」をタップしてしまうと、不正ログインを許してしまいます。
これを防止する策として、
プッシュ通知とコード入力を組み合わせたものもあります。
ログイン画面に番号を表示しプッシュ通知から開いたアプリでその番号を入力させることで、
攻撃者がログインしようとしてもユーザーはログイン画面に表示されている番号を知らないので、プッシュ通知が送られても認証できないというものです。
この方式はMicrosoftが採用しておりかなり安全そうですが、
調べていると被害に遭っているような投稿もあり、
原理的にはリアルタイムフィッシングができてしまうのでこちらも絶対安心とはいきません。[6]
(偽サイトでパスを入力したあと、Microsoftの正規サイトに表示されている番号を偽サイトにリアルタイムで表示してユーザーに番号を入力してもらうイメージかと思います)
ここまではパスワードを用いた認証と、
それにプラスした多要素の認証方式について見てきました。
ここで思い直します。
「そもそも、一要素目のパスワード認証が脆弱だからダメなのでは…?」
パスワードレスならよくない?という考え🤔
そもそもパスワードがなければ、
ブルートフォースやフィッシングの影響も受けなさそうで安全なような気がしますね。
パスワードレスという話題で最近見かけるのがマジックリンクという認証方法です。
Slackが導入していることで有名ですね。
これは、ログイン時にメールアドレスを入力すると、
そのアドレス宛に特別なリンク(マジックリンク)が送られてきて、
そのリンクをクリックするだけでログインが完了する仕組みです。
これにより、ユーザーはパスワードを覚える必要も入力する必要もありません!
パスワード管理の煩わしさから解放されます。
さらに、ブルートフォースやフィッシングにも強いし、最強!!
…本当にそうでしょうか?
マジックリンクの注意点・脆弱性💥
便利なマジックリンクですが、注意点もあります。
メールアカウントのセキュリティに依存する😵💫
メールアカウント自体のセキュリティが重要になります。
もしメールアカウントが乗っ取られてしまうと、マジックリンクも悪用されてしまいます。
例えば、共有のPCなどでログインしたまま…だと悪用される可能性はありますよね。
また、メールアカウントがパスワード認証しか設けていない場合は結局パスワード認証と同じセキュリティとなるので、必ずメールアカウントをセキュアにしておく必要があります。
中間者攻撃😵💫
公共のWi-Fiなど安全でないネットワーク環境でメールを確認した際、
メールの暗号化などをしていない場合は通信が傍受され、
マジックリンクが盗まれる可能性があります。[7]
フィッシングの可能性😵💫
可能性としては低いですが、
フィッシングサイトにマジックリンクのURLを貼ってしまう可能性も0ではなく、
フィッシングされてしまう可能性があります。
パスワードがなくなったからと言って安全とは言えず、マジックリンクにおいても多要素を組み合わせてセキュリティ強度を上げるのが得策のようです。
続いて、他のパスワードレスな認証として、
広く使われており便利なSNS認証も考えてみましょう。
SNS認証 (ソーシャルログイン)🍎
Google、Apple、Facebookなど、
既存のSNSアカウントを利用してログインする方式です。
すでに認証済みアカウントをスマホなどで持っている場合、
ワンタップでログインができ体験が良く、
さらにアプリ上でパスワード管理しなくてよく便利ですよね。
※ログイン済みでない場合はSNSアカウントのパスワード認証なども必要です。
ただ、SNS認証のセキュリティについてはSNSのプロバイダに依存してしまうので、
それぞれのプロバイダごとでセキュリティ評価が必要なのが現状です。
例えばApple IDを使用したログインでは2要素認証が必須となっており、
比較的高いセキュリティレベルが担保されます。
しかしながら、GoogleやFacebookなどは2要素認証を提供しているものの、
ユーザーが任意で設定する形式が多く必ずしも必須化されていません。
ユーザーが2要素認証を設定していない場合、
SNSアカウントのパスワードが漏洩するとアプリにも不正ログインされるリスクが高まります。
SNS認証は非常に便利ですが、
その利便性の裏でセキュリティに関する注意点があることを理解し、
SNSアカウント自体のセキュリティ設定がどうなっているかを確認することが大切です。
これまで色々な認証方式を見てきましたが、
どれも懸念点があり全然安心できないですね…。
でも 「安心してください。セキュアですよ」
"とにかく明るいパスキー"の登場です。
究極の認証? パスキー登場!🙌
これまでフィッシングだのブルートフォースだの様々な懸念点を提示してきましたが、
それらを解決する技術が登場しました。
それがパスキーです!
これは、Apple、Google、Microsoftといった大手企業も推進している技術で、
パスワード不要、かつ安全に認証が可能です!
パスキーの仕組みは難しいので簡単に説明すると、
「デバイスロックを解除する際に使用する方法(PINコードや生体認証)で、
パスキーをデバイスに保持してログインできるようにする」 というものです。
(ご存じない方はdアカウントのパスキーの説明を見ると、もう少し詳細にわかるかもです)
↓iOSでFaceIDでのパスキーログインの様子
パスキーのセキュリティ💫
これまであった課題を一気に解決できます🎉
フィッシング詐欺への圧倒的な耐性✅
パスキーは登録された正規のウェブサイトやアプリでのみ有効に機能します。
偽のサイトに誘導されてもデバイスが誤ってパスキーを提供することはありません。
ブルートフォース攻撃の無効化✅
パスキーはパスワードレスであり、
端末の生体認証などを用いるため基本的に総当たり攻撃は行えません。
中間者攻撃の防御✅
パスキーの認証プロセスは暗号化されており、
途中で第三者が通信を傍受したとしても認証に必要な情報を盗み取ることはできません。
多要素認証である✅
パスキーを登録したアカウントを所持していること(所持要素)とPIN(知識要素)もしくは指紋、顔認証(生体要素)を組み合わせることにより、
実質的に多要素となります。
上記のセキュリティに加え、
ログイン時のID/パスワードの入力も必要なく生体情報のみでスムーズであり、
まさに夢のような技術ですね…!
しかし、まだ新しい技術であるため、いくつかの注意点も存在します。
パスキーの課題🏃
夢のようなパスキーですが注意点もあり、
パスキーのみでの運用は後述の理由からなかなか難しいのではという印象です。
復旧手段の検討📝
パスキーはOSごとに用意されたアカウントに保存される(例えばAppleだとiCloudキーチェーンに紐づく)ため、
端末を変える際にOSも切り替えた場合、使用できなくなる可能性があります。
他にもパスキー自体が何らかの原因で使用できなくなった際も含め復旧手段は考えておく必要があり、現時点では多くのサービスがパスワード認証など従来の認証方法と併用で設定できるのが現状かと思います。
結局のところパスキーの復旧手段として設けた認証方式のセキュリティがそのサービスのセキュリティレベルとなることを認識すべきで、
パスキー以外を設定できる時点でパスキーは単に「便利な認証方法」としてしか機能していない可能性があります。
パスキー未登録端末のログインは煩雑📝
パスキーを使ったことのある方ならわかると思いますが、パスキーが未登録の端末の場合はQRコードが出てきて登録済みのスマホなどでそのQRコードを読み取る必要があります。
↓表示されるQRコードの例です。急に出てきて「なにこれ?」と思った方もいるんじゃないでしょうか。
登録済みデバイスではラクに認証できますが、
スマホでカメラアプリを立ち上げてQRコードを読み取り認証させるのは体験としてはあまりよくないですよね。
さらにスマートフォンやPCなどのパスキー登録済みのデバイスが手元にない場合、
一時的に「ログインできない…」ということにもなりそうですね。
業界全体への普及📝
大手プラットフォームを中心にパスキーへの対応は進んでいますが、
まだ黎明期であり、全てのウェブサイトやアプリケーションがパスキーに対応しているわけではありません。
ユーザーが日常的に利用する多くのサービスがパスキーに対応するにはまだ時間がかかる可能性があり、ユーザーの理解がまだ追いつかずパスキーのみにするには適切な案内や万全なサポート体制が不可欠な状態かなと思います。
上記のようにパスキーも採用するには注意事項が色々あり、
なかなか大手プラットフォームもパスキーのみを認証手段として提供はできていない状態かなと思います。
そのため、パスキーの代替手段のセキュリティをいかに上げられるかが重要で、
個人的には マジックリンク + SMS OTP(もしくはTOTP)あたりが体験よくセキュアな2要素認証として良いのかなと思っていたりしますが、[8]
サービス側はユーザー体験やセキュリティの兼ね合いをよく考えて認証方式を採用していくのが大切なのかなと思います。
また、パスキーも絶対に安全というわけではなく、
ウイルスに感染して認証情報を傍受されたり、
端末自体が攻撃者の手に渡り偽の指紋等で認証されてしまったり、
新しい攻撃手段が見つかる可能性もあります。
最新の情報を追い、被害に合わないよう注意することが大切です。
まとめ✅
認証方法について調べる機会があり、
「これは広く知られるべきでは…?」と思い記事を作成しました。
わかりやすく簡潔に記載したかったので、
記事の中では抜けている攻撃手段や考慮事項も多数あるかと思いますが、
ご了承いただければと思います🙇♂️
まだセキュリティについて学び始めたばかりのため、
もし間違いがあれば優しくコメントいただければ嬉しいです…!
この記事が、アプリ利用におけるセキュリティ意識向上のきっかけになれば幸いです…!🙏
※認証についてより詳しく知りたい方は、NIST SP 800-63 Digital Identity Guidelinesなどの広く認知されている資料を読むことをおすすめします📝
-
Apple iMessage、RCS、SMS/MMSの違いについて / Android 電話番号のみでやり取りできる SMS とは? 概要や使い方、他のサービスとの違いを解説
(※4G/5GだとSS7はほとんど使用されず、危険度は弱まるのでしょうか…?) ↩︎ -
Microsoft Authenticator Number matching immediately prevented an account from being compromised / Phishing Attack Leads to Unauthorized MFA Device Registration in Office 365 Tenant ↩︎
Discussion