Kako je DNSCrypt riješio problem isteklih certifikata uvođenjem perioda važenja od 24 sata

Kako je DNSCrypt riješio problem isteklih certifikata uvođenjem perioda važenja od 24 sata

U prošlosti su certifikati često istekli jer su se morali ručno obnavljati. Ljudi su to jednostavno zaboravili da urade. S pojavom Let's Encrypt i automatske procedure ažuriranja, čini se da bi problem trebao biti riješen. Ali nedavno Firefox priča pokazuje da je, zapravo, još uvijek relevantan. Nažalost, certifikati i dalje ističu.

U slučaju da ste propustili priču, u ponoć 4. maja 2019. godine, skoro sve Firefox ekstenzije su iznenada prestale da rade.

Kako se ispostavilo, do masovnog kvara došlo je zbog činjenice da je Mozilla sertifikat je istekao, koji je korišten za potpisivanje ekstenzija. Stoga su označeni kao "nevažeći" i nisu verifikovani (tehnički detalji). Na forumima, kao zaobilazno rješenje, preporučeno je onemogućiti provjeru potpisa ekstenzije u o: konfiguraciji ili mijenjanje sistemskog sata.

Mozilla je brzo objavila zakrpu za Firefox 66.0.4, koja rješava problem sa nevažećim certifikatom, a sve ekstenzije se vraćaju u normalu. Programeri preporučuju da ga instalirate i ne koristiti nema zaobilaznih rješenja za zaobilaženje provjere potpisa jer mogu biti u sukobu sa zakrpom.

Međutim, ova priča još jednom pokazuje da je istek certifikata i danas gorući problem.

U tom smislu, zanimljivo je pogledati prilično originalan način na koji su se programeri protokola nosili sa ovim zadatkom DNSCrypt. Njihovo rješenje se može podijeliti na dva dijela. Prvo, to su kratkoročni certifikati. Drugo, upozoravanje korisnika o isteku dugoročnih.

DNSCrypt

Kako je DNSCrypt riješio problem isteklih certifikata uvođenjem perioda važenja od 24 sataDNSCrypt je DNS protokol za šifriranje prometa. Štiti DNS komunikaciju od presretanja i MiTM, a također vam omogućava da zaobiđete blokiranje na nivou DNS upita.

Protokol obavija DNS saobraćaj između klijenta i servera u kriptografsku konstrukciju, koja radi preko UDP i TCP transportnih protokola. Da bi ga koristili, i klijent i DNS rezolver moraju podržavati DNSCrypt. Na primjer, od marta 2016. godine omogućen je na njegovim DNS serverima i u Yandex pretraživaču. Nekoliko drugih provajdera je također najavilo podršku, uključujući Google i Cloudflare. Nažalost, nema ih mnogo (152 javna DNS servera su navedena na zvaničnom sajtu). Ali program dnscrypt-proxy može se instalirati ručno na Linux, Windows i MacOS klijente. Postoje također implementacije servera.

Kako je DNSCrypt riješio problem isteklih certifikata uvođenjem perioda važenja od 24 sata

Kako funkcioniše DNSCrypt? Ukratko, klijent uzima javni ključ odabranog provajdera i koristi ga za provjeru svojih certifikata. Kratkoročni javni ključevi za sesiju i identifikator paketa šifri su već tamo. Klijenti se podstiču da generišu novi ključ za svaki zahtev, a serveri se podstiču da promene ključeve svaka 24 sata. Prilikom razmjene ključeva koristi se algoritam X25519, za potpisivanje - EdDSA, za blok šifriranje - XSalsa20-Poly1305 ili XChaCha20-Poly1305.

Jedan od programera protokola Frank Denis on pišeda je automatska zamjena svaka 24 sata riješila problem isteklih certifikata. U principu, referentni klijent dnscrypt-proxy prihvata sertifikate sa bilo kojim periodom važenja, ali izdaje upozorenje "Period dnscrypt-proxy ključa za ovaj server je predugačak" ako je validan duže od 24 sata. Istovremeno je objavljena Docker slika u kojoj je implementirana brza promjena ključeva (i certifikata).

Prvo, izuzetno je korisno za sigurnost: ako je server kompromitovan ili ključ procuri, jučerašnji promet se ne može dešifrirati. Ključ je već promijenjen. Ovo će vjerovatno predstavljati problem za implementaciju zakona Yarovaya, koji prisiljava provajdere da pohranjuju sav promet, uključujući i šifrirani promet. Implikacija je da se kasnije može dešifrirati ako je potrebno traženjem ključa sa stranice. Ali u ovom slučaju, stranica to jednostavno ne može pružiti, jer koristi kratkoročne ključeve, brišući stare.

Ali što je najvažnije, piše Denis, kratkoročni ključevi prisiljavaju servere da postave automatizaciju od prvog dana. Ako se server poveže na mrežu, a skripte za promjenu ključa nisu konfigurirane ili ne rade, to će se odmah otkriti.

Kada automatizacija mijenja ključeve svakih nekoliko godina, na nju se ne može pouzdati, a ljudi mogu zaboraviti na istek certifikata. Ako ključeve mijenjate svakodnevno, to će se odmah otkriti.

Istovremeno, ako je automatizacija normalno konfigurirana, onda nije važno koliko često se ključevi mijenjaju: svake godine, svake četvrtine ili tri puta dnevno. Ako sve radi duže od 24 sata, radit će zauvijek, piše Frank Denis. Prema njegovim riječima, preporuka dnevne rotacije ključeva u drugoj verziji protokola, zajedno sa gotovim Docker imidžom koji to implementira, efektivno je smanjio broj servera sa isteklim certifikatima, a istovremeno poboljšao sigurnost.

Međutim, neki provajderi su ipak odlučili, iz nekih tehničkih razloga, postaviti period važenja certifikata na više od 24 sata. Ovaj problem je u velikoj mjeri riješen s nekoliko linija koda u dnscrypt-proxy: korisnici primaju informativno upozorenje 30 dana prije isteka certifikata, drugu poruku s višim nivoom ozbiljnosti 7 dana prije isteka i kritičnu poruku ako certifikat ima preostalog rok važenja manje od 24 sata. Ovo se odnosi samo na sertifikate koji u početku imaju dug period važenja.

Ove poruke daju korisnicima mogućnost da obaveste DNS operatere o predstojećem isteku sertifikata pre nego što bude prekasno.

Možda kada bi svi korisnici Firefoxa dobili takvu poruku, onda bi neko vjerovatno obavijestio programere i oni ne bi dozvolili da certifikat istekne. “Ne sjećam se niti jednog DNSCrypt servera na listi javnih DNS servera kojem je istekao certifikat u posljednje dvije ili tri godine”, piše Frank Denis. U svakom slučaju, vjerojatno je bolje prvo upozoriti korisnike nego onemogućiti ekstenzije bez upozorenja.

Kako je DNSCrypt riješio problem isteklih certifikata uvođenjem perioda važenja od 24 sata


izvor: www.habr.com

Dodajte komentar