Linux: odstranitev skladišča zaklepanja /dev/random

Kot je znano, ima /dev/random, kriptografsko varen generator pseudo naključnih števil (CSPRNG), eno neprijetno težavo - blokade. V tem članku je opisano, kako jo rešiti.

V zadnjih nekaj mesecih so bile sredstva za generiranje naključnih števil v jedru rahlo predelane, vendar so se težave v tej podsistemi reševale v daljšem časovnem okviru. Cetin strogo testiranje.Najbolj novejše spremembe so bile narejene z namenom preprečiti dolgotrajno blokado sistemskega klica getrandom() ob zagonu sistema, vendar je bila vzrok zanj obnašanje blokirnega naključnega bazena. Nedavni popravek bi odstranil ta bazen in bilo je pričakovati, da se bo usmeril v glavno jedro.

Andy Lutomirski je objavil tretjo različico popravka koncem decembra. Vnaša "dve glavni semantični spremembi v naključnih API-jih Linuxa".Popravek dodaja novo zastavico GRND_INSECURE k sistemskemu klicu getrandom() (čeprav se Lutomirski nanaša na to kot getentropy(), ki je implementiran v glibc z getrandom() z določenimi zastavicami); ta zastavica prisili klic, da vedno vrne zahtevano količino podatkov, brez zagotovila, da so ti podatki naključni. Jedro se bo preprosto potrudilo, da bo dalo najboljše naključne podatke, ki jih ima v tistem trenutku. "Verjetno je najbolje, da ga imenujemo 'INSECURE' (nevaren), da preprečimo rabo tega API-ja za stvari, ki potrebujejo varnost."

Popravljeni programi tudi odstranijo blokirni bazen. V sedanjosti jedro podpira dva bazena naključnih podatkov, eden od teh ustreza /dev/random, drugi pa /dev/urandom, kot je opisano v tej članku izvedbi iz leta 2015. Blokirni bazen je bazen za /dev/random; branje iz tega napravnega datoteka bo blokirano (kar pomeni njegovo ime), dokler ne bo iz sistema zbranih 'zadostnih' entropij, da zadostimo zahtevku. Nadaljnje branje iz te datoteke je prav tako blokirano, če v bazenu ni dovolj entropij.

Odstranitev blokirnega bazena pomeni, da branje iz /dev/random deluje kot getrandom() z vrednostjo flags enako nič (in spremeni zastavico GRND_RANDOM v noop). Po inicializaciji kriptografskega generatorja naključnih števil (CRNG) branje iz /dev/random in klici getrandom(…,0) ne bodo povzročili blokiranja in vrnili bodo zahtevano količino naključnih podatkov.

Lutomirski pravi: »Menim, da je blokirni bazen Linuxa zastarel. CRNG Linux generira izhodne podatke, ki so dovolj dobri, da jih lahko uporabimo celo za generiranje ključev. Blokirni bazen ni v nobenem materialnem smislu močnejši, njegovo vzdrževanje pa zahteva veliko infrastrukture dvomljive vrednosti.«

Spremembe so bile narejene z namenom, da obstoječi programi ne bi bili resno prizadeti, in v resnici bo težav z dolgim čakanjem na stvari, kot je generiranje ključev GnuPG, manj.

»Te serije ne bi smele motiti nobenih obstoječih programov. /dev/urandom ostaja nespremenjen. /dev/random še vedno blokira takoj po zagonu, vendar je blokirana manj kot prej. getentropy() z obstoječimi zastavicami bo vrnila rezultat, ki bo za praktične namene enako primeren kot prej.«

Lutomirski je opozoril, da ostaja odprto vprašanje, ali naj jedro zagotavlja tako imenovane 'prave naključne številke', kar je do neke mere treba storiti, kot je to počelo blokirno jedro. To vidi le iz enega razloga: 'izpolnjevanje državnih standardov'. Lutomirski je predlagal, da če naj jedro to zagotovi, bi bilo potrebno to storiti preko povsem drugega vmesnika ali pa bi bilo treba to prenesti v prostor uporabnika, mu omogočiti pridobivanje neobdelanih vzorcev dogodkov, ki bi jih lahko uporabili za ustvarjanje takšnega blokirnega bazena.

