RAND_bytes oo ku guuldareystay OpenVPN: khalad maktabad ama nood maqan
Guuldarada RAND_bytes waxay noqon kartaa isha entropy oo la diiday ama nood uu jail qariyey. Akhri safka khaladaadka iyo aragtida habsocodka ka hor inta aanad abuurin qalab.
RAND_bytes() failed waa hadal ku saabsan hal primitive maxalli ah, ma aha xisaabta, furaha hore loo wadaagay ama dekedda fog. Laba cillad oo aad u kala duwan ayaa soo saara isla safka oo ka tagaan caddaymo kala duwan. Mid waa backend cryptographic oo diida inuu soo saaro bytes; kan kalena waa habsocod aan gaarin isha entropy ee koodkiisa loo dhisay. In la kala saaro waxay u baahan tahay hal akhris oo safka khaladaadka ah iyo hal eegis oo ku saabsan aragtida nidaamka faylka ee habsocodka la xidhay, iyo hubintaas waa inay ka hor timaado wax kasta oo lagu abuurayo /dev.
Waxa ay qiimaha soo noqoshada kala soocdo
Heshiiska la diiwaangeliyay wuxuu kala soocaa saddex natiijo, ma aha laba: 1 guul, -1 marka habka RAND ee la raray uusan taageerin codsiga, iyo 0 cillado kale, iyadoo sharaxaadda lagu reebay safka khaladaadka. Tixraaca RAND_bytes wuxuu ku darayaa qodob ay fududahay in la seegto: matoorka caadiga ah wuxuu iniin ka qaataa nidaamka hawlgalka baraha la taageeray, marka iniinayntaas guuldareysato wuxuu ku sii jiraa xaalad khalad ah halkii uu soo celin lahaa bytes la saadaalin karo.
Keliya mid ka mid ah tirooyinkaas ayaa sharraxaya deegaanka. -1 waa su'aal ku saabsan dhismaha, bixiye ama muuqaal, sababtoo ah koodka wuxuu codsaday wax aan hirgelinta firfircoon bixin. 0 oo leh cabasho ku saabsan iniinaynta waa su'aal deegaan, sababtoo ah matoorku ma helin entropy haba yaraatee. Tirada keligeed weligeed ma sheegto midkee, magaca shaqaduna sidoo kale ma sheego.
Marka noodka qalabka ee qarsoon yahay sababta dhabta ah
Adeeg xaddidan wuxuu arkaa geed ka duwan shellka aad ku qorayso. Jeelalka chroot, sawirada weelka iyo faylalka unit ee adkaaday waxay si joogto ah u soo bandhigaan /dev oo ka kooban noodro ka yar kan martigeliyaha. Haddii hirgelinta guuldareysata ay furto /dev/urandom magaca wadada, farqigaas waa ku filan yahay inuu jebiyo bilowga iyadoo martigeliyaha laftiisu u eg yahay mid caafimaad qaba. Qalab ka baxsan jeelka waxba kama caddeeyo waxa habsocodka la xidhay loo oggol yahay inuu furo.
Si kastaba ha ahaatee ma aha inay tahay in interface kasta oo random ah u baahdo waddo. Wicitaanka nidaamka getrandom ee Linux ma aqbalo magac fayl iyo sidoo kale ma aqbalo tilmaame fayl, bogga buugga gacantiisuna wuxuu xusayaa in sifadan faa'iido leh tahay si sax ah halka chroot ku qariyo waddooyinka qalabka.
Sidaas darteed sharaxaadda noodka maqan waa mala-awaal ku saabsan hal laan oo koodka ah, ma aha xeer ku saabsan tirooyinka random guud ahaan. Waxay taagan tahay marka caddayntu sheegto waddo, waana qiyaas marka caddayntu sheegto wax kale.
Marka hore akhri safka khaladaadka, ka dibna aragtida habsocodka
Habka ugu dhaqso badan ee su'aasha lagu xalliyo waa in la akhriyo waxa maktabadda ay hore u diiwaangelisay, ka dibna si toos ah loo eego aragtida gudaha jeelka. Ka bilow dhismaha OpenSSL ee ay adeeggu dhab ahaan rartay, sababtoo ah stacks bixiyeyaashu way kala duwan yihiin inta u dhaxaysa noocyada waaweyn iyo inta u dhaxaysa qaybinta. Kadib weydii systemd habsocodkee ayaa socda iyo xaddidaadyada ay khusayso. Kaliya marka labada xaqiiqo ay miiska saaran yihiin ayaa qiimo leh in la taxo noodrada ay habsocodkaas arki karto.
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
Ku samee akhriskaas isla habsocodkaas, ma aha shellka si kadis ah u furan. Isbarbardhigga /dev ee martigeliyaha iyo aragtida habsocod aan xiriir la lahayn waa habka loo hagaajiyo laba jeer ku-tiirsanaanta khaldan.
Ku dar ku-tiirsanaanta kaliya markaad awoodo inaad magacawdo
Marka caddayntu dhab ahaan sheegto waddo, hagaajintu way yar tahay: ka dhig waddadaas kaliya mid laga heli karo gudaha jeelka oo ka tag wax kasta oo kale. Bind mount hal nood ah ayaa inta badan ku filan, iyo mknod oo leh lambarada caadiga ah ee major iyo minor ee noodka wuxuu bixiyaa natiijo la mid ah rakidda aan mount-ku ikhtiyaar ahayn. Ballaarinta sandbox, siinta gelitaan qalab kasta oo xaraf ama daminta PrivateDevices waxay beddeshaa sixid bartilmaameed ah dib-u-dhac amni oo joogto ah.
Daemon entropy ma beddelo sixiddaas. Xidhmooyin sida haveged waxay beddelaan sida barkada kernel-ka loo quudiyo; ma abuuri karaan waddo habsocod la xidhay loo oggol yahay inuu furo. Mid rakiddu waxay ka dhigi kartaa garaafka caafimaadka mid wanaagsan iyadoo wicitaanka furitaanku wali guuldareysto. Kala fogee labada dhibaato, haddii kale guuldarada xigta waxaa mar kale loo nisbayn doonaa lakabka khaldan.
Si gooni ah u hubi matoorka iyo tunnelka
Dib u bilaabiddu waa tijaabada kaliya ee dib u isticmaasha isla qaabeynta, isla faylka unit iyo isla go'doominta ee keenay guuldarada. Ku socodsii, ka dibna akhri gelitaannada ugu cusub ee joornaalka halkii aad ka qaadan lahayd muunad bilow hore.
sudo systemctl restart openvpn-server@lab
sudo journalctl -u openvpn-server@lab --since -5min --no-pager | grep -iE 'rand|entropy|Initialization Sequence'
Ka raadi laba shay oo gooni ah natiijadaas: fariinta ku saabsan isha random oo lumaysa, iyo tunnelka oo gaaraya tantankiisa bilowga caadiga ah. Matoorku marka uu mar kale shaqeeyo wuxuu meesha ka qaadaa hal guuldaro maxalli ah oo wax kama sheego aqoonsiga serverka, aqoonsiga gelitaanka ama dariiqa. Ku tijaabi isla qaabeynta macmiilka ee hore u guuldareystay, si natiijadu u noqoto mid la barbardhigi karo oo aan ahayn uun mid ka wanaagsan.