Adakah QR eksport Google Authenticator selamat untuk diimbas?
Hanya jika anda yang menjana sendiri, pada telefon lama anda sendiri, dengan telefon baharu anda sendiri yang diarahkan ke skrin. Sesiapa lain yang memotret QR itu, atas sebab apa pun, mendapat akses kekal kepada setiap kod 2FA bagi setiap akaun dalam bundle.
Google Authenticator dan beberapa aplikasi serasi (Aegis, Raivo OTP, 2FAS) membenarkan anda “mengeksport” akaun 2FA yang disimpan supaya anda boleh memindahkannya ke peranti baharu. Eksport berbentuk kod QR dengan URI yang bermula dengan otpauth-migration://. Di dalam URI itu adalah bundle protokol-buffer tunggal (skema MigrationPayload Google) yang membawa setiap akaun sekaligus — pengeluar, nama akaun, benih rahsia, algoritma, kiraan digit, jenis (HOTP / TOTP), dan pembilang.
Format ini pada asalnya tidak didokumentasikan, tetapi telah dijurutera semula dan kini merupakan format pertukaran de-facto untuk sandaran 2FA. Aplikasi pengesah pihak ketiga mengenali dan mengimport QR yang sama.
Satu QR boleh mengandungi berpuluh akaun. QR tidak dapat dibezakan secara visual daripada QR persediaan TOTP biasa — tiada penanda visual yang memberitahu pemerhati biasa bahawa ia membawa keseluruhan bundle.
Mengapa satu QR bundle adalah berbahaya secara unik
QR persediaan otpauth:// biasa adalah berbahaya untuk diimbas jika anda tidak memintanya, tetapi jejari letupannya adalah satu akaun. Jejari letupan QR migrasi ialah setiap akaun dalam pengesah anda. Jika penyerang memotret skrin yang memaparkan QR ini — dari bahu anda di kedai kopi, melalui kamera CCTV yang anda tidak perasan, melalui tingkap kaca jernih — mereka pergi dengan keupayaan untuk memintas 2FA pada setiap akaun yang diliputi. Secara kekal. Sehingga anda memutar setiap rahsia secara manual, yang kebanyakan perkhidmatan tidak mudahkan.
Tiada tamat tempoh pada rahsia dalam bundle. Tidak seperti token sesi (yang tamat tempoh), tidak seperti QR kunci laluan (yang sekali guna), benih dalam bundle migrasi adalah sah sehingga anda menggantikannya perkhidmatan demi perkhidmatan.
Inilah sebabnya keputusan pengimbas kami pada setiap QR otpauth-migration:// bermula pada berkemungkinan_berbahaya dan kekal di sana tanpa mengira konteks. Formatnya baik; model ancaman adalah kewujudan format itu.
Badan base64, setelah didekod, adalah protocol-buffer MigrationPayload dengan medan peringkat atas ini:
otp_parameters, berulang. Satu entri setiap akaun.
version, versi skema.
batch_size, jumlah kiraan bahagian apabila eksport dibahagikan merentas pelbagai QR.
batch_index, kedudukan bahagian ini.
batch_id, ID unik yang menghubungkan bahagian-bahagian bersama.
Setiap entri otp_parameters mempunyai:
secret, bait benih mentah. Inilah bahan kunci sebenar.
name, label akaun (cth. alice@acme.com).
issuer, nama perkhidmatan (cth. ACME, GitHub).
algorithm, SHA1 / SHA256 / SHA512 / MD5.
digits, 6 atau 8 digit setiap kod.
type, TOTP (berasaskan masa) atau HOTP (berasaskan pembilang).
counter, nilai pembilang semasa untuk entri HOTP.
Apa yang pengimbas kami tunjukkan, dan apa yang sengaja tidak ditunjukkan
✓ Ditunjukkan
Untuk setiap entri dalam bundle, keputusan menunjukkan pengeluar (ACME, GitHub, AWS), nama akaun (alice@acme.com), algoritma (SHA1), kiraan digit (6), dan jenis (TOTP). Pendedahan keputusan membaca “Kebenaran dalam bundle ini: ACME / alice@acme.com; GitHub / bob@github; AWS / root; …” supaya pengguna yang SEDANG migrasi boleh mengaudit senarai sebelum mengimport.
Versi skema, indeks batch, saiz batch, dan ID batch juga ditunjukkan — berguna apabila eksport dibahagikan merentas pelbagai QR.
✗ Tidak pernah didekod
Bait secret mentah tidak pernah didekod ke dalam output keputusan. Penganalisis kami membacanya hanya untuk mengesahkan setiap entri terbentuk dengan baik (rahsia ada + tidak kosong), kemudian membuang nilai sebelum penemuan dibina.
Ini ditegaskan oleh suite ujian — kami memberi penganalisis muatan protobuf yang dibuat dengan tangan yang mengandungi rentetan canary (SECRET_SEED_1, SECRET_SEED_2) dan menegaskan rentetan itu tidak pernah muncul dalam output keputusan yang bersiri. Regresi di sana gagal CI.
Bila (dan bagaimana) menggunakannya
Kes guna yang sah: anda menaik taraf dari satu telefon ke yang lain. Telefon LAMA menunjukkan QR migrasi pada skrinnya selama ~30 saat. Aplikasi pengesah telefon BAHARU diarahkan ke skrin dan mengimport. Tiada orang lain dalam bilik. Anda memadam eksport dari telefon lama selepas mengesahkan segalanya diimport.
Permukaan bahaya ialah:
Tangkapan skrin QR. Tangkapan skrin yang disimpan ke foto yang disegerakkan awan meletakkan QR pada setiap peranti yang disegerakkan dengan akaun tersebut.
Berkongsi QR melalui chat. Walaupun sebentar, sesiapa yang mempunyai akses kepada chat (sekarang atau kemudian) boleh mengekstrak bundle.
Menyiarkan QR dalam thread forum bantuan. Ini berlaku lebih kerap daripada yang anda fikirkan — orang meminta bantuan dan menyiarkan foto eksport pengesah mereka secara tidak sengaja.
Poster awam / papan tanda yang salah dikenal pasti sebagai QR persediaan. Format ini tidak dapat dibezakan secara visual daripada QR persediaan akaun tunggal.
Jika anda mengesyaki QR migrasi telah terdedah
Anggap sebagai kebocoran bukti kelayakan merentas setiap akaun dalam bundle. Langkah pemulihan, mengikut urutan:
Log masuk ke setiap perkhidmatan yang terjejas dan putar rahsia 2FA. Kebanyakan perkhidmatan membenarkan ini di bawah Akaun → Keselamatan → Pengesahan dua faktor → Lumpuhkan kemudian daftar semula.
Untuk perkhidmatan yang tidak mendedahkan putaran (jarang tetapi wujud), alih keluar dan tambah semula akaun.
Audit aktiviti log masuk terkini pada setiap akaun yang terjejas.
Padamkan QR eksport asal daripada setiap peranti + perpustakaan foto yang disegerakkan awan yang mungkin memilikinya.
Penyerang dengan bundle boleh menghasilkan kod 2FA yang sah selama bertahun-tahun sehingga anda berputar. Jangan tangguhkan.
Letakkan imej QR ke dalam pengimbas kami, tampal URI otpauth-migration://, atau gunakan kamera. Keputusan menunjukkan setiap akaun dalam bundle tanpa mendekod rahsia.