RAND_bytes imeshindikana katika OpenVPN: hitilafu ya maktaba au nodi inayokosekana
Hitilafu ya RAND_bytes inaweza kumaanisha chanzo cha entropia kilichokataliwa au nodi iliyofichwa na jail. Soma foleni ya hitilafu na mwonekano wa mchakato kabla ya kuunda vifaa.
RAND_bytes() failed ni taarifa kuhusu primitiva moja ya ndani, si kuhusu akaunti, ufunguo ulioshirikiwa mapema au bandari ya mbali. Hitilafu mbili tofauti sana huzalisha mstari huo huo na huacha ushahidi tofauti. Moja ni backend ya kriptografia inayokataa kutoa baiti; nyingine ni mchakato ambao haufikii chanzo cha entropia ambacho msimbo wake uliundwa kwa ajili yake. Kuzitenganisha kunahitaji usomaji mmoja wa foleni ya hitilafu na mtazamo mmoja wa mwonekano wa mfumo wa faili wa mchakato uliofungwa, na ukaguzi huo unapaswa kufanyika kabla ya kuunda kitu chochote chini ya /dev.
Kile ambacho thamani ya kurudi hutenganisha
Mkataba ulioandikwa hutenganisha matokeo matatu, si mawili: 1 kwa mafanikio, -1 wakati mbinu ya RAND iliyopakiwa haitumii ombi, na 0 kwa hitilafu nyingine, huku maelezo yakibaki kwenye foleni ya hitilafu. Marejeleo ya RAND_bytes yanaongeza jambo ambalo ni rahisi kulipuuza: jenereta chaguo-msingi hupata mbegu kutoka mfumo wa uendeshaji kwenye majukwaa yanayoungwa mkono, na mbegu hizo zikishindikana hubaki katika hali ya hitilafu badala ya kurudisha baiti zinazotabirika.
Ni moja tu ya namba hizo inayoelezea mazingira. -1 ni suala la ujenzi, mtoa huduma au kipengele, kwa sababu msimbo uliomba kitu ambacho utekelezaji unaotumika hautoi. 0 pamoja na malalamiko ya mbegu ni suala la mazingira, kwa sababu jenereta haikuweza kupata entropia kabisa. Namba peke yake haisemi kamwe ni ipi kati ya hizo, na jina la kazi pia halisemi.
Wakati nodi ya kifaa iliyofichwa ni sababu halisi
Huduma iliyofungwa huona mti tofauti na ganda unaloandika. Jela za chroot, picha za kontena na faili za unit zilizoimarishwa mara nyingi huwasilisha /dev iliyo na nodi chache kuliko ya mwenyeji. Iwapo utekelezaji unaoshindikana hufungua /dev/urandom kwa njia ya jina la njia, tofauti hiyo inatosha kuvunja uanzishaji wakati mwenyeji mwenyewe anaonekana mzima kabisa. Kifaa kilichopo nje ya jela hakithibitishi chochote kuhusu kile mchakato uliofungwa unaruhusiwa kufungua.
Si kila kiolesura cha nasibu kinahitaji njia, hata hivyo. Mwito wa mfumo getrandom wa Linux haukubali jina la faili wala kielekezi cha faili, na ukurasa wake wa mwongozo unabainisha kwamba sifa hiyo ni muhimu hasa pale chroot inapoficha njia za vifaa.
Kwa hivyo maelezo ya nodi inayokosekana ni dhana kuhusu tawi moja la msimbo, si kanuni kuhusu namba za nasibu kwa ujumla. Inashikilia wakati ushahidi unataja njia, na ni ubashiri wakati ushahidi unataja kitu kingine.
Soma foleni ya hitilafu, kisha mwonekano wa mchakato
Njia ya haraka zaidi ya kutatua swali ni kusoma kile maktaba imekwisha rekodi, kisha kuangalia moja kwa moja mwonekano ndani ya jela. Anza na ujenzi wa OpenSSL ambao huduma iliupakia kwa hakika, kwa sababu rafu za watoa huduma hutofautiana kati ya matoleo makuu na kati ya usambazaji. Kisha muulize systemd ni mchakato gani unaoendesha na ni vikwazo vipi vinavyotumika kwake. Ni baada tu ya ukweli wote wawili kuwa mezani ndipo inafaa kuorodhesha nodi ambazo mchakato huo unaweza kuona.
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
Endesha usomaji huo dhidi ya mchakato huo huo, si dhidi ya ganda linalotokea kuwa wazi. Kulinganisha /dev ya mwenyeji na mwonekano wa mchakato usiohusiana ni jinsi utegemezi usiofaa unavyorekebishwa mara mbili.
Ongeza utegemezi tu baada ya kuweza kuutaja
Wakati ushahidi unataja njia kweli, ukarabati ni mdogo: fanya hiyo njia moja ipatikane ndani ya jela na uache kila kitu kingine. Mount ya bind ya nodi moja kwa kawaida inatosha, na mknod pamoja na namba za kawaida za major na minor za nodi hutoa matokeo sawa kwenye usakinishaji ambapo kupachika si chaguo. Kupanua sanduku la mchanga, kutoa ufikiaji kwa kila kifaa cha herufi au kuzima PrivateDevices hubadilisha marekebisho lengwa kwa regreshoni ya usalama ya kudumu.
Daemon ya entropia si mbadala wa ukarabati huo. Pakiti kama haveged hubadilisha jinsi bwawa la kernel linavyolishwa; haziwezi kuunda jina la njia ambalo mchakato uliofungwa unaruhusiwa kufungua. Kusakinisha moja kunaweza kufanya grafu ya afya ionekane bora wakati mwito wa kufungua bado unashindikana. Tenganisha matatizo hayo mawili, la sivyo hitilafu inayofuata itahusishwa tena na tabaka lisilofaa.
Thibitisha jenereta na handaki kwa namna tofauti
Kuwasha upya ni jaribio pekee linalotumia tena usanidi huo huo, faili hiyo hiyo ya unit na ufungaji huo huo uliozalisha hitilafu. Liondeshe, kisha soma maingizo mapya zaidi ya jarida badala ya sampuli kutoka kuwasha kwa awali.
sudo systemctl restart openvpn-server@lab
sudo journalctl -u openvpn-server@lab --since -5min --no-pager | grep -iE 'rand|entropy|Initialization Sequence'
Tafuta mambo mawili tofauti katika matokeo hayo: ujumbe kuhusu chanzo cha nasibu unaotoweka, na handaki kufikia hatua yake ya kawaida ya kuanza. Jenereta inayofanya kazi tena huondoa hitilafu moja ya ndani na haisemi chochote kuhusu utambulisho wa seva, vyeti au uelekezaji. Jaribu hilo kwa usanidi huo huo wa mteja ulioshindikana awali, ili matokeo yalinganishwe na si kuwa bora tu.