Linux: ta bort blockering av poolen /dev/random

Som bekant har /dev/random, en kryptografiskt sĂ€ker pseudorandom number generator (CSPRNG), ett olyckligt problem – blockeringar. I denna artikel diskuteras hur man kan lösa detta problem.

Under de senaste mÄnaderna har random number generation i kÀrnan blivit nÄgot omarbetad, men problem i det hÀr delsystemet har hanterats under en lÀngre tid. Tidsramar.De senaste Àndringarna gjordes för att förhindra lÄngvarig blockering av systemanropet getrandom() vid systemstart, men orsaken till detta var beteendet hos den blockerande random poolen. Den senaste patchen skulle ta bort denna pool, och det förvÀntades att den skulle gÄ vidare till den primÀra kÀrnan.

Andy Lutomirski publicerade den tredje versionen av patchen i slutet av december. Den gör »tvÄ huvudsakliga semantiska Àndringar i Linux random API«.Patchen lÀgger till ett nytt flagg GRND_INSECURE till systemanropet getrandom() (Àven om Lutomirski refererar till det som getentropy(), vilket implementeras i glibc med getrandom() med fasta flaggor); detta flagg fÄr anropet att alltid returnera det begÀrda antalet data, men utan garanti för att dessa data Àr slumpmÀssiga. KÀrnan kommer bara att göra sitt bÀsta för att ge den bÀsta slumpmÀssiga data som den har för tillfÀllet. »Förmodligen det bÀsta man kan göra Àr att kalla det 'INSECURE' ('osÀkert') för att förhindra att denna API anvÀnds för saker som krÀver sÀkerhet.«

Patcharna tar ocksÄ bort den blockerande poolen. För nÀrvarande stödjer kÀrnan tvÄ pooler av slumpmÀssiga data, varav en motsvarar /dev/random och den andra /dev/urandom, som beskrivs i denna artikeln frÄn 2015. Den blockerande poolen Àr en pool för /dev/random; lÀsning för denna enhet kommer att blockeras (detta antyder dess namn) tills tillrÀcklig entropi har samlats in frÄn systemet för att tillfredsstÀlla begÀran. Ytterligare lÀsningar frÄn denna fil blockeras ocksÄ om det saknas tillrÀcklig entropi i poolen.

Borttagning av blockeringspool innebÀr att lÀsning frÄn /dev/random beter sig som getrandom() med flaggor som Àr noll (och omvandlar flaggan GRND_RANDOM till noop). Efter initiering av den kryptografiska slumpgeneratorn (CRNG) kommer lÀsning frÄn /dev/random och anrop av getrandom(
,0) inte att blockera och kommer att returnera det begÀrda antalet slumpmÀssiga data.

Lutomirski sÀger: «Jag anser att Linux blockeringspool har blivit förÄldrad. Linux CRNG genererar utdata som Àr tillrÀckligt bra för att anvÀnda till och med för att generera nycklar. Blockeringspoolen Àr inte starkare pÄ nÄgot materiellt sÀtt, och för att upprÀtthÄlla den krÀvs mycket infrastruktur av tveksamt vÀrde».

Ändringar har gjorts med sikte pĂ„ att befintliga program verkligen inte ska skadas, och faktiskt kommer problemen med lĂ„ng vĂ€ntan för saker som GnuPG-nyckelgenerering att minska.

«Dessa serier ska inte störa nÄgra befintliga program. /dev/urandom förblir oförÀndrat. /dev/random blockeras fortfarande omedelbart efter start, men blockeras mindre Àn tidigare. getentropy() med befintliga flaggor kommer att returnera ett resultat som kommer att vara lika lÀmpligt för praktiska ÀndamÄl som tidigare».

Lutomirski pÄpekade att frÄgan om huruvida kÀrnan ska tillhandahÄlla sÄ kallade «Àkta slumpmÀssiga tal» fortfarande Àr öppen, vilket delvis var kÀrnans syfte att göra. Han ser bara en anledning till detta: «efterlevnad av statliga standarder». Lutomirski föreslog att om kÀrnan ska tillhandahÄlla detta, sÄ bör det göras genom ett helt annat grÀnssnitt eller flyttas till anvÀndarutrymmet, vilket ger anvÀndaren möjlighet att extrahera rÄa hÀndelseprov som kan anvÀndas för att skapa en sÄdan blockeringspool.

