SGX-малвар: як злыдні эксплуатуюць новую тэхналогію Intel не ў тых мэтах, дзеля якіх яна задумлялася

Як вядома, выкананы ў анклаве код сур'ёзна абмежаваны ў сваёй функцыянальнасці. Ён не можа рабіць сістэмныя выклікі. Ён не можа ажыццяўляць аперацыі ўводу-вываду. Ён не ведае базавага адраса сегмента кода хост-прыкладанні. Ён не можа jmp'іць і call'іць код хост-прыкладанні. Ён не мае ўяўлення аб структуры адраснай прасторы, якой кіруецца хост-прыкладанне (напрыклад, якія менавіта старонкі промаппены або што за дадзеныя размешчаны на гэтых старонках). Ён не можа прасіць аперацыйную сістэму прамапіць яму кавалак памяці хост-прыкладанні (напрыклад, праз /proc/pid/maps). Наіўныя спробы прачытаць усляпую адвольную вобласць памяці хост-прыкладанні, – не кажучы ўжо пра спробы запісу, – рана ці позна (хутчэй першае) прывядуць да прымусовага завяршэння анклавнай праграмы. Так адбываецца кожны раз, калі запытаная анклавам вобласць віртуальнай адраснай прасторы аказваецца недаступнай хост-дадатку.

Ці зможа вірусастваральнік пры такіх суровых рэаліях задзейнічаць SGX-анклавы для рэалізацыі сваіх зламысных мэт?

- Хак для зандавання адрасоў на прадмет магчымасці іх счытвання
– Хак для зандавання адрасоў на прадмет магчымасці запісу
- Хак для перанакіравання патоку кіравання
– Што даюць злыдню тры пералічаныя вышэй хака
- Як злыдзень задзейнічае гэтыя хакі для стварэння ранзомвары

SGX-малвар: як злыдні эксплуатуюць новую тэхналогію Intel не ў тых мэтах, дзеля якіх яна задумлялася

Зыходзячы з усяго пералічанага вышэй, прынята лічыць, што анклаў здольны толькі на тое, каб абслугоўваць хост-прыкладанне, і што анклаў не можа выяўляць уласную ініцыятыву, у тым ліку зламысную. А значыць, для вірусастваральнікаў анклавы не ўяўляюць практычнай каштоўнасці. Гэтая паспешная здагадка з'яўляецца адной з чыннікаў таго, чаму SGX-абарона несіметрычная: код хост-прыкладанні не можа атрымліваць доступ да анклавнай памяці, тады як анклавны код можа чытаць і пісаць па любым адрасе памяці хост-прыкладанні.

Таму, здарся так, што зламыснаму анклавнаму коду атрымаецца рабіць адвольныя сістэмныя выклікі ад імя хост-прыкладанні, выконваць ад яго імя адвольны код, сканаваць памяць хост-прыкладанні і знаходзіць у ёй прыдатныя для злоўжывання ROP-ланцужкі, - ён зможа захапіць поўны кантроль над хост-дадаткам, у стэлс-рэжыме. Зможа не толькі красці і шыфраваць прыстасаваныя файлы, але і дзейнічаць ад імя карыстальніка. Напрыклад, адпраўляць ад яго імя фішынгавыя лісты ці праводзіць DoS-напады. Не баючыся пры гэтым нават самых сучасных ахоўных механізмаў, такіх як стэкавыя канарэйкі і санітарная апрацоўка адрасоў.

Мы пакажам некалькі хакаў, з дапамогай якіх злыдні пераадольваюць вышэйапісаныя абмежаванні, імкнучыся скарыстацца дабротамі SGX у сваіх зламысных мэтах: у правядзенні ROP-нападаў. Або для выканання адвольнага кода замаскіраванага пад працэс хост-складання (аналагічна process hollowing, які часта выкарыстоўваецца малварью), або для маскіроўкі ўжо гатовай малвары (каб пазбавіць свайго зловреда ад пераследаў з боку антывірусаў і іншых ахоўных механізмаў).

Хак для зандавання адрасоў на прадмет магчымасці іх счытвання

Паколькі анклаў не ведае, якія дыяпазоны віртуальнай адраснай прасторы даступныя хост-дадатку і паколькі пры спробе чытання недаступнага адрасу анклаў прымусова завяршаецца, – перад злыднем устае задача знайсці спосаб адмоваўстойлівага сканавання адраснай прасторы. Знайсці спосаб складання карты даступных віртуальных адрасоў. Ліхадзей вырашае гэтую задачу пасродкам нямэтавага выкарыстання Intel'аўскай тэхналогіі TSX. Выкарыстоўвае адзін з пабочных эфектаў TSX'а: калі функцыю доступу да памяці змясціць у TSX-транзакцыю, то выключэнні, якія ўзнікаюць з-за звароту да недапушчальных адрасоў, душацца TSX'ом, не даходзячы да аперацыйнай сістэмы. Пры спробе доступу да несапраўднага адрасу памяці, - перарываецца толькі бягучая транзакцыя, а не ўся анклавная праграма. В.а. TSX дазваляе анклаву бяспечна атрымаць доступ да любога адрасу, знутры транзакцыі, - без рызыкі абвальвання.

Калі указаны адрас даступны хост-дадатку, TSX-транзакцыя часцей за ўсё завяршаецца поспехам. У рэдкіх выпадках яна можа пацярпець няўдачу з-за вонкавых уздзеянняў, такіх як перапыненні (напрыклад, перапыненні планавальніка), выцясненне з кэша ці адначасовая змена вочка памяці некалькімі працэсамі. У гэтых рэдкіх выпадках TSX вяртае код памылкі, які паказвае на тое, што ўзнік збой носіць часовы характар. У гэтых выпадках трэба проста перазапусціць транзакцыю.

Калі паказаны адрас недаступны хост-дадатку, TSX душыць якое ўзнікла выключэнне (АС не паведамляецца) і адмяняе транзакцыю. Анклаўнаму коду вяртаецца код памылкі, - каб ён мог зрэагаваць на факт адмены транзакцыі. Гэтыя коды памылак паказваюць на тое, што разгляданы адрас недаступны хост-дадатку.

SGX-малвар: як злыдні эксплуатуюць новую тэхналогію Intel не ў тых мэтах, дзеля якіх яна задумлялася

SGX-малвар: як злыдні эксплуатуюць новую тэхналогію Intel не ў тых мэтах, дзеля якіх яна задумлялася

У такога маніпулявання TSX'ом знутры анклава ёсць прыемная для злыдня асаблівасць: паколькі на момант выканання анклавнага кода большасць апаратных лічыльнікаў прадукцыйнасці не абнаўляюцца, па іх немагчыма адсочваць TSX-транзакцыі, выкананыя ўсярэдзіне анклава. Такім чынам, зламысныя махінацыі з TSX'ам застаюцца цалкам нябачнымі для аперацыйнай сістэмы.

Акрамя таго, паколькі вышэйапісаны хак не належыць на якія-небудзь сістэмныя выклікі, яго нельга ні выявіць, ні прадухіліць, простым блакаваннем сістэмных выклікаў; што звычайна дае дадатны вынік пры дужанні з «паляваннем на яйкі».

Ліхадзей ужывае вышэйапісаны хак для пошуку ў кодзе хост-прыкладанні гаджэтаў, прыдатных для фармавання ROP-ланцужкі. Пры гэтым яму не трэба зандаваць кожны адрас. Дастаткова празандаваць па адным адрасе з кожнай старонкі віртуальнай адраснай прасторы. Зандаванне ўсіх 16 гігабайт памяці займае каля 45 хвілін (на Intel i7-6700K). У выніку злыдзень атрымлівае спіс выкананых старонак, якія прыдатныя для канструявання ROP-ланцужкі.

Хак для зандавання адрасоў на прадмет магчымасці запісу

Для ажыццяўлення анклавнага варыянту ROP-напады злыдзень мае патрэбу ў магчымасці шукаць даступныя для запісу невыкарыстоўваныя ўчасткі памяці хост-прыкладанні. Ліхадзей выкарыстоўвае гэтыя ўчасткі памяці для инжектирования падробленага стэкавага фрэйма і для инжектирования карыснай нагрузкі (шаўкода). Сутнасць у тым, што зламысны анклаў не здольны патрабаваць ад хост-прыкладанні вылучыць сабе памяць, але замест гэтага можа выкарыстоўваць не па прызначэнні ўжо вылучаныя хост-дадаткам участкі памяці. Калі вядома яму ўдасца знайсці такія ўчасткі, не абрынуўшы анклаў.

Ліхадзей ажыццяўляе гэты пошук, эксплуатуючы яшчэ адзін пабочны эфект TSX'а. Спачатку ён, як і ў папярэднім выпадку, зандуе адрас на прадмет яго існавання, а затым правярае, ці даступная для запісу якая адпавядае гэтаму адрасу старонка. Для гэтага злыдзень задзейнічае наступны хак: змяшчае функцыю запісу ў TSX-транзакцыю, і пасля таго як яна выканалася, але яшчэ да таго як завяршылася - прымусова абрывае транзакцыю (explicit abort).

Гледзячы на ​​код звароту з TSX-транзакцыі, злыдзень разумее, ці даступная яна для запісу. Калі гэта «explicit abort», злыдзень разумее, што запіс быў бы паспяховым, калі б ён давёў яго да канца. Калі ж старонка даступная толькі для чытання, то транзакцыя завяршаецца памылкай, - выдатнай ад "explicit abort".

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-ланцужок, пачынаецца выкананне зламыснай карыснай нагрузкі, – з прывілеямі хост-прыкладанні і з магчымасцю звяртацца да сістэмных выклікаў.

Як злыдзень задзейнічае гэтыя хакі для стварэння ранзомвары

Пасля таго як хост-прыкладанне перадае анклаву кіраванне праз які-небудзь з ECALL'ов (не падазраючы, што гэты анклаў зламысны), зламысны анклаў шукае ў памяці хост-прыкладанні вольнае месца для инжектирования кода (за вольныя месцы прымае тыя паслядоўнасці вочак, якія запоўненыя нулямі). Затым з дапамогай хака для зандавання адрасоў на прадмет магчымасці іх счытвання, – анклаў адшуквае ў хост-дадатку выкананыя старонкі і генеруе ROP-ланцужок, якая стварае новы файл з імем «RANSOM» у бягучай дырэкторыі (пры рэальным нападзе анклаў шыфруе існуючыя карыстацкія файлы) і адлюстроўвае паведамленне з патрабаваннем выкупу. Пры гэтым, хост-дадатак наіўна мяркуе, што анклаў проста складае два лікі. Як гэта выглядае ў кодзе?

Для зручнасці ўспрымання ўвядзем праз дэфайны некаторую мнемоніку:

SGX-малвар: як злыдні эксплуатуюць новую тэхналогію Intel не ў тых мэтах, дзеля якіх яна задумлялася

Захоўваем зыходныя значэнні рэгістраў RSP і RBP, каб пасля выканання карыснай нагрузкі аднавіць нармальную працу хост-прыкладанні:

SGX-малвар: як злыдні эксплуатуюць новую тэхналогію Intel не ў тых мэтах, дзеля якіх яна задумлялася

Шукаем прыдатны фрэйм ​​стэка (гл. код з часткі "хак для перанакіравання струменя кіравання").

Знаходзім прыдатныя ROP-гаджэты:

SGX-малвар: як злыдні эксплуатуюць новую тэхналогію Intel не ў тых мэтах, дзеля якіх яна задумлялася

Знаходзім месца для інжэктавання карыснай нагрузкі:

SGX-малвар: як злыдні эксплуатуюць новую тэхналогію Intel не ў тых мэтах, дзеля якіх яна задумлялася

Які будуецца ROP-ланцужок:

SGX-малвар: як злыдні эксплуатуюць новую тэхналогію Intel не ў тых мэтах, дзеля якіх яна задумлялася

Вось такой вось выявай Intel'аўская тэхналогія SGX, закліканая супрацьстаяць шкодным праграмам, эксплуатуецца злыднямі для рэалізацыі процілеглых мэт.

Крыніца: habr.com

Дадаць каментар