Er Google Authenticator eksport-QR-koden trygg å skanne?
Bare hvis du genererte den selv på din egen gamle telefon med din egen nye telefon rettet mot skjermen. Enhver andre som fotograferer den QR-koden av en hvilken som helst grunn, oppnår permanent tilgang til alle 2FA-koder for alle kontoer i bundlen.
Google Authenticator og flere kompatible apper (Aegis, Raivo OTP, 2FAS) lar deg «eksportere» de lagrede 2FA-kontoene dine slik at du kan flytte dem til en ny enhet. Eksporten tar form av en QR-kode med en URI som starter med otpauth-migration://. Inne i den URI-en er en enkelt protocol-buffer-bundle (Googles MigrationPayload-skjema) som på én gang inneholder alle kontoer – utsteder, kontonavn, hemmelig seed, algoritme, sifferantall, type (HOTP / TOTP) og teller.
Formatet var opprinnelig udokumentert, men har blitt omvendt konstruert og er nå de-facto-utvekslingsformatet for 2FA-sikkerhetskopier. Tredjepartsautentikatorapper gjenkjenner og importerer den samme QR-koden.
Én QR-kode kan inneholde titalls kontoer. QR-koden er visuelt uatskillelig fra en normal TOTP-oppsett-QR – det er ingen visuell markør som forteller en tilfeldig observatør at den bærer hele bundlen.
Hvorfor en enkelt bundle QR-kode er enestående farlig
En vanlig otpauth://-oppsett-QR er farlig å skanne hvis du ikke ba om den – men skadeomfanget er én konto. Migrasjons-QR-kodens skadeomfang er alle kontoer i autentifikatoren din. Hvis en angriper fotograferer skjermen som viser denne QR-koden – over skulderen på en kafé, via et overvåkningskamera du ikke la merke til, gjennom et gjennomsiktig glassvindu – går de derfra med muligheten til å omgå 2FA på alle kontoene den dekket. Permanent. Inntil du roterer hver hemmelighet manuelt – noe de fleste tjenester ikke gjør enkelt.
Det er ingen utløpsdato på hemmelighetene i bundlen. I motsetning til et sesjonstoken (som utløper), i motsetning til en passordnøkkel-QR (som er engangsbruk), er seeds i en migrasjonsbundle gyldige til du erstatter dem tjeneste for tjeneste.
Det er grunnen til at resultatet fra skanneren vår for enhver otpauth-migration:// QR-kode starter ved likely_dangerous og forblir der uavhengig av kontekst. Formatet er fint; trusselmodellen er formatets eksistens.
Base64-kroppen, når dekkodet, er en MigrationPayload protocol-buffer med disse feltene på øverste nivå:
otp_parameters – gjentatt. Én post per konto.
versjon – skjemaversjon.
batch_size – totalt antall chunks når en eksport er delt på tvers av flere QR-koder.
batch_index – denne chunkens posisjon.
batch_id – unikt ID som kobler chunk-delene sammen.
Hvert otp_parameters-innlegg har:
hemmelighet – de rå seed-bytene. Dette er det faktiske nøkkelmaterialet.
navn – kontoetiketten (f.eks. alice@acme.com).
utsteder – tjenestenavnet (f.eks. ACME, GitHub).
algoritme – SHA1 / SHA256 / SHA512 / MD5.
sifre – 6 eller 8 sifre per kode.
type – TOTP (tidsbasert) eller HOTP (tellerbasert).
teller – gjeldende tellerverdi for HOTP-poster.
Hva skanneren vår viser, og hva den bevisst ikke gjør
✓ Vises
For hvert innlegg i bundlen viser resultatet utsteder (ACME, GitHub, AWS), kontonavnet (alice@acme.com), algoritmen (SHA1), sifferantallet (6) og typen (TOTP). Resultatsopplysningen lyder «Grants i denne bundlen: ACME / alice@acme.com; GitHub / bob@github; AWS / root; …» slik at en bruker som ER midt i en migrasjon kan gå gjennom listen før import.
Skjemaversjon, batch-indeks, batch-størrelse og batch-ID vises også – nyttig når en eksport er delt på tvers av flere QR-koder.
✗ Aldri dekkodet
De rå secret-bytene dekodes aldri til resultatoutputen. Analysatoren vår leser dem bare for å verifisere at hvert innlegg er velformet (hemmelighet til stede og ikke-tom), og kaster deretter verdien før findings bygges.
Dette hevdes av testsuiten – vi mater analysatoren med håndlagde protobuf-payloads som inneholder canary-strenger (SECRET_SEED_1, SECRET_SEED_2) og påstår at disse strengene aldri vises i den serialiserte resultatoutputen. En regresjon der feiler CI.
Når (og hvordan) man bruker den
Legitimt brukstilfelle: du oppgraderer fra én telefon til en annen. Den GAMLE telefonen viser migrasjons-QR-koden på skjermen i ca. 30 sekunder. Den NYE telefonens autentikatorapp retter seg mot skjermen og importerer. Ingen andre er i rommet. Du sletter eksporten fra den gamle telefonen etter å ha bekreftet at alt ble importert.
Fareoverflatene er:
Skjermbilder av QR-koden. Et skjermbilde lagret i skysynkroniserte bilder plasserer QR-koden på alle enheter som er synkronisert til den kontoen.
Deling av QR-koden via chat. Selv kortvarig har enhver med tilgang til chatten (nå eller senere) muligheten til å ekstrahere bundlen.
Publisering av QR-koden i en hjelpeforumtråd. Dette skjer oftere enn man tror; folk ber om hjelp og legger ved et foto av autentikatoreksporten sin ved en feil.
Offentlige plakater / skilt feilidentifisert som oppsett-QR-koder. Formatet er visuelt uatskillelig fra en enkeltkontos oppsett-QR.
Hvis du mistenker at en migrasjons-QR-kode ble avslørt
Behandle det som et legitimasjonslekkasje på tvers av alle kontoer i bundlen. Gjenopprettingstrinnene i rekkefølge:
Logg inn på hver berørte tjeneste og roter 2FA-hemmeligheten. De fleste tjenester lar deg gjøre dette under Konto → Sikkerhet → To-faktor-autentisering → Deaktiver og meld deg på igjen.
For tjenester som ikke eksponerer rotasjon (sjeldent, men eksisterer), fjern og legg til kontoen på nytt.
Gjennomgå nylig innloggingsaktivitet på alle berørte kontoer.
Slett den opprinnelige eksport-QR-koden fra alle enheter og skysynkroniserte fotoarkiver som kan ha den.
En angriper med bundlen kan generere gyldige 2FA-koder i årevis til du roterer. Ikke utsett.
Slipp QR-bildet inn i skanneren vår, lim inn otpauth-migration://-URI-en, eller bruk kameraet. Resultatet viser alle kontoer i bundlen uten noen gang å dekode hemmelighetene.