Checkpoint-ն առաջարկել է Safe-Linking պաշտպանության տեխնիկան՝ ավելի դժվարացնելով խոցելիության օգտագործումը

Անցակետ ընկերություն ներկայացրել Անվտանգ կապակցման պաշտպանության մեխանիզմ, որը դժվարացնում է շահագործումների ստեղծումը, որոնք շահարկում են ցուցիչների սահմանումը կամ փոփոխումը բուֆերներին, որոնք հատկացվում են malloc զանգի կատարման ժամանակ: Safe-Linking-ը ամբողջությամբ չի արգելափակում խոցելիության շահագործման հնարավորությունը, բայց նվազագույն ծախսերով այն զգալիորեն բարդացնում է շահագործումների որոշակի կատեգորիաների ստեղծումը, քանի որ բացի շահագործվող բուֆերային արտահոսքից, անհրաժեշտ է գտնել ևս մեկ խոցելիություն, որն առաջացնում է տեղեկատվության արտահոսք: հիշողության մեջ կույտի տեղադրումը.

Safe-Linking ներդրող պատչերը պատրաստվել են Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) և Google TCMalloc-ի համար, ինչպես նաև առաջարկվել են Chromium-ում պաշտպանությունը թարմացնելու համար (in
2012 թվականից Chromium-ն արդեն ներկառուցել է 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-ը կարող է օգտագործվել ոչ միայն տարբեր կույտային իրագործումների անվտանգությունը բարելավելու համար, այլ նաև ամբողջականության հսկողություն ավելացնելու ցանկացած տվյալների կառուցվածքին, որոնք օգտագործում են բուֆերների կողքին տեղադրված ցուցիչների միայնակ կապակցված ցուցակները: Մեթոդը շատ պարզ է իրագործվում և պահանջում է միայն մեկ մակրո ավելացնել և այն կիրառել կոդի հաջորդ բլոկի ցուցիչների վրա (օրինակ՝ 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-ը, որոնք հաշվի չեն առնում դասավորվածությունը:

Մեթոդն արդյունավետ է հարձակումներից պաշտպանվելու համար, որոնք օգտագործում են ցուցիչի մասնակի վերագրում (փոփոխելով ցածր բայթ), ցուցիչի ամբողջական վերագրում (վերահղում դեպի հարձակվողի կոդը) և ցուցակի դիրքը փոխելու համար չհավասարեցված հասցեով: Որպես օրինակ, ցույց է տրված, որ malloc-ում Safe-Linking-ի օգտագործումը թույլ կտա արգելափակել շահագործումը վերջերս բացահայտված նույն խոցելիության հետազոտողների կողմից CVE-2020-6007- ը Philips Hue Bridge-ի խելացի լույսի ներքո, որը առաջացել է բուֆերի արտահոսքի հետևանքով և թույլ է տալիս կառավարել սարքը:

Source: opennet.ru

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