Linux: bloÄ·Ä“Å”anas pÅ«la /dev/random noņemÅ”ana

Ir zināms, ka /dev/random, kriptogrāfiski droÅ”am pseidogadÄ«juma skaitļu Ä£eneratoram (CSPRNG), ir viena kaitinoÅ”a problēma: bloÄ·Ä“Å”ana. Å ajā rakstā ir paskaidrots, kā to atrisināt.

Dažu pēdējo mēneÅ”u laikā nejauÅ”o skaitļu Ä£enerÄ“Å”anas iespējas kodolā ir nedaudz pārveidotas, taču problēmas Å”ajā apakÅ”sistēmā ir atrisinātas plaŔākas darbÄ«bas laikā. laika posms. Visvairāk pēdējās izmaiņas tika veikti, lai novērstu sistēmas izsaukuma getrandom() bloÄ·Ä“Å”anu uz ilgu laiku, kad sistēma tiek sāknēta, taču iemesls tam bija nejauŔā pÅ«la bloÄ·Ä“Å”anas darbÄ«ba. Nesenais ielāps bÅ«tu noņēmis Å”o baseinu, un bÅ«tu bijis paredzēts, ka tas virzÄ«sies uz galveno kodolu.

Endijs Lutomirskis decembra beigās publicēja treÅ”o ielāpa versiju. ViņŔ sniedz ieguldÄ«jumu "divas lielas semantiskās izmaiņas nejauŔās Linux API". Ielāps pievieno jaunu GRND_INSECURE karogu getrandom() sistēmas izsaukumam (lai gan Lutomirskis to apzÄ«mē kā getentropy(), kas ir ieviests glibc, izmantojot getrandom() ar fiksētiem karodziņiem); Å”is karodziņŔ liek zvanam vienmēr atgriezt pieprasÄ«to datu apjomu, taču negarantējot, ka dati ir nejauÅ”i. Kodols vienkārÅ”i darÄ«s visu iespējamo, lai iegÅ«tu vislabākos izlases datus, kas tam ir konkrētajā laikā. "Iespējams, vislabākais, ko darÄ«t, ir nosaukt to par" NEDROÅ U (nedroÅ”a), lai novērstu Ŕīs API izmantoÅ”anu lietām, kurām nepiecieÅ”ama droŔība."

Plāksteri arÄ« noņem bloķējoÅ”o baseinu. Kodols paÅ”laik uztur divus nejauÅ”us datu kopumus, no kuriem viens atbilst /dev/random un otrs /dev/urandom, kā aprakstÄ«ts Å”ajā raksts 2015. gads. BloÄ·Ä“Å”anas pÅ«ls ir /dev/random baseins; Ŕīs ierÄ«ces nolasÄ«jumi tiks bloķēti (kas nozÄ«mē tās nosaukumu), lÄ«dz no sistēmas tiks savākts "pietiekami daudz" entropijas, lai izpildÄ«tu pieprasÄ«jumu. Ja pÅ«lā nav pietiekami daudz entropijas, tiek bloķēta arÄ« turpmāka Ŕī faila lasÄ«Å”ana.

BloÄ·Ä“Å”anas pÅ«la noņemÅ”ana nozÄ«mē, ka lasÄ«Å”ana no /dev/random darbojas kā getrandom() ar karodziņiem, kas iestatÄ«ti uz nulli (un pārvērÅ” karogu GRND_RANDOM par noop). Kad kriptogrāfiskais nejauÅ”o skaitļu Ä£enerators (CRNG) ir inicializēts, lasÄ«Å”ana no /dev/random un izsaukumi uz getrandom(...,0) netiks bloķēti un atgriezÄ«s pieprasÄ«to nejauÅ”o datu apjomu.

Lutomirskis saka: ā€œEs uzskatu, ka Linux bloÄ·Ä“Å”anas pÅ«ls ir novecojis. CRNG Linux Ä£enerē izvadi, kas ir pietiekami laba, lai to izmantotu pat atslēgu Ä£enerÄ“Å”anai. BloķējoÅ”ais baseins nav spēcÄ«gāks nekādā materiālā nozÄ«mē, un tā atbalstam ir nepiecieÅ”ama liela apÅ”aubāmas vērtÄ«bas infrastruktÅ«ra.

