まさか?!メールのワンタイムコード認証はパスワードより危険だった!
引用元:https://news.ycombinator.com/item?id=44819917
ワンタイムコード認証のフィッシング詐欺手口を詳しく解説してるね。BADサイトがGOODサイトからのコードを騙し取り、ユーザーのGOODアカウントに侵入するパターンだ。メールのリンク方式は少しマシだけど、ブロックされるとログインできない問題もある。
やっぱりPasskeysが最高。Password managerでのPasskeys対応も進んでるし、スマホ紛失でPasskeysを失うより、パスワードで全財産盗まれる方が断然マシって話だよ。おばあちゃんが銀行に行き直す方が、フィッシング詐欺で全財産盗まれるよりいいって。
Passkeysの問題はデバイス紛失だけじゃない。一番の問題は「アテステーション」で、これはサービスがユーザーの自由度を奪うツールを使うユーザーをブロックできるようにするものだ。チャレンジ・レスポンス・プロトコルとしてのPasskeysはパスワードの素晴らしい代替になれたはずなのに、実際はBigTechの優位性を強め、ユーザーの自由を奪う設計になってるって話。
実際にサードパーティシステムでアテステーションが必須になった例あるの?それとも「理論的には…」って話で、理論上の問題を恐れて代替案の現実的な問題を無視してるだけ?俺はいつもアテステーション要求を拒否してるけど、拒否された覚えはないな。もし本当に問題なら、とっくに気づいてるはずなんだけど。
Passkeysが万能ってわけじゃないだろ。間違いを繰り返すなよ。Password managerこそが本命で、メールアカウントや金融関係などの「ごく稀な例外」にだけ、専用のMFAを使うべきだ。MFAは少なくとも3つの要素を設定させ、2つ以上を使うように求めるべき。プリントコード、OSに依存しないauthenticator apps、YubiKeyみたいなハードウェアキーなど、ほぼ全ての要素に対応してないなら使うべきじゃないね。
「おばあちゃんが銀行に行き直す方がマシ」って言うけど、銃で脅されてデバイスを奪われ、銀行口座からお金を全部引き出されちゃったら、家でどうしようもないだろ。俺は第三世界の国に住んでるけど、スマホ強盗が頻繁だから2FAすら現実的じゃないんだ。一度経験したけど悪夢だったよ。パスワードならBitwardenにどこからでもログインできるから問題ないのに。
Passkeysはまだ初期段階だね。多くのユーザーが切り替えてないし、Appleみたいな大手もアテステーションに抵抗してるのに、こんなパターンを導入するのはどうかと思う。この機能が存在し、悪用される可能性があるから、今は問題なくても原則的に却下すべきだ。企業環境でのアテステーションの価値は理解できるけど、それは別の規格で対応できたはずだろ。
せめて、アテステーションが本当に必要だと実装者が理解している場合以外は、その要求をしないよう仕様書で徹底的に主張すべきだ。「こうすればもっと安全になる」以上の意味がないといけない。セキュリティは単なる評価ではなく、特性の集合だからね。全てのセキュリティ保証が普遍的に望ましいわけじゃないし、デメリットもある。ライブラリ開発者にもこのメッセージを強く伝えるべきだろ。
同意だね。残念なことに、仕様策定者は、よりユーザーフレンドリーな方法でPasskeysを実装するプロジェクトに、すでにブロックされる可能性をちらつかせている。
例: https://github.com/keepassxreboot/keepassxc/issues/10407
「正直に言うと、KeePassXCが依拠者によってブロックされるリスクがある」
でも、認証情報の保存方法の選択が、サービス提供者や仕様策定者の善意に左右されるべきじゃないだろ。これはアプリのサイドローディングに似てるから、ユーザーの権利として扱うべきだね。
最近のPasskeys推進の重要な点って、GoogleとかAppleとかのPassword Managerアカウントとのクロスデバイス同期なんだ。だから結局、同じ状況になるんだよ。Bitwardenにログインしてパスワードにアクセスできるなら、自分のPassword ManagerにログインしてPasskeysにアクセスできるってことだね。
Passkeysはいいけど、Chromeで保存したGitHubのPasskeyを使おうとするとGoogle Password ManagerのPINを求められて困るよ。PINが何かも分からないし、Googleアカウントの設定どこにもリセット方法がないんだ。
Passkeysは嫌いだな。前は1Passwordで自動入力するだけだったのに、今はPasskeysだとログインプロセスがめちゃくちゃ複雑になったんだ。結局、他の方法を選んでパスワードとTOTPを入力することが多いし。スマホではいいけど、PCでは全然シンプルになってないよ。
パスワードマネージャーなんて、インストール必要でPCのフルアクセスを要求するプロプライエタリなプログラムでしょ?アカウント登録してパスワードをクラウドに安全にアップロードするとか信用できないし、一般ユーザーには複雑すぎるよ。物理キーの方がずっとシンプルで、設定もいらないし複数デバイスで使えるんだ。クラウドアカウントも不要だしね。
Microsoft Entra IDはFIDO2キーのAttestationを強制してくるんだ。プロトコル的にはAttestationを省略できるのに、わざわざ追加の呼び出しで、承認された大手ベンダー製じゃないとエラーページに飛ばされる。自分でFIDO2 Passkeyを試作したらこれに気づいて頭がおかしくなりそうだったよ。Microsoftじゃ自分の好きなPasskeyは使えないってことだね。
https://learn.microsoft.com/en-us/entra/identity/authenticat…
BigTechがオープンソースのパスワードマネージャーを使ってる少数のユーザーをわざわざ排除する理由が分からないな。彼らに何の得があるんだ?金儲けが好きでユーザーの自由には関心ないのは確かだけど、それを嫌ってる証拠はないはず。過去のユーザー自由への攻撃も、いつもビジネス的な思惑が丸見えだったろ?ChromeのブラウザAttestationがAdblock対策じゃないとか、ありえない話だ。
Passkeysは良さそうだけど、おばあちゃんがスマホをなくしたら、GoogleやMicrosoftで新しいパスワードをどうやって手に入れるの?そこが問題だよな。
Passkeysが必須になるのは、Passkey以外のログイン方法が廃止されてからだろ。でも、その時になってからではもう遅いんだよな。
これ、来るべき未来が見えないのか?Passkeysが普及したら、『承認されたデバイスのブートローダー/エンクレーブからのAttestation必須』ってなるに決まってるじゃん。そうなったらベンダーロックインだよ。同じプロバイダーのスマホを使い続けないと、Passkeysを全部失うことになるかもしれないぞ。
違うよ。パスワードマネージャーはオープンソースのアプリで、自分でコンパイルしてインストールだってできるんだ。ただの小さい特殊なデータベースにExcelみたいなインターフェースがついただけだよ。それに、『平均的なユーザーには複雑すぎる』って議論は、結局ユーザーが呼吸したりお尻を締めたりするのも複雑だと感じるようになるだけだろ。
パスワードマネージャーが好きなら、Passkeysもきっと好きになるはずだよ!Passkeysは、パスワードの入力やコピペの面倒な部分を省いて、パスワードマネージャーとウェブサイトを繋ぐインターフェースなんだから。
「GOODサイトが“このワンタイムコードを第三者アプリや個人と共有するな”ってメールで言ってるから、そんな手口はありえないよ。」
「20年この分野を見てるけど、ちゃんと動いてて、しっかりメンテされてて、セキュリティも安心で、クリップボードやフィッシングから守ってくれるブラウザ拡張機能もあるオープンソースのパスワードマネージャーなんて、一つも見たことないんだよね。」
「“メールのリンクをクリック”は、リンクが本物か見分けるのが超難しいから、マジでダメだよ。メールのリンクを信じると、フィッシング攻撃の入り口になっちゃうんだから。」
「Passkeysが普及したらデバイスの認証が必要になるって言ってるけど、全然そんなことないよ。AppleはKeychain Passkeysで認証データを提供しない方針だし、もし認証を求められたらiPhoneユーザーが使えなくなるから、そんなことにはならないよ。」
「2FAトークンを保存して、新しい認証アプリで使えるって知らなかったのかな? 俺はもう携帯の2FAは使ってないけど、この“メールでコードを送る”っていうクソシステムより、ずっとマシだったよ。」
「もしこれを使うつもりがないなら、プロトコルから削除すべきだよ。“この機能は絶対使わないから実装してくれ”なんて、全然信用できない話だよね。」
「パスワードを変えたい人みんなが、一般向けサービスをやってるわけじゃないよ。サービスプロバイダーの立場だと、認証情報ストレージのアテステーションは、すごく便利だし、法的に必要になることもあるんだ。」
「知ってた? Bitwardenに2FAのシークレットを保存すれば、通常のパスワードと一緒にワンタイムパスワードも自動入力できるんだよ。これならスマホをなくしても安心だね。」
「レドモンドを擁護するけど、Entraは企業向けシステムなんだ。もし会社がアテステーションを強制したいなら、それは彼らのビジネスだよ。B2Cだと、アテステーションの要求はもっと緩いんじゃないかな。」
パスキーのアテステーションは要らないね。あれがあると普及しにくいし、公共サービス以外ならもっと簡単に実装できるはずだよ。もし外せるなら俺は推したいけど、残るなら使いたくないな。
よく知らないメールのリンクは踏まないけど、自分で手続きを始めたサイトからのメールならクリックしちゃうんだよね。
もっとコメントを表示(1)
Microsoftアカウントのパスワードリセット要求が日に4回も来て、6桁コードで復旧できるんだけどさ。毎日4回、100万分の1のチャンスで攻撃されてるんだよな。これ何千ものアカウントでやられたら、総当たりで盗まれ放題じゃん。Microsoftに報告したけど「数学的証明がない」って却下されたんだ。もう毎日スパムされながら運を天に任せるしかないのかよ。
Microsoftアカウントにログインエイリアスを設定したら、不正ログインの試みゼロになったぞ!公開してるメアドじゃなくて、非公開のランダムな文字列エイリアスじゃないとログインできないようにしたんだ。これ、account.microsoft.com
> Account Info
> Sign-in preferences
> Add email
> Add Aliasでプライマリに設定して、Sign-in Preferencesでエイリアスだけ有効にすればできるよ。
12万5千アカウントに攻撃したら、毎日1つはアカウントが盗まれちゃう計算か?特定の誰かを狙ってないなら、かなり効率良いよな。これって、失敗回数が増えるごとに試行間隔を長くする「指数バックオフ」で解決できるんじゃないの?
MFAで、何の脈絡もなく「はい」って聞かれ続ける現状、どうなのよ。スクリプト動かすたびに5回もMFA。6回目が攻撃か?とか、もう分かんない。移行ジョブを中止するか、それとも運任せか?意味不明なYes/No質問を突きつけるなんて馬鹿げてる。何億人ものMicrosoft 365やAzureユーザーが長年この状況だったんだぜ。「訓練されたオウムみたいにボタンを叩け!ほら『安全』だろ!」ってか。
12万5千のアカウントを攻撃しても、6桁のPINコードを当てる確率は同じでしょ(10^6)?攻撃するアカウント数とは関係ないよ。
じゃあ、ログインエイリアスってパスワードみたいなもん?知ってる情報って意味で。
「訓練されたオウム」って話、マジでそれな。今の「セキュリティ」強化のプロンプトって、ユーザーを何でも「はい」って答えるように洗脳してるだけじゃん。結局、全然セキュアになってないんだよ。クッキー同意とか、macOSでアプリがネットワーク繋げたいって聞くやつとか、スマホでカメラロールのアクセス許可とか、Web通知とかさ。みんな深く考えずに「はい、ほっといてくれ」って押してるだけだろ?
エイリアスの使い方は考えたことなかったな。残念だけど、OneDriveの使い方との兼ね合いで、Outlookメールをプライマリに戻すしかなかったんだ。共有招待を送るとき、プライマリのアカウントメールじゃないと届かないシナリオがあってさ。もし外部エイリアスがプライマリだと、Outlookのサーバーがエイリアスのメールを装って送ろうとしちゃうから困るんだよね。
ワンタイムコードの認証突破確率を数学的に計算してるよ。100万通りのコードで、12.5万アカウントが1日4回試行すると約39%の成功率。100万アカウントならほぼ98%で毎日1アカウント突破できちゃうってさ。週に1回なら12.5万アカウントで97%の確率で成功するって話。
サイバーセキュリティに何兆円も使ってるのに、まだハッカーがいるってさ。誰も予想できなかったことだよね!皮肉にも程があるよな。
MFAを追加すれば、こういう攻撃から守られるんじゃないの?パスワードがリセットされても、TOTPみたいにMFAで守られていれば問題ないはずだけど。
俺はそうしてるよ。ログインにはエイリアスだけを使うのが重要なんだ。
古いアカウントで身に覚えのないサインイン試行が世界中からあったんだ。IPアドレスもバラバラで、Botnetが使われてるみたいで恐ろしいよ。2FAを追加したら完全に止まったんだよね。Microsoftが自動的に割り当てる6桁の数字だけの”パスワード”を推測されるのが本当に嫌だったんだ。2FAコードはパスワードマネージャーに保存してるよ。
俺も古いInstagramアカウントで、「ログインできない問題が発生しています。ログインしてパスワードを変更するにはここをクリックしてください!」ってメッセージがしょっちゅう来るよ。
ワンタイムコードの長さは、こういうことが起きたら状況に合わせて増やすべきだよね。
それかMFAを有効にすればいいんじゃない?
俺が試したら、もう修正されたみたいだよ。ちゃんと機能したからね。
1日4回、5年で7300回の試行。1万アカウントで7300万回試せるってことか。これで70アカウントくらいは突破できるはず。
最安のVPSは月5ドル、レジデンシャルプロキシは1GBで3ドル。5年で約200ドルかかるけど、1アカウントあたり3ドルでハッキングできるなら、費用対効果はいいんじゃないか?
50万回もコードを推測して外す確率は60%らしい。だから1日1アカウントは無理でも、1週間も続けば3%の確率でどれかは当たってるはず、って俺の計算が言ってるわ。
全アカウントで同じコードを推測するとかどう?例えば、100万アカウントに「123456」を試したら、統計的に1つくらいは当たるっしょ。極端な例だけどな。
俺もそう思う!Microsoft Teamsでクロスセルフを使わなきゃいけなかった時の名残だと思ってたわ。
>1-(1-1/1,000,000)^(4×1,000,000) ≈ 98%ってのは、少なくとも1アカウント当たる確率が98%って意味だぞ。1回失敗する確率から400万回失敗する確率を引いたら、少なくとも1回成功する確率になる。期待されるアカウント数は、試行回数×成功確率で、つまり4アカウントだ。
これ、Steamにそっくりだな。プロフィールの表示名は好きに変えれるけど、実際のユーザー名はシステム上の別の変えられないIDになってるんだよ。
俺もこれやらなきゃいけなかったんだよな。毎日アカウントがスパムされて、ログインするたびに認証とパスワード変更必須だったわ。エイリアスを設定したら、もうこの問題はなくなったね。
joe@smith.comとかjoe.smith@bigcompany.comみたいなアドレスは、どんな形であれ“ドライブバイ”攻撃を受けるだろうな。それにしても、“coolkid5674321”みたいなエイリアスに戻せるってのが面白いな。
それにはユーザーアカウントじゃなくて、アプリの登録を使うべきだね。
Microsoftはメールとか他のサービスにアクセスするための“ログイン専用”の別アカウント名を作らせてくれるぞ。俺もお前と同じ問題に悩んでたけど、もっとひどかったな。ちょっと調べてみてくれ、設定も数分で終わるし。
うん、パスワードに戻るってことか、でもそれってセキュリティ低いパスワードだろ。
まあそうだけど、俺から言わせればMicrosoftのMFAも同じような欠陥だらけだぜ。例えば、俺はハードウェアキーを2つ登録してるからメールとSMSのMFAは無効にしてたんだ。だけど、アカウントがAzureの管理者グループ(PIMとか)に追加されると、Azureの管理者ポリシーがそれらを強制的に“有効”にするんだよ。
ある意味そうだな。プライベートだとは思ってないけどさ。でもネット上にはどこにも出てないから、クレデンシャルスタッフィングとかのボットには使われてないだろうな。
もっとコメントを表示(2)
この最悪な点は、ひどい習慣と期待をさらに強化するだけってことだ。1Passwordみたいな最新のパスワードマネージャーは、あのバカなメールトークンのフローより簡単で安全で速いんだ。最初は少し設定に手間がかかるけど、家の鍵を管理するのと同じくらいの労力だぜ。パスキーももっと速いしな。
そのちょっとした労力と注意が、ほとんどの人にとっては多すぎるんだよ。俺も君と同じくらいイライラしてるけど、パスワードマネージャーのワークフローを理解して実装できない人は大勢いる。俺が知ってるIT系じゃない人たちの8割くらいは、セキュリティに対して軽蔑と無知な諦めしかないぜ。唯一成功したのは、年配の親戚の一人に、紙のノートにアカウント情報を書かせたり、パスワードに数字と文字を入れるようにさせたりしたことくらいだ。
「最新のパスワードマネージャーは簡単、安全、速い」って言うけど、LastPassが数年前にハックされて、俺の妻のパスワードもすぐに流出したんだ。それ以来、クラウド企業は信用できないね。俺はKeePassみたいなオフラインのパスワードマネージャーしか信用しない。今のところ裏切られたことはないよ。
言いたいことはわかるよ。でも、俺の経験だと、この手のワンタイムパスコードは、周りの非IT系の人たちにとって、2番目に理解しやすい認証方法なんだ。1番は当然パスワードだけどね。パスワードマネージャーやPasskeyは彼らにとって全然簡単じゃない。概念も複雑なUXも理解しにくいんだ。一般向けにもっと直感的なものができるまでは、パスワードと“悪い”ワンタイムコードが、そのシンプルさゆえに主流であり続けるだろうね。
問題は、そういう人たちは、できるだけ弱いパスワードを使うってことだよな。
ほとんどのパスワードを使うサービスがメール経由でパスワードリセットするなら、マジックリンクやコードとセキュリティ面で変わりないよ。むしろ、メールアカウントとパスワードのどちらでも入れるようになるから、もっと悪い状況だ。
「メールでのパスワードリセットじゃマジックコードとセキュリティは変わんない」って意見には反対だな。
マジックコードだと、ユーザーは考える間もなくコードを入力するよう訓練されちゃうんだよ。もしmalicious.comに行こうとしてgoogle.comのコードがメールに来たら、そのまま入れちゃう人もいるだろうね。パスワード回復は普通の流れと違うからさ。
パスワードリセットもフィッシングの可能性あるよね。言ってることはわかるけど、ユーザーがドメインを確認しないなら、どっちの方法でも簡単にフィッシングされちゃうと思うよ。
今どきの便利でモダンなサービスで、そんなこと許してくれるところを探すのは大変だよね。俺はパスワードのことわかってるし、全部自己責任でやるから!ってオプションがあればいいのにって思うよ。
「自己責任でパスワード管理する」ってオプション、本来選んじゃダメな人が、無能や無知を認めたくないからって理由で、結局選んじゃう数を完全にナメてるよね?そんで問題は簡単にはなくならないんだよ。
ちゃんとパスワード使ってても、パスワード忘れた時のアカウント復元がメール認証なら、結局それが唯一のセキュリティで、攻撃者はそれを使ってログインし放題じゃん。
俺も簡易ログインツール「ICGAFAS」でこの方法使ってるけど、全然重要じゃない情報用。メール認証はSMTPの配信問題もあるし、ブロックリストとかでサードパーティのリレーサービス使う羽目になるからね。
「パスワード忘れた時のアカウント復元が唯一のセキュリティ」って話、なんで誰も取り上げないの?
だから2FAはパスワード認証より安全じゃないんだよ。パスワードは盗む必要があるけど、2FAは駆け出しの探偵レベルでもアカウント乗っ取れるツールとかあるじゃん。
なのに2FAが必須で安全だなんて言われるのは納得いかないね。
「パスワード忘れた時のアカウント復元が唯一のセキュリティ」ってとこ、俺もまさにこれを言おうと思ってたんだよ。アカウント回復で使われるフローだから、どうせそれがセキュリティの最も弱いリンクなんだよね。
いや、違うんだよ。アカウント復元する時はもっと注意を払うし。毎日の普通のログインは、無意識に carelessness になっちゃうんだよね。
この話は人間が疲れて malicious なやつにコードを渡しちゃうってことだから、多すぎる認証要素で人間が疲れ果ててるのが問題だと思うよ。俺はただログインして用事を済ませたいだけなのに、メール待ちとか面倒くさいんだ。
ほとんどの製品が、通常のメールとパスワードとかソーシャルログインより、この方法(マジックコード)を強引に押し付けてくるのが本当にうざいんだよ。俺に100文字のパスワードを使わせてくれって思う!
君はターゲット層じゃないし、ましてや例外でもないんだよ。この現実を受け入れて、”メインストリーム”と連携できる長期的な解決策を探す時が来てるんじゃないかな。
ターゲット層の俺の知ってるほとんどのやつはさ、メールとパスワードのログイン方式をそのまま使いたいんだってさ。
Webブラウザとかパスワードマネージャーで自動入力できるのに、アプリやサイトをいちいち切り替えるのはUXとして最悪だよな。
長すぎるパスワードなんてバカげてるよ。だって、結局は裏の暗号化技術のキー長で勝手に切り詰められちゃうんだからさ。
同感。1文字あたり約6ビットのエントロピーだから、256ビットのエントロピーを使い切るには約43文字は必要ってこと。そこまでは意味あるんだ。ランダムじゃなくて文章を使うなら1文字あたりのエントロピーは低いから、100文字でもアリだね。
だからさ、SHAとbcryptを組み合わせるのが常に良いんだよ。
パスワードは暗号化じゃなくて、暗号学的ハッシュ化されるべきなんだ。
ハッシュの入力ブロックサイズよりデータが長くても、前のハッシュと次のブロックを順番に処理していけば、全体のハッシュを計算できるんだよ。
bcryptって人気のパスワードハッシュアルゴリズムだけど、パスワードは72文字までしか対応してないんだ。
それ以上は黙って切り捨てられちゃう(マジかよ!)
実はこれ、サイトがbcryptを使ってるかどうかのテストに使えるんだぜ。もし72文字より長いパスワードを設定して、最初の72文字だけでログインできたら、そのサイトはbcryptを使ってるってことだね。
そうそう、だからbcryptはもうダメで、今使うべきじゃないんだよ。
一時期は活躍したけど、今はscryptとかargon2みたいなもっと良い選択肢があるからね。
壊れてないよ。推測されやすいパスワードには弱いってだけ。問題はbcryptじゃなくて、弱いパスワードポリシーとか習慣の方だね。
argon2もちょっと厚い絆創膏みたいなもんで、短いパスワードや“correct horse battery staple”みたいなアドバイスじゃ守ってくれないし、強力なパスワードならbcryptと大差ない。
それに、素のパスワードをハッシャーに渡すのは素人開発者だけ。ペッパーとかで事前処理すれば、bcryptの72文字制限なんて関係なくなるんだ。
bcrypt単体じゃ役立たずだよ。Argon2は入力の事前処理なんていらない。
このことを知ってる人ならbcryptを直すのは簡単だけど、黙って入力を切り捨てるのは不要なエラーだったんだ。
正しいツールに見せかけて売られてたのに実際はそうじゃなかったって事実が、現実の脆弱性につながってる。
これは暗号技術の専門家が実際の使われ方を予測できなかった典型的な例だね。(それ以外は同意するよ)