ඔබ දන්නා පරිදි, enclave හි ක්රියාත්මක කරන ලද කේතය එහි ක්රියාකාරිත්වය තුළ බරපතල ලෙස සීමා වී ඇත. එයට පද්ධති ඇමතුම් ලබා ගත නොහැක. එය I/O මෙහෙයුම් සිදු කළ නොහැක. එය සත්කාරක යෙදුමේ කේත කොටසෙහි මූලික ලිපිනය නොදනී. එයට jmp හෝ සත්කාරක යෙදුම් කේතය ඇමතීමට නොහැක. ධාරක යෙදුම පාලනය කරන ලිපින අවකාශ ව්යුහය ගැන එයට අදහසක් නැත (උදාහරණයක් ලෙස, කුමන පිටු සිතියම්ගත කර තිබේද හෝ එම පිටුවල කුමන ආකාරයේ දත්ත පිහිටා තිබේද යන්න). එයට ධාරක යෙදුමේ මතකයේ කොටසක් සිතියම්ගත කිරීමට මෙහෙයුම් පද්ධතියෙන් ඉල්ලා සිටිය නොහැක (උදාහරණයක් ලෙස, /proc/pid/maps හරහා). ධාරක යෙදුමක අත්තනෝමතික මතක කලාපයක් අන්ධ ලෙස කියවීමට බොළඳ උත්සාහයන්, ලිවීමට උත්සාහ කිරීම ගැන සඳහන් නොකර, ඉක්මනින් හෝ පසුව (බොහෝ විට පෙර ඒවා) enclave වැඩසටහන බලහත්කාරයෙන් අවසන් කිරීමට හේතු වේ. enclave විසින් ඉල්ලා සිටින අතථ්ය ලිපින අවකාශය කලාපය සත්කාරක යෙදුමට ප්රවේශ විය නොහැකි විට මෙය සිදු වේ.
එවැනි කටුක යථාර්ථයන් සැලකිල්ලට ගෙන, වෛරස් ලේඛකයෙකුට ඔහුගේ ද්වේෂ සහගත අරමුණු සාක්ෂාත් කර ගැනීම සඳහා SGX එන්ක්ලේව් භාවිතා කළ හැකිද?
ඉහත සියල්ල මත පදනම්ව, සාමාන්යයෙන් පිළිගැනෙන්නේ එන්ක්ලේව් එකක් සත්කාරක යෙදුමට පමණක් සේවය කළ හැකි බවත්, ද්වේෂසහගත අය ඇතුළුව එන්ක්ලේව්ට තමන්ගේම මුලපිරීමක් ක්රියාත්මක කළ නොහැකි බවත්ය. මෙයින් අදහස් කරන්නේ වයිරස් ලේඛකයින්ට ප්රායෝගික වටිනාකමක් නොමැති බවයි. මෙම ඉක්මන් උපකල්පනය SGX ආරක්ෂණය අසමමිතික වීමට එක් හේතුවක් වේ: සත්කාරක යෙදුම් කේතයට enclave මතකයට ප්රවේශ විය නොහැකි අතර, enclave කේතයට ඕනෑම සත්කාරක යෙදුම් මතක ලිපිනයකට කියවීමට සහ ලිවීමට හැකිය.
එබැවින්, ධාරක යෙදුම වෙනුවෙන් අත්තනෝමතික පද්ධති ඇමතුම් ලබා ගැනීමට, ඒ වෙනුවෙන් අත්තනෝමතික කේතය ක්රියාත්මක කිරීමට, ධාරක යෙදුමේ මතකය පරිලෝකනය කිරීමට සහ එහි අනිසි ලෙස භාවිතා කළ හැකි ROP දාමයන් සොයා ගැනීමට ද්වේෂසහගත එන්ක්ලේව් කේතයට හැකි වූයේ නම්, එය සත්කාරක යෙදුමේ සම්පූර්ණ පාලනය අල්ලා ගත හැකිය. රහසිගත මාදිලිය. එය පරිශීලක ගොනු සොරකම් කිරීම සහ සංකේතනය කිරීම පමණක් නොව, පරිශීලකයා වෙනුවෙන් ක්රියා කළ හැකිය. උදාහරණයක් ලෙස, ඔහු වෙනුවෙන් තතුබෑම් ඊමේල් යවන්න හෝ DoS ප්රහාර පවත්වන්න. කැනරි ගොඩගැසීම සහ සනීපාරක්ෂාව වැනි නවීනතම ආරක්ෂිත යාන්ත්රණ පවා බියෙන් තොරව.
ඔවුන්ගේම ද්වේෂ සහගත අරමුණු සඳහා SGX හි වාසිය ලබා ගැනීමට ඉහත විස්තර කර ඇති සීමාවන් ජය ගැනීමට ප්රහාරකයන් භාවිතා කරන හැක් කිහිපයක් අපි ඔබට පෙන්වන්නෙමු: ROP ප්රහාර. එක්කෝ ධාරක යෙදුම් ක්රියාවලියක් ලෙස වෙස්වලාගත් අත්තනෝමතික කේතය ක්රියාත්මක කිරීමට (බොහෝ විට අනිෂ්ට මෘදුකාංග මගින් භාවිතා කරන කුහර සැකසීමට සමාන) හෝ සූදානම් කර ඇති අනිෂ්ට මෘදුකාංගයක් වෙස්වළා ගැනීමට (ප්රතිවෛරස සහ අනෙකුත් ආරක්ෂක යාන්ත්රණවලින් එහි අනිෂ්ට මෘදුකාංග හිංසාවෙන් බේරා ගැනීමට).
ඒවා කියවිය හැකිදැයි බැලීමට ලිපින විමර්ශනය කිරීම සඳහා හැක් කරන්න
ධාරක යෙදුමට ප්රවේශ විය හැකි අතථ්ය ලිපින අවකාශයේ කුමන පරාසයන් දැයි Enclave නොදන්නා නිසාත්, ප්රවේශ විය නොහැකි ලිපිනයක් කියවීමට උත්සාහ කිරීමේදී enclave එක අවසන් කිරීමට බල කෙරෙන නිසාත්, ප්රහාරකයා දෝෂයකට මගක් සෙවීමේ කාර්යයට මුහුණ දෙයි- ඉවසීමෙන් ලිපින අවකාශය පරිලෝකනය කරන්න. පවතින අතථ්ය ලිපින සිතියම්ගත කිරීමට ක්රමයක් සොයන්න. දුෂ්ටයා Intel හි TSX තාක්ෂණය වැරදි ලෙස භාවිතා කිරීමෙන් මෙම ගැටළුව විසඳයි. TSX හි එක් අතුරු ආබාධයක් භාවිතා කරයි: මතක ප්රවේශ ශ්රිතය TSX ගණුදෙනුවක තබා තිබේ නම්, වලංගු නොවන ලිපින වෙත ප්රවේශ වීමෙන් පැන නගින ව්යතිරේක මෙහෙයුම් පද්ධතිය වෙත ළඟා නොවී TSX විසින් යටපත් කරනු ලැබේ. වලංගු නොවන මතක ලිපිනයකට ප්රවේශ වීමට උත්සාහ කළහොත්, සම්පූර්ණ එන්ක්ලේව් වැඩසටහන නොව වත්මන් ගනුදෙනුව පමණක් නවත්වනු ලැබේ. එම. බිඳවැටීමේ අවදානමකින් තොරව - ගනුදෙනුවක් තුළ සිට ඕනෑම ලිපිනයකට ආරක්ෂිතව ප්රවේශ වීමට TSX ඉඩ දෙයි.
නම් නිශ්චිත ලිපිනය ලබා ගත හැක සත්කාරක යෙදුම, TSX ගනුදෙනුව බොහෝ විට සාර්ථක වේ. දුර්ලභ අවස්ථාවන්හිදී, බාධා කිරීම් (කාලසටහන් බාධා කිරීම් වැනි), හැඹිලි ඉවත් කිරීම් හෝ බහු ක්රියාවලි මගින් මතක ස්ථානය එකවර වෙනස් කිරීම වැනි බාහිර බලපෑම් හේතුවෙන් එය අසාර්ථක විය හැක. මෙම දුර්ලභ අවස්ථාවන්හිදී, TSX විසින් අසාර්ථකත්වය තාවකාලික බව පෙන්වන දෝෂ කේතයක් ලබා දෙයි. මෙම අවස්ථා වලදී, ඔබ ගනුදෙනුව නැවත ආරම්භ කළ යුතුය.
නම් නිශ්චිත ලිපිනය නොමැත සත්කාරක යෙදුම, TSX සිදු වූ ව්යතිරේකය යටපත් කරයි (OS වෙත දැනුම් දී නොමැත) සහ ගනුදෙනුව නවත්වයි. ගනුදෙනුව අවලංගු කර ඇති බවට ප්රතික්රියා කළ හැකි වන පරිදි දෝෂ කේතයක් එන්ක්ලේව් කේතය වෙත ආපසු එවනු ලැබේ. මෙම දෝෂ කේත පෙන්නුම් කරන්නේ අදාළ ලිපිනය සත්කාරක යෙදුමට නොමැති බවයි.
එන්ක්ලේව් තුළ සිට TSX හි මෙම හැසිරවීම දුෂ්ටයාට හොඳ විශේෂාංගයක් ඇත: බොහෝ දෘඩාංග කාර්ය සාධන කවුන්ටර එන්ක්ලේව් කේතය ක්රියාත්මක කරන අවස්ථාවේ යාවත්කාලීන කර නොමැති බැවින්, එන්ක්ලේව් තුළ ක්රියාත්මක වන TSX ගනුදෙනු නිරීක්ෂණය කළ නොහැක. මේ අනුව, TSX හි අනිෂ්ට හැසිරවීම මෙහෙයුම් පද්ධතියට සම්පූර්ණයෙන්ම නොපෙනී පවතී.
අතිරේකව, ඉහත හැක් කිරීම කිසිදු පද්ධති ඇමතුමක් මත රඳා නොපවතින බැවින්, එය හුදෙක් පද්ධති ඇමතුම් අවහිර කිරීමෙන් අනාවරණය කර ගැනීමට හෝ වැළැක්විය නොහැක; සාමාන්යයෙන් බිත්තර දඩයම් කිරීමට එරෙහි සටනේ ධනාත්මක ප්රතිඵලයක් ලබා දෙයි.
ROP දාමයක් සෑදීමට සුදුසු උපකරණ සඳහා ධාරක යෙදුම් කේතය සෙවීමට දුෂ්ටයා ඉහත විස්තර කර ඇති හැක් භාවිතා කරයි. ඒ අතරම, ඔහු සෑම ලිපිනයක්ම විමර්ශනය කිරීමට අවශ්ය නොවේ. අතථ්ය ලිපින අවකාශයේ සෑම පිටුවකින්ම එක් ලිපිනයක් පරීක්ෂා කිරීම ප්රමාණවත් වේ. ගිගාබයිට් 16 මතකය පරීක්ෂා කිරීමට මිනිත්තු 45ක් පමණ ගත වේ (Intel i7-6700K මත). එහි ප්රතිඵලයක් වශයෙන්, දුෂ්ටයාට ROP දාමයක් තැනීමට සුදුසු ක්රියාත්මක කළ හැකි පිටු ලැයිස්තුවක් ලැබේ.
ලිවීමේ හැකියාව සඳහා ලිපින විමර්ශනය කිරීම සඳහා හැක් කරන්න
ROP ප්රහාරයක එන්ක්ලේව් අනුවාදයක් සිදු කිරීමට, ප්රහාරකයෙකුට සත්කාරක යෙදුමේ ලිවිය හැකි භාවිතයට නොගත් මතක ප්රදේශ සෙවීමට හැකි විය යුතුය. ප්රහාරකයා ව්යාජ ස්ටැක් රාමුවක් එන්නත් කිරීමට සහ ගෙවීමක් (ෂෙල්කෝඩ්) එන්නත් කිරීමට මෙම මතක ස්ථාන භාවිතා කරයි. අවසාන කරුණ නම් ද්වේශසහගත එන්ක්ලේව් එකකට ධාරක යෙදුමට මතකය වෙන් කිරීමට අවශ්ය නොවන නමුත් ඒ වෙනුවට ධාරක යෙදුම මඟින් දැනටමත් වෙන් කර ඇති මතකය අනිසි ලෙස භාවිතා කළ හැකි බවයි. ඇත්ත වශයෙන්ම, එන්ක්ලේව් කඩා වැටීමකින් තොරව එවැනි ප්රදේශ සොයා ගැනීමට ඔහු සමත් වේ නම්.
දුෂ්ටයා TSX හි තවත් අතුරු ආබාධයක් උපයෝගී කර ගනිමින් මෙම සෙවීම සිදු කරයි. පළමුව, පෙර අවස්ථාවක මෙන්, එය එහි පැවැත්ම සඳහා ලිපිනය විමර්ශනය කරයි, පසුව මෙම ලිපිනයට අනුරූප පිටුව ලිවිය හැකිදැයි පරීක්ෂා කරයි. මෙය සිදු කිරීම සඳහා, දුෂ්ටයා පහත හැක් භාවිතා කරයි: ඔහු TSX ගනුදෙනුවක ලිවීමේ කාර්යයක් තබයි, එය සම්පූර්ණ වූ පසු, නමුත් එය සම්පූර්ණ කිරීමට පෙර, ඔහු බලහත්කාරයෙන් ගනුදෙනුව ගබ්සා කරයි (පැහැදිලි ගබ්සා කිරීම).
TSX ගනුදෙනුවකින් ආපසු ලැබෙන කේතය බැලීමෙන්, එය ලිවිය හැකි දැයි ප්රහාරකයා තේරුම් ගනී. එය "පැහැදිලි ගබ්සාවක්" නම්, දුෂ්ටයා එය අනුගමනය කළේ නම් පටිගත කිරීම සාර්ථක වන බව තේරුම් ගනී. පිටුව කියවීමට පමණක් නම්, ගනුදෙනුව "පැහැදිලි ගබ්සා කිරීම" හැර වෙනත් දෝෂයකින් අවසන් වේ.
TSX හි මෙම හැසිරවීම දුෂ්ටයාට ප්රියජනක තවත් විශේෂාංගයක් ඇත (දෘඪාංග කාර්ය සාධන කවුන්ටර හරහා ලුහුබැඳීමේ නොහැකියාවට අමතරව): සියලුම මතක ලිවීමේ විධානයන් සිදු කරනු ලබන්නේ ගනුදෙනුව සාර්ථක වුවහොත් පමණක් බැවින්, ගණුදෙනුව සම්පූර්ණ කිරීමට බල කිරීම මගින් විමර්ශන මතකය සහතික කරයි. සෛලය නොවෙනස්ව පවතී.
පාලන ප්රවාහය හරවා යැවීමට හැක් කරන්න
එන්ක්ලේව් එකකින් ROP ප්රහාරයක් සිදු කරන විට - සාම්ප්රදායික ROP ප්රහාර මෙන් නොව - ප්රහාරකයාට ප්රහාරක වැඩසටහනේ (බෆර පිටාර ගැලීම හෝ එවැනි දෙයක්) කිසිදු දෝෂයක් ගසා නොගෙන RIP ලේඛනයේ පාලනය ලබා ගත හැකිය. ප්රහාරකයෙකුට තොගයේ ගබඩා කර ඇති RIP ලේඛනයේ අගය කෙලින්ම උඩින් ලිවිය හැක. විශේෂයෙන්ම, මෙම ලේඛනයේ අගය තමන්ගේම ROP දාමයකින් ප්රතිස්ථාපනය කළ හැකිය.
කෙසේ වෙතත්, ROP දාමය දිගු නම්, ධාරක යෙදුම් තොගයේ විශාල කොටසක් උඩින් ලිවීම දත්ත දූෂණයට සහ අනපේක්ෂිත වැඩසටහන් හැසිරීමට හේතු විය හැක. තම ප්රහාරය රහසිගතව සිදු කිරීමට උත්සාහ කරන දුෂ්ටයා මෙම තත්වය ගැන සෑහීමකට පත් නොවේ. එමනිසා, එය තමාටම ව්යාජ තාවකාලික අට්ටි රාමුවක් සාදා එහි ROP දාමය ගබඩා කරයි. ව්යාජ අට්ටි රාමුව අහඹු ලෙස ලිවිය හැකි මතක ස්ථානයක තබා ඇති අතර, සැබෑ තොගය නොවෙනස්ව තබයි.
ඉහත ලැයිස්තුගත කර ඇති හැක් තුන දුෂ්ටයාට ලබා දෙන්නේ කුමක්ද?
(1) පළමුව, ද්වේෂ සහගත එන්ක්ලේව් හරහා ලිපින කියවිය හැකිද යන්න සොයා බැලීම සඳහා හැක් කරන්න, – අපයෝජනය කළ හැකි ROP උපකරණ සඳහා සත්කාරක යෙදුම සොයයි.
(2) ඉන්පසුව ලිවීමේ හැකියාව සඳහා ලිපින විමර්ශනය කිරීම සඳහා හැක්, – ද්වේශ සහගත සංවෘතයක් මඟින් ධාරක යෙදුමේ මතකයේ ඇති ප්රදේශ හඳුනා ගනී, ඒවා ගෙවීමක් එන්නත් කිරීම සඳහා සුදුසු වේ.
(3) මීළඟට, enclave විසින් පියවර (1) හි සොයාගත් උපකරණවලින් ROP දාමයක් නිර්මාණය කර මෙම දාමය ධාරක යෙදුම් තොගයට එන්නත් කරයි.
(4) අවසාන වශයෙන්, සත්කාරක යෙදුම පෙර පියවරේදී නිර්මාණය කරන ලද ROP දාමය හමු වූ විට, ද්වේෂසහගත ගෙවීම ක්රියාත්මක වීමට පටන් ගනී - සත්කාරක යෙදුමේ වරප්රසාද සහ පද්ධති ඇමතුම් ලබා ගැනීමේ හැකියාව සමඟ.
දුෂ්ටයෙක් රන්සොවාරි නිර්මාණය කිරීමට මෙම හැක් භාවිතා කරන ආකාරය
ධාරක යෙදුම ECALL එකක් හරහා පාලනය enclave වෙත මාරු කළ පසු (මෙම enclave ද්වේෂසහගත බව සැක නොකර), අනිෂ්ට enclave කේතය එන්නත් කිරීම සඳහා සත්කාරක යෙදුමේ මතකයේ නිදහස් ඉඩක් සොයයි (එම සෛල අනුපිළිවෙලවල් නිදහස් අවකාශයන් ලෙස ගනිමින්. ශුන්ය වලින් පිරී ඇති බව). ඉන්පසු හරහා ලිපින කියවිය හැකිද යන්න සොයා බැලීම සඳහා හැක් කරන්න, – ධාරක යෙදුම තුළ ක්රියාත්මක කළ හැකි පිටු සඳහා enclave සොයන අතර ROP දාමයක් උත්පාදනය කරන අතර එය වත්මන් නාමාවලියෙහි “RANSOM” නමින් නව ගොනුවක් නිර්මාණය කරයි (සැබෑ ප්රහාරයකදී, enclave දැනට පවතින පරිශීලක ගොනු සංකේතනය කරයි) සහ කප්පම් පණිවිඩයක් පෙන්වයි. ඒ අතරම, ධාරක යෙදුම බොළඳ ලෙස විශ්වාස කරන්නේ එන්ක්ලේව් හුදෙක් සංඛ්යා දෙකක් එකතු කරන බවයි. කේතයේ මෙය පෙනෙන්නේ කෙසේද?
සංජානනයේ පහසුව සඳහා, නිර්වචන හරහා සිහිවටන කිහිපයක් හඳුන්වා දෙමු:
ගෙවීම් ක්රියාත්මක කිරීමෙන් පසු සත්කාරක යෙදුමේ සාමාන්ය ක්රියාකාරිත්වය යථා තත්වයට පත් කිරීම සඳහා අපි RSP සහ RBP ලේඛනවල මුල් අගයන් සුරකිමු:
අපි සුදුසු අට්ටි රාමුවක් සොයමින් සිටිමු (“පාලක ප්රවාහය යළි හරවා යැවීම සඳහා හැක්” යන කොටසේ කේතය බලන්න).
සුදුසු ROP උපකරණ සොයා ගැනීම:
පැටවුම එන්නත් කිරීමට ස්ථානයක් සොයා ගැනීම:
අපි ROP දාමයක් ගොඩනඟමු:
අනිෂ්ට වැඩසටහන් වලට එරෙහිව නිර්මාණය කර ඇති Intel හි SGX තාක්ෂණය, ප්රතිවිරුද්ධ අරමුණු සාක්ෂාත් කර ගැනීම සඳහා දුෂ්ටයන් විසින් ගසාකනු ලබන්නේ එලෙස ය.
මූලාශ්රය: www.habr.com