Stephan MĂŒller föreslog att hans uppsĂ€ttning patchar För Linuxs slumpgenerator (LRNG) (för nĂ€rvarande version 26) kan vara ett sĂ€tt att tillhandahĂ„lla verkliga slumpmĂ€ssiga nummer för applikationer som behöver det. LRNG "uppfyller fullt ut kraven i 'Riktlinjer för entropikĂ€llor som anvĂ€nds för att generera slumpmĂ€ssiga bitar' SP800-90B", vilket gör det till en lösning pĂ„ statliga standardproblem.
Matthew Garrett motsatte sig termen "verkliga slumpmÀssiga data", och noterade att valda enheter i princip kan modelleras tillrÀckligt noggrant för att bli förutsÀgbara: "vi drar inte frÄn kvantiska hÀndelser hÀr."

MĂŒller svarade att termen kommer frĂ„n den tyska standarden AIS 31 för att beskriva en slumpgenerator som bara ger resultat "med samma hastighet som den grundlĂ€ggande brusets kĂ€lla producerar entropi."

Bortsett frÄn terminologiska oenigheter, kommer nÀrvaron av en lÄsningpool, som föreslagits av LRNG-patchar, bara att leda till olika problem, Ätminstone om den kan nÄs utan privilegier.

Som Lutomirski sa: "Det löser inte problemet. Om tvÄ olika anvÀndare kör dumma program, som gnupg, kommer de bara att utarma varandra. Jag ser att det just nu finns tvÄ huvudproblem med /dev/random: det Àr benÀget för DoS (dvs. resursutarmning, skadliga effekter eller nÄgot liknande), och eftersom inga privilegier krÀvs för att anvÀnda det Àr det ocksÄ benÀget för missbruk. Gnupg Àr felaktigt, det Àr en fullstÀndig kollaps. Om vi lÀgger till ett nytt icke-privilegierat grÀnssnitt som anvÀnds av gnupg och liknande program, kommer vi att förlora igen."

MĂŒller noterade att tillĂ€gget av getrandom() nu gör att GnuPG kan anvĂ€nda detta grĂ€nssnitt, eftersom det ger den nödvĂ€ndiga garantin för att poolen har initierats. Baserat pĂ„ diskussioner med GnuPG-utvecklaren Werner Koch, anser MĂŒller att garantin Ă€r den enda anledningen till att GnuPG för nĂ€rvarande lĂ€ser direkt frĂ„n /dev/random. Men om det finns ett icke-privilegierat grĂ€nssnitt som Ă€r sĂ„rbart för tjĂ€nsteavbrott (som dagens /dev/random), sĂ„ kommer det enligt Lutomirski att anvĂ€ndas felaktigt av vissa applikationer.

Teodor Tsao (Theodore Yue Tak Ts’o), utvecklare av Linux underhĂ„llssystem för slumpmĂ€ssiga tal, verkar ha Ă€ndrat Ă„sikt om nödvĂ€ndigheten av en blockeringspool. Han sa att borttagningen av denna pool skulle effektivt ta bort idĂ©n att Linux har en riktig slumpgenerator (TRNG): “Det hĂ€r Ă€r inte meningslöst, eftersom det Ă€r exakt vad *BSD alltid har gjort.”

Han Ă€r ocksĂ„ orolig för att tillhandahĂ„llandet av TRNG-mekanismer bara kommer att fungera som en lockbete för programvaruutvecklare och anser att det Ă€r omöjligt att garantera TRNG i kĂ€rnan med tanke pĂ„ de olika typer av hĂ„rdvara som stöds av Linux. Problemet löses inte ens av möjligheten att arbeta med hĂ„rdvara endast pĂ„ grundval av root-rĂ€ttigheter: “Programvaruutvecklare anger att deras program ska installeras som root av sĂ€kerhetsskĂ€l, eftersom det Ă€r det enda sĂ€ttet att fĂ„ tillgĂ„ng till ‘verkligt bra’ slumpmĂ€ssiga tal.”

MĂŒller frĂ„gade om Tsao hade dragit sig tillbaka frĂ„n att implementera blockeringspoolen som han sjĂ€lv föreslog för lĂ€nge sedan. Tsao svarade att han planerar att ta patcharna frĂ„n Lutomirsky och Ă€r aktivt emot att lĂ€gga till blockerande grĂ€nssnitt tillbaka i kĂ€rnan.

