RAND_bytes() failed primitiba lokal bati buruzko baieztapena da, ez kontuari, partekatutako gakoari edo urruneko atakari buruzkoa. Oso desberdinak diren bi hutsegitek lerro bera sortzen dute eta ebidentzia desberdinak uzten dituzte. Bata byteak igortzeari uko egiten dion backend kriptografikoa da; bestea bere kodea eraiki zen entropia-iturrira iristen ez den prozesua da. Hauek bereizteko errore-ilara behin irakurri eta prozesu giltzapetuaren fitxategi-sistemaren ikuspegiari behin begiratu behar zaio, eta egiaztapen hori /dev azpian ezer sortu aurretik dagokio.

Itzultze-balioak zer bereizten duen

Dokumentatutako kontratuak hiru emaitza bereizten ditu, ez bi: 1 arrakastarako, -1 kargatutako RAND metodoak eskaera onartzen ez duenean, eta 0 beste hutsegiteetarako, azalpena errore-ilaran utzita. RAND_bytes erreferentziak puntu bat gehitzen du erraz saihesteko: generatzaile lehenetsiak sistema eragiletik hartzen du hazia onartutako plataformetan, eta hazi-hartze horrek huts egiten duenean errore-egoeran geratzen da, aurreikus daitezkeen byteak itzuli beharrean.

Zenbaki horietako batek soilik deskribatzen du ingurunea. -1 eraikuntza, hornitzaile edo funtzionalitate kontua da, kodeak implementazio aktiboak eskaintzen ez duen zerbait eskatu zuelako. 0, hazia dela eta kexa batekin, ingurumen-kontua da, generatzaileak entropiarik lortu ezin izan zuelako. Zenbakiak bakarrik ez du inoiz esaten zein den, eta funtzioaren izenak ere ez.

Ezkutatutako gailu-nodoa benetako arrazoia denean

Zerbitzu mugatu batek zuk idazten ari zaren shellaren zuhaitz desberdina ikusten du. Chroot jails, edukiontzi-irudiak eta unitate-fitxategi gogortuek /dev erakusten dute sarritan, ostalariarena baino nodo gutxiagorekin. Huts egiten duen implementazioak /dev/urandom bidearen arabera irekitzen badu, aldea nahikoa da abiaraztea hausteko, ostalaria bera erabat osasuntsu agertzen den bitartean. Jail-etik kanpo dagoen gailu batek ez du ezer frogatzen giltzapetutako prozesuak zer ireki dezakeen.

Ez du interfaze aleatorio orok bide bat behar, ordea. Linux-eko getrandom sistema-deiak ez du fitxategi-izenik ez fitxategi-deskriptorerik onartzen, eta bere eskuliburu-orriak nabarmentzen du ezaugarri hori erabilgarria dela chroot-ek gailu-bideak ezkutatzen dituen lekuan.

Beraz, falta den nodoaren azalpena kodearen adar bati buruzko hipotesia da, ez zenbaki aleatoriei buruzko arau orokorra. Ebidentziak bide bat aipatzen duenean eusten da, eta ebidentziak beste zerbait aipatzen duenean susmoa da.

Irakurri errore-ilara, gero prozesuaren ikuspegia

Galdera argitzeko modurik azkarrena liburutegiak dagoeneko erregistratu duena irakurtzea da, eta gero jail-aren barruko ikuspegiari zuzenean begiratzea. Hasi zerbitzuak benetan kargatu zuen OpenSSL eraikinarekin, hornitzaile-pilak bertsio nagusien eta banaketen artean desberdinak direlako. Galdetu gero systemd-ri zein prozesu ari den exekutatzen eta zein murrizketa aplikatzen zaizkion. Bi gertaerak mahai gainean daudenean soilik merezi du prozesu horrek ikus ditzakeen nodoak zerrendatzeak.

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

Exekutatu irakurketa horiek prozesu beraren aurka, ez irekita dagoen shellaren aurka. Ostalariaren /dev erlaziorik gabeko prozesu baten ikuspegiarekin alderatzea da menpekotasun okerra bi aldiz konpontzeko modua.

Gehitu menpekotasuna izendatu ahal duzunean soilik

Ebidentziak bide bat aipatzen duenean, konponketa txikia da: egin bide hori bakarra jail-aren barruan eskuragarri eta utzi beste guztia bakean. Nodo bakar baten bind muntaketa nahikoa izan ohi da, eta mknod nodoaren major eta minor zenbaki estandarrekin emaitza bera ematen du muntaketa aukera ez den instalazioetan. Sandboxa zabaltzeak, karaktere-gailu guztietarako sarbidea emateak edo PrivateDevices desaktibatzeak zuzenketa zuzendua segurtasun-erregresio iraunkorrarekin trukatzen du.

Entropia-daemon batek ez du konponketa hori ordezkatzen. haveged bezalako paketeek kernel-poola nola elikatzen den aldatzen dute; ez dute giltzapetutako prozesu batek ireki dezakeen biderik sortu. Bat instalatzeak osasun-grafiko bat hobeagoa izan daiteke, irekitze-deia oraindik huts egiten duen bitartean. Eutsi bi arazoei bereizita, bestela hurrengo hutsegitea geruza okerraren kontu egingo da berriro.

Egiaztatu generatzailea eta tunela bereizita

Berrabiarazte bat da hutsegitea sortu zuen konfigurazio bera, unitate-fitxategi bera eta konfinamendu bera berrerabiltzen dituen proba bakarra. Exekutatu, eta gero irakurri egunkariko sarrera berrienak, hasierako lagin bat baino.

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

Bilatu bi gauza bereizi irteera horretan: iturri aleatorioaren mezua desagertzea, eta tunela bere ohiko abiarazte-mugarrira iristea. Berriz funtzionatzen duen generatzaile batek tokiko hutsegite bat ezabatzen du eta ez du ezer esaten zerbitzariaren identitateari, kredentzialei edo bideratzeaz. Probatu hori lehenago huts egin zuen bezero-konfigurazio berarekin, emaitza konparagarria izan dadin eta ez soilik hobea.

Erlazionatutako artikuluak