RAND_bytes() failed ass eng Ausso iwwer eng lokal Primitiv, net iwwer de Kont, de virun gedeelte Schlëssel oder de Remote-Port. Zwee ganz ënnerschiddlech Feeler produzéieren déiselwecht Linn an hannerloossen ënnerschiddlech Spueren. Dee een ass e kryptografesche Backend, dee refuséiert Bytes auszeginn; dee aneren ass e Prozess, deen d'Entropiequell net erreecht, fir déi säi Code gebaut gouf. Si ze trennen erfuerdert eng Liesung vun der Feelerwarteschlaang an e Bléck op d'Dateiesystem-Sicht vum agespaarten Prozess, an déi Kontroll gehéiert virun alles, wat ënner /dev ugeleeë gëtt.

Wat de Réckgabewäert ënnerscheet

Den dokumentéierte Kontrakt trennt dräi Resultater, net zwee: 1 fir Erfolleg, -1 wann déi gelueden RAND-Method d'Ufro net ënnerstëtzt, an 0 fir aner Feeler, woubäi d'Erklärung an der Feelerwarteschlaang bleift. D'RAND_bytes-Referenz setzt e Punkt derbäi, deen een liicht iwwersäit: de Standardgenerator initialiséiert sech op ënnerstëtzte Plattformen aus dem Betribssystem, a wann déi Initialiséierung feelgeet, bleift en an engem Feelerzoustand, amplaz viraussobar Bytes zréckzeginn.

Nëmmen eng vun dësen Zuelen beschreift d'Ëmwelt. Eng -1 ass eng Fro vu Build, Provider oder Funktionalitéit, well de Code eppes gefrot huet, wat déi aktiv Implementéierung net ubitt. Eng 0 mat enger Beschwéierde iwwer d'Initialiséierung ass eng Ëmweltfro, well de Generator guer keng Entropie konnt kréien. D'Zuel eleng seet ni wéi eng vun deenen zwou, an den Numm vun der Funktioun och net.

Wéini eng verstoppte Geräteknuet déi richteg Ursaach ass

En ageschränkte Service gesäit en aneren Bam wéi d'Shell, an déi s du tippst. Chroot-Jails, Container-Biller an gehärtete Unit-Fichiere weisen dacks e /dev mat manner Kniet wéi deem vum Host. Wa fir d'feelend Implementéierung /dev/urandom iwwer de Padnumm opmécht, duet deen Ënnerscheed, fir den Start ze briechen, während den Host selwer perfekt gesond ausgesäit. E Gerät, wat baussent der Jail existéiert, beweise näischt doriwwer, wat den agespaarte Prozess dierf opmaachen.

Net all zoufälleg Interschnitt brauch awer e Pad. De Systemopruff getrandom vu Linux akzeptéiert weder Dateinumm nach Dateideskriptor, a seng Handbuchsäit bemierkt, datt dës Eegeschaft just do nëtzlech ass, wou en Chroot Gerätepäder verstoppt.

Dofir ass d'Erklärung vum fehlenden Knuet eng Hypothese iwwer en Ast vum Code, keng Regel iwwer zoufälleg Zuelen am Allgemengen. Si hält, wann d'Beweiser e Pad nennen, an si ass Gischt, wann d'Beweiser eppes anescht nennen.

Lies d'Feelerwarteschlaang, duerno d'Prozesssicht

Den séierste Wee, d'Fro ze klären, ass ze liesen, wat d'Bibliothéik schonn opgezeechent huet, an duerno direkt d'Sicht an der Jail unzekucken. Fänk mat dem OpenSSL-Build un, deen de Service tatsächlech gelueden huet, well Provider-Stäppele sech tëscht Haaptversiounen an tëscht Distributeuren ënnerscheeden. Fro duerno systemd, wéi e Prozess leeft a wéi eng Restriktiounen fir hie gëllen. Eréischt wann béid Fakten um Dësch leien, ass et der Méi wäert, d'Kniet opzelëschten, déi dee Prozess gesäit.

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

Féier déi Liesungen géint deeselwechte Prozess aus, net géint d'Shell, déi just op ass. D'/dev vum Host mat der Sicht vun engem onverwanden Prozess ze vergläichen ass de Wee, op deem déi falsch Ofhängegkeet zweemol reparéiert gëtt.

Setz d'Ofhängegkeet eréischt derbäi, wann s de se nenne kanns

Wa d'Beweiser tatsächlech e Pad nennen, ass d'Reparatur kleng: maach just deen een Pad bannent der Jail disponibel a loosst alles anescht a Rou. E Bind-Mount vum eenzelen Knuet ass meeschtens genuch, an mknod mat den normale Major- a Minorzuelen vum Knuet liwwert deeselwecht Resultat op Installatiounen, wou Mounten keng Optioun ass. D'Sandbox auszebauen, Zougang zu all Zeechengerät ze ginn oder PrivateDevices auszeschalten tauscht eng geriichtte Korrektur géint eng dauerhaft Sécherheetsregressioun.

En Entropie-Daemon ersetzt déi Reparatur net. Pakete wéi haveged änneren, wéi de Kernel-Pool gefiddert gëtt; si kënnen keen Padnumm erschafen, deen en agespaarte Prozess dierf opmaachen. Een z'installéieren kann en Gesondheetsgraf besser ausgesinn loossen, während den Open-Opruff nach ëmmer feelgeet. Halt déi zwou Problemer getrennt, soss gëtt de nächste Feeler erëm der falscher Schicht zougeschriwwen.

Kontrolléier de Generator an den Tunnel getrennt

En Neistart ass den eenzegen Test, deen déiselwecht Konfiguratioun, déiselwecht Unit-Fichier an déiselwecht Abschottung erëmbenotzt, déi de Feeler verursaacht hunn. Féier hien aus a lies duerno déi neist Journal-Andräg amplaz eng Stéchprooch vun engem fréieren Start.

sudo systemctl restart openvpn-server@lab
sudo journalctl -u openvpn-server@lab --since -5min --no-pager | grep -iE 'rand|entropy|Initialization Sequence'

Sich zwee getrennte Saachen an där Ausgab: d'Message iwwer d'Zoufallsquell, déi verschwënnt, an den Tunnel, deen säi gewinnten Start-Meilesteen erreecht. E Generator, dee rëm funktionéiert, hieft ee lokale Feeler ewech a seet näischt iwwer Serveridentitéit, Umeldungsdaten oder Routing. Test dat mat der selwechter Client-Konfiguratioun, déi virdrun feelgeet ass, sou datt d'Resultat vergläichbar ass an net nëmmen besser.

Ähnlech Artikelen