OpenVPN හි RAND_bytes අසාර්ථක විය: පුස්තකාල දෝෂයක් හෝ නැති වූ නෝඩයක්
RAND_bytes අසාර්ථකත්වය යනු ප්රතික්ෂේප වූ එන්ට්රොපි මූලාශ්රයක් හෝ බන්ධනාගාරයක් විසින් සඟවන ලද නෝඩයක් විය හැක. උපාංග සෑදීමට පෙර දෝෂ පෙළ සහ ක්රියාවලි දර්ශනය කියවන්න.
RAND_bytes() failed එක් දේශීය ප්රාථමිකයක් පිළිබඳ ප්රකාශයකි, ගිණුම, කලින් බෙදාගත් යතුර හෝ දුරස්ථ වරාය පිළිබඳ නොවේ. ඉතා වෙනස් වන අසාර්ථකත්ව දෙකක් එකම පේළිය නිපදවා වෙනස් සාක්ෂි ඉතිරි කරයි. එකක් බයිට් නිකුත් කිරීමට ප්රතික්ෂේප කරන ගුප්තකේතන පසුතලයකි; අනෙක එහි කේතය ගොඩනැගුණු එන්ට්රොපි මූලාශ්රයට ළඟා නොවන ක්රියාවලියකි. ඒවා වෙන් කිරීමට එක් දෝෂ පෙළ කියවීමක් සහ බන්ධනාගාරයේ සිටින ක්රියාවලියේ ගොනු පද්ධති දර්ශනය දෙස එක් බැල්මක් අවශ්ය වන අතර, මෙම පරීක්ෂාව /dev යටතේ යමක් සෑදීමට පෙර විය යුතුය.
ආපසු එන අගය වෙන් කරන්නේ කුමක්ද
ලේඛනගත කොන්ත්රාත්තුව ප්රතිඵල තුනක් වෙන් කරයි, දෙකක් නොවේ: සාර්ථකත්වය සඳහා 1, පූරණය කළ RAND ක්රමය ඉල්ලීමට සහාය නොදක්වන විට -1, සහ අනෙකුත් අසාර්ථකතා සඳහා 0, පැහැදිලි කිරීම දෝෂ පෙළේ රැඳී ඇත. RAND_bytes යොමුව පහසුවෙන් මඟහැරිය හැකි කරුණක් එකතු කරයි: පෙරනිමි උත්පාදකය ආධාරක වේදිකාවල මෙහෙයුම් පද්ධතියෙන් බීජ ලබා ගනී, එම බීජ වැපිරීම අසාර්ථක වූ විට එය අනාවැකි කළ හැකි බයිට් ආපසු දීම වෙනුවට දෝෂ තත්ත්වයේ රැඳේ.
එම සංඛ්යාවලින් එකක් පමණක් පරිසරය විස්තර කරයි. -1 යනු ගොඩනැගීම, සැපයුම්කරු හෝ විශේෂාංග ප්රශ්නයකි, මන්ද කේතය ක්රියාකාරී ක්රියාත්මක කිරීම ලබා නොදෙන දෙයක් ඉල්ලා සිටියේය. බීජ වැපිරීම පිළිබඳ පැමිණිල්ල සමඟ 0 පරිසර ප්රශ්නයකි, මන්ද උත්පාදකයට එන්ට්රොපිය ලබා ගැනීමටම නොහැකි විය. සංඛ්යාව තනිව කිසි විටෙක කුමක්දැයි නොකියයි, ශ්රිතයේ නමද නොකියයි.
සැඟවුණු උපාංග නෝඩය සැබෑ හේතුව වන විට
සීමිත සේවාවක් ඔබ ටයිප් කරන ෂෙල් එකට වඩා වෙනස් ගසක් දකී. chroot බන්ධනාගාර, බහාලුම් රූප සහ දෘඩ කරන ලද unit ගොනු සාමාන්යයෙන් සත්කාරකයට වඩා අඩු නෝඩ සහිත /dev ඉදිරිපත් කරයි. අසාර්ථක වන ක්රියාත්මක කිරීම /dev/urandom මාර්ග නාමයෙන් විවෘත කරන්නේ නම්, සත්කාරකයම සම්පූර්ණයෙන් සුවපත් ලෙස පෙනෙන විට එම වෙනස ආරම්භය බිඳ දැමීමට ප්රමාණවත්ය. බන්ධනාගාරයෙන් පිටත පවතින උපාංගයක් බන්ධනාගාරයේ ක්රියාවලියට කුමක් විවෘත කිරීමට අවසර ඇත්ද යන්න ගැන කිසිවක් ඔප්පු නොකරයි.
කෙසේ වෙතත් සෑම අහඹු අතුරුමුහුණතකටම මාර්ගයක් අවශ්ය නොවේ. ලිනක්ස් හි getrandom පද්ධති ඇමතුම ගොනු නාමයක් හෝ ගොනු විස්තරකයක් පිළිගන්නේ නැත, සහ එහි අත්පොත පිටුව සඳහන් කරන්නේ chroot උපාංග මාර්ග සඟවන තැනම මෙම ගුණාංගය ප්රයෝජනවත් බවයි.
එබැවින් නැති වූ නෝඩය පිළිබඳ පැහැදිලි කිරීම කේතයේ එක් ශාඛාවක් පිළිබඳ උපකල්පනයකි, අහඹු සංඛ්යා පිළිබඳ සාමාන්ය නියමයක් නොවේ. සාක්ෂි මාර්ගයක් නම් කරන විට එය රැඳේ, සාක්ෂි වෙනත් දෙයක් නම් කරන විට එය අනුමානයකි.
මුලින්ම දෝෂ පෙළ කියවන්න, පසුව ක්රියාවලි දර්ශනය
ප්රශ්නය තීරණය කිරීමට වේගවත්ම මාර්ගය වන්නේ පුස්තකාලය දැනටමත් වාර්තා කළ දේ කියවා, පසුව බන්ධනාගාරය තුළ ඇති දර්ශනය කෙලින්ම බැලීමයි. සේවාව සැබවින්ම පූරණය කළ OpenSSL ගොඩනැගීමෙන් ආරම්භ කරන්න, මන්ද සැපයුම්කරු ගොඩගැසීම් ප්රධාන අනුවාද සහ බෙදාහැරීම් අතර වෙනස් වේ. පසුව systemd වෙතින් කුමන ක්රියාවලියක් ක්රියාත්මක වනවාද සහ ඒ සඳහා කුමන සීමා පවතීද යන්න අසන්න. සත්ය දෙකම මේසය මතට පැමිණි පසුව පමණක් එම ක්රියාවලියට දැකිය හැකි නෝඩ ලැයිස්තුගත කිරීම වටී.
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
මෙම කියවීම් එම ක්රියාවලිය මතම සිදු කරන්න, අහම්බෙන් විවෘතව ඇති ෂෙල් එක මත නොවේ. සත්කාරකයේ /dev සම්බන්ධයක් නැති ක්රියාවලියක දර්ශනය සමඟ සංසන්දනය කිරීම වැරදි යැපීම දෙවරක් අළුත්වැඩියා වන මාර්ගයයි.
යැපීම එහි නම කිව හැකි විට පමණක් එකතු කරන්න
සාක්ෂි සැබවින්ම මාර්ගයක් නම් කරන විට, අළුත්වැඩියාව කුඩාය: එම එක් මාර්ගය බන්ධනාගාරය තුළ ලබා ගත හැකි කර, ඉතිරි සියල්ල තිබෙන්නට හරින්න. එක් නෝඩයක bind mount සාමාන්යයෙන් ප්රමාණවත් වන අතර, mknod නෝඩයේ සම්මත major සහ minor අංක සමඟ mount විකල්පයක් නොවන ස්ථාපනවල එම ප්රතිඵලයම ලබා දෙයි. සැන්ඩ්බොක්ස් පුළුල් කිරීම, සෑම අක්ෂර උපාංගයකටම ප්රවේශය දීම හෝ PrivateDevices අක්රිය කිරීම ඉලක්කගත නිවැරදි කිරීමක් වෙනුවට ස්ථිර ආරක්ෂක පසුබැසීමක් ගෙන එයි.
එන්ට්රොපි ඩේමන් එම අළුත්වැඩියාවට විකල්පයක් නොවේ. haveged වැනි පැකේජ කර්නල් තටාකය පෝෂණය වන ආකාරය වෙනස් කරයි; බන්ධනාගාරයේ ක්රියාවලියට විවෘත කිරීමට අවසර ඇති මාර්ගයක් ඒවාට සෑදිය නොහැක. එකක් ස්ථාපනය කිරීම සෞඛ්ය ප්රස්තාරය වඩා හොඳින් පෙනෙන්නට සලස්වන අතර විවෘත කිරීමේ ඇමතුම තවමත් අසාර්ථක වේ. ගැටලු දෙක වෙන් වෙන්ව තබන්න, නැතහොත් ඊළඟ අසාර්ථකත්වය නැවතත් වැරදි ස්ථරයට ආරෝපණය වනු ඇත.
උත්පාදකය සහ උමඟ වෙන වෙනම තහවුරු කරන්න
නැවත ආරම්භ කිරීම එකම විට පමණක් අසාර්ථකත්වය ඇති කළ එම වින්යාසය, එම unit ගොනුව සහ එම හුදකලා කිරීම නැවත භාවිත කරන පරීක්ෂණයයි. එය ධාවනය කර, පසුව පෙර ඇරඹුමක නියැදියක් වෙනුවට සඟරාවේ නවතම සටහන් කියවන්න.
sudo systemctl restart openvpn-server@lab
sudo journalctl -u openvpn-server@lab --since -5min --no-pager | grep -iE 'rand|entropy|Initialization Sequence'
එම ප්රතිදානයේ වෙන් වූ කරුණු දෙකක් සොයන්න: අහඹු මූලාශ්රය පිළිබඳ පණිවිඩය අතුරුදහන් වීම, සහ උමඟ එහි සුපුරුදු ආරම්භක සන්ධිස්ථානයට ළඟා වීම. නැවත ක්රියා කරන උත්පාදකයක් එක් දේශීය අසාර්ථකත්වයක් ඉවත් කරන අතර සේවාදායක අනන්යතාව, අක්තපත්ර හෝ මාර්ගගත කිරීම ගැන කිසිවක් නොකියයි. පෙර අසාර්ථක වූ එම සේවාලාභී වින්යාසය සමඟ මෙය පරීක්ෂා කරන්න, ප්රතිඵලය සංසන්දනාත්මක වන පරිදි, තවද වඩා හොඳ පමණක් නොවේ.