„Checkpoint“ pasiūlė saugaus susiejimo apsaugos techniką, apsunkindama pažeidžiamumų išnaudojimą

„Checkpoint Company“. pateiktas Saugaus susiejimo apsaugos mechanizmas, dėl kurio sunku kurti išnaudojimus, kurie manipuliuoja buferių, skirtų vykdant malloc iškvietimą, apibrėžimu arba modifikavimu. Saugus susiejimas visiškai neužblokuoja galimybės išnaudoti pažeidžiamumus, tačiau su minimaliomis papildomomis sąnaudomis labai apsunkina tam tikrų kategorijų išnaudojimų kūrimą, nes be išnaudojamo buferio perpildymo, būtina rasti kitą pažeidžiamumą, dėl kurio nuteka informacija apie krūvos vieta atmintyje.

Pataisymai, įgyvendinantys saugų susiejimą, buvo paruošti Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) ir Google TCMalloc, taip pat siūlomi naujinant apsaugą Chromium (in
Nuo 2012 m. „Chromium“ jau įdiegė MaskPtr apsaugos techniką, kuria siekiama išspręsti tą pačią problemą, tačiau „Checkpoint“ sprendimas rodo didesnį našumą).
Siūlomi pataisymai jau patvirtinti pristatyti rugpjūčio mėnesio leidime „Glibc 3.32“ ir saugus susiejimas bus įjungtas pagal numatytuosius nustatymus. uClibc-NG palaiko saugų susiejimą įstojo įtrauktas į 1.0.33 leidimą ir yra įjungtas pagal numatytuosius nustatymus. Gperftools pakeitimai (senas tcmalloc) priimtas, bet bus pasiūlyta kaip galimybė būsimame leidime.

Kūrėjai TCMalloc (naujas tcmalloc) atsisakė priimti pakeisti, nurodydamas didelį našumo pablogėjimą ir būtinybę atlikti išsamius testus, kad būtų galima reguliariai tikrinti, ar viskas veikia taip, kaip tikėtasi. „Checkpoint“ inžinierių atliktas bandymas parodė, kad saugaus susiejimo metodas nesunaudoja papildomo atminties, o našumas atliekant krūvos operacijas sumažėja vidutiniškai tik 0.02%, o blogiausiu atveju – 1.5% (palyginimui, pridėtinės išlaidos „Chromium“ naudojamas metodas yra „mažiau nei 2 proc.“). Įtraukimas
Dėl saugaus susiejimo kaskart iškviečiant free() vykdomos 2–3 papildomos surinkimo instrukcijos, o kiekvieną kartą iškviečiant malloc() – 3–4 instrukcijos. Pradėti inicijavimo ir atsitiktinių verčių generavimo etapų nereikia.

„Checkpoint“ pasiūlė saugaus susiejimo apsaugos techniką, apsunkindama pažeidžiamumų išnaudojimą

Saugus susiejimas gali būti naudojamas ne tik siekiant pagerinti įvairių krūvos diegimų saugumą, bet ir pridėti vientisumo valdiklius prie bet kokių duomenų struktūrų, kurios naudoja atskirai susietus rodyklių sąrašus, esančius šalia pačių buferių. Metodą įgyvendinti labai paprasta ir tereikia pridėti vieną makrokomandą ir pritaikyti ją kito kodo bloko rodyklėms (pvz., Glibc pokyčius vos kelios kodo eilutės). Metodas susideda iš šių pakeitimų:

+#define PROTECT_PTR(poz, ptr) \
+ ((__tipas (ptr)) ((((dydis_t) poz.) >> 12) ^ ((dydis_t) ptr)))

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

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

Metodo esmė yra naudoti atsitiktinius duomenis iš ASLR adresų atsitiktinės atrankos mechanizmo (mmap_base), siekiant apsaugoti atskirai susietus sąrašus, tokius kaip Fast-Bins ir TCache. Prieš pritaikant reikšmę kito sąrašo elemento žymekliui, ji atlieka kaukės konvertavimą ir patikrina, ar puslapis yra išlygiuotas. Rodyklė pakeičiama operacijos „(L >> PAGE_SHIFT) XOR (P)“ rezultatu, kur P yra rodyklės reikšmė, o L yra atminties vieta, kurioje saugoma žymeklis.

„Checkpoint“ pasiūlė saugaus susiejimo apsaugos techniką, apsunkindama pažeidžiamumų išnaudojimą

Kai naudojamas sistemoje ASLR (Adreso erdvės išdėstymo atsitiktinis nustatymas) dalyje L bitų su krūvos baziniu adresu yra atsitiktinių reikšmių, kurios naudojamos kaip P kodavimo raktas (išskirtos naudojant 12 bitų poslinkio operaciją 4096 baitų puslapiams). Šis manipuliavimas sumažina žymeklio užgrobimo riziką išnaudojimo metu, nes žymeklis nėra saugomas pradine forma ir norint ją pakeisti reikia žinoti krūvos paskirstymo informaciją. Be to, pataisos kode taip pat yra papildomas bloko suderinimo patikrinimas, kuris neleidžia užpuolikui pakeisti rodyklės nesuderinta reikšme ir reikalauja žinoti sulygiuotų bitų skaičių, o tai 64 bitų sistemose papildomai leidžia blokuoti. 15 iš 16 bandymų atakuoti, kai neatsižvelgiama į suderinimą.

Metodas yra veiksmingas apsaugant nuo atakų, kuriose naudojamas dalinis žymeklio perrašymas (mažų baitų keitimas), visiškas žymeklio perrašymas (peradresavimas į užpuoliko kodą) ir sąrašo padėties keitimas nesuderintu adresu. Kaip pavyzdys parodyta, kad saugaus susiejimo naudojimas malloc leistų blokuoti išnaudojimą neseniai nustatyta tų pačių pažeidžiamumo tyrinėtojų CVE-2020-6007 „Philips Hue Bridge“ išmaniojoje šviesoje, kurią sukelia buferio perpildymas ir leidžianti valdyti įrenginį.

Šaltinis: opennet.ru

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