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 đó.
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:
otp_parameters, lặp lại. Một mục cho mỗi tài khoản.
version, phiên bản schema.
batch_size, tổng số phần khi xuất được chia thành nhiều QR.
batch_index, vị trí của phần này.
batch_id, ID duy nhất liên kết các phần lại với nhau.
Mỗi mục otp_parameters có:
secret, byte hạt giống thô. Đây là vật liệu khóa thực tế.
name, nhãn tài khoản (ví dụ: alice@acme.com).
issuer, tên dịch vụ (ví dụ: ACME, GitHub).
algorithm, SHA1 / SHA256 / SHA512 / MD5.
digits, 6 hoặc 8 chữ số mỗi mã.
type, TOTP (dựa trên thời gian) hoặc HOTP (dựa trên bộ đếm).
counter, giá trị bộ đếm hiện tại cho các mục HOTP.
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à:
Chụp màn hình QR. Ảnh chụp màn hình được lưu vào thư viện ảnh đồng bộ đám mây = bí mật xác thực trên máy chủ của bên thứ ba.
Chia sẻ QR qua chat. Dù chỉ thoáng qua, bất kỳ ai có quyền truy cập vào cuộc trò chuyện có thể sao chép nó.
Đăng QR trong chủ đề diễn đàn hỗ trợ. Điều này xảy ra thường xuyên hơn bạn nghĩ — ai đó gặp sự cố với ứng dụng xác thực và chia sẻ ảnh chụp màn hình để được giúp đỡ.
Biển hiệu / bảng thông báo công cộng bị nhầm là QR thiết lập. Định dạng trông giống nhau với người không rành kỹ thuật.
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:
Đă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.
Đố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.
Kiểm tra hoạt động đăng nhập gần đây trên mọi tài khoản bị ảnh hưởng.
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.
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ế.