Stephan Müller je predlagal, da njegov nabor popravkov Za generátor slučajnih brojeva Linux (LRNG) (trenutno je objavljena 26. verzija) može biti način pružanja pravih slučajnih brojeva za aplikacije koje to zahtevaju. LRNG "u potpunosti ispunjava zahteve 'Preporuka o izvorima entropije za generisanje slučajnih bitova' SP800-90B", što ga čini rešenjem za problem državnih standarda.
Metju Garret (Matthew Garrett) je prigovorio na termin 'pravi slučajni podaci', ističući da se odabrani uređaji u načelu mogu dovoljno precizno modelirati da ih učine predvidljivima: 'ovde ne biramo kvantne događaje.'

Miler je odgovorio da je ovaj termin potekao iz nemačkog standarda AIS 31 za opisivanje generatora slučajnih brojeva, koji samo daje rezultate 'brzinom kojom osnovni izvor buke proizvodi entropiju.'

Pored neslaganja u terminologiji, prisutnost blokirajućeg bazena, kao što sugeriraju zakrpe LRNG, jednostavno će dovesti do različitih problema, bar ako je dostupan bez privilegija.

Kao što je rekla Lutomirsky: "To ne rešava problem. Ako dva različita korisnika pokreću glupe programe, poput gnupg, oni će se jednostavno iscrpiti međusobno. Vidim da trenutno postoje dva glavna problema sa /dev/random: sklono je DoS-u (tj. iscrpljivanju resursa, malicioznom uticaju ili nečemu sličnom), i pošto su za njegovu upotrebu potrebne sve privilegije, takođe je sklono zloupotrebama. Gnupg je pogrešno rešenje, to je potpuni kolaps. Ako dodamo novi neprivilegovan interfejs koji će koristiti gnupg i slični programi, ponovo ćemo izgubiti."

Miler je napomenuo da će dodavanje getrandom() sada omogućiti GnuPG-u korišćenje ovog interfejsa, jer će obezbediti potrebnu garanciju da je bazen inicijalizovan. Na osnovu diskusija s programerom GnuPG Wernerom Kochom, Miler smatra da je garancija jedini razlog zbog kojeg GnuPG trenutno čita direktno iz /dev/random. Ali ako postoji neprivilegovan interfejs koji je podložan napadu uskraćivanja usluga (poput /dev/random), prema rečima Lutomirskog, biće pogrešno korišćen od strane nekih aplikacija.

Teodor Tsao (Theodore Yue Tak Ts’o), razvijalec podkomponente za naključna števila v Linuxu, se očitno ni več prepričan o potrebnosti blokirnega skladišča. Povedal je, da bo odstranitev tega skladišča učinkovito razbremenila idejo, da ima Linux pravi generator naključnih števil (TRNG): „to ni neumnost, saj je to ravno tisto, kar so vedno počeli *BSD."

Prav tako ga skrbi, da bi ponudba mehanizma TRNG preprosto služila kot mamilo za razvijalce aplikacij in meni, da je dejansko, glede na različne vrste strojne opreme, podprte v Linuxu, nemogoče zagotoviti TRNG v jedru. Težave ne bo rešila niti možnost dela s strojno opremo zgolj na osnovi korenskih privilegijev: „Razvijalci aplikacij trdijo, da morajo v imenu varnosti njihove aplikacije biti nameščene kot root, le tako lahko dostopate do 'resnično dobrih' naključnih števil."

Müller je vprašal, ali se je Tsao morda odpovedal implementaciji blokirnega skladišča, ki ga je sam predlagal že pred časom. Tsao je odgovoril, da namerava vzeti popravke Lutomiškega in se aktivno proti vračanju blokirnega vmesnika v jedro.

„Jedro ne more dati nobenih jamstev glede tega, ali je noise source ustrezno označen. Edina stvar, ki jo razvijalec GPG ali OpenSSL lahko pridobi, je nejasen občutek, da je TRUERANDOM 'boljši', in ker želijo večjo varnost, se bodo brez dvoma trudili, da ga uporabijo. Na neki točki bo zaklenjen, in ko ga bo kak drug pameten uporabnik (morda specialist za distribucije) vstavili v init skript in sistemi ne bodo več delovali, bodo uporabnikom ostali le pritožbe Linusu Torvaldsu.

