Iminungkahi ng Checkpoint ang pamamaraan ng proteksyon ng Safe-Linking, na ginagawang mas mahirap na pagsamantalahan ang mga kahinaan

Kumpanya ng Checkpoint ipinakita Mekanismo ng proteksyon ng Safe-Linking, na nagpapahirap sa paggawa ng mga pagsasamantala na nagmamanipula sa kahulugan o pagbabago ng mga pointer sa mga buffer na inilalaan kapag nagsasagawa ng isang malloc na tawag. Ang Ligtas na Pag-uugnay ay hindi ganap na hinaharangan ang posibilidad ng pagsasamantala sa mga kahinaan, ngunit sa kaunting overhead ito ay makabuluhang nagpapakumplikado sa paglikha ng ilang mga kategorya ng mga pagsasamantala, dahil bilang karagdagan sa nasasamantalang buffer overflow, ito ay kinakailangan upang makahanap ng isa pang kahinaan na nagdudulot ng pagtagas ng impormasyon tungkol sa ang paglalagay ng tambak sa memorya.

Ang mga patch na nagpapatupad ng Safe-Linking ay inihanda para sa Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) at Google TCMalloc, at iminungkahi din para sa pag-upgrade ng proteksyon sa Chromium (sa
Mula noong 2012, binuo na ng Chromium ang pamamaraan ng proteksyon ng MaskPtr na naglalayong lutasin ang parehong problema, ngunit ang solusyon mula sa Checkpoint ay nagpapakita ng mas mataas na pagganap).
Ang mga iminungkahing patch ay naaprubahan na para sa paghahatid sa paglabas sa Agosto Glibc 3.32 at Safe-Linking ay paganahin bilang default. Sinusuportahan ng uClibc-NG ang Safe-Linking pumasok kasama sa release 1.0.33 at pinagana bilang default. Mga pagbabago sa gperftools (lumang tcmalloc) tinanggap, ngunit iaalok bilang isang opsyon sa isang release sa hinaharap.

Mga Nag-develop TMCaloc (bagong tcmalloc) tumangging tanggapin palitan, na binabanggit ang matinding pagkasira ng performance at ang pangangailangang magdagdag ng mga malalawak na pagsubok upang regular na matiyak na gumagana ang lahat gaya ng inaasahan. Ang pagsubok ng mga inhinyero ng Checkpoint ay nagpakita na ang paraan ng Safe-Linking ay hindi humahantong sa karagdagang pagkonsumo ng memorya, at ang pagganap kapag nagsasagawa ng mga operasyon ng heap ay nababawasan sa average ng 0.02% lamang, at sa pinakamasamang sitwasyon ng kaso ng 1.5% (para sa paghahambing, ang overhead sa ang paraan na ginamit sa Chromium ay tinatantya bilang "mas mababa sa 2%"). Pagsasama
Ang Ligtas na Pag-uugnay ay nagreresulta sa 2-3 karagdagang tagubilin sa pagpupulong na isinasagawa sa tuwing tatawagin ang free() at 3-4 na tagubilin sa tuwing tatawagin ang malloc(). Ang pagpapatakbo ng mga yugto ng pagsisimula at random na pagbuo ng halaga ay hindi kinakailangan.

Iminungkahi ng Checkpoint ang pamamaraan ng proteksyon ng Safe-Linking, na ginagawang mas mahirap na pagsamantalahan ang mga kahinaan

Magagamit ang Ligtas na Pagli-link hindi lamang upang pahusayin ang seguridad ng iba't ibang pagpapatupad ng heap, ngunit upang magdagdag din ng mga kontrol sa integridad sa anumang istruktura ng data na gumagamit ng mga naka-link na listahan ng mga pointer na inilagay sa tabi mismo ng mga buffer. Ang pamamaraan ay napakasimpleng ipatupad at nangangailangan lamang ng pagdaragdag ng isang macro at paglalapat nito sa mga pointer sa susunod na block sa code (halimbawa, para sa Glibc mga pagbabago ilang linya lang ng code). Ang pamamaraan ay bumababa sa mga sumusunod na pagbabago:

+#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);
...

Ang esensya ng pamamaraan ay ang paggamit ng random na data mula sa ASLR address randomization mechanism (mmap_base) para protektahan ang mga single linked list gaya ng Fast-Bins at TCache. Bago ilapat ang value sa isang pointer sa susunod na elemento sa listahan, nagsasagawa ito ng mask conversion at tumitingin para sa pag-align ng page. Ang pointer ay pinalitan ng resulta ng operasyon na "(L >> PAGE_SHIFT) XOR (P)", kung saan ang P ay ang halaga ng pointer at ang L ay ang lokasyon ng memorya kung saan naka-imbak ang pointer.

Iminungkahi ng Checkpoint ang pamamaraan ng proteksyon ng Safe-Linking, na ginagawang mas mahirap na pagsamantalahan ang mga kahinaan

Kapag ginamit sa system ASLR (Address Space Layout Randomization) bahagi ng L bits na may heap base address ay naglalaman ng mga random na halaga na ginagamit bilang susi sa pag-encode ng P (kinuha ng 12-bit shift operation para sa 4096-byte na mga pahina). Binabawasan ng pagmamanipulang ito ang panganib ng pag-hijack ng pointer sa isang pagsasamantala, dahil ang pointer ay hindi nakaimbak sa orihinal nitong anyo at ang pagpapalit nito ay nangangailangan ng kaalaman sa heap allocation. Bilang karagdagan, ang patch code ay naglalaman din ng karagdagang pagsusuri para sa block alignment, na hindi nagpapahintulot sa isang attacker na palitan ang isang pointer ng isang hindi nakahanay na halaga at nangangailangan ng kaalaman sa bilang ng mga bit na nakahanay, na sa 64-bit system ay nagbibigay-daan din sa pagharang. 15 sa 16 na pagtatangka sa pag-atake na hindi isinasaalang-alang ang pagkakahanay.

Ang pamamaraan ay epektibo para sa pagprotekta laban sa mga pag-atake na gumagamit ng bahagyang pointer rewriting (pagbabago ng mababang byte), kumpletong pointer rewriting (pag-redirect sa code ng attacker) at pagbabago ng posisyon ng listahan sa isang hindi nakahanay na address. Bilang halimbawa, ipinapakita na ang paggamit ng Safe-Linking sa malloc ay magpapahintulot sa pagharang ng pagsasamantala kamakailan. nakilala sa pamamagitan ng parehong mga mananaliksik ng kahinaan CVE-2020-6007 sa smart light ng Philips Hue Bridge, na dulot ng buffer overflow at nagbibigay-daan sa iyong kontrolin ang device.

Pinagmulan: opennet.ru

Magdagdag ng komento