มาตรฐาน · otpauth-migration

QR ส่งออกของ Google Authenticator ปลอดภัยที่จะสแกนหรือไม่?

เฉพาะเมื่อคุณสร้างมันเองบนโทรศัพท์เก่าของคุณ โดยมีโทรศัพท์ใหม่ของคุณเองจ่อที่หน้าจอ บุคคลอื่นที่ถือ QR นั้นได้รับสิทธิ์เข้าถึง 2FA ทุกบัญชีใน bundle

ตรวจสอบ bundle → มาตรฐานทั้งหมด →

มันคืออะไร

Google Authenticator และแอปที่เข้ากันได้หลายตัว (Aegis, Raivo OTP, 2FAS) ให้คุณ "ส่งออก" บัญชี 2FA ที่เก็บไว้เพื่อย้ายไปยังอุปกรณ์ใหม่ การส่งออกจะอยู่ในรูปแบบ QR โดยมี URI ที่เริ่มต้นด้วย otpauth-migration:// ภายใน URI นั้นคือ protocol-buffer bundle ตัวเดียว (Google's MigrationPayload schema) ที่บรรจุทุกบัญชีพร้อมกัน ได้แก่ ผู้ออก, ชื่อบัญชี, secret seed, อัลกอริทึม, จำนวนหลัก, ประเภท (HOTP / TOTP) และ counter

รูปแบบนี้เดิมไม่มีเอกสาร แต่ได้รับการ reverse-engineer และตอนนี้เป็นรูปแบบแลกเปลี่ยน de-facto สำหรับ 2FA authenticator ส่วนใหญ่

QR อันเดียวสามารถมีหลายสิบบัญชี QR แยกไม่ออกด้วยสายตาจาก QR ตั้งค่า TOTP ปกติ ไม่มีตัวบ่งชี้ภาพที่ระบุว่ามันเป็น bundle เทียบกับการตั้งค่าบัญชีเดียว

เหตุใด bundle QR เดียวจึงอันตรายเป็นพิเศษ

QR ตั้งค่า otpauth:// ทั่วไปนั้นอันตรายหากสแกนโดยไม่ได้ขอ แต่ความเสียหายจำกัดอยู่ที่หนึ่งบัญชี ส่วน QR สำหรับ migration ความเสียหายครอบคลุม ทุกบัญชีในแอปตรวจสอบตัวตนของคุณ หากผู้โจมตีถ่ายภาพหน้าจอที่แสดง QR นี้ ไม่ว่าจะมองข้ามไหล่คุณในร้านกาแฟ ผ่านกล้อง CCTV ที่คุณไม่ทันสังเกต หรือผ่านกระจกใสด้านข้าง พวกเขาจะสามารถข้ามผ่าน 2FA ของทุกบัญชีที่ครอบคลุมได้อย่างถาวร จนกว่าคุณจะเปลี่ยน secret แต่ละรายการด้วยตนเอง ซึ่งบริการส่วนใหญ่ไม่ทำให้ง่าย

ข้อมูลลับใน bundle ไม่มีวันหมดอายุ ต่างจาก session token (ที่หมดอายุ) ต่างจาก passkey QR (ที่มีอายุ ~1 นาที) รหัส TOTP ที่ดึงมาจาก bundle ยังคงใช้งานได้จนกว่าคุณจะหมุนรหัสลับในทุกบัญชีที่ได้รับผลกระทบ

นี่คือเหตุผลที่ผลของเครื่องสแกนสำหรับ otpauth-migration:// QR ทุกอันเริ่มต้นที่ likely_dangerous และต้องการการยืนยันว่าคุณเป็นผู้สร้างมันเอง

ข้อมูลจริงๆ ที่อยู่ภายใน (กายวิภาค)

URI มีลักษณะดังนี้:

otpauth-migration://offline?data=<urlsafe-base64-encoded-protobuf>

เนื้อหา base64 เมื่อถอดรหัสแล้วคือ protocol-buffer ของ MigrationPayload ที่มีฟิลด์ระดับสูงสุดเหล่านี้:

แต่ละรายการ otp_parameters มี:

สิ่งที่เครื่องสแกนของเราแสดง และสิ่งที่ตั้งใจไม่แสดง

✓ แสดงให้เห็น

สำหรับแต่ละรายการใน bundle ผลแสดง issuer (ACME, GitHub, AWS) ชื่อบัญชี (alice@acme.com) อัลกอริทึม (SHA1/SHA256/SHA512) ประเภท (TOTP/HOTP) และจำนวนหลัก

เวอร์ชัน schema batch index batch size และ batch ID ก็แสดงด้วย มีประโยชน์เมื่อการส่งออกถูกแบ่งเป็นชิ้นส่วนข้าม QR หลายอัน

✗ ไม่เคยถอดรหัส

ไบต์ secret ดิบไม่เคยถูกถอดรหัสในผลลัพธ์ Analyzer ของเราอ่านเฉพาะเพื่อยืนยันว่าแต่ละรายการมีความยาวที่ถูกต้องสำหรับอัลกอริทึม HMAC ที่กำหนด

สิ่งนี้ได้รับการยืนยันโดย test suite เราป้อน payload protobuf ที่สร้างขึ้นด้วยมือซึ่งประกอบด้วย canary string (SECRET_SEED_1, SECRET_SEED_2) ให้กับ analyzer และยืนยันว่า string เหล่านั้นไม่ปรากฏใน serialized verdict output ที่ใดเลย หากมี regression ที่นั่นจะทำให้ CI ล้มเหลว

เมื่อใด (และอย่างไร) ที่ควรใช้

กรณีการใช้งานที่ถูกต้อง: คุณกำลังเปลี่ยนโทรศัพท์ โทรศัพท์เครื่อง เก่า แสดง QR การโยกย้ายบนหน้าจอประมาณ 30 วินาที โทรศัพท์เครื่อง ใหม่ ที่มีแอป authenticator เล็งที่หน้าจอและนำเข้า ไม่มีคนอื่นอยู่ในห้อง คุณลบการส่งออกจากโทรศัพท์เก่าหลังจากยืนยันว่านำเข้าทุกอย่างแล้ว

พื้นที่อันตรายคือ:

หากคุณสงสัยว่า QR การโยกย้ายถูกเปิดเผย

ถือเป็นการรั่วไหลของข้อมูลประจำตัวในทุกบัญชีใน bundle ขั้นตอนการกู้คืนตามลำดับ:

  1. ลงชื่อเข้าใช้บริการที่ได้รับผลกระทบแต่ละรายการและหมุนรหัสลับ 2FA บริการส่วนใหญ่อนุญาตให้ทำได้ในส่วน Account → Security → Two-factor authentication
  2. สำหรับบริการที่ไม่เปิดเผยการหมุน (พบได้น้อย แต่มีอยู่) ให้ลบและเพิ่มบัญชีใหม่
  3. ตรวจสอบกิจกรรมการลงชื่อเข้าใช้ล่าสุดในทุกบัญชีที่ได้รับผลกระทบ
  4. ลบ QR ส่งออกต้นฉบับออกจากทุกอุปกรณ์และคลังรูปภาพที่ซิงค์กับคลาวด์ที่อาจมีมัน

ผู้โจมตีที่มี bundle สามารถสร้างรหัส 2FA ที่ถูกต้องได้เป็นปีๆ จนกว่าคุณจะหมุนรหัสลับ อย่าเลื่อนออกไป

ที่เกี่ยวข้อง

ตรวจสอบ bundle ของคุณ

อัปโหลดภาพ QR เข้าเครื่องสแกนของเรา วาง URI otpauth-migration:// หรือใช้กล้อง ผลแสดงทุกรายการใน bundle พร้อมข้อมูลลับถูกซ่อน

เปิดเครื่องสแกน →