Հարձակեք Intel SGX-ի վրա՝ զգայուն տվյալներ հանելու կամ անկլավում կոդ գործարկելու համար

Չինաստանի Ժողովրդա-ազատագրական բանակի Պաշտպանական գիտության և տեխնոլոգիայի համալսարանի, Սինգապուրի ազգային համալսարանի և Ցյուրիխի ETH-ի հետազոտողները մշակել են հարձակման նոր մեթոդ Intel SGX (Software Guard eXtensions) մեկուսացված անկլավների դեմ: Հարձակումը ստացել է SmashEx անվանումը և առաջացել է Intel SGX-ի համար գործարկման ժամանակի բաղադրիչների շահագործման ընթացքում բացառությունների հետ կապված վերագրանցման հետ կապված խնդիրների պատճառով: Առաջարկվող հարձակման մեթոդը հնարավորություն է տալիս օպերացիոն համակարգի նկատմամբ վերահսկողության դեպքում որոշել անկլավում տեղակայված գաղտնի տվյալները կամ կազմակերպել սեփական ծածկագրի պատճենումը անկլավի հիշողության մեջ և դրա կատարումը:

Exploit-ի նախատիպերը պատրաստվել են գործարկման անկլավների համար՝ հիմնված Intel SGX SDK-ի (CVE-2021-0186) և Microsoft Open Enclave-ի (CVE-2021-33767) վրա: Առաջին դեպքում ցուցադրվեց HTTPS-ի համար վեբ սերվերում օգտագործվող RSA ստեղնը հանելու հնարավորությունը, իսկ երկրորդում՝ հնարավոր եղավ որոշել անկլավի ներսում աշխատող cURL կոմունալից ստացված բովանդակությունը։ Խոցելիությունն արդեն ծրագրային կերպով շտկվել է Intel SGX SDK 2.13 և Open Enclave 0.17.1 թողարկումներում։ Բացի Intel SGX SDK-ից և Microsoft Open Enclave-ից, խոցելիությունը հայտնվում է նաև Google Asylo SDK-ում, EdgelessRT-ում, Apache Teaclav-ում, Rust SGX SDK-ում, SGX-LKL-ում, CoSMIX-ում և Veracruz-ում:

Հիշեցնենք, որ SGX (Software Guard Extensions) տեխնոլոգիան հայտնվել է վեցերորդ սերնդի Intel Core պրոցեսորներում (Skylake) և առաջարկում է մի շարք հրահանգներ, որոնք թույլ են տալիս օգտվողի մակարդակի հավելվածներին հատկացնել փակ հիշողության տարածքներ՝ անկլավներ, որոնց բովանդակությունը չի կարող կարդալ և փոփոխվել նույնիսկ միջուկը և կոդը, որն իրականացվում է ring0, SMM և VMM ռեժիմներով: Անհնար է հսկողությունը փոխանցել կոդին անկլավում, օգտագործելով ավանդական ցատկման գործառույթները և ռեգիստրների և կույտի հետ մանիպուլյացիաները. Այս դեպքում անկլավում տեղադրված ծածկագիրը կարող է օգտագործել դասական զանգի մեթոդները՝ անկլավի ներսում ֆունկցիաներ կանչելու համար և արտաքին գործառույթներ կանչելու հատուկ հրահանգ։ Անկլավային հիշողության կոդավորումն օգտագործվում է ապարատային հարձակումներից պաշտպանվելու համար, ինչպիսին է DRAM կապը:

Հարձակեք Intel SGX-ի վրա՝ զգայուն տվյալներ հանելու կամ անկլավում կոդ գործարկելու համար

Խնդիրն այն է, որ SGX տեխնոլոգիան թույլ է տալիս օպերացիոն համակարգին ընդհատել անկլավի կատարումը՝ ապարատային բացառություն գցելով, իսկ անկլավները պատշաճ կերպով չեն իրականացնում պարզունակ պրիմիտիվներ՝ ատոմային կերպով նման բացառություններ վարելու համար: Ի տարբերություն օպերացիոն համակարգի միջուկի և սովորական հավելվածների, անկլավների ներսում գտնվող կոդը մուտք չունի պրիմիտիվներ՝ ատոմային գործողություններ կազմակերպելու համար ասինխրոն բարձրացված բացառությունների մշակման ժամանակ: Առանց նշված ատոմային պրիմիտիվների, անկլավը կարող է ընդհատվել և վերադարձվել աշխատանքի ցանկացած պահի, նույնիսկ այն ժամանակ, երբ կրիտիկական հատվածներն աշխատում են անկլավում և այն գտնվում է անապահով վիճակում (օրինակ, երբ CPU ռեգիստրները չեն պահպանվում/վերականգնվում): .

Հարձակեք Intel SGX-ի վրա՝ զգայուն տվյալներ հանելու կամ անկլավում կոդ գործարկելու համար

Նորմալ շահագործման համար SGX տեխնոլոգիան թույլ է տալիս ընդհատել անկլավի կատարումը կարգավորելի ապարատային բացառություններով: Այս հատկությունը թույլ է տալիս անկլավային գործարկման ժամանակներին իրականացնել ներանկլավային բացառությունների մշակում կամ ազդանշանի մշակում, բայց այն կարող է նաև առաջացնել վերագրանցման սխալներ: SmashEx-ի հարձակումը հիմնված է SDK-ի թերությունների շահագործման վրա, որի պատճառով բացառությունների մշակողի հետ կանչման իրավիճակը պատշաճ կերպով չի կառավարվում: Կարևոր է, որ խոցելիությունը օգտագործելու համար հարձակվողը պետք է կարողանա ընդհատել անկլավի կատարումը, այսինքն. պետք է վերահսկի համակարգի միջավայրի աշխատանքը:

Բացառություն նետելուց հետո հարձակվողը ստանում է մի փոքր ժամանակային պատուհան, որի ընթացքում հնարավոր է ընդհատել կատարման հոսքը մուտքային պարամետրերի մանիպուլյացիայի միջոցով: Մասնավորապես, եթե դուք մուտք ունեք համակարգ (անկլավից դուրս գտնվող միջավայր), կարող եք ստեղծել նոր բացառություն անկլավ մուտք գործելու հրահանգը կատարելուց անմիջապես հետո (EENTER), որը կվերադարձնի կառավարումը համակարգին այն փուլում, երբ կույտի կազմաձևումը: համար անկլավը դեռ չի ավարտվել, որտեղ Այս համարը պահպանում է պրոցեսորի ռեգիստրների վիճակը:

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

Հարձակեք Intel SGX-ի վրա՝ զգայուն տվյալներ հանելու կամ անկլավում կոդ գործարկելու համար
Հարձակեք Intel SGX-ի վրա՝ զգայուն տվյալներ հանելու կամ անկլավում կոդ գործարկելու համար


Source: opennet.ru

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