SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

Ինչպես գիտեք, անկլավում գործարկվող կոդը լրջորեն սահմանափակված է իր ֆունկցիոնալությամբ։ Այն չի կարող համակարգային զանգեր կատարել: Այն չի կարող կատարել I/O գործողություններ: Այն չգիտի հյուրընկալող հավելվածի կոդային հատվածի բազային հասցեն: Այն չի կարող jmp անել կամ զանգահարել հոսթի հավելվածի կոդը: Այն գաղափար չունի հասցեների տարածքի կառուցվածքի մասին, որը կառավարում է հոսթ հավելվածը (օրինակ, թե որ էջերն են քարտեզագրված կամ ինչպիսի տվյալներ են գտնվում այդ էջերում): Այն չի կարող օպերացիոն համակարգին խնդրել, որ հյուրընկալող հավելվածի հիշողության մի մասը քարտեզագրի իր վրա (օրինակ՝ /proc/pid/maps-ի միջոցով): Հյուրընկալող հավելվածի կամայական հիշողության շրջանը կուրորեն կարդալու միամիտ փորձերը, էլ չասած գրելու փորձերը, վաղ թե ուշ (ամենայն հավանականությամբ առաջինը) կհանգեցնեն անկլավային ծրագրի հարկադիր դադարեցմանը: Դա տեղի է ունենում, երբ անկլավի կողմից պահանջվող վիրտուալ հասցեների տարածքը անհասանելի է հյուրընկալող հավելվածին:

Հաշվի առնելով նման դաժան իրողությունները, արդյոք վիրուս գրողը կկարողանա՞ օգտագործել SGX անկլավները՝ իր չարամիտ նպատակներին հասնելու համար:

– Հակել հասցեները ստուգելու համար՝ տեսնելու, թե արդյոք դրանք կարող են կարդալ
– Հասցեները գրելու համար ստուգելու համար
- Հակել հսկողության հոսքը վերահղելու համար
– Ի՞նչ են տալիս չարագործին վերը թվարկված երեք հաքերները:
– Ինչպես է չարագործն օգտագործում այս հաքերը՝ ռանզոմվարի ստեղծելու համար

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

Ելնելով վերը նշված բոլորից՝ ընդհանուր առմամբ ընդունված է, որ անկլավն ի վիճակի է սպասարկել միայն հյուրընկալող հավելվածը, և որ անկլավը չի կարող իրականացնել իր սեփական նախաձեռնությունը, ներառյալ չարամիտները: Սա նշանակում է, որ անկլավները գործնական նշանակություն չունեն վիրուս գրողների համար: Այս հապճեպ ենթադրությունը պատճառներից մեկն է, թե ինչու է SGX պաշտպանությունը ասիմետրիկ. հյուրընկալող հավելվածի կոդը չի կարող մուտք գործել անկլավային հիշողություն, մինչդեռ անկլավային կոդը կարող է կարդալ և գրել ցանկացած հյուրընկալող հավելվածի հիշողության հասցեին:

Հետևաբար, եթե վնասակար անկլավային կոդը կարողանար կամայական համակարգային զանգեր կատարել հոսթ հավելվածի անունից, կատարել կամայական կոդ իր անունից, սկանավորել հյուրընկալող հավելվածի հիշողությունը և գտնել դրա մեջ չարաշահելի ROP շղթաներ, այն կարող էր ամբողջությամբ վերահսկել հոսթ հավելվածը, գաղտագողի ռեժիմ. Այն կարող է ոչ միայն գողանալ և գաղտնագրել օգտվողի ֆայլերը, այլև գործել օգտատիրոջ անունից: Օրինակ՝ նրա անունից ֆիշինգ նամակներ ուղարկեք կամ DoS հարձակումներ կատարեք: Չվախենալով նույնիսկ ամենաարդիական պաշտպանիչ մեխանիզմներից, ինչպիսիք են դեղձանիկները և հասցեների ախտահանումը:

Մենք ձեզ ցույց կտանք մի քանի հաքեր, որոնք հարձակվողներն օգտագործում են վերը նկարագրված սահմանափակումները հաղթահարելու համար՝ SGX-ից օգտվելու իրենց վնասակար նպատակների համար՝ ROP հարձակումներ: Կամ կամայական կոդ՝ քողարկված որպես հյուրընկալող կիրառման գործընթաց (նման է գործընթացի խոռոչում, որը հաճախ օգտագործվում է չարամիտ ծրագրերի կողմից), կամ քողարկելու պատրաստի չարամիտ ծրագիրը (նրա չարամիտ ծրագիրը հակավիրուսային և այլ պաշտպանական մեխանիզմների հետապնդումից փրկելու համար):

Հակել հասցեները ստուգելու համար՝ տեսնելու, թե արդյոք դրանք կարո՞ղ են կարդալ

Քանի որ անկլավը չգիտի, թե վիրտուալ հասցեների տարածության որ տիրույթներն են հասանելի հոսթ հավելվածին, և քանի որ անկլավը ստիպված է դադարեցնել անհասանելի հասցե կարդալու ժամանակ, հարձակվողը խնդիր է դնում սխալի ելք գտնելու: հանդուրժողականորեն սկանավորեք հասցեի տարածքը: Գտեք հասանելի վիրտուալ հասցեները քարտեզագրելու միջոց: Չարագործը լուծում է այս խնդիրը՝ չարաշահելով Intel-ի TSX տեխնոլոգիան։ Օգտագործում է TSX-ի կողմնակի էֆեկտներից մեկը. եթե հիշողության հասանելիության գործառույթը տեղադրված է TSX գործարքի մեջ, ապա անվավեր հասցեներ մուտք գործելուց առաջացող բացառությունները TSX-ի կողմից ճնշվում են՝ չհասնելով օպերացիոն համակարգին: Եթե ​​փորձ է արվում մուտք գործել անվավեր հիշողության հասցե, ապա ընդհատվում է միայն ընթացիկ գործարքը, ոչ թե ամբողջ անկլավային ծրագիրը: Դա. TSX-ը թույլ է տալիս անկլավին անվտանգ մուտք գործել ցանկացած հասցե գործարքի ներսում՝ առանց փլուզման վտանգի:

Եթե նշված հասցեն հասանելի է հյուրընկալող հավելվածը, TSX գործարքը ամենից հաճախ հաջողված է: Հազվագյուտ դեպքերում այն ​​կարող է ձախողվել արտաքին ազդեցությունների պատճառով, ինչպիսիք են ընդհատումները (օրինակ՝ ժամանակացույցի ընդհատումները), քեշի հեռացումը կամ մի քանի գործընթացների միջոցով հիշողության տեղադրության միաժամանակյա փոփոխությունը: Այս հազվադեպ դեպքերում TSX-ը վերադարձնում է սխալի կոդ, որը ցույց է տալիս, որ ձախողումը ժամանակավոր է: Այս դեպքերում պարզապես անհրաժեշտ է վերագործարկել գործարքը:

Եթե նշված հասցեն անհասանելի է հյուրընկալող հավելվածը, TSX-ը ճնշում է բացառությունը, որը տեղի է ունեցել (ՕՀ-ն ծանուցված չէ) և դադարեցնում է գործարքը: Սխալի կոդը վերադարձվում է անկլավային կոդ, որպեսզի այն կարողանա արձագանքել գործարքի չեղարկման փաստին: Այս սխալի կոդերը ցույց են տալիս, որ խնդրո հասցեն հասանելի չէ հոսթ հավելվածին:

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

TSX-ի այս մանիպուլյացիան անկլավի ներսից ունի մի լավ հատկություն չարագործի համար. քանի որ ապարատային կատարողականի հաշվիչներ շատերը չեն թարմացվում անկլավի ծածկագրի կատարման պահին, անհնար է հետևել TSX գործարքներին, որոնք կատարվում են անկլավի ներսում: Այսպիսով, TSX-ի վնասակար մանիպուլյացիաները մնում են ամբողջովին անտեսանելի օպերացիոն համակարգի համար:

Բացի այդ, քանի որ վերոնշյալ հաքը չի հիմնվում որևէ համակարգային զանգերի վրա, այն հնարավոր չէ ոչ հայտնաբերել, ոչ էլ կանխել՝ պարզապես արգելափակելով համակարգային զանգերը. որը սովորաբար դրական արդյունք է տալիս ձվի որսի դեմ պայքարում։

Չարագործը օգտագործում է վերը նկարագրված հաքերը՝ հյուրընկալող հավելվածի կոդը որոնելու համար հարմարանքներ ROP շղթա ձևավորելու համար: Միևնույն ժամանակ, նա կարիք չունի յուրաքանչյուր հասցեի հետաքննության։ Բավական է զոնդավորել մեկ հասցե վիրտուալ հասցեի տարածքի յուրաքանչյուր էջից։ Բոլոր 16 գիգաբայթ հիշողության ստուգումը տևում է մոտ 45 րոպե (Intel i7-6700K-ի վրա): Արդյունքում չարագործը ստանում է գործարկվող էջերի ցանկ, որոնք հարմար են ROP շղթա կառուցելու համար։

Հաքեր՝ գրելու համար հասցեները ստուգելու համար

ROP հարձակման անկլավային տարբերակ իրականացնելու համար հարձակվողը պետք է կարողանա որոնել հոսթ հավելվածի գրավոր չօգտագործված հիշողության տարածքները: Հարձակվողն օգտագործում է այս հիշողության վայրերը՝ կեղծ կույտ շրջանակ ներարկելու և օգտակար բեռ (shellcode) ներարկելու համար: Ներքևի տողն այն է, որ վնասակար անկլավն ի վիճակի չէ պահանջել, որ հյուրընկալող հավելվածն իր համար հիշողություն հատկացնի, փոխարենը կարող է չարաշահել հյուրընկալող հավելվածի կողմից արդեն հատկացված հիշողությունը: Եթե, իհարկե, նրան հաջողվի գտնել նման տարածքներ՝ առանց անկլավի փլուզման։

Չարագործն իրականացնում է այս որոնումը` օգտագործելով TSX-ի մեկ այլ կողմնակի ազդեցություն: Նախ, ինչպես և նախորդ դեպքում, այն ստուգում է հասցեն իր գոյության համար, այնուհետև ստուգում է, թե արդյոք այս հասցեին համապատասխան էջը գրավոր է: Դրա համար չարագործը օգտագործում է հետևյալ հաքերը՝ նա տեղադրում է գրելու ֆունկցիա TSX գործարքի մեջ, և այն ավարտելուց հետո, բայց մինչև ավարտը, նա ստիպողաբար ընդհատում է գործարքը (բացահայտ ընդհատում):

Նայելով TSX գործարքից ստացված վերադարձի կոդը՝ հարձակվողը հասկանում է, թե արդյոք այն կարելի է գրել: Եթե ​​դա «բացահայտ վիժում» է, ապա չարագործը հասկանում է, որ ձայնագրությունը հաջողությամբ կանցներ, եթե նա հետևեր դրան: Եթե ​​էջը միայն կարդալու է, ապա գործարքն ավարտվում է այլ սխալով, քան «բացահայտ ընդհատում»:

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

TSX-ի այս մանիպուլյացիան ունի ևս մեկ առանձնահատկություն, որը հաճելի է չարագործին (բացի ապարատային աշխատանքի հաշվիչների միջոցով հետևելու անհնարինությունից). քանի որ հիշողության գրելու բոլոր հրամանները կատարվում են միայն այն դեպքում, եթե գործարքը հաջող է, գործարքի ավարտին ստիպելը երաշխավորում է, որ զոնդավորված հիշողությունը բջիջը մնում է անփոփոխ:

Hack՝ վերահսկման հոսքը վերահղելու համար

Անկլավից ROP հարձակում իրականացնելիս, ի տարբերություն ավանդական ROP գրոհների, հարձակվողը կարող է ձեռք բերել RIP ռեգիստրի վերահսկողությունը՝ առանց հարձակման ենթարկված ծրագրի որևէ սխալ օգտագործելու (բուֆերային արտահոսք կամ նման բան): Հարձակվողը կարող է ուղղակիորեն վերագրանցել փաթեթում պահվող RIP ռեգիստրի արժեքը: Մասնավորապես, այն կարող է փոխարինել այս ռեգիստրի արժեքը սեփական ROP շղթայով:

Այնուամենայնիվ, եթե ROP շղթան երկար է, ապա հյուրընկալող հավելվածի փաթեթի մեծ մասի վերագրանցումը կարող է հանգեցնել տվյալների կոռուպցիայի և ծրագրի անսպասելի վարքագծի: Չարագործը, ով ձգտում է իր հարձակումը թաքուն իրականացնել, չի բավարարվում իրերի այս վիճակով։ Հետևաբար, այն իր համար ստեղծում է կեղծ ժամանակավոր կույտ շրջանակ և պահում է իր ROP շղթան դրա մեջ: Կեղծ կույտի շրջանակը տեղադրվում է պատահական գրավոր հիշողության վայրում՝ թողնելով իրական կույտը անփոփոխ:

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

Ի՞նչ են տալիս վերը թվարկված երեք հաքերները չարագործին:

(1) Նախ՝ վնասակար անկլավը թալանել հասցեները զննելու համար՝ տեսնելու, թե արդյոք դրանք կարող են կարդալ, – որոնում է հյուրընկալող հավելվածը չարաշահելի ROP գործիքների համար:

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

(2) Այնուհետև ըստ թալանել՝ գրելու համար հասցեները ստուգելու համար, – վնասակար անկլավը նույնացնում է հյուրընկալող հավելվածի հիշողության այն հատվածները, որոնք հարմար են օգտակար բեռ ներարկելու համար:

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

(3) Այնուհետև, անկլավը ստեղծում է ROP շղթա (1) քայլում հայտնաբերված հարմարանքներից և ներարկում այս շղթան հյուրընկալող հավելվածի կույտում:

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

(4) Վերջապես, երբ հոսթ հավելվածը հանդիպում է նախորդ քայլում ստեղծված ROP շղթային, վնասակար ծանրաբեռնվածությունը սկսում է գործարկվել՝ հյուրընկալող հավելվածի արտոնություններով և համակարգային զանգեր կատարելու ունակությամբ:

Ինչպես չարագործն օգտագործում է այս հաքերները՝ ստեղծելու ranzowari

Այն բանից հետո, երբ հյուրընկալող հավելվածը հսկողությունը փոխանցում է անկլավին ECALL-ներից մեկի միջոցով (առանց կասկածելու, որ այս անկլավը վնասակար է), վնասակար անկլավը փնտրում է ազատ տարածություն հյուրընկալող հավելվածի հիշողության մեջ՝ կոդը ներարկելու համար (վերցնելով որպես ազատ տարածություններ այդ բջիջների հաջորդականությունը: որը լցված է զրոներով): Ապա միջոցով թալանել հասցեները զննելու համար՝ տեսնելու, թե արդյոք դրանք կարող են կարդալ, – անկլավը որոնում է գործարկվող էջեր հոսթ հավելվածում և ստեղծում ROP շղթա, որը ստեղծում է նոր ֆայլ «RANSOM» անունով ընթացիկ գրացուցակում (իրական հարձակման դեպքում անկլավը կոդավորում է գոյություն ունեցող օգտվողի ֆայլերը) և ցուցադրում փրկագնի հաղորդագրություն: Միևնույն ժամանակ, հյուրընկալող հավելվածը միամտորեն կարծում է, որ անկլավը պարզապես երկու թիվ է ավելացնում։ Ինչպիսի՞ն է սա կոդում:

Ընկալման հեշտության համար եկեք ներկայացնենք որոշ մնեմոնիկա սահմանումների միջոցով.

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

Մենք պահպանում ենք RSP և RBP ռեգիստրների սկզբնական արժեքները՝ օգտակար բեռը կատարելուց հետո հյուրընկալող հավելվածի բնականոն աշխատանքը վերականգնելու համար.

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

Մենք փնտրում ենք համապատասխան կույտ շրջանակ (տե՛ս «Հակահակ վերահսկման հոսքի վերահղման համար» բաժնի ծածկագիրը):

Գտնել համապատասխան ROP գործիքներ.

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

Բեռը ներարկելու տեղ գտնելը.

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

Մենք կառուցում ենք ROP շղթա.

SGX չարամիտ ծրագիր. ինչպես են չարագործներն օգտագործում Intel-ի նոր տեխնոլոգիան այլ նպատակներով, քան այն նախատեսված էր

Ահա թե ինչպես է Intel-ի SGX տեխնոլոգիան, որը նախատեսված է վնասակար ծրագրերին դիմակայելու համար, չարագործների կողմից շահագործվում՝ հակառակ նպատակներին հասնելու համար:

Source: www.habr.com

Добавить комментарий