Kas ebaõnnestunud VPN-käepigistus on tõesti downgrade-rünne?
Downgrade-ründed on olemas, kuid enamik ebaõnnestunud käepigistusi on pakkumise lahknevus, vale marsruut või aegunud profiil. Kontrollige esmalt, mida läbiräägiti.
Vigaga lõppev käepigistus tundub rünnakuna, kuni vaatad sõnumit, ja enamasti on see aritmeetika: ühist pakkumist pole, sertifikaat on aegunud või pakett ei jõudnudki kohale. Downgrade-rünne on midagi konkreetset: vastane surub mõlemad otsad nõrgemale käitumisele, kui nad oleks valinud, ja jätab teistsugused jäljed. Iga ebaõnnestumist pahatahtlikkuseks pidada saadab sind otsima ohvrit, keda ehk polegi, samas kui tõelist downgrade'i konfiguratsiooniveana käsitleda jätab nõrgema tulemuse paigale. Need kaks viga maksavad erinevalt ja ainult üht neist on odav parandada.
Mida downgrade-rünne tegelikult muudab
Eesmärk ei ole šifrit murda ega võtit ära arvata. Eesmärk on mõjutada läbirääkimist nii, et mõlemad pooled jäävad vanema versiooni või nõrgema algoritmi juurde, millega ründaja hakkama saab, või panevad ühe poole uskuma, et teine toetab ainult seda.
Muutub kokkulepe, mitte autentimine. Kui ründaja saab pakkumist märkamatult muuta, võivad pooled ikkagi käepigistuse lõpetada ja üksteist autentida, kasutades parameetreid, mida ründaja eelistab. Seepärast on huvitav küsimus, kas läbirääkimine ise on terviklikkuskaitsega kaetud.
Miks läbirääkimine ise peab olema autenditud
TLS 1.3 teeb selle kaitse selgesõnaliseks. Klient, kes pakkus uuemat versiooni, suudab tuvastada vaikselt tagasi langenud serveri, sest serveri juhuslik väärtus kannab fikseeritud mustrit, kui see läbiräägib 1.2 või madalamat, ja klient peab seda nähes katkestama. Kogu transkript on ka lõppsõnumitega kaetud, nii et muudatus ükskõik kus läbirääkimises ebaõnnestub hiljem, mitte ei lähe vaikselt läbi.
Vanematel protokolliversioonidel olid nõrgemad lood, ja just seetõttu on tagasilangemise reeglid olulised. TLS 1.0 otspunkt samas konfiguratsioonis ei ole downgrade-rünne; see on lubatud tulemus, mille sa ise lubasid. Erinevus on selles, kas nõrgem tulemus tuli kaitstud otsusest või kaitsmata teest, mida vahendaja võis mõjutada. Kui seda nii sõnastada, taandub enamik juhtumeid konfiguratsiooniküsimuseks.
IKEv2 käitub teisiti, kuid toetub samale ideele. Pakkumist kantakse vahetuses, mis hiljem autendib mõlemad pooled, nii et algoritme ümber kirjutav vaheseade rikub autentimise, mitte ei suuna seda. OpenVPN-i juhtkanal kaitseb oma läbirääkimist TLS-iga ja kasutab siis seda kanalit andmekanalil šifrite kokkuleppimiseks, mistõttu huvitav on just juhtkanali logirida.
Konfigureeritud ühilduvus ei ole rünne
Administraator võib teadlikult lubada vanemaid valikuid, et toetada dokumenteeritud klienti, ja see otsus on konfiguratsioonis nähtav. Ründaja ei saa sellist konfiguratsiooni luua; ta saab ainult kasutada teed, mis laseb tal pakkumist mõjutada.
Ohtlik parandus on see, mis eemaldab tõendi erinevusest. Kõigi pärandvalikute lubamine, sertifikaadi kontrolli väljalülitamine või mis tahes šifri aktsepteerimine, et viga kaoks, laiendab seda, millega otspunkt nõustub, ja eemaldab kontrollid, mis oleks nõrgemast tulemusest teatanud.
Kui pead ühe vana valiku alles jätma, nimeta põhjus ja klient konfiguratsiooni kommentaaris, seejärel piira valik profiiliga, mis seda vajab. Ühele kuulajale piiratud ühilduvuserand on auditeeritav; ülemaailmselt rakendatud on lihtsalt nõrgem vaikeväärtus, mida keegi ei mäleta valinud olevat.
Loe ebaõnnestumist enne, kui nimetad põhjuse
Säilita täpne veateade, kliendi ja serveri versioonid ning aeg enne mis tahes muudatust. Seejärel liigita: kas pooled olid pakkumises eriarvamusel, kas paketitee ebaõnnestus või lükkas üks pool tagasi parameetri, millega oli varem nõustunud?
Pakkumise lahknevus nimetab tavaliselt süüdlased versioonid või algoritmid ja ebaõnnestub iga kord samas kohas. Marsruutimise või MTU probleem takerdub või lõpeb ajalõpuga ning varieerub sageli võrgu järgi. Aegunud sertifikaat tekitab kontrollivea, mitte läbirääkimisvea.
Miski sellest ei ole tõend ründaja kohta. Pahatahtliku põhjuse omistamine esimesel ebaõnnestumisel on viga, sest see peidab deterministliku vea, mis homme uuesti ebaõnnestub.
Kinnita, mis tegelikult valiti
Pärast iga parandust loe läbiräägitud tulemust, selle asemel et usaldada, et ühendus tõusis. Ühendus, mis õnnestub seetõttu, et kontroll eemaldati, on tulemus, mida sa püüdsid vältida. Kaks järgnevat käsku näitavad TLS-i ees oleva otspunkti valitud versiooni ja šifrit ning juhtkanali rida OpenVPN serveri logist.
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 -5Võrdle tulemust konfiguratsiooniga, mida kavatsesid, mitte sellega, mis praegu ühendub. Kui valitud versioon on lubatud miinimumist vanem, tuleb vaadata profiili või tagasilangemise nimekirja, ja vastus on see nimekiri parandada, mitte kuulutada rünnet ja ehitada kõik selle ümber uuesti.