Er Google Authenticator-eksport-QR-koden sikker at scanne?
Kun hvis du selv genererede den på din egen gamle telefon med din egen nye telefon rettet mod skærmen. Enhver andre, der fotograferer den QR-kode af en hvilken som helst grund, opnår permanent adgang til alle 2FA-koder for alle konti i bundle'n.
Google Authenticator og adskillige kompatible apps (Aegis, Raivo OTP, 2FAS) lader dig "eksportere" dine lagrede 2FA-konti, så du kan flytte dem til en ny enhed. Eksporten tager form af en QR-kode med en URI, der begynder med otpauth-migration://. Inden i den URI er en enkelt protocol-buffer-bundle (Googles MigrationPayload-skema), der på én gang indeholder alle konti – udsteder, kontonavn, hemmelig seed, algoritme, ciferantal, type (HOTP / TOTP) og tæller.
Formatet var oprindeligt udokumenteret, men er blevet omvendt konstrueret og er nu de-facto-udvekslingsformatet for 2FA-sikkerhedskopier. Tredjeparts-autentifikatorapps genkender og importerer den samme QR-kode.
Én QR-kode kan indeholde snesevis af konti. QR-koden er visuelt uadskilleligt fra en normal TOTP-opsætnings-QR – der er ingen visuel markering, der fortæller en tilfældig observatør, at den bærer hele bundle'n.
Hvorfor en enkelt bundle QR-kode er enestående farlig
En almindelig otpauth://-opsætnings-QR er farlig at scanne, hvis du ikke bad om den – men skadeomfanget er én konto. Migrations-QR-kodens skadeomfang er alle konti i din autentifikator. Hvis en angriber fotograferer skærmen, der viser denne QR-kode – over skulderen i en café, via et overvågningskamera du ikke bemærkede, igennem en klar glasrude – går de derfra med muligheden for at omgå 2FA på alle de konti, den dækkede. Permanent. Indtil du roterer hver hemmelighed manuelt – noget de fleste tjenester ikke gør let.
Der er ingen udløbsdato på hemmeligheder i bundle'n. I modsætning til et sessionstoken (der udløber), i modsætning til en adgangsnøgle-QR (der er engangsbrug), er seeds i en migrations-bundle gyldige, indtil du erstatter dem tjeneste for tjeneste.
Det er grunden til, at vores scanners resultat for enhver otpauth-migration:// QR-kode starter ved likely_dangerous og forbliver der uanset kontekst. Formatet er fint; trusselmodellen er formatets eksistens.
Base64-kroppen, når afkodet, er en MigrationPayload protocol-buffer med disse felter på øverste niveau:
otp_parameters – gentaget. Ét indlæg pr. konto.
version – skemaversion.
batch_size – samlet antal chunks, når en eksport er opdelt på tværs af flere QR-koder.
batch_index – denne chunks position.
batch_id – unikt ID, der forbinder chunk-delene.
Hvert otp_parameters-indlæg har:
hemmelighed – de rå seed-bytes. Dette er det faktiske nøglemateriale.
navn – kontomærkaten (f.eks. alice@acme.com).
udsteder – tjenestenavnet (f.eks. ACME, GitHub).
algoritme – SHA1 / SHA256 / SHA512 / MD5.
cifre – 6 eller 8 cifre pr. kode.
type – TOTP (tidsbaseret) eller HOTP (tællerbaseret).
tæller – aktuel tællerværdi for HOTP-poster.
Hvad vores scanner viser, og hvad den bevidst ikke gør
✓ Vises
For hvert indlæg i bundle'n viser resultatet udstederen (ACME, GitHub, AWS), kontonavnet (alice@acme.com), algoritmen (SHA1), cifrantallet (6) og typen (TOTP). Resultats-oplysningen lyder "Grants i denne bundle: ACME / alice@acme.com; GitHub / bob@github; AWS / root; …", så en bruger, der ER midt i en migration, kan gennemgå listen inden import.
Skemaversion, batch-indeks, batch-størrelse og batch-ID vises også – nyttigt, når en eksport er opdelt på tværs af flere QR-koder.
✗ Afkodes aldrig
De rå secret-bytes afkodes aldrig til verdiktoutputtet. Vores analysator læser dem kun for at verificere, at hvert indlæg er velformet (hemmelighed til stede og ikke-tom), og kasserer derefter værdien inden findings bygges.
Dette hævdes af testsuiten – vi fodrer analysatoren med håndlavede protobuf-payloads indeholdende canary-strenge (SECRET_SEED_1, SECRET_SEED_2) og påstår, at disse strenge aldrig optræder i det serialiserede verdiktoutput. En regression der fejler CI.
Hvornår (og hvordan) man bruger den
Legitimt brugstilfælde: du opgraderer fra én telefon til en anden. Den GAMLE telefon viser migrations-QR-koden på sin skærm i ca. 30 sekunder. Den NYE telefons autentifikatorapp retter sig mod skærmen og importerer. Ingen andre er i rummet. Du sletter eksporten fra den gamle telefon, efter at du har bekræftet, at alt blev importeret.
Fareoverfladerne er:
Skærmbilleder af QR-koden. Et skærmbillede gemt i skysynkroniserede fotos lægger QR-koden på alle enheder synkroniseret til den konto.
Deling af QR-koden via chat. Selv kortvarigt kan enhver med adgang til chatten (nu eller senere) udtrække bundle'n.
Offentliggørelse af QR-koden i en hjælpeformumtråd. Det sker oftere end man tror; folk beder om hjælp og poster ved en fejl et foto af deres autentifikator-eksport.
Offentlige plakater / skiltning fejlagtigt identificeret som opsætnings-QR-koder. Formatet er visuelt uadskilleligt fra en enkeltkontos opsætnings-QR.
Hvis du mistænker, at en migrations-QR-kode er blevet afsløret
Behandl det som et legitimationslæk på tværs af alle konti i bundle'n. Genoprettelsestrinene i rækkefølge:
Log ind på hver berørt tjeneste og roter 2FA-hemmeligheden. De fleste tjenester lader dig gøre dette under Konto → Sikkerhed → To-faktor-autentificering → Deaktiver, og tilmeld dig igen.
For tjenester, der ikke udsætter rotation (sjælden, men eksisterer), fjern og tilføj kontoen igen.
Gennemgå nylig login-aktivitet på alle berørte konti.
Slet den originale eksport-QR-kode fra alle enheder og skysynkroniserede fotobiblioteker, der måske har den.
En angriber med bundle'n kan generere gyldige 2FA-koder i årevis, indtil du roterer. Udsæt det ikke.
Slip QR-billedet ind i vores scanner, indsæt otpauth-migration://-URI'en, eller brug kameraet. Resultatet viser alle konti i bundle'n uden nogensinde at afkode hemmelighederne.