“KĂ€rnan kan inte ge nĂ„gra garantier om huruvida brusets kĂ€lla har karaktĂ€riserats korrekt. Det enda en utvecklare av GPG eller OpenSSL kan fĂ„ Ă€r en vag kĂ€nsla av att TRUERANDOM Ă€r 'bĂ€ttre', och eftersom de vill ha mer sĂ€kerhet, kommer de utan tvekan att försöka anvĂ€nda den. Vid en viss punkt kommer det att blockeras, och nĂ€r nĂ„gon annan smart anvĂ€ndare (kanske en distributionsspecialist) sĂ€tter in det i init-skriptet och systemen slutar fungera, Ă„terstĂ„r det för anvĂ€ndarna att klaga till Linus Torvalds sjĂ€lv.”

Tsao föresprÄkar ocksÄ att kryptografer och de som verkligen behöver TRNG ges möjlighet att samla in sin egen entropi i anvÀndarrummet för att anvÀnda den efter eget gottfinnande. Han sÀger att insamling av entropi inte Àr en process som kÀrnan kan utföra pÄ alla typer av stöd av hÄrdvara, dessutom kan kÀrnan sjÀlv inte bedöma mÀngden entropi som tillhandahÄlls av olika kÀllor.

KÀrnan bör inte blanda olika brus kÀllor, och den bör sjÀlvklart inte försöka hÀvda att den vet hur mÄnga bitar entropi den fÄr nÀr den försöker spela nÄgot "ryckigt entropi spel" pÄ en oerhört enkel CPU-arkitektur för anvÀndartillÀmpningar inom IOT/Embedded, nÀr allt Àr ur synk med en enda master-generator, nÀr det inte finns nÄgra CPU-instruktioner för att omordna eller omdöpa register, etc.

Man kan diskutera tillhandahÄllandet av verktyg som försöker göra dessa berÀkningar, men sÄdana saker bör utföras pÄ varje anvÀndares utrustning, nÄgot som för de flesta anvÀndare av distributionen helt enkelt Àr opraktiskt. Om det dock endast Àr avsett för kryptografer, lÄt det ske i deras anvÀndarrum. Och lÄt oss inte förenkla GPG, OpenSSL, etc., sÄ att alla sÀger: "vi vill ha "Àkthet av slumpmÀssighet" och accepterar inte mindre." Man kan diskutera hur vi tillhandahÄller grÀnssnitt för kryptografer sÄ att de kan fÄ den information de behöver genom Ätkomst till primÀra brus kÀlla, Ätskilda och namngivna, och kanske kommer nÄgon gÄng brus kÀllan att kunna autentisera sig i biblioteket eller applikationen i anvÀndarrummet.

Det förekom en liten diskussion om hur ett sÄdant grÀnssnitt skulle kunna se ut, eftersom vissa evenemang kan ha sÀkerhetskonsekvenser. Cao pÄpekade att tangentbordsskanningskoder (dvs. tangenttryckningar) blandas i en pool som en del av insamlingen av entropi: "Att flytta detta till anvÀndarrummet, Àven genom ett privilegierat systemanrop, skulle vara, minst sagt, omdömeslöst." Det Àr fullt möjligt att andra tidpunkter för hÀndelser kan skapa nÄgon form av informationlÀckage genom sidokanaler.

DÀrmed vÀcks kÀnslan av att det lÀngevarande problemet med Linux slumpgeneratorer Àr pÄ vÀg att lösas. De förÀndringar som slumpgeneratorerna har genomgÄtt pÄ sistone har faktiskt lett till DoS-problem under deras anvÀndning. Nu har effektiva sÀtt för att fÄ de bÀsta slumpmÀssiga siffror som kÀrnan kan erbjuda dykt upp. Om TRNG fortfarande önskas för Linux, mÄste denna brist ÄtgÀrdas i framtiden, men troligtvis kommer detta inte att ske inom sjÀlva kÀrnan.

Lite reklam 🙂

Tack för att ni stannar kvar hos oss. Gillar ni vÄra artiklar? Vill ni se fler intressanta material? Stöd oss genom att göra en bestÀllning eller rekommendera oss till era vÀnner, moln-VPS för utvecklare frÄn $4,99, en unik motsvarighet till entry-level servrar som vi har skapat för er: Allt om VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps frÄn $19 eller hur man korrekt delar en server? (alternativ med RAID1 och RAID10 finns tillgÀngliga, upp till 24 kÀrnor och upp till 40GB DDR4).

Dell R730xd Ă€r tvĂ„ gĂ„nger billigare i datacentret Equinix Tier IV i Amsterdam? Bara hos oss 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB frĂ„n $199 i NederlĂ€nderna! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — frĂ„n $99! LĂ€s om Hur man bygger en företagsinfrastruktur med Dell R730xd E5-2650 v4-servrar som kostar 9000 euro för en brĂ„kdel?

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster