Home Standards Google Authenticator otpauth-migration 規格 · otpauth-migration
Google Authenticatorのエクスポート QRをスキャンしても安全か? 自分の古いスマートフォンで自分が生成し、自分の新しいスマートフォンを画面に向けた場合のみ安全です。それ以外の誰かがそのQRを何らかの理由で撮影すると、バンドル内のすべてのアカウントのすべての2FAコードに永続的にアクセスできるようになります。
バンドルを確認する → すべての規格 →
これは何か Google Authenticatorといくつかの互換アプリ(Aegis、Raivo OTP、2FAS)では、保存されている2FAアカウントを「エクスポート」して新しいデバイスに移動できます。エクスポートはotpauth-migration://で始まるURIを持つQRコードの形式を取ります。そのURI内には、すべてのアカウントを一度に含む単一のプロトコルバッファバンドル(GoogleのMigrationPayloadスキーマ)があります:発行者、アカウント名、シークレットシード、アルゴリズム、桁数、タイプ(HOTP / TOTP)、カウンター。
このフォーマットは元々ドキュメント化されていませんでしたが、リバースエンジニアリングされ、現在は2FAバックアップのデファクトの交換フォーマットになっています。サードパーティの認証アプリも同じQRを認識してインポートします。
1つのQRに数十のアカウントを含めることができます。このQRは通常のTOTP設定QRと見た目が区別できません。バンドル全体を含んでいることを示す視覚的なマーカーはありません。
単一のバンドルQRが特に危険な理由 通常のotpauth://設定QRは要求していないのにスキャンすると危険ですが、影響範囲は1つのアカウントです。移行QRの影響範囲は認証アプリのすべてのアカウント です。攻撃者がこのQRを表示している画面を撮影した場合(カフェでの肩越し、あなたが気づかなかった防犯カメラ、透明なガラス窓越し)、それに含まれるすべてのアカウントの2FAをバイパスする能力を手に入れます。永続的に。各シークレットを手動でローテートするまで。ほとんどのサービスはこれを容易にしていません。
バンドル内のシークレットに有効期限はありません。セッショントークン(有効期限あり)やパスキーQR(ワンショット)とは異なり、移行バンドルのシードはサービスごとに置き換えるまで有効です。
これが当スキャナーのすべてのotpauth-migration:// QRに対する判定がlikely_dangerous から始まり、状況にかかわらずそこに留まる理由です。フォーマット自体は問題ありません。脅威モデルがフォーマットの存在です。
実際の中身(構造) URIは次のようになります:
otpauth-migration://offline?data=<urlsafe-base64-encoded-protobuf> base64本文をデコードすると、これらのトップレベルフィールドを持つMigrationPayloadプロトコルバッファが得られます:
otp_parameters 、繰り返し。アカウントごとに1エントリー。version 、スキーマバージョン。batch_size 、エクスポートが複数のQRに分割される場合の合計チャンク数。batch_index 、このチャンクの位置。batch_id 、チャンクを結びつける一意のID。各otp_parametersエントリーには:
secret 、生のシードバイト。これが実際の鍵素材です。name 、アカウントラベル(例:alice@acme.com)。issuer 、サービス名(例:ACME、GitHub)。algorithm 、SHA1 / SHA256 / SHA512 / MD5。digits 、コードあたり6または8桁。type 、TOTP(時間ベース)またはHOTP(カウンターベース)。counter 、HOTPエントリーの現在のカウンター値。当スキャナーが表示するものと意図的に表示しないもの ✓ 表示 バンドル内のすべてのエントリーについて、判定には発行者(ACME、GitHub、AWS)、アカウント名(alice@acme.com)、アルゴリズム(SHA1)、桁数(6)、タイプ(TOTP)が表示されます。判定の開示は「このバンドルの付与:ACME / alice@acme.com;GitHub / bob@github;AWS / root;…」と読めるので、移行中のユーザーはインポート前にリストを監査できます。
スキーマバージョン、バッチインデックス、バッチサイズ、バッチIDも表示されます。エクスポートが複数のQRに分割されている場合に役立ちます。
✗ デコードしない 生のsecretバイトは判定出力にデコードされません。アナライザーは各エントリーが適切な形式であることを確認するためだけに読み取り(シークレット存在 + 非空白)、findingsが構築される前に値を破棄します。
これはテストスイートによってアサートされています。カナリア文字列(SECRET_SEED_1、SECRET_SEED_2)を含む手工芸のプロトコルバッファペイロードをアナライザーに供給し、それらの文字列がシリアライズされた判定出力に絶対に現れないことをアサートします。そこでのリグレッションはCIを失敗させます。
いつ(そしてどのように)使うか 正当なユースケース:古いスマートフォンから新しいスマートフォンに移行しています。古いスマートフォンが約30秒間画面に移行QRを表示します。新しいスマートフォンの認証アプリが画面に向けてインポートします。他に誰も部屋にいません。すべてがインポートされたことを確認した後、古いスマートフォンからエクスポートを削除します。
危険な場面は:
QRのスクリーンショット。 クラウド同期された写真に保存されたスクリーンショットは、そのアカウントに同期されたすべてのデバイスにQRを置きます。チャットでQRを共有する。 一時的であっても、チャットへのアクセス権を持つ誰か(今も将来も)がバンドルを抽出できます。ヘルプフォーラムのスレッドにQRを投稿する。 これは思っている以上によく起こります。人々が助けを求めて誤って認証アプリのエクスポートの写真を投稿します。設定QRと誤認された公共のポスター/看板。 このフォーマットは単一アカウントの設定QRと見た目が区別できません。移行QRが露出したと疑われる場合 バンドル内のすべてのアカウントにわたる認証情報漏洩として扱ってください。回復手順は順に:
影響を受けた各サービスにサインインし、2FAシークレットをローテートします。ほとんどのサービスではアカウント → セキュリティ → 二要素認証 → 無効化してから再登録 でできます。 ローテーションを公開していないサービスの場合(まれに存在)、アカウントを削除して再追加します。 影響を受けたすべてのアカウントの最近のサインインアクティビティを監査します。 元のエクスポートQRを、それが存在する可能性のあるすべてのデバイスとクラウド同期された写真ライブラリから削除します。 バンドルを持つ攻撃者は、ローテートするまで何年も有効な2FAコードを生成できます。先延ばしにしないでください。
バンドルを確認する QR画像をドロップするか、otpauth-migration:// URIを貼り付けるか、カメラを使用してください。判定はシークレットをデコードせずにバンドル内のすべてのアカウントを表示します。
スキャナーを開く →