Tsao se prav tako zavzema za to, da bi kriptografi in tisti, ki dejansko potrebujejo TRNG, imeli možnost zbirati svojo lastno entropijo v uporabniškem prostoru, da jo uporabijo po svoji presoji. Pravi, da zbiranje entropije ni proces, ki ga lahko izvaja jedro na vseh podprtih strojnih napravah, poleg tega jedro ne more oceniti količine entropije, ki jo zagotavljajo različni vir.

„Jedro ne bi smelo mešati različite izvore šuma, a sigurno ne bi smelo tvrditi da zna koliko bita entropije dobija kada pokušava da igra neku 'različitu igru entropije' na jednostavno poražavajuće arhitekturi CPU za korisničke slučajeve IOT/ugrađenih sistema, kada je sve desinkronizovano sa jednim master-generatorom, kada ne postoji nijedna instrukcija CPU za preuređivanje ili preimenovanje registra itd.“

„Može se govoriti o obezbeđivanju alata koji pokušavaju da naprave te proračune, ali takve stvari bi trebalo da se rade na opremi svakog korisnika, što je za većinu korisnika distribucije jednostavno nepraktično. Ako je to namenjeno samo kriptografima, neka to bude urađeno u njihovom korisničkom prostoru. I nemojmo pojednostavljivati GPG, OpenSSL itd., da bi svi govorili: 'želimo „pravu slučajnost“ i ne pristajemo na manje'. Može se raspravljati o tome kako obezbeđujemo interfejse kriptografima tako da mogu da dobiju potrebne informacije zahvaljujući pristupu primarnim izvorima šuma, odvojenim i imenovanim, i možda da nekim načinom izvor šuma može da se autentifikuje u biblioteci ili aplikaciji korisničkog prostora.“

Bila je mala diskusija o tome kako bi takav interfejs mogao izgledati, jer, na primer, za neka događanja mogu postojati posledice u smislu bezbednosti. Cao je ukazao na to da se kodovi skeniranja tastature (tj. pritisci tastera) mešaju u bazen kao deo prikupljanja entropije: „Premestiti ovo u korisnički prostor, čak i preko privilegovanog sistemskog poziva, bilo bi, najmanje, nepromišljeno“. Sasvim je moguće da i drugi tajming događaja mogu stvoriti neku vrstu curenja informacija kroz sporedne kanale.

Tako nastane občutek, da se dolgoletni problem podsistema naključnih števil Linux počasi rešuje. Spremembe, ki jih je ta podsistem doživel v zadnjem času, so v resnici povzročale le težave z DoS med njegovo uporabo. Zdaj pa so se pojavili učinkoviti načini za pridobitev najboljših naključnih števil, ki jih jedro lahko ponudi. Če pa še vedno potrebujemo TRNG za Linux, bo to pomanjkljivost potrebno odpraviti v prihodnosti, vendar najverjetneje to ne bo izvedeno znotraj samega jedra.

Malo reklame 🙂

Hvala što ostajete s nama. Da li vam se sviđaju naši članci? Želite li videti više zanimljivih materijala? Podržite nas tako što ćete naručiti ili preporučiti prijateljima, oblačni VPS za programere od $4.99, jedinstveni ekvivalent entry-level servera koji smo stvorili za vas: Sve što treba da znate o VPS (KVM) E5-2697 v3 (6 jezgara) 10GB DDR4 480GB SSD 1Gbps od $19 ili kako pravilno deliti server? (options available with RAID1 and RAID10, up to 24 cores and up to 40GB DDR4).

Dell R730xd je dvostruko jeftiniji u Equinix Tier IV data centru u Amsterdamu? Only with us 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB from $199 in the Netherlands! Dell R420 — 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — from $99! Read about how to build a corporate-class infrastructure using Dell R730xd E5-2650 v4 servers costing 9000 euros for pennies?

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster