SGX зловреден софтуер: как злодеите използват новата технология на Intel за цели, различни от тези, за които е замислена

Както знаете, кодът, изпълняван в анклава, е сериозно ограничен във функционалността си. Не може да извършва системни повиквания. Не може да извършва I/O операции. Той не знае основния адрес на кодовия сегмент на хост приложението. Не може да jmp или да извика код на хост приложение. Той няма представа за структурата на адресното пространство, която управлява хост приложението (например кои страници са картографирани или какъв вид данни се намират на тези страници). Той не може да поиска от операционната система да картографира част от паметта на хост приложението към нея (например чрез /proc/pid/maps). Наивните опити за сляпо четене на произволна област от паметта на хост приложение, да не говорим за опитите за запис, рано или късно (най-вероятно първото) ще доведат до принудително прекратяване на анклавната програма. Това се случва винаги, когато регионът на виртуалното адресно пространство, поискан от анклава, е недостъпен за хост приложението.

Като се имат предвид такива сурови реалности, ще може ли писателят на вируси да използва SGX анклави, за да постигне злонамерените си цели?

– Хак за сондиране на адреси, за да видите дали могат да бъдат прочетени
– Хак за сондиране на адреси за записваемост
– Хак за пренасочване на контролния поток
– Какво дават трите хака, изброени по-горе, на злодея?
– Как злодеят използва тези хакове, за да създаде ranzowari

SGX зловреден софтуер: как злодеите използват новата технология на Intel за цели, различни от тези, за които е замислена

Въз основа на всичко по-горе, общоприето е, че анклавът е способен да обслужва само хост приложението и че анклавът не може да упражнява собствена инициатива, включително злонамерени. Това означава, че анклавите нямат практическа стойност за авторите на вируси. Това прибързано предположение е една от причините, поради които SGX защитата е асиметрична: кодът на хост приложението не може да има достъп до паметта на анклава, докато кодът на анклава може да чете и пише на всеки адрес на паметта на хост приложението.

Следователно, ако злонамереният анклавен код е в състояние да направи произволни системни извиквания от името на хост приложението, да изпълни произволен код от негово име, да сканира паметта на хост приложението и да открие злоупотребяващи ROP вериги в нея, той може да завладее пълния контрол над хост приложението, в стелт режим. Той може не само да краде и криптира потребителски файлове, но и да действа от името на потребителя. Например, изпращайте фишинг имейли от негово име или провеждайте DoS атаки. Без страх дори от най-модерните защитни механизми, като стек канарчета и саниране на адреси.

Ще ви покажем няколко хака, които атакуващите използват, за да преодолеят ограниченията, описани по-горе, за да се възползват от SGX за собствените си злонамерени цели: ROP атаки. Или за изпълнение на произволен код, маскиран като процес на хост приложение (подобно на изпъкване на процес, което често се използва от злонамерен софтуер), или за маскиране на готов злонамерен софтуер (за да спаси неговия злонамерен софтуер от преследване от антивируси и други защитни механизми).

Хак за сондиране на адреси, за да видите дали могат да бъдат прочетени

Тъй като анклавът не знае кои диапазони от виртуалното адресно пространство са достъпни за хост приложението и тъй като анклавът е принуден да прекрати работа, когато се опитва да прочете недостъпен адрес, нападателят е изправен пред задачата да намери начин да повреди- толерантно сканиране на адресното пространство. Намерете начин да картографирате наличните виртуални адреси. Злодеят решава този проблем, като злоупотребява с технологията TSX на Intel. Използва един от страничните ефекти на 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 има друга функция, която е приятна за злодея (освен невъзможността за проследяване чрез броячи на производителността на хардуера): тъй като всички команди за запис в паметта се извършват само ако транзакцията е успешна, принудителното завършване на транзакцията гарантира, че сондираната клетка от паметта остава непроменена.

Хак за пренасочване на контролния поток

При извършване на 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 за цели, различни от тези, за които е замислена

Ето как технологията SGX на Intel, предназначена да противодейства на злонамерени програми, се използва от злодеи за постигане на противоположни цели.

Източник: www.habr.com

Добавяне на нов коментар