RAND_bytes falla f'OpenVPN: żball tal-librerija jew nod nieqes
Ħsara ta' RAND_bytes tista' tfisser sors ta' entropija miċħud jew nod moħbi minn jail. Aqra l-imfietaħ tal-iżbalji u l-veduta tal-proċess qabel ma toħloq apparati.
RAND_bytes() failed hija dikjarazzjoni dwar primittiva lokali waħda, mhux dwar il-kont, iċ-ċavetta maqsuma minn qabel jew il-port remot. Żewġ ħsarat differenti ħafna jipproduċu l-istess linja u jħallu traċċi differenti. Waħda hija backend kriptografika li tirrifjuta li toħroġ bytes; l-oħra hija proċess li ma jilħaqx is-sors ta' entropija li l-kodiċi tiegħu nbena għalih. Biex tifredhom hemm bżonn qari wieħed tal-imfietaħ tal-iżbalji u ħarsa waħda lejn il-veduta tas-sistema tal-fajls tal-proċess magħluq, u dak il-kontroll imiss qabel ma jinħoloq xejn taħt /dev.
X'jiddistingwi l-valur tar-ritorn
Il-kuntratt dokumentat jifred tliet eżiti, mhux tnejn: 1 għas-suċċess, -1 meta l-metodu RAND mgħobbi ma jappoġġjax it-talba, u 0 għal ħsarat oħra, bil-ispjegazzjoni titħalla fl-imfietaħ tal-iżbalji. Ir-referenza għal RAND_bytes żżid punt li huwa faċli taqbeż: il-ġeneratur awtomatiku jieħu ż-żerriegħa mis-sistema operattiva fuq pjattaformi appoġġjati, u meta dik iż-żerriegħa tfalli jibqa' fi stat ta' żball minflok ma jrodd lura bytes prevedibbli.
Waħda biss minn dawk in-numri tiddeskrivi l-ambjent. -1 hija kwistjoni ta' build, fornitur jew funzjonalità, għax il-kodiċi talab xi ħaġa li l-implimentazzjoni attiva ma toffrix. 0 ma' lment dwar iż-żerriegħa hija kwistjoni ambjentali, għax il-ġeneratur ma setax jikseb entropija xejn. In-numru waħdu qatt ma jgħid liema, u lanqas l-isem tal-funzjoni.
Meta nod ta' apparat moħbi huwa l-kawża vera
Servizz magħluq jara siġra differenti mill-qoxra li qed tikteb fiha. Il-jails chroot, ix-xbihat tal-kontenitur u l-fajls unit imsaħħa spiss jippreżentaw /dev li jżomm inqas nodi minn dak tal-host. Jekk l-implimentazzjoni li qed tfalli tiftaħ /dev/urandom bis-saħħa tal-mogħdija, dik id-differenza biżżejjed biex tkisser it-tnedija waqt li l-host innifsu jidher perfettament f'saħħtu. Apparat li jeżisti barra l-jail ma jipprovax xejn dwar x'jista' jiftaħ il-proċess magħluq.
Mhux kull interfaċċa każwali għandha bżonn mogħdija, madankollu. Is-sejħa tas-sistema getrandom ta' Linux ma taċċettax isem tal-fajl u lanqas deskrittur tal-fajl, u l-paġna tal-manwal tagħha tinnota li din il-proprjetà hija utli proprju fejn chroot jaħbi l-mogħdijiet tal-apparati.
Għalhekk l-ispjegazzjoni tan-nod nieqes hija ipotesi dwar fergħa waħda tal-kodiċi, mhux regola dwar numri każwali b'mod ġenerali. Hija tinżamm meta l-evidenza ssemmi mogħdija, u hija spekulazzjoni meta l-evidenza ssemmi xi ħaġa oħra.
Aqra l-imfietaħ tal-iżbalji, imbagħad il-veduta tal-proċess
L-eħfef mod kif issolvi l-kwistjoni huwa li taqra dak li l-librerija diġà rreġistrat, u mbagħad tħares direttament lejn il-veduta fil-jail. L-ewwel pass huwa il-build OpenSSL li s-servizz effettivament għabba, għax il-munzelli tal-fornituri jvarjaw bejn il-verżjonijiet ewlenin u bejn id-distribuzzjonijiet. Imbagħad staqsi lil systemd liema proċess qed jaħdem u liema restrizzjonijiet japplikaw għalih. Biss wara li ż-żewġ fatti jkunu fuq il-mejda jkun ta' min jelenka n-nodi li dak il-proċess jista' jara.
openssl version -a
systemctl show openvpn-server@lab -p MainPID -p PrivateDevices -p DevicePolicy
pid=$(systemctl show -p MainPID --value openvpn-server@lab)
sudo ls -l /proc/"$pid"/root/dev/urandom /proc/"$pid"/root/dev/random
Mexxi dawk il-qari kontra l-istess proċess, mhux kontra l-qoxra li tkun miftuħa b'kumbinazzjoni. Li tqabbel /dev tal-host mal-veduta ta' proċess mhux relatat huwa kif id-dipendenza ħażina tiġi msewwija darbtejn.
Żid id-dipendenza biss wara li tkun tista' ssemmiha
Meta l-evidenza ssemmi tabilħaqq mogħdija, it-tiswija hija żgħira: agħmel dik il-mogħdija waħda disponibbli fil-jail u ħalli kollox ieħor kif inhu. Bind mount tan-nod wieħed normalment biżżejjed, u mknod man-numri major u minor standard tan-nod jagħti l-istess riżultat fuq installazzjonijiet fejn il-mounting mhix għażla. Li twessa' s-sandbox, tagħti aċċess lil kull apparat tal-karattri jew tiddiżattiva PrivateDevices tibdel tiswija mmirata għal rigressjoni tas-sigurtà permanenti.
Daemon tal-entropija mhuwiex sostitut għal dik it-tiswija. Pakketti bħal haveged jibdlu kif il-pool tal-kernel jiġi mitmugħ; ma jistgħux joħolqu mogħdija li proċess magħluq jista' jiftaħ. Li tinstalla wieħed jista' jġiegħel graff tas-saħħa jidher aħjar waqt li s-sejħa tal-open xorta tfalli. Żomm il-problemi tnejn separati, inkella l-ħsara li jmiss terġa' tiġi attribwita lit-tabella żbaljata.
Ivverifika l-ġeneratur u l-mina separatament
Restart hija l-unika prova li terġa' tuża l-istess konfigurazzjoni, l-istess fajl unit u l-istess konfinament li pproduċew il-ħsara. Mexxiha, u mbagħad aqra l-aktar entrati reċenti tal-journal minflok kampjun minn boot preċedenti.
sudo systemctl restart openvpn-server@lab
sudo journalctl -u openvpn-server@lab --since -5min --no-pager | grep -iE 'rand|entropy|Initialization Sequence'
Fittex żewġ affarijiet separati f'dak l-output: il-messaġġ dwar is-sors każwali li jisparixxi, u l-mina li tilħaq il-punt ta' tnedija tas-soltu tagħha. Ġeneratur li jerġa' jaħdem ineħħi ħsara lokali waħda u ma jgħid xejn dwar l-identità tas-server, il-kredenzjali jew ir-routing. Ittestja dan bl-istess konfigurazzjoni tal-klijent li falliet qabel, biex ir-riżultat ikun komparabbli u mhux biss aħjar.