Rankos paspaudimas, kuris baigiasi klaida, atrodo kaip ataka, kol nepažiūri į pranešimą, ir dažniausiai tai aritmetika: nėra bendro pasiūlymo, pasibaigęs sertifikatas arba paketas, kuris niekada neatvyko. Downgrade ataka yra konkretus dalykas: priešininkas stumia abu galus link silpnesnio elgesio, nei jie būtų pasirinkę, ir palieka kitokius įrodymus. Kiekvieną nesėkmę laikyti piktybiškumu reiškia ieškoti aukos, kurios galbūt nėra, o tikrą downgrade laikyti konfigūracijos klaida palieka silpnesnį rezultatą vietoje. Šios dvi klaidos kainuoja skirtingai, ir tik vieną jų galima pigiai ištaisyti.

Ką downgrade ataka iš tikrųjų pakeičia

Tikslas yra ne sulaužyti šifrą ir ne atspėti raktą. Tikslas yra paveikti derybas, kad abi pusės sustotų prie senesnės versijos ar silpnesnio algoritmo, kurį užpuolikas gali suvaldyti, arba kad viena pusė patikėtų, jog kita palaiko tik tai.

Keičiasi susitarimas, o ne autentifikavimas. Jei užpuolikas gali pakeisti pasiūlymą nepastebėtas, pusės vis tiek gali užbaigti rankos paspaudimą ir vis tiek autentifikuoti viena kitą, bet su parametrais, kuriems užpuolikas teikia pirmenybę. Todėl įdomus klausimas yra tai, ar pačios derybos yra apsaugotos vientisumo apsauga.

Kodėl pačios derybos turi būti autentifikuotos

TLS 1.3 padaro tą apsaugą aiškią. Klientas, pasiūlęs naujesnę versiją, gali aptikti tyliai atgal atsitraukusį serverį, nes serverio atsitiktinė reikšmė turi fiksuotą modelį, kai derasi dėl 1.2 ar žemesnės, ir klientas privalo nutraukti tai pamatęs. Visas transkriptas taip pat padengtas baigiamaisiais pranešimais, todėl pakeitimas bet kurioje derybų vietoje vėliau nepavyksta, o ne praeina tyliai.

Senenės protokolo versijos turėjo silpnesnes istorijas, ir būtent todėl svarbios atsitraukimo taisyklės. TLS 1.0 galinis taškas toje pačioje konfigūracijoje nėra downgrade ataka; tai leistinas rezultatas, kurį jūs pasirinkote leisti. Skirtumas yra tas, ar silpnesnis rezultatas atėjo iš apsaugoto sprendimo, ar iš neapsaugoto kelio, kurį tarpininkas galėjo paveikti. Kai taip suformuluojate, dauguma incidentų virsta konfigūracijos klausimu.

IKEv2 elgiasi kitaip, bet remiasi ta pačia idėja. Pasiūlymas perduodamas apsikeitime, kuris vėliau autentifikuoja abi puses, todėl algoritmus perrašantis tarpinis įrenginys sulaužo autentifikavimą, o ne nukreipia jį. OpenVPN valdymo kanalas apsaugo savo derybas TLS ir tada naudoja tą kanalą duomenų kanalo šiframs suderėti, todėl įdomi yra būtent valdymo kanalo žurnalo eilutė.

Sukonfigūruotas suderinamumas nėra ataka

Administratorius gali sąmoningai leisti senesnius pasirinkimus, kad palaikytų dokumentuotą klientą, ir tas sprendimas matomas konfigūracijoje. Užpuolikas negali sukurti tokios konfigūracijos; jis gali tik pasinaudoti keliu, leidžiančiu paveikti pasiūlymą.

Pavojingas taisymas yra tas, kuris pašalina skirtumo įrodymą. Visų senųjų parinkčių įjungimas, sertifikato tikrinimo išjungimas ar bet kurio šifro priėmimas, kad klaida išnyktų, išplečia tai, su kuo galinis taškas sutiks, ir pašalina patikras, kurios būtų pranešusios apie silpnesnį rezultatą.

Jei turite palikti vieną seną parinktį, nurodykite priežastį ir klientą konfigūracijos komentare, tada apribokite parinktį profiliu, kuriam jos reikia. Suderinamumo išimtis, apribota vienu klausytoju, yra audituojama; visuotinai taikoma yra tik silpnesnis numatytasis nustatymas, kurio niekas neprisimena pasirinkęs.

Perskaitykite nesėkmę prieš įvardydami priežastį

Prieš bet kokį pakeitimą išsaugokite tikslią klaidos eilutę, kliento ir serverio versijas bei laiką. Tada klasifikuokite: ar pusės nesutarė dėl pasiūlymo, ar paketų kelias nepavyko, ar viena pusė atmetė parametrą, kurį kadaise priimdavo?

Pasiūlymų nesutapimas paprastai įvardija kaltas versijas ar algoritmus ir nepavyksta tame pačiame taške kiekvieną kartą. Maršrutizavimo ar MTU problema sustoja arba baigiasi skirtuoju laiku, ir ji dažnai kinta priklausomai nuo tinklo. Pasibaigęs sertifikatas duoda tikrinimo, o ne derybų klaidą.

Nė vienas iš to nėra užpuoliko įrodymas. Priskirti piktybinę priežastį pirmą kartą nepavykus yra klaida, nes ji paslepia deterministinę klaidą, kuri nepavyks vėl rytoj.

Patvirtinkite, kas iš tikrųjų buvo pasirinkta

Po bet kokio pataisymo perskaitykite suderėtą rezultatą, o ne pasitikėkite, kad ryšys pakilo. Ryšys, kuris pavyksta pašalinus tikrinimą, yra rezultatas, kurio bandėte išvengti. Dvi komandos žemiau rodo pasirinktą versiją ir šifrą TLS priekyje turinčiam galiniam taškui, be to, valdymo kanalo eilutę iš OpenVPN serverio žurnalo.

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 -5

Palyginkite rezultatą su konfigūracija, kurios ketinote, o ne su tuo, kas dabar jungiasi. Jei pasirinkta versija senesnė už leistiną minimumą, profilis ar atsitraukimo sąrašas yra vieta, kur reikia žiūrėti, ir atsakymas yra ištaisyti tą sąrašą, o ne paskelbti ataką ir perstatyti viską aplink.

Susiję straipsniai