RAND_bytes() failed jẹ́ gbólóhùn nípa primitive ìbílẹ̀ kan, kì í ṣe nípa àkọsílẹ̀, kọ́kọ́rọ́ tí a pín tẹ́lẹ̀ tàbí ibùdó jíjìn. Àwọn àṣìṣe méjì tí ó yàtọ̀ gidigidi ń dá ìlà kan náà jáde tí wọ́n sì ń fi ẹ̀rí ọ̀tọ̀ọ̀tọ̀ sílẹ̀. Ọ̀kan jẹ́ backend cryptography tí ó kọ̀ láti gbé bytes jáde; èkejì jẹ́ ìlànà tí kò dé orísun entropy tí a kọ́ kóòdù rẹ̀ fún. Láti pín wọ́n, a nílò ìkàwé ìlà àṣìṣe lẹ́ẹ̀kan àti ìwòye lẹ́ẹ̀kan lórí ìwòye ẹ̀rọ fáìlì ìlànà tí a fi sẹ́wọ̀n, àti pé àyẹ̀wò yẹn gbọdọ̀ wà ṣáájú kí a tó dá ohunkóhun lábẹ́ /dev.

Ohun tí iye ìpadà fi yàtọ̀

Májẹ̀mú tí a kọ sílẹ̀ yàtọ̀ àwọn àbájáde mẹ́ta, kì í ṣe méjì: 1 fún àṣeyọrí, -1 nígbà tí ọ̀nà RAND tí a gbé wọlé kò bá ṣàtìlẹ́yìn ìbéèrè náà, àti 0 fún àwọn ìkùnà mìíràn, pẹ̀lú àlàyé tí a fi sílẹ̀ nínú ìlà àṣìṣe. Ìtọ́kasí RAND_bytes ń fi kókó kan kún un tí ó rọrùn láti gbà kọjá: olùdá àkọ́kọ́ ń gba irúgbìn láti inú ẹ̀rọ ìṣiṣẹ́ lórí àwọn pẹpẹ tí a ṣàtìlẹ́yìn, àti nígbà tí ìró irúgbìn yẹn bá kùnà ó ń dúró nínú ipò àṣìṣe dípò kí ó da àwọn byte tí a lè sọ tẹ́lẹ̀ padà.

Ọ̀kan ṣoṣo nínú àwọn nọ́mbà yẹn ni ó ń ṣàpèjúwe àyíká. -1 jẹ́ ìbéèrè nípa kíkọ́, olùpèsè tàbí ẹ̀yà, nítorí pé kóòdù béèrè ohun tí ìmúṣẹ tí ń ṣiṣẹ́ kò fi pèsè. 0 pẹ̀lú ẹ̀dùn nípa ìró irúgbìn jẹ́ ìbéèrè àyíká, nítorí pé olùdá kò lè rí entropy rárá. Nọ́mbà fúnra rẹ̀ kì í sọ èwo rí, bẹ́ẹ̀ ni orúkọ iṣẹ́ kì í sọ.

Nígbà tí nódù ẹ̀rọ tí ó pamọ́ bá jẹ́ ìdí gidi

Iṣẹ́ tí a fi ààlà de ń rí igi tí ó yàtọ̀ sí shell tí o ń tẹ̀wé. Àwọn ẹ̀wọ̀n chroot, àwòrán àpótí àti àwọn fáìlì unit tí a fi le fi hàn lọ́pọ̀ ìgbà /dev tí ó ní àwọn nódù tí ó kéré ju ti agbàlejò. Bí ìmúṣẹ tí ó ń kùnà bá ń ṣí /dev/urandom nípasẹ̀ orúkọ ọ̀nà, ìyàtọ̀ yẹn tó láti fọ́ ìbẹ̀rẹ̀ nígbà tí agbàlejò fúnra rẹ̀ dà bí ẹni tí ó ní ìlera pípé. Ẹ̀rọ tí ó wà níta ẹ̀wọ̀n kò fi ohunkóhun hàn nípa ohun tí a gbà ìlànà tí a fi sẹ́wọ̀n láyè láti ṣí.

Bí ó ti wù kó rí, kì í ṣe gbogbo interface àìdánilójú ni ó nílò ọ̀nà. Ìpè ẹ̀rọ getrandom ti Linux kò gbà orúkọ fáìlì bẹ́ẹ̀ ni kò gbà olùṣàpèjúwe fáìlì, ogbó ojú-ìwé rẹ̀ sì ṣàkíyèsí pé ànímọ́ yìí wúlò gan-an níbi tí chroot ti ń fi àwọn ọ̀nà ẹ̀rọ pamọ́.

Nítorí náà àlàyé nípa nódù tí ó sonù jẹ́ àbá lórí ẹ̀ka kan ti kóòdù, kì í ṣe òfin lórí àwọn nọ́mbà àìdánilójú lápapọ̀. Ó dúró nígbà tí ẹ̀rí bá dárúkọ ọ̀nà, ó sì jẹ́ àfojúsùn nígbà tí ẹ̀rí bá dárúkọ ohun mìíràn.

Kọ́kọ́ ka ìlà àṣìṣe, lẹ́yìn náà wo ìwòye ìlànà

Ọ̀nà tí ó yára jù láti yanjú ìbéèrè náà ni láti ka ohun tí ilé ìkàwé ti kọ sílẹ̀ tẹ́lẹ̀, lẹ́yìn náà wo ìwòye inú ẹ̀wọ̀n ní tààrà. Bẹ̀rẹ̀ pẹ̀lú ìkọ́ OpenSSL tí iṣẹ́ náà gbé wọlé ní ti gidi, nítorí pé àwọn àkópọ̀ olùpèsè yàtọ̀ láàárín àwọn ẹ̀yà pàtàkì àti láàárín àwọn ìpín. Lẹ́yìn náà béèrè lọ́wọ́ systemd ìlànà wo ni ó ń ṣiṣẹ́ àti àwọn ìdíwọ́ wo ni ó kan. Nígbà tí àwọn òtítọ́ méjèèjì bá wà lórí tábìlì, yẹn ni ó tó láti ṣe àkójọ àwọn nódù tí ìlànà yẹn rí.

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

Ṣe àwọn ìkàwé yẹn lórí ìlànà kan náà, kì í ṣe lórí shell tí ó ṣẹ̀ṣẹ̀ wà ní ṣíṣí. Fífi /dev agbàlejò wé ìwòye ìlànà tí kò ní í ṣe ni ọ̀nà tí a fi ń tún ìgbẹ́kẹ̀lé tí kò tọ́ ṣe lẹ́ẹ̀mejì.

Fi ìgbẹ́kẹ̀lé kún nìkan nígbà tí o bá lè dárúkọ rẹ̀

Nígbà tí ẹ̀rí bá dárúkọ ọ̀nà ní ti gidi, àtúnṣe náà kéré: jẹ́ kí ọ̀nà kan náà wà ní àárín ẹ̀wọ̀n kí o sì fi gbogbo ohun mìíràn sílẹ̀. Bind mount nódù kan sábà máa ń tó, àti mknod pẹ̀lú àwọn nọ́mbà major àti minor ìbílẹ̀ nódù ń fúnni ní àbájáde kan náà ní àwọn ìforúkọsílẹ̀ níbi tí mount kì í ṣe àṣàyàn. Sísan sandbox gbòòrò, fífúnni ní àǹfààní sí gbogbo ẹ̀rọ lẹ́tà tàbí pípa PrivateDevices panu ṣe pààrọ̀ àtúnṣe tí a dójú kò sí ìpadàsẹ́yìn ààbò tí kò ní òpin.

Daemon entropy kì í rọ́pò àtúnṣe yẹn. Àwọn àpò bíi haveged ń yí bí a ṣe ń bọ́ adágún kernel; wọn kò lè dá ọ̀nà tí a gbà ìlànà tí a fi sẹ́wọ̀n láyè láti ṣí. Fífi ọ̀kan sórí lè jẹ́ kí àwòrán ìlera dára sí i nígbà tí ìpè ṣíṣí ṣì ń kùnà. Jẹ́ kí àwọn ìṣòro méjèèjì wà lọ́tọ̀ọ̀tọ̀, bí bẹ́ẹ̀ kọ́ a ó tún ka ìkùnà tó kàn sí ẹ̀ka tí kò tọ́.

Ṣàyẹ̀wò olùdá àti ọ̀nà abẹ́lẹ̀ lọ́tọ̀ọ̀tọ̀

Àtúnbẹ̀rẹ̀ ni ìdánwò kan ṣoṣo tí ó tún lo kókó-ìmúlò kan náà, fáìlì unit kan náà àti ìyàsọ́tọ̀ kan náà tí ó fa ìkùnà náà. Ṣe é, lẹ́yìn náà ka àwọn àkọsílẹ̀ tuntun jùlọ nínú ìwé ìròyìn dípò àyẹ̀wò láti ìbẹ̀rẹ̀ ìṣáájú.

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

Wá ohun méjì lọ́tọ̀ọ̀tọ̀ nínú ìjáde yẹn: ìròyìn nípa orísun àìdánilójú tí ó ń pòórá, àti ọ̀nà abẹ́lẹ̀ tí ó ń dé ibi àmì ìbẹ̀rẹ̀ rẹ̀ tí ó sábà máa ń dé. Olùdá tí ó tún ń ṣiṣẹ́ ń yọ ìkùnà àdúgbò kan kúrò kò sì sọ ohunkóhun nípa ìdánimọ̀ olùpèsè, ẹ̀rí ìwọlé tàbí ìtọ́sọ́nà. Dán an wò pẹ̀lú kókó-ìmúlò oníbàárà kan náà tí ó kùnà tẹ́lẹ̀, kí àbájáde lè ṣe é ṣe àfiwé, kì í ṣe kí ó kan dára jù.

Àwọn àpilẹ̀kọ tó jọra