Je neúspešný handshake VPN naozaj downgrade útok?
Downgrade útoky existujú, ale väčšina neúspešných handshakeov je nesúlad ponuky, zlá trasa alebo expirovaný profil. Najprv skontrolujte, čo sa vyjednalo.
Handshake, ktorý sa skončí chybou, vyzerá ako útok, kým sa nepozriete na správu, a väčšinou ide o aritmetiku: žiadna spoločná ponuka, certifikát po expirácii alebo paket, ktorý nikdy nedorazil. Downgrade útok je konkrétna vec: protivník tlačí obe strany k slabšiemu správaniu, než by si vybrali, a zanecháva iné dôkazy. Keď každý neúspech považujete za zlý úmysel, hľadáte obeť, ktorá možno neexistuje, a keď skutočný downgrade považujete za chybu konfigurácie, slabší výsledok zostane na mieste. Tie dva omyly stoja rôzne a len jeden sa dá lacno opraviť.
Čo downgrade útok vlastne mení
Cieľom nie je prelomiť šifru ani uhádnuť kľúč. Cieľom je ovplyvniť vyjednávanie tak, aby sa obe strany zastavili na staršej verzii alebo slabšom algoritme, s ktorým si útočník poradí, alebo aby jedna strana uverila, že druhá podporuje len to.
Mení sa dohoda, nie autentizácia. Ak útočník môže zmeniť ponuku bez odhalenia, strany môžu stále dokončiť handshake a stále sa navzájom autentizovať, ale s parametrami, ktoré útočník preferuje. Preto je zaujímavá otázka, či je samotné vyjednávanie pokryté ochranou integrity.
Prečo musí byť samotné vyjednávanie autentizované
TLS 1.3 robí tú ochranu explicitnou. Klient, ktorý ponúkol novšiu verziu, dokáže odhaliť server, ktorý potichu ustúpil, pretože náhodná hodnota servera nesie pevný vzor, keď vyjednáva 1.2 alebo nižšiu, a klient musí pri jej videní prerušiť. Celý prepis je pokrytý aj záverečnými správami, takže úprava kdekoľvek vo vyjednávaní zlyhá neskôr, namiesto toho, aby potichu prešla.
Staršie verzie protokolu mali slabšie príbehy, a práve preto záleží na pravidlách návratu. Koncový bod s TLS 1.0 v tej istej konfigurácii nie je downgrade útok; je to povolený výsledok, ktorý ste sa rozhodli povoliť. Rozdiel je v tom, či slabší výsledok vyšiel z chráneného rozhodnutia alebo z nechránenej cesty, ktorú mohol prostredník ovplyvniť. Keď to takto sformulujete, väčšina incidentov sa zmení na otázku konfigurácie.
IKEv2 sa správa inak, ale stojí na tej istej myšlienke. Ponuka sa prenáša vo výmene, ktorá neskôr autentizuje obe strany, takže medziľahlé zariadenie prepisujúce algoritmy láme autentizáciu namiesto toho, aby ju riadilo. Riadiaci kanál OpenVPN chráni svoje vyjednávanie pomocou TLS a potom tento kanál používa na dohodu šifier dátového kanála, a preto je zaujímavý riadok z logu riadiaceho kanála.
Nakonfigurovaná kompatibilita nie je útok
Správca môže zámerne povoliť staršie voľby na podporu dokumentovaného klienta a toto rozhodnutie je viditeľné v konfigurácii. Útočník takú konfiguráciu nedokáže vytvoriť; môže len zneužiť cestu, ktorá mu umožní ovplyvniť ponuku.
Nebezpečná oprava je tá, ktorá odstraňuje dôkaz rozdielu. Zapnutie všetkých starších volieb, vypnutie overovania certifikátov alebo prijímanie akejkoľvek šifry, aby chyba zmizla, rozširuje to, s čím bude koncový bod súhlasiť, a odstraňuje kontroly, ktoré by slabší výsledok nahlásili.
Ak musíte jednu starú voľbu zachovať, uveďte dôvod a klienta v komentári konfigurácie a potom voľbu obmedzte na profil, ktorý ju potrebuje. Výnimka kompatibility obmedzená na jeden listener je auditovateľná; tá uplatnená globálne je len slabšia predvolená hodnota, o ktorej si nikto nepamätá, že ju zvolil.
Prečítajte si zlyhanie, kým pomenujete príčinu
Pred akoukoľvek zmenou uchovajte presný reťazec chyby, verzie klienta a servera a čas. Potom klasifikujte: nezhodli sa strany na ponuke, zlyhala cesta paketov, alebo jedna strana odmietla parameter, ktorý kedysi prijímala?
Nesúlad ponuky zvyčajne pomenuje problematické verzie alebo algoritmy a zlyhá v tom istom bode zakaždým. Problém s routingom alebo MTU sa zasekne alebo vyprší a často sa mení podľa siete. Expirovaný certifikát dáva chybu overenia, nie vyjednávania.
Nič z toho nie je dôkaz útočníka. Priradiť zlý úmysel pri prvom zlyhaní je chyba, pretože skrýva deterministickú chybu, ktorá zajtra zlyhá znova.
Potvrďte, čo sa skutočne vybralo
Po každej oprave si prečítajte vyjednaný výsledok, namiesto toho, aby ste verili, že spojenie naskočilo. Spojenie, ktoré uspeje preto, že bolo odstránené overovanie, je výsledok, ktorému ste sa chceli vyhnúť. Nasledujúce dva príkazy ukazujú zvolenú verziu a šifru pre koncový bod s TLS a tiež riadok riadiaceho kanála z logu servera OpenVPN.
openssl s_client -connect 198.51.100.30:443 -servername vpn.example.net -brief </dev/null
grep -iE 'Control Channel|Data Channel' /var/log/openvpn.log | tail -5Porovnajte výsledok s konfiguráciou, ktorú ste zamýšľali, nie s tým, čo sa teraz pripája. Ak je zvolená verzia staršia ako povolené minimum, hľadajte v profile alebo v zozname návratu a odpoveďou je opraviť ten zoznam, nie vyhlásiť útok a prestavať všetko okolo.