Izmaiņas tika veiktas ar mērÄ·i nodroÅ”ināt, lai esoŔās programmas patieŔām netiktu ietekmētas, un faktiski bÅ«tu mazāk problēmu, ilgstoÅ”i gaidot tādas lietas kā GnuPG atslēgu Ä£enerÄ“Å”ana.

"Å Ä«s epizodes nedrÄ«kst traucēt esoŔās programmas. /dev/urandom paliek nemainÄ«gs. /dev/random joprojām bloķē uzreiz pēc sāknÄ“Å”anas, taču tas bloķē mazāk nekā iepriekÅ”. getentropy() ar esoÅ”ajiem karodziņiem atgriezÄ«s rezultātu, kas ir tikpat piemērots praktiskiem mērÄ·iem kā iepriekÅ”."

Lutomirskis atzÄ«mēja, ka joprojām ir atklāts jautājums, vai kodolam ir jānodroÅ”ina tā sauktie ā€œpatiesie nejauÅ”ie skaitļiā€, kas zināmā mērā bija jādara bloķējoÅ”ajam kodolam. ViņŔ tam saskata tikai vienu iemeslu: ā€œatbilstÄ«ba valdÄ«bas standartiemā€. Lutomirskis ierosināja, ka, ja kodols to nodroÅ”inātu, tas bÅ«tu jādara, izmantojot pilnÄ«gi citu saskarni, vai arÄ« tas ir jāpārvieto lietotāja telpā, ļaujot lietotājam izgÅ«t neapstrādātus notikumu paraugus, kurus varētu izmantot Ŕāda bloÄ·Ä“Å”anas pÅ«la izveidoÅ”anai.

Stephan MĆ¼ller ierosināja, ka viņa komplekts ielāpus Linux Random Number Generator (LRNG) (paÅ”laik izlaista versija 26) varētu bÅ«t veids, kā nodroÅ”ināt patiesus nejauÅ”us skaitļus lietojumprogrammām, kurām tas ir nepiecieÅ”ams. LRNG ā€œpilnÄ«bā atbilst SP800-90B vadlÄ«nijām par entropijas avotiem, ko izmanto nejauÅ”u bitu Ä£enerÄ“Å”anaiā€, padarot to par risinājumu valdÄ«bas standartu problēmai.
MetjÅ« Garets iebilda pret terminu ā€œpatiesi nejauÅ”i datiā€, norādot, ka atlasÄ«tās ierÄ«ces principā var pietiekami precÄ«zi modelēt, lai padarÄ«tu tās paredzamas: ā€œÅ”eit mēs neņemam kvantu notikumus.

MĆ¼ller atbildēja, ka termins nāk no Vācijas standarta AIS 31, lai aprakstÄ«tu nejauÅ”u skaitļu Ä£eneratoru, kas tikai rada rezultātu "tādā paŔā ātrumā, kā pamatā esoÅ”ais trokŔņa avots rada entropiju".

Ja neskaita terminoloÄ£ijas atŔķirÄ«bas, LRNG ielāpu ieteiktais bloÄ·Ä“Å”anas baseins vienkārÅ”i radÄ«s dažādas problēmas, vismaz tad, ja tam piekļūst bez privilēģijām.

Kā teica Lutomirskis: "Tas neatrisina problēmu. Ja divi dažādi lietotāji palaiž tādas muļķīgas programmas kā gnupg, viņi viens otru vienkārÅ”i iztukÅ”o. Es redzu, ka paÅ”laik ir divas galvenās problēmas ar /dev/random: tas ir pakļauts DoS (t.i., resursu izsÄ«kÅ”anai, ļaunprātÄ«gai ietekmei vai tamlÄ«dzÄ«gam), un, tā kā tā izmantoÅ”anai nav vajadzÄ«gas nekādas privilēģijas, tas ir pakļauts arÄ« ļaunprātÄ«gai izmantoÅ”anai. Gnupg kļūdās, tas ir pilnÄ«gs sabrukums. Ja pievienosim jaunu nepievilcÄ«gu saskarni, ko izmantos gnupg un lÄ«dzÄ«gas programmas, mēs atkal zaudēsim.

