మీకు తెలిసినట్లుగా, ఎన్క్లేవ్లో అమలు చేయబడిన కోడ్ దాని కార్యాచరణలో తీవ్రంగా పరిమితం చేయబడింది. ఇది సిస్టమ్ కాల్లను చేయదు. ఇది I/O కార్యకలాపాలను నిర్వహించదు. హోస్ట్ అప్లికేషన్ కోడ్ సెగ్మెంట్ యొక్క మూల చిరునామా దీనికి తెలియదు. ఇది jmp లేదా హోస్ట్ అప్లికేషన్ కోడ్కి కాల్ చేయదు. హోస్ట్ అప్లికేషన్ను నియంత్రించే అడ్రస్ స్పేస్ స్ట్రక్చర్ గురించి దీనికి ఎటువంటి ఆలోచన లేదు (ఉదాహరణకు, ఏ పేజీలు మ్యాప్ చేయబడ్డాయి లేదా ఆ పేజీలలో ఏ రకమైన డేటా ఉంది). హోస్ట్ అప్లికేషన్ యొక్క మెమరీ భాగాన్ని మ్యాప్ చేయమని ఇది ఆపరేటింగ్ సిస్టమ్ను అడగదు (ఉదాహరణకు, /proc/pid/maps ద్వారా). హోస్ట్ అప్లికేషన్ యొక్క ఏకపక్ష మెమరీ ప్రాంతాన్ని గుడ్డిగా చదవడానికి అమాయక ప్రయత్నాలు, వ్రాయడానికి చేసే ప్రయత్నాల గురించి చెప్పనవసరం లేదు, ముందుగానే లేదా తరువాత (ఎక్కువగా మునుపటిది) ఎన్క్లేవ్ ప్రోగ్రామ్ను బలవంతంగా రద్దు చేయడానికి దారి తీస్తుంది. ఎన్క్లేవ్ అభ్యర్థించిన వర్చువల్ అడ్రస్ స్పేస్ రీజియన్ని హోస్ట్ అప్లికేషన్కి యాక్సెస్ చేయలేనప్పుడు ఇది జరుగుతుంది.
అటువంటి కఠినమైన వాస్తవాల కారణంగా, వైరస్ రచయిత తన హానికరమైన లక్ష్యాలను సాధించడానికి SGX ఎన్క్లేవ్లను ఉపయోగించగలరా?
పైన పేర్కొన్న అన్నిటి ఆధారంగా, ఒక ఎన్క్లేవ్ హోస్ట్ అప్లికేషన్ను మాత్రమే అందించగలదని మరియు ఎన్క్లేవ్ హానికరమైన వాటితో సహా దాని స్వంత చొరవను ఉపయోగించుకోలేదని సాధారణంగా అంగీకరించబడుతుంది. వైరస్ రచయితలకు ఎన్క్లేవ్లు ఆచరణాత్మక విలువను కలిగి ఉండవని దీని అర్థం. SGX రక్షణ అసమానంగా ఉండటానికి ఈ తొందరపాటు ఊహ ఒక కారణం: హోస్ట్ అప్లికేషన్ కోడ్ ఎన్క్లేవ్ మెమరీని యాక్సెస్ చేయదు, అయితే ఎన్క్లేవ్ కోడ్ ఏదైనా హోస్ట్ అప్లికేషన్ మెమరీ చిరునామాను చదవగలదు మరియు వ్రాయగలదు.
అందువల్ల, హానికరమైన ఎన్క్లేవ్ కోడ్ హోస్ట్ అప్లికేషన్ తరపున ఏకపక్ష సిస్టమ్ కాల్లు చేయగలిగితే, దాని తరపున ఏకపక్ష కోడ్ని అమలు చేయగలిగితే, హోస్ట్ అప్లికేషన్ మెమరీని స్కాన్ చేసి, అందులో దుర్వినియోగం చేయగల ROP చైన్లను కనుగొనగలిగితే, అది హోస్ట్ అప్లికేషన్పై పూర్తి నియంత్రణను స్వాధీనం చేసుకోవచ్చు. స్టెల్త్ మోడ్. ఇది వినియోగదారు ఫైల్లను దొంగిలించడం మరియు గుప్తీకరించడం మాత్రమే కాకుండా, వినియోగదారు తరపున కూడా పని చేస్తుంది. ఉదాహరణకు, అతని తరపున ఫిషింగ్ ఇమెయిల్లను పంపండి లేదా DoS దాడులను నిర్వహించండి. కానరీలను పేర్చడం మరియు అడ్రస్ శానిటైజేషన్ వంటి అత్యంత ఆధునిక రక్షణ యంత్రాంగాల భయం లేకుండా.
దాడి చేసేవారు తమ స్వంత హానికరమైన ప్రయోజనాల కోసం SGX ప్రయోజనాన్ని పొందడానికి పైన వివరించిన పరిమితులను అధిగమించడానికి ఉపయోగించే కొన్ని హ్యాక్లను మేము మీకు చూపుతాము: ROP దాడులు. హోస్ట్ అప్లికేషన్ ప్రాసెస్గా మారువేషంలో ఉన్న ఏకపక్ష కోడ్ని అమలు చేయడం (మాల్వేర్లు తరచుగా ఉపయోగించే ప్రాసెస్ హాలోవింగ్ లాగా), లేదా రెడీమేడ్ మాల్వేర్ను దాచిపెట్టడం (యాంటీవైరస్లు మరియు ఇతర డిఫెన్స్ మెకానిజమ్ల ద్వారా వేధింపుల నుండి దాని మాల్వేర్ను రక్షించడానికి).
అడ్రస్లను చదవడం సాధ్యమేనా అని చూసేందుకు వాటిని హ్యాక్ చేయండి
హోస్ట్ అప్లికేషన్కి వర్చువల్ అడ్రస్ స్పేస్లోని ఏ పరిధులు అందుబాటులో ఉన్నాయో ఎన్క్లేవ్కు తెలియదు కాబట్టి మరియు యాక్సెస్ చేయలేని చిరునామాను చదవడానికి ప్రయత్నించినప్పుడు ఎన్క్లేవ్ను ముగించవలసి వస్తుంది కాబట్టి, దాడి చేసే వ్యక్తి తప్పుకు మార్గాన్ని కనుగొనే పనిని ఎదుర్కొంటాడు- చిరునామా స్థలాన్ని సహనంతో స్కాన్ చేయండి. అందుబాటులో ఉన్న వర్చువల్ చిరునామాలను మ్యాప్ చేయడానికి ఒక మార్గాన్ని కనుగొనండి. ఇంటెల్ యొక్క TSX సాంకేతికతను దుర్వినియోగం చేయడం ద్వారా విలన్ ఈ సమస్యను పరిష్కరిస్తాడు. TSX యొక్క దుష్ప్రభావాలలో ఒకదానిని ఉపయోగిస్తుంది: మెమరీ యాక్సెస్ ఫంక్షన్ TSX లావాదేవీలో ఉంచబడితే, చెల్లని చిరునామాలను యాక్సెస్ చేయడం వలన ఉత్పన్నమయ్యే మినహాయింపులు TSX ద్వారా ఆపరేటింగ్ సిస్టమ్కు చేరకుండానే అణచివేయబడతాయి. చెల్లని మెమరీ చిరునామాను యాక్సెస్ చేయడానికి ప్రయత్నించినట్లయితే, ప్రస్తుత లావాదేవీ మాత్రమే నిలిపివేయబడుతుంది, మొత్తం ఎన్క్లేవ్ ప్రోగ్రామ్ కాదు. ఆ. TSX ఒక లావాదేవీలో నుండి ఏదైనా చిరునామాను సురక్షితంగా యాక్సెస్ చేయడానికి ఒక ఎన్క్లేవ్ను అనుమతిస్తుంది - కూలిపోయే ప్రమాదం లేకుండా.
ఉంటే పేర్కొన్న చిరునామా అందుబాటులో ఉంది హోస్ట్ అప్లికేషన్, TSX లావాదేవీ చాలా తరచుగా విజయవంతమవుతుంది. అరుదైన సందర్భాల్లో, అంతరాయాలు (షెడ్యూలర్ అంతరాయాలు వంటివి), కాష్ తొలగింపులు లేదా బహుళ ప్రక్రియల ద్వారా మెమరీ స్థానాన్ని ఏకకాలంలో సవరించడం వంటి బాహ్య ప్రభావాల కారణంగా ఇది విఫలం కావచ్చు. ఈ అరుదైన సందర్భాల్లో, TSX వైఫల్యం తాత్కాలికమని సూచించే ఎర్రర్ కోడ్ను అందిస్తుంది. ఈ సందర్భాలలో, మీరు లావాదేవీని పునఃప్రారంభించాలి.
ఉంటే పేర్కొన్న చిరునామా అందుబాటులో లేదు హోస్ట్ అప్లికేషన్, TSX సంభవించిన మినహాయింపును అణిచివేస్తుంది (OSకి తెలియజేయబడలేదు) మరియు లావాదేవీని రద్దు చేస్తుంది. ఒక ఎర్రర్ కోడ్ ఎన్క్లేవ్ కోడ్కి తిరిగి వస్తుంది, తద్వారా లావాదేవీ రద్దు చేయబడిందనే దానికి ప్రతిస్పందించవచ్చు. ప్రశ్నలోని చిరునామా హోస్ట్ అప్లికేషన్కు అందుబాటులో లేదని ఈ ఎర్రర్ కోడ్లు సూచిస్తున్నాయి.
ఎన్క్లేవ్ లోపల నుండి TSX యొక్క ఈ మానిప్యులేషన్ విలన్కు చక్కని ఫీచర్ని కలిగి ఉంది: ఎన్క్లేవ్ కోడ్ అమలు చేయబడిన సమయంలో చాలా హార్డ్వేర్ పనితీరు కౌంటర్లు నవీకరించబడనందున, ఎన్క్లేవ్ లోపల అమలు చేయబడిన TSX లావాదేవీలను ట్రాక్ చేయడం అసాధ్యం. అందువలన, TSX యొక్క హానికరమైన తారుమారు ఆపరేటింగ్ సిస్టమ్కు పూర్తిగా కనిపించదు.
అదనంగా, పైన పేర్కొన్న హ్యాక్ ఏ సిస్టమ్ కాల్లపై ఆధారపడదు కాబట్టి, సిస్టమ్ కాల్లను నిరోధించడం ద్వారా దీనిని గుర్తించడం లేదా నిరోధించడం సాధ్యం కాదు; ఇది సాధారణంగా గుడ్డు వేటకు వ్యతిరేకంగా పోరాటంలో సానుకూల ఫలితాన్ని ఇస్తుంది.
ROP చైన్ను రూపొందించడానికి అనువైన గాడ్జెట్ల కోసం హోస్ట్ అప్లికేషన్ కోడ్ను శోధించడానికి విలన్ పైన వివరించిన హ్యాక్ను ఉపయోగిస్తాడు. అదే సమయంలో, అతను ప్రతి చిరునామాను పరిశీలించాల్సిన అవసరం లేదు. వర్చువల్ అడ్రస్ స్పేస్లోని ప్రతి పేజీ నుండి ఒక చిరునామాను పరిశీలిస్తే సరిపోతుంది. మొత్తం 16 గిగాబైట్ల మెమరీని పరిశీలించడానికి దాదాపు 45 నిమిషాలు పడుతుంది (ఇంటెల్ i7-6700Kలో). ఫలితంగా, విలన్ ఒక ROP గొలుసును నిర్మించడానికి అనువైన ఎక్జిక్యూటబుల్ పేజీల జాబితాను అందుకుంటాడు.
వ్రాత సామర్థ్యం కోసం చిరునామాలను పరిశీలించడం కోసం హ్యాక్ చేయండి
ROP దాడి యొక్క ఎన్క్లేవ్ వెర్షన్ను అమలు చేయడానికి, దాడి చేసే వ్యక్తి హోస్ట్ అప్లికేషన్ యొక్క వ్రాయదగిన ఉపయోగించని మెమరీ ప్రాంతాల కోసం శోధించగలగాలి. దాడి చేసే వ్యక్తి నకిలీ స్టాక్ ఫ్రేమ్ను ఇంజెక్ట్ చేయడానికి మరియు పేలోడ్ (షెల్కోడ్) ఇంజెక్ట్ చేయడానికి ఈ మెమరీ స్థానాలను ఉపయోగిస్తాడు. బాటమ్ లైన్ ఏమిటంటే, హానికరమైన ఎన్క్లేవ్ దాని కోసం మెమరీని కేటాయించడానికి హోస్ట్ అప్లికేషన్ అవసరం లేదు, కానీ బదులుగా హోస్ట్ అప్లికేషన్ ద్వారా ఇప్పటికే కేటాయించిన మెమరీని దుర్వినియోగం చేయవచ్చు. ఒకవేళ, అతను ఎన్క్లేవ్ కూలిపోకుండా అలాంటి ప్రాంతాలను కనుగొనగలిగితే.
TSX యొక్క మరొక దుష్ప్రభావాన్ని ఉపయోగించడం ద్వారా విలన్ ఈ శోధనను కొనసాగిస్తాడు. ముందుగా, మునుపటి సందర్భంలో వలె, ఇది దాని ఉనికి కోసం చిరునామాను పరిశీలిస్తుంది, ఆపై ఈ చిరునామాకు సంబంధించిన పేజీ వ్రాయదగినదా అని తనిఖీ చేస్తుంది. దీన్ని చేయడానికి, విలన్ ఈ క్రింది హ్యాక్ను ఉపయోగిస్తాడు: అతను TSX లావాదేవీలో వ్రాత ఫంక్షన్ను ఉంచుతాడు మరియు అది పూర్తయిన తర్వాత, కానీ అది పూర్తి చేయడానికి ముందు, అతను లావాదేవీని బలవంతంగా రద్దు చేస్తాడు (స్పష్టమైన రద్దు).
TSX లావాదేవీ నుండి రిటర్న్ కోడ్ని చూడటం ద్వారా, దాడి చేసే వ్యక్తి అది వ్రాయదగినదో కాదో అర్థం చేసుకుంటాడు. అది "స్పష్టమైన అబార్షన్" అయితే, విలన్ దానిని అనుసరించినట్లయితే రికార్డింగ్ విజయవంతమయ్యేదని అర్థం చేసుకున్నాడు. పేజీ చదవడానికి మాత్రమే అయితే, లావాదేవీ "స్పష్టమైన రద్దు" కాకుండా ఇతర లోపంతో ముగుస్తుంది.
TSX యొక్క ఈ మానిప్యులేషన్ విలన్కు చక్కని మరొక ఫీచర్ను కలిగి ఉంది (హార్డ్వేర్ పనితీరు కౌంటర్ల ద్వారా ట్రాకింగ్ చేయడం అసంభవంతో పాటు): లావాదేవీ విజయవంతమైతే మాత్రమే అన్ని మెమరీ రైట్ ఆదేశాలు కట్టుబడి ఉంటాయి కాబట్టి, లావాదేవీని బలవంతంగా పూర్తి చేయడం ద్వారా ప్రోబ్డ్ మెమరీ సెల్ నిర్ధారిస్తుంది. మారదు.
నియంత్రణ ప్రవాహాన్ని దారి మళ్లించడానికి హాక్ చేయండి
ఎన్క్లేవ్ నుండి ROP దాడిని చేస్తున్నప్పుడు - సాంప్రదాయ ROP దాడుల వలె కాకుండా - దాడి చేసే వ్యక్తి దాడి చేయబడిన ప్రోగ్రామ్లోని (బఫర్ ఓవర్ఫ్లో లేదా అలాంటిదే) ఎలాంటి బగ్లను ఉపయోగించకుండా RIP రిజిస్టర్పై నియంత్రణను పొందవచ్చు. దాడి చేసే వ్యక్తి స్టాక్లో నిల్వ చేయబడిన RIP రిజిస్టర్ విలువను నేరుగా ఓవర్రైట్ చేయవచ్చు. ప్రత్యేకించి, ఇది ఈ రిజిస్టర్ విలువను దాని స్వంత ROP గొలుసుతో భర్తీ చేయగలదు.
అయినప్పటికీ, ROP గొలుసు పొడవుగా ఉంటే, హోస్ట్ అప్లికేషన్ యొక్క స్టాక్లోని పెద్ద భాగాన్ని ఓవర్రైట్ చేయడం డేటా అవినీతికి మరియు ఊహించని ప్రోగ్రామ్ ప్రవర్తనకు దారి తీస్తుంది. తన దాడిని రహస్యంగా నిర్వహించాలని చూస్తున్న విలన్ ఈ పరిస్థితితో సంతృప్తి చెందడు. అందువల్ల, ఇది తన కోసం నకిలీ తాత్కాలిక స్టాక్ ఫ్రేమ్ను సృష్టించి, దాని ROP గొలుసును అందులో నిల్వ చేస్తుంది. నకిలీ స్టాక్ ఫ్రేమ్ యాదృచ్ఛికంగా వ్రాయగలిగే మెమరీ లొకేషన్లో ఉంచబడుతుంది, నిజమైన స్టాక్ను అలాగే ఉంచుతుంది.
పైన పేర్కొన్న మూడు హ్యాక్లు విలన్కు ఏమి ఇస్తాయి?
(1) ముందుగా, హానికరమైన ఎన్క్లేవ్ ద్వారా అడ్రస్లను చదవడం సాధ్యమేనా అని చూసేందుకు వాటిని హ్యాక్ చేయండి, – దుర్వినియోగం చేయదగిన ROP గాడ్జెట్ల కోసం హోస్ట్ అప్లికేషన్ను శోధిస్తుంది.
(2) అప్పుడు ద్వారా వ్రాత సామర్థ్యం కోసం చిరునామాలను పరిశీలించడం కోసం హ్యాక్ చేయండి, – హానికరమైన ఎన్క్లేవ్ హోస్ట్ అప్లికేషన్ మెమరీలో పేలోడ్ను ఇంజెక్ట్ చేయడానికి తగిన ప్రాంతాలను గుర్తిస్తుంది.
(3) తర్వాత, ఎన్క్లేవ్ స్టెప్ (1)లో కనుగొనబడిన గాడ్జెట్ల నుండి ROP చైన్ను సృష్టిస్తుంది మరియు ఈ గొలుసును హోస్ట్ అప్లికేషన్ స్టాక్లోకి ఇంజెక్ట్ చేస్తుంది.
(4) చివరగా, హోస్ట్ అప్లికేషన్ మునుపటి దశలో సృష్టించబడిన ROP గొలుసును ఎదుర్కొన్నప్పుడు, హానికరమైన పేలోడ్ అమలు చేయడం ప్రారంభమవుతుంది - హోస్ట్ అప్లికేషన్ యొక్క అధికారాలు మరియు సిస్టమ్ కాల్లు చేయగల సామర్థ్యంతో.
రంజోవారీని సృష్టించడానికి విలన్ ఈ హ్యాక్లను ఎలా ఉపయోగిస్తాడు
హోస్ట్ అప్లికేషన్ ECALL లలో ఒకదాని ద్వారా నియంత్రణను ఎన్క్లేవ్కు బదిలీ చేసిన తర్వాత (ఈ ఎన్క్లేవ్ హానికరమైనదని అనుమానించకుండా), హానికరమైన ఎన్క్లేవ్ కోడ్ ఇంజెక్ట్ చేయడానికి హోస్ట్ అప్లికేషన్ మెమరీలో ఖాళీ స్థలం కోసం శోధిస్తుంది (సెల్ల సీక్వెన్స్లను ఖాళీగా తీసుకుంటుంది. అది సున్నాలతో నిండి ఉంటుంది). అప్పుడు ద్వారా అడ్రస్లను చదవడం సాధ్యమేనా అని చూసేందుకు వాటిని హ్యాక్ చేయండి, – ఎన్క్లేవ్ హోస్ట్ అప్లికేషన్లో ఎక్జిక్యూటబుల్ పేజీల కోసం శోధిస్తుంది మరియు ప్రస్తుత డైరెక్టరీలో (నిజమైన దాడిలో, ఎన్క్లేవ్ ఇప్పటికే ఉన్న యూజర్ ఫైల్లను ఎన్క్రిప్ట్ చేస్తుంది) “RANSOM” పేరుతో కొత్త ఫైల్ను సృష్టించే ROP గొలుసును ఉత్పత్తి చేస్తుంది మరియు విమోచన సందేశాన్ని ప్రదర్శిస్తుంది. అదే సమయంలో, ఎన్క్లేవ్ కేవలం రెండు సంఖ్యలను జోడిస్తోందని హోస్ట్ అప్లికేషన్ అమాయకంగా నమ్ముతుంది. కోడ్లో ఇది ఎలా కనిపిస్తుంది?
అవగాహన సౌలభ్యం కోసం, నిర్వచనాల ద్వారా కొన్ని జ్ఞాపకాలను పరిచయం చేద్దాం:
పేలోడ్ని అమలు చేసిన తర్వాత హోస్ట్ అప్లికేషన్ యొక్క సాధారణ ఆపరేషన్ను పునరుద్ధరించడానికి మేము RSP మరియు RBP రిజిస్టర్ల అసలు విలువలను సేవ్ చేస్తాము:
మేము తగిన స్టాక్ ఫ్రేమ్ కోసం చూస్తున్నాము (“నియంత్రణ ప్రవాహాన్ని దారి మళ్లించడం కోసం హ్యాక్” విభాగం నుండి కోడ్ను చూడండి).
తగిన ROP గాడ్జెట్లను కనుగొనడం:
పేలోడ్ను ఇంజెక్ట్ చేయడానికి స్థలాన్ని కనుగొనడం:
మేము ROP గొలుసును నిర్మిస్తాము:
హానికరమైన ప్రోగ్రామ్లను ఎదుర్కోవడానికి రూపొందించబడిన ఇంటెల్ యొక్క SGX సాంకేతికతను వ్యతిరేక లక్ష్యాలను సాధించడానికి విలన్లు ఈ విధంగా ఉపయోగించుకుంటారు.
మూలం: www.habr.com