Mbinu ya ulinzi ya Uunganisho Salama ilipendekeza kituo cha ukaguzi, na kuifanya kuwa vigumu kutumia udhaifu

Kampuni ya ukaguzi imewasilishwa Utaratibu wa ulinzi wa Kuunganisha-Salama, ambayo hufanya iwe vigumu kuunda matumizi ambayo hubadilisha ufafanuzi au urekebishaji wa viashiria kwa vihifadhi vilivyotengwa wakati wa kutekeleza simu ya malloc. Uunganisho-Salama hauzuii kabisa uwezekano wa kutumia udhaifu, lakini kwa uendeshaji mdogo unachanganya kwa kiasi kikubwa uundaji wa aina fulani za unyonyaji, kwani pamoja na kufurika kwa buffer inayoweza kunyonywa, inahitajika kupata udhaifu mwingine unaosababisha kuvuja kwa habari kuhusu. uwekaji wa lundo katika kumbukumbu.

Viraka vinavyotekeleza Uunganisho Salama vimetayarishwa kwa Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) na Google TCMalloc, na pia vinapendekezwa kwa ajili ya kuboresha ulinzi katika Chromium (katika
Tangu 2012, Chromium tayari imeunda mbinu ya ulinzi ya MaskPtr inayolenga kutatua tatizo sawa, lakini suluhisho kutoka Checkpoint linaonyesha utendaji wa juu zaidi).
Viraka vilivyopendekezwa tayari vimeidhinishwa kuwasilishwa katika toleo la Agosti glibc 3.32 na Kiungo Salama kitawashwa kwa chaguomsingi. uClibc-NG inasaidia Safe-Linking aliingia imejumuishwa katika toleo la 1.0.33 na imewezeshwa kwa chaguo-msingi. Mabadiliko katika gperftools (tcmalloc ya zamani) kukubaliwa, lakini itatolewa kama chaguo katika toleo la baadaye.

Waendelezaji TCMalloc (tcmalloc mpya) alikataa kukubali mabadiliko ya, akitaja uharibifu mkubwa wa utendakazi na hitaji la kuongeza majaribio ya kina ili kuangalia mara kwa mara ikiwa kila kitu kinafanya kazi inavyotarajiwa. Uchunguzi uliofanywa na wahandisi wa Checkpoint ulionyesha kuwa mbinu ya Kuunganisha Salama haileti matumizi ya ziada ya kumbukumbu, na utendakazi wakati wa kufanya shughuli za lundo hupunguzwa kwa wastani kwa 0.02% tu, na katika hali mbaya zaidi kwa 1.5% (kwa kulinganisha, juu katika njia inayotumika katika Chromium inakadiriwa kuwa "chini ya 2%). Kujumuisha
Uunganisho-Salama husababisha maagizo 2-3 ya ziada ya mkusanyiko kutekelezwa kila wakati bure() inapoitwa, na maagizo 3-4 kila wakati malloc() inapoitwa. Kuendesha uanzishaji na hatua za uzalishaji wa thamani bila mpangilio hauhitajiki.

Mbinu ya ulinzi ya Uunganisho Salama ilipendekeza kituo cha ukaguzi, na kuifanya kuwa vigumu kutumia udhaifu

Uunganisho-Salama unaweza kutumika sio tu kuboresha usalama wa utekelezwaji wa lundo mbalimbali, lakini pia kuongeza vidhibiti vya uadilifu kwa miundo yoyote ya data inayotumia orodha zilizounganishwa pekee za vielelezo vilivyowekwa kando ya vihifadhi vyenyewe. Njia hiyo ni rahisi sana kutekeleza na inahitaji tu kuongeza jumla moja na kuitumia kwa viashiria kwenye kizuizi kinachofuata kwenye nambari (kwa mfano, kwa Glibc). mabadiliko mistari michache tu ya nambari). Mbinu hiyo inaambatana na mabadiliko yafuatayo:

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

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

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

Kiini cha mbinu hii ni kutumia data nasibu kutoka kwa utaratibu wa kubahatisha wa anwani ya ASLR (mmap_base) ili kulinda orodha zilizounganishwa moja kwa moja kama vile Fast-Bins na TCache. Kabla ya thamani kutumika kwa pointer kwa kipengele kinachofuata kwenye orodha, hufanya ubadilishaji wa mask na kuangalia kwa upatanishi wa ukurasa. Pointer inabadilishwa na matokeo ya operesheni "(L >> PAGE_SHIFT) XOR (P)", ambapo P ni thamani ya pointer na L ni eneo la kumbukumbu ambapo pointer imehifadhiwa.

Mbinu ya ulinzi ya Uunganisho Salama ilipendekeza kituo cha ukaguzi, na kuifanya kuwa vigumu kutumia udhaifu

Inapotumika kwenye mfumo ASLR (Uwekaji Nasibu wa Mpangilio wa Nafasi ya Anwani) sehemu ya L iliyo na anwani ya msingi ya lundo ina thamani nasibu ambazo hutumika kama ufunguo wa kusimba P (iliyotolewa na uendeshaji wa mabadiliko ya biti-12 kwa kurasa za 4096-baiti). Udanganyifu huu hupunguza hatari ya utekaji nyara wa vielelezo katika unyonyaji, kwa kuwa pointer haijahifadhiwa katika hali yake ya asili na kuibadilisha kunahitaji ujuzi wa mgao wa lundo. Kwa kuongezea, nambari ya kiraka pia ina hundi ya ziada ya upatanishi wa block, ambayo hairuhusu mshambuliaji kuchukua nafasi ya pointer na thamani isiyolingana na inahitaji ujuzi wa idadi ya bits ambazo zimeunganishwa, ambazo kwenye mifumo ya 64-bit pia inaruhusu kuzuia. 15 kati ya 16 ya majaribio ya mashambulizi ambayo hayazingatii upatanishi .

Mbinu hii ni nzuri kwa kulinda dhidi ya mashambulizi ambayo hutumia kuandika upya kwa sehemu ya pointer (kubadilisha baiti za chini), kuandika upya kwa kielekezi (kuelekeza upya kwa msimbo wa mshambulizi) na kubadilisha nafasi ya orodha katika anwani isiyopangwa. Kama mfano, inaonyeshwa kuwa matumizi ya Safe-Linking katika malloc ingeruhusu kuzuia unyonyaji hivi karibuni. kutambuliwa na watafiti hao wa mazingira magumu CVE-2020-6007 katika mwanga mahiri wa Daraja la Philips Hue, unaosababishwa na kufurika kwa bafa na kukuruhusu kupata udhibiti wa kifaa.

Chanzo: opennet.ru

Kuongeza maoni