Muellers atzÄ«mēja, ka getrandom() pievienoÅ”ana tagad ļaus GnuPG izmantot Å”o saskarni, jo tas nodroÅ”inās nepiecieÅ”amo garantiju, ka pÅ«ls ir inicializēts. Pamatojoties uz diskusijām ar GnuPG izstrādātāju Verneru Kohu, Muellers uzskata, ka garantija ir vienÄ«gais iemesls, kāpēc GnuPG paÅ”laik lasa tieÅ”i no /dev/random. Bet, ja ir nepievilcÄ«gs interfeiss, kas ir pakļauts pakalpojuma atteikumam (kā Å”odien ir /dev/random), Lutomirskis apgalvo, ka dažas lietojumprogrammas to izmantos ļaunprātÄ«gi.

Teodors Jue Tak Tso, Linux nejauÅ”o skaitļu apakÅ”sistēmas izstrādātājs, Ŕķiet, ir mainÄ«jis savas domas par bloÄ·Ä“Å”anas pÅ«la nepiecieÅ”amÄ«bu. ViņŔ teica, ka Ŕī pÅ«la noņemÅ”ana efektÄ«vi atbrÄ«votos no idejas, ka Linux ir patiess nejauÅ”o skaitļu Ä£enerators (TRNG): "tas nav muļķības, jo tieÅ”i to *BSD vienmēr ir darÄ«jis."

ViņŔ arÄ« pauž bažas, ka TRNG mehānisma nodroÅ”ināŔana vienkārÅ”i kalpos kā ēsma lietojumprogrammu izstrādātājiem, un uzskata, ka patiesÄ«bā, ņemot vērā dažādus Linux atbalstÄ«tos aparatÅ«ras veidus, nav iespējams garantēt TRNG kodolā. Pat spēja strādāt ar aprÄ«kojumu tikai ar root tiesÄ«bām neatrisinās problēmu: "Lietojumprogrammu izstrādātāji droŔības nolÅ«kos norāda, ka viņu lietojumprogramma ir jāinstalē kā root, lai tas bÅ«tu vienÄ«gais veids, kā jÅ«s varat piekļūt" patieŔām labiem" nejauÅ”ajiem skaitļiem."

Muellers jautāja, vai Cao ir atteicies no bloÄ·Ä“Å”anas baseina ievieÅ”anas, ko viņŔ pats jau sen bija ierosinājis. Cao atbildēja, ka plāno izmantot Lutomirsky ielāpus un aktÄ«vi iebilst pret bloÄ·Ä“Å”anas interfeisa pievienoÅ”anu atpakaļ kodolam.

"Kodols nevar sniegt nekādas garantijas par to, vai trokŔņa avots ir pareizi raksturots. VienÄ«gais, ko var iegÅ«t GPG vai OpenSSL izstrādātājs, ir neskaidra sajÅ«ta, ka TRUERANDOM ir "labāks", un, tā kā viņi vēlas lielāku droŔību, viņi, bez Å”aubām, mēģinās to izmantot. Kādā brÄ«dÄ« tas tiks bloķēts, un, kad kāds cits gudrs lietotājs (iespējams, izplatÄ«Å”anas speciālists) to ievietos init skriptā un sistēmas pārtrauks darboties, lietotājiem bÅ«s jāsÅ«dzas tikai paÅ”am Linusam Torvaldam.

Cao arÄ« iestājas par to, lai kriptogrāfiem un tiem, kam patieŔām ir nepiecieÅ”ams TRNG, ir jādod veids, kā iegÅ«t savu entropiju lietotāja telpā, lai to izmantotu pēc saviem ieskatiem. ViņŔ saka, ka entropijas apkopoÅ”ana nav process, ko kodols var veikt visās dažādajās aparatÅ«rā, ko tas atbalsta, kā arÄ« pats kodols nevar novērtēt entropijas apjomu, ko nodroÅ”ina dažādi avoti.

Kodolam nevajadzētu jaukt kopā dažādus trokŔņu avotus, un tam noteikti nevajadzētu mēģināt apgalvot, cik daudz entropijas bitu tas iegÅ«st, mēģinot spēlēt kaut kādu "satricinoÅ”u entropijas spēli" uz nežēlÄ«gi vienkārŔā CPU. arhitektÅ«ra patērētāju lietotājiem. IOT/iegultie gadÄ«jumi, kad viss nav sinhronizēts ar vienu galveno oscilatoru, kur nav CPU norādÄ«jumu pārkārtot vai pārdēvēt reÄ£istru utt.

ā€œVar runāt par rÄ«ku nodroÅ”ināŔanu, kas mēģina veikt Å”os aprēķinus, taču Ŕādas lietas ir jādara katra lietotāja aparatÅ«rā, kas vairumam izplatÄ«Å”anas lietotāju vienkārÅ”i nav praktiski. Ja tas ir paredzēts tikai kriptogrāfiem, tad lai tas tiek darÄ«ts viņu lietotāja telpā. Un nevienkārÅ”osim GPG, OpenSSL u.c., lai visi teiktu "mēs gribam "patiesu nejauŔību" un nesamierināsimies ar mazāku. Mēs varam runāt par to, kā mēs nodroÅ”inām saskarnes kriptogrāfiem, lai viņi varētu iegÅ«t nepiecieÅ”amo informāciju, piekļūstot primārajiem trokŔņu avotiem, kas ir atdalÄ«ti un nosaukti, un varbÅ«t kaut kādā veidā trokŔņa avots var autentificēt sevi bibliotēkā vai lietotāja telpas lietojumprogrammā.

Bija dažas diskusijas par to, kā Ŕāds interfeiss varētu izskatÄ«ties, jo, piemēram, daži notikumi var ietekmēt droŔību. Cao atzÄ«mēja, ka tastatÅ«ras skenÄ“Å”anas kodi (t.i., taustiņsitieni) tiek sajaukti pÅ«lā kā daļa no entropijas vākÅ”anas: "Ievest to lietotāja telpā, pat izmantojot priviliģētu sistēmas zvanu, bÅ«tu maigi izsakoties neprātÄ«gi." PilnÄ«gi iespējams, ka citi notikumu laiki var radÄ«t kāda veida informācijas noplÅ«di pa sānu kanāliem.

Tātad Ŕķiet, ka ilgstoÅ”a problēma ar Linux nejauÅ”o skaitļu apakÅ”sistēmu ir ceļā uz risinājumu. Izmaiņas, kas nesen tika veiktas nejauÅ”o skaitļu apakÅ”sistēmā, faktiski ir izraisÄ«juÅ”as tikai DoS problēmas tās lietoÅ”anas laikā. Tagad ir efektÄ«vi veidi, kā iegÅ«t labākos nejauÅ”os skaitļus, ko kodols var nodroÅ”ināt. Ja TRNG joprojām ir vēlams operētājsistēmā Linux, tad Ŕī kļūda bÅ«s jānovērÅ” nākotnē, taču, visticamāk, tas netiks darÄ«ts paŔā kodolā.

Dažas reklāmas šŸ™‚

Paldies, ka palikāt kopā ar mums. Vai jums patīk mūsu raksti? Vai vēlaties redzēt interesantāku saturu? Atbalsti mūs, pasūtot vai iesakot draugiem, mākoņa VPS izstrādātājiem no 4.99 USD, unikāls sākuma līmeņa serveru analogs, ko mēs jums izgudrojām: Visa patiesība par VPS (KVM) E5-2697 v3 (6 kodoli) 10GB DDR4 480GB SSD 1Gbps no 19$ vai kā koplietot serveri? (pieejams ar RAID1 un RAID10, līdz 24 kodoliem un līdz 40 GB DDR4).

Dell R730xd 2x lētāk Equinix Tier IV datu centrā Amsterdamā? Tikai Å”eit 2x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV no 199$ NÄ«derlandē! Dell R420 ā€” 2x E5-2430 2.2 GHz 6C 128 GB DDR3 2x960 GB SSD 1 Gbps 100 TB ā€” no 99 USD! LasÄ«t par Kā izveidot infrastruktÅ«ras uzņēmumu klase ar Dell R730xd E5-2650 v4 serveru izmantoÅ”anu 9000 eiro par santÄ«mu?

Avots: www.habr.com

Pievieno komentāru