Standardy · otpauth-migration

Czy QR eksportu Google Authenticator jest bezpieczny do zeskanowania?

Tylko jeśli wygenerowałeś/aś go samodzielnie, na własnym starym telefonie, z własnym nowym telefonem skierowanym na ekran. Każda inna osoba, która sfotografuje ten QR z jakiegokolwiek powodu, uzyskuje trwały dostęp do każdego kodu 2FA dla każdego konta w pakiecie.

Zweryfikuj pakiet → Wszystkie standardy →

Czym to jest

Google Authenticator i kilka kompatybilnych aplikacji (Aegis, Raivo OTP, 2FAS) umożliwiają eksport przechowywanych kont 2FA w celu przeniesienia na nowe urządzenie. Eksport przyjmuje postać kodu QR z URI zaczynającym się od otpauth-migration://. Wewnątrz URI znajduje się pojedynczy pakiet protocol-buffer (schemat MigrationPayload Google) zawierający jednocześnie wszystkie konta: wystawcę, nazwę konta, ziarno sekretu, algorytm, liczbę cyfr, typ (HOTP / TOTP) i licznik.

Format był pierwotnie nieudokumentowany, ale został odtworzony metodą inżynierii wstecznej i jest teraz de facto formatem wymiany dla kopii zapasowych 2FA. Zewnętrzne aplikacje authenticator rozpoznają i importują ten sam QR.

Jeden QR może zawierać dziesiątki kont. QR jest wizualnie nieodróżnialny od zwykłego QR konfiguracyjnego TOTP — nie ma żadnego markera wizualnego informującego przypadkowego obserwatora, że zawiera cały pakiet.

Dlaczego pojedynczy QR pakietu jest wyjątkowo niebezpieczny

Zwykły QR konfiguracyjny otpauth:// jest niebezpieczny do zeskanowania, jeśli go nie żądałeś/aś, ale promień rażenia to jedno konto. Promień rażenia QR migracji to każde konto w Twoim aplikacji authenticator. Jeśli atakujący sfotografuje ekran z tym QR — przez ramię w kawiarni, przez kamerę monitoringu, przez przejrzyste szklane okno — odchodzi z możliwością ominięcia 2FA na każdym objętym koncie. Na zawsze. Dopóki nie zmienisz ręcznie każdego sekretu, a większość serwisów tego nie ułatwia.

Sekrety w pakiecie nie wygasają. W przeciwieństwie do tokenu sesji (który wygasa), w przeciwieństwie do QR klucza dostępu (który jest jednorazowy) — ziarna w pakiecie migracji są ważne, dopóki nie zastąpisz ich serwis po serwisie.

Dlatego wynik naszego skanera dla każdego QR otpauth-migration:// zaczyna się od likely_dangerous i pozostaje tam niezależnie od kontekstu. Format jest w porządku; modelem zagrożeń jest sam fakt istnienia formatu.

Co naprawdę jest w środku (anatomia)

URI wygląda następująco:

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

Treść base64 po zdekodowaniu to bufor protokołu MigrationPayload z następującymi polami najwyższego poziomu:

Każdy wpis otp_parameters zawiera:

Co pokazuje nasz skaner i czego celowo nie pokazuje

✓ Ujawniane

Dla każdego wpisu w pakiecie wynik pokazuje wystawcę (ACME, GitHub, AWS), nazwę konta (alice@acme.com), algorytm (SHA1), liczbę cyfr (6) i typ (TOTP). Ujawnienie wyników brzmi: Uprawnienia w tym pakiecie: ACME / alice@acme.com; GitHub / bob@github; AWS / root; — dzięki czemu użytkownik w trakcie migracji może przed importem sprawdzić listę.

Wersja schematu, indeks fragmentu, łączna liczba fragmentów i identyfikator fragmentu są również ujawniane — przydatne, gdy eksport jest podzielony na wiele QR.

✗ Nigdy nie dekodowane

Surowe bajty sekret nigdy nie są dekodowane w danych wyjściowych wyniku. Nasz analizator odczytuje je tylko w celu sprawdzenia, czy każdy wpis jest dobrze sformułowany (sekret obecny i niepusty), a następnie odrzuca wartość przed zbudowaniem wyników.

Potwierdza to zestaw testów — dostarczamy analizatorowi ręcznie zbudowane ładunki protobuf zawierające łańcuchy kanarkowe (SECRET_SEED_1, SECRET_SEED_2) i sprawdzamy, że te łańcuchy nigdy nie pojawiają się w zserializowanym wyniku. Regresja w tym miejscu kończy się niepowodzeniem CI.

Kiedy (i jak) go używać

Uzasadniony przypadek użycia: przesiadasz się na nowy telefon. STARY telefon wyświetla QR migracji na ekranie przez ok. 30 sekund. Aplikacja authenticatora na NOWYM telefonie kieruje się na ekran i importuje. Nikt inny nie jest w pomieszczeniu. Po potwierdzeniu, że wszystko zaimportowało, usuwasz eksport ze starego telefonu.

Niebezpieczne sytuacje to:

Jeśli podejrzewasz, że QR migracji został ujawniony

Traktuj jako wyciek poświadczeń dla każdego konta w pakiecie. Kroki naprawcze w odpowiedniej kolejności:

  1. Zaloguj się do każdej usługi, której dotyczy problem, i zmień sekret 2FA. Większość usług umożliwia to w sekcji Konto → Bezpieczeństwo → Uwierzytelnianie dwuskładnikowe → Wyłącz i ponownie zarejestruj.
  2. Dla serwisów bez opcji rotacji (rzadkie, ale istnieje) — usuń i dodaj konto ponownie.
  3. Sprawdź ostatnią aktywność logowania na każdym dotkniętym koncie.
  4. Usuń oryginalny QR eksportu z każdego urządzenia i zsynchronizowanej z chmurą biblioteki zdjęć, w której mógł się znaleźć.

Atakujący z pakietem może generować ważne kody 2FA przez lata, dopóki nie wykonasz rotacji. Nie odkładaj tego.

Powiązane

Zweryfikuj swój pakiet

Upuść obraz QR do naszego skanera, wklej URI otpauth-migration:// lub użyj kamery. Wynik pokazuje każde konto w pakiecie bez dekodowania sekretów.

Otwórz skaner →