Tiêu chuẩn · otpauth-migration

QR xuất Google Authenticator có an toàn để quét không?

Chỉ khi bạn tự tạo nó, trên điện thoại cũ của chính bạn, với điện thoại mới của chính bạn. Nếu bất kỳ ai gửi cho bạn QR này, đừng quét.

Xác minh bundle → Tất cả các tiêu chuẩn →

Nó là gì

Google Authenticator và một số ứng dụng tương thích (Aegis, Raivo OTP, 2FAS) cho phép bạn xuất tài khoản xác thực bằng QR để di chuyển sang điện thoại mới hoặc ứng dụng khác. Định dạng là otpauth-migration://offline?data=….

Định dạng ban đầu không được ghi lại, nhưng đã được dịch ngược và hiện được hỗ trợ rộng rãi. Container là protobuf nhị phân, được mã hóa base64 và được đặt trong tham số truy vấn URI.

Một QR có thể chứa hàng chục tài khoản. QR trông giống hệt nhau với người không rành kỹ thuật — không có dấu hiệu trực quan nào cho thấy đây là xuất di chuyển thay vì QR thiết lập một tài khoản.

Tại sao một QR bundle lại đặc biệt nguy hiểm

QR thiết lập otpauth:// thông thường nguy hiểm để quét nếu bạn chưa yêu cầu nó — nó chứa bí mật của một tài khoản. QR di chuyển nguy hiểm hơn: nó chứa bí mật của mọi tài khoản trong bundle.

Không có ngày hết hạn cho các bí mật trong bundle. Khác với token phiên (hết hạn sau vài giờ), bí mật TOTP/HOTP có hiệu lực vĩnh viễn cho đến khi bạn xoay vòng chúng.

Đó là lý do tại sao kết quả của máy quét của chúng tôi đối với mọi mã QR otpauth-migration:// bắt đầu ở mức likely_dangerous và giữ nguyên như vậy bất kể ngữ cảnh. Định dạng không có vấn đề; mô hình mối đe dọa chính là sự tồn tại của định dạng đó.

Thực sự bên trong có gì (cấu trúc)

URI trông như sau:

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

Phần body base64, sau khi giải mã, là cấu trúc protocol-buffer MigrationPayload. Các trường cấp cao nhất:

Mỗi mục otp_parameters có:

Những gì máy quét hiển thị và những gì nó cố ý không làm

✓ Được hiển thị

Cho mỗi mục trong bundle, kết quả hiển thị nhà phát hành (ACME, GitHub, AWS), tên tài khoản, loại OTP (TOTP / HOTP), thuật toán, số chữ số và — đối với HOTP — giá trị bộ đếm hiện tại.

Phiên bản schema, chỉ số batch, kích thước batch và ID batch cũng được hiển thị, hữu ích khi bạn đang tái lắp ráp xuất nhiều phần.

✗ Không bao giờ được giải mã

Byte secret thô không bao giờ được giải mã vào đầu ra kết quả. Máy quét xác nhận sự hiện diện của bí mật và loại của nó (TOTP / HOTP), nhưng không bao giờ trả về giá trị.

Điều này được khẳng định bởi bộ kiểm thử — chúng tôi đưa vào bộ phân tích các payload protobuf được tạo thủ công chứa các chuỗi canary (SECRET_SEED_1, SECRET_SEED_2) và khẳng định rằng những chuỗi này không bao giờ xuất hiện trong đầu ra kết quả được tuần tự hóa. Nếu có hồi quy ở đó, CI sẽ thất bại.

Khi nào (và cách) sử dụng

Trường hợp sử dụng hợp lệ: bạn đang nâng cấp từ điện thoại cũ sang điện thoại mới. Điện thoại CŨ tạo QR, điện thoại MỚI quét nó — trực tiếp, không qua bên trung gian, trong vòng vài giây.

Các bề mặt nguy hiểm là:

Nếu bạn nghi ngờ QR di chuyển đã bị lộ

Coi như rò rỉ thông tin đăng nhập trên mọi tài khoản trong bundle. Các bước khôi phục:

  1. Đăng nhập vào từng dịch vụ bị ảnh hưởng và thay thế khóa bí mật 2FA. Hầu hết các dịch vụ cho phép thực hiện điều này trong phần Tài khoản → Bảo mật → Xác thực hai yếu tố → Tắt rồi đăng ký lại.
  2. Đối với các dịch vụ không có tính năng xoay vòng (hiếm nhưng có), hãy xóa và thêm lại thiết bị xác thực.
  3. Kiểm tra hoạt động đăng nhập gần đây trên mọi tài khoản bị ảnh hưởng.
  4. Xóa QR xuất gốc khỏi mọi thiết bị và thư viện ảnh đồng bộ đám mây.

Kẻ tấn công có bundle có thể tạo mã 2FA hợp lệ trong nhiều năm cho đến khi bạn xoay vòng mọi bí mật bị ảnh hưởng.

Liên quan

Xác minh bundle của bạn

Thả hình ảnh QR vào máy quét, dán URI otpauth-migration://, hoặc quét trực tiếp. Kết quả hiển thị siêu dữ liệu tài khoản mà không bao giờ tiết lộ bí mật thực tế.

Mở máy quét →