Otvoríte klienta VPN, napíšete heslo a šesť číslic z autentifikátora sa vráti ako neplatných — dvakrát, potom tretí raz. Na účte sa od včera nič nezmenilo, takže inštinkt je vymazať záznam v autentifikátore a znova ho naskenovať — zvyčajne nesprávna oprava. Jednorazový kód nie je druhé heslo: brána ho musí vyžiadať v určitom kroku, z určitého zaregistrovaného záznamu, v určitom okne, a väčšina odmietnutí nastane skôr, než sa číslice porovnajú. Zistite, v ktorom kroku ste, skôr než sa dotknete registrácie.

Poradie výziev ukazuje, v akom toku ste

Tri formy pokrývajú takmer každé prihlásenie do VPN, ktoré zahŕňa kód. V dvojkrokovej forme klient odošle heslo, server vydá výzvu a klient sa znova spýta. V kombinovanej forme brána chce heslo aj kód v jednom odoslaní — niekedy spojené, niekedy za oddeľovačom, ktorý dokumentuje len operátor. V prehliadačovej forme klient nemá žiadne pole: kód ide na webovú stránku alebo ho nahradí push schválenie a desktopový klient čaká na výsledok.

Nesprávna forma vyzerá ako zlý kód. Vložte čerstvý kód do poľa určeného len pre heslo a server ho prečíta ako súčasť hesla. Na strane klienta OpenVPN 2.4 a novšie robia rozdiel viditeľným: server, ktorý odpovedá AUTH_FAILED,CRV1:, očakáva odpoveď na výzvu, takže profil potrebuje static-challenge alebo súbor s heslom v tvare SCRV1:. Starší profil len s auth-user-pass overí heslo a potom sa zasekne, čo v logu vyzerá ako zlyhanie OTP, aj keď nebol odoslaný žiadny kód.

WireGuard stojí za zmienku ako výnimka: overuje dvojice kľúčov, nie ľudí, takže pre kód nemá pole. Ak poskytovateľ nejaký inzeruje, prijíma ho niečo mimo tunela.

Čo server robí so šiestimi číslicami

Časové kódy nasledujú RFC 6238, ktorý obaľuje staršiu konštrukciu s počítadlom z RFC 4226: HMAC nad pohyblivým faktorom, predvolene skrátený na šesť číslic. Pri TOTP je pohyblivým faktorom aktuálny unixový čas delený krokom, 30 sekúnd, ak to operátor nezmenil. Overovateľ nikdy neporovnáva vaše číslice s uloženou hodnotou; prepočítava očakávaný kód zo zdieľaného semena a zvyčajne prijíma aj susedné kroky, takže pomalá cesta tam a späť prihlásenie nepodkopne.

Dva dôsledky sa prehliadajú. Časové pásmo telefónu je irelevantné, pretože semeno nikdy nevidí miestne hodiny — záleží len na odchýlke od skutočného UTC, a prístroj, ktorý sa ponáhľa o dve minúty, zlyhá pri každom kóde, pričom ukazuje čisté odpočítavanie. A kód je z princípu jednorazový: overovateľ si pamätá poslednú hodnotu počítadla, ktorú pre to semeno prijal, takže rovnaké číslice odoslané znova sa odmietnu aj v tom istom okne. Klient, ktorý to skúsi znova po vypršaní, môže spáliť kód, ktorý práve odoslal.

Tokeny s počítadlom posúvajú počítadlo pri každom stlačení, takže sa rozladia po tom, čo boli kódy vygenerované, ale nikdy odoslané; obvyklá oprava je okno resynchronizácie, ktoré prijíma niekoľko hodnôt dopredu. Ak operátor zaregistroval HOTP a vaša aplikácia zobrazuje TOTP, každá hodnota je nesprávna spôsobom, ktorý vyzerá ako problém s hodinami. URI zriaďovania za QR kódom udáva typ, číslice, periódu a hash.

Zlyhania, ktoré vyzerajú ako nesprávny kód

Najčastejší vinník je zaregistrovaný záznam. Autentifikačné aplikácie označujú záznamy podľa vydavateľa a účtu, takže kto má na tej istej VPN dve identity, môže skončiť s dvoma záznamami, ktorých označenia sa líšia o jeden znak. Kód platí pre semeno, ktoré ho vygenerovalo, a pre nič iné. Porovnajte označenie v telefóne s používateľským menom, ktoré server zaznamenáva, nie s tým, čo si pamätáte, že ste napísali.

Druhá je nezhodná sada parametrov. Semeno zaregistrované s ôsmimi číslicami, periódou 60 sekúnd alebo SHA-256 dáva kódy, ktoré overovateľ očakávajúci šesť číslic, 30 sekúnd a SHA-1 odmietne, a pri klientovi to nemožno rozlíšiť od nesprávneho kódu. Objavuje sa po migráciách, keď bol záznam znova pridaný z fotografie QR kódu, alebo keď bol záznam tokenu prestavaný s predvolenými hodnotami.

Tretie nie je o kóde. Brány zvyčajne vracajú jediné všeobecné zlyhanie overenia pre nesprávne heslo, exspirovaný kód a deaktivovaný účet, zámerne, aby nikto nemohol zistiť, ktorý faktor zlyhal. Čítajte log brány alebo RADIUS namiesto hlásenia klienta: výzva, ktorá nebola nikdy vydaná, odmietnutie prístupu bez atribútu OTP a odmietnutie politikou vyzerajú na obrazovke rovnako a vedú k rôznym ďalším krokom.

Krátka postupnosť, ktorá to zúži

Začnite najlacnejšou kontrolou a zastavte sa pri prvom kroku, ktorý neobstojí.

  1. Počkajte na čerstvý kód, odošlite ho raz a poznamenajte si, či sa výzva objaví pred alebo po prijatí hesla.
  2. Porovnajte označenie v autentifikátore s používateľským menom, ktoré server ukladá.
  3. Overte, že profil dokáže odpovedať na výzvu, ako v prípade CRV1 vyššie.
  4. Porovnajte hodiny zariadenia so známym zdrojom času; odchýlka väčšia ako niekoľko desiatok sekúnd sama rozbije TOTP.
  5. Spýtajte sa operátora, či je token TOTP alebo HOTP, a ktoré číslice, perióda a hash boli zaregistrované.

Dve pravidlá bránia tomu, aby sa to zhoršilo. Neopakujte pokus mnohokrát: mnohé brány počítajú zlyhania na účet a buď ho uzamknú, alebo začnú zdržiavať odpovede, takže nával premení malú chybu v konfigurácii na tiket podpory. A nepreregistrujte token ako diagnostiku, pretože to zneplatní staré semeno; ak bola skutočná závada výzvou, ktorú klient nikdy neodoslal, máte teraz dve zmeny na vysvetlenie namiesto jednej.

Držte semeno a obnovovacie kódy mimo hry

Šesť číslic a tajomstvo za nimi nie sú zameniteľné. Zriaďovací QR kód alebo semeno Base32 generuje každý budúci kód účtu, takže patrí do rovnakej kategórie ako heslo: nie do screenshotu, nie do komentára tiketu, nie do chatu s niekým, kto sa ozval prvý. Obnovovacie kódy sú samostatný mechanizmus — jednorazové, často úplne preskakujú výzvu na kód, a minutie jedného na test účtu odstráni záložnú cestu, ktorú môžete neskôr potrebovať.

Kód tiež nerobí prihlasovaciu stránku dôveryhodnou: výzva na OTP na podobnej doméne pozbiera platný kód a prehrá ho v okne, a certifikát je stále to, čo vám hovorí, kam píšete.

Ak postupnosť skončí na profile, ktorý nedokáže odpovedať na výzvu, opravte profil a otestujte znova jedným čerstvým kódom. Ak skončí na nezhodných registračných parametroch, nechajte operátora prečítať záznam tokenu, kým ktokoľvek niečo naskenuje. Ak skončí na uzamknutí, počkajte, kým prejde, namiesto výmeny klientov — prekážkou je stav účtu, nie aplikácia.

Súvisiace články