Checkpoint прапанаваў тэхніку абароны Safe-Linking, якая ўскладняе эксплуатацыю ўразлівасцяў

Кампанія Checkpoint прадставіла механізм абароны Safe-Linking, які дазваляе ўскладніць стварэнне эксплоітаў, якія маніпулююць вызначэннем або змяненнем паказальнікаў на буферы, выдзеленыя пры выкананні выкліку malloc. Safe-Linking цалкам не блакуе магчымасць эксплуатацыі ўразлівасцяў, але пры мінімальных накладных выдатках істотна ўскладняе стварэнне некаторых катэгорый эксплоітаў, бо апроч эксплуатаванага перапаўнення буфера неабходна знайсці яшчэ адну ўразлівасць, якая выклікае ўцечку звестак аб размяшчэнні кучы (heap) у памяці.

Патчы з рэалізацыяй Safe-Linking падрыхтаваны для Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) і Google TCMalloc, а таксама прапанаваны для мадэрнізацыі абароны ў Chromium (у
Chromium з 2012 году ўжо ўбудавана нацэленая на рашэнняў той жа праблемы тэхніка абароны MaskPtr, але рашэнне ад Checkpoint дэманструе больш высокую прадукцыйнасць).
Прапанаваныя патчы ўжо адобраны для пастаўкі ў жнівеньскім выпуску Glibc 3.32 і прымяненне Safe-Linking будзе ўключана па змаўчанні. У uClibc-NG падтрымка Safe-Linking ўвайшла у склад выпуску 1.0.33 і ўключана па змаўчанні. У gperftools (стары tcmalloc) змены прыняты, Але будуць прапанаваны ў адным з будучых выпускаў у якасці опцыі.

Распрацоўшчыкі TCMalloc (новы tcmalloc) адмовіліся прыняць змена, спаслаўшыся на моцнае зніжэнне прадукцыйнасці і неабходнасць дадання пашыраных тэстаў для рэгулярнай праверкі таго, што ўсё працуе належным чынам. Тэставанне ж інжынерамі Checkpoint паказала што метад Safe-Linking не прыводзіць да дадатковага выдатку памяці, а прадукцыйнасць пры выкананні аперацый з кучай у сярэднім змяншаецца толькі на 0.02%, а пры найгоршым збегу акалічнасцяў на 1.5% (для параўнання накладныя выдаткі ў ужывальным у Chromium метадзе ацэньваюцца як "менш за 2%"). Уключэнне
Safe-Linking прыводзіць да выканання 2-3 дадатковых асэмблерных інструкцый пры кожным выкліку free() і 3-4 інструкцый пры выкліку malloc(). Запуск стадый ініцыялізацыі і генерацыі выпадковых значэнняў не патрабуецца.

Checkpoint прапанаваў тэхніку абароны Safe-Linking, якая ўскладняе эксплуатацыю ўразлівасцяў

Safe-Linking можа ўжывацца не толькі для падвышэння бяспекі розных рэалізацый кучы (heap), але і для дадання сродкаў кантролю цэласнасці ў любыя структуры дадзеных, у якіх ужываюцца аднаскладовыя спісы паказальнікаў, якія размяшчаюцца побач з самімі буферамі. Метад вельмі просты ў рэалізацыі і патрабуе толькі даданні аднаго макраса і яго ўжыванні да паказальнікаў на наступны блок у кодзе (напрыклад, для Glibc змяняецца ўсяго некалькі радкоў у кодзе). Метад зводзіцца да наступных змен:

+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) (((((size_t) pos) >> 12) ^ ((size_t) ptr)))

+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)

- nextp = p->fd;
+ nextp = REVEAL_PTR (p->fd);
...

Сутнасць метаду ва ўжыванні выпадковых дадзеных ад механізму рандомизации адрасоў ASLR (mmap_base) для абароны аднасувязных спісаў, такіх як Fast-Bins і TCache. Перад ужываннем да значэння паказальніка на наступны элемент у спісе выконваецца пераўтварэнне па масцы і праверка выраўноўвання па мяжы старонкі памяці. Паказальнік замяняецца на вынік аперацыі "(L >> PAGE_SHIFT) XOR (P)", дзе P - значэнне паказальніка, а L - месцазнаходжанне ў памяці, дзе захоўваецца гэты паказальнік.

Checkpoint прапанаваў тэхніку абароны Safe-Linking, якая ўскладняе эксплуатацыю ўразлівасцяў

Пры выкарыстанні ў сістэме ASLR (Address Space Layout Randomization) частка бітаў L з базавым адрасам кучы ўтрымоўваюць выпадковыя значэнні, якія выкарыстоўваецца як ключ для кадавання P (здабываюцца аперацыяй зруху на 12 біт для 4096-байтавых старонак). Падобная маніпуляцыя змяншае рызыку захопу паказальніка ў эксплоіце, бо паказальнік не захоўваецца ў зыходным выглядзе і для яго замены патрабуецца ведаць звесткі аб размяшчэнні кучы. Акрамя таго, у кодзе патча таксама прысутнічае дадатковая праверка выраўноўвання блока, якая не дазваляе атакаваламу замяніць паказальнік на невыраўнаванае значэнне і патрабуе ведання ліку біт на якія выраблена выраўноўванне, што на 64-разрадных сістэмах дадаткова дазваляе блакаваць 15 з 16 спроб нападаў, не якія ўлічваюць выраўноўванне .

Метад эфектыўны для абароны ад нападаў, у якіх выкарыстоўваюцца частковае перавызначэнне паказальнікаў (змена малодшых байтаў), поўны перазапіс паказальнікаў (перанакіраванне на код атакавалага) і змена пазіцыі спісу па невыраўнаваным адрасе. У якасці прыкладу паказана, што ўжыванне Safe-Linking у malloc дазволіла б блакаваць эксплуатацыю нядаўна. выяўленай тымі ж даследнікамі ўразлівасці CVE-2020-6007 у разумным падсвятленні Philips Hue Bridge, выкліканай перапаўненнем буфера і якая дазваляе атрымаць кантроль над прыладай.

Крыніца: opennet.ru

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