Manaʻo ʻia ʻo Checkpoint i ka ʻenehana palekana Safe-Linking, e paʻakikī loa i ka hoʻohana ʻana i nā nāwaliwali

Hui Hoopaa hōʻike ʻia Safe-Linking protection mechanism, he mea ia e paʻakikī ai ka hana ʻana i nā hana e hoʻopunipuni ai i ka wehewehe a i ʻole ka hoʻololi ʻana o nā kuhikuhi i nā pale i hoʻokaʻawale ʻia i ka wā e hoʻokō ai i kahi kelepona malloc. ʻAʻole pale loa ʻo Safe-Linking i ka hiki ke hoʻohana i nā mea nāwaliwali, akā me ka liʻiliʻi o ke poʻo he mea paʻakikī loa ia i ka hoʻokumu ʻana i kekahi mau ʻano o ka hoʻohana ʻana, no ka mea, ma ka hoʻohui ʻana i ka buffer overflow, pono ia e ʻimi i kahi nāwaliwali ʻē aʻe e hoʻoheheʻe ai i ka ʻike e pili ana. ka waiho ʻana o ka puʻu ma ka hoʻomanaʻo.

Ua hoʻomākaukau ʻia nā ʻāpana e hoʻokō ana i ka Safe-Linking no Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) a me Google TCMalloc, a ua manaʻo ʻia no ka hoʻomaikaʻi ʻana i ka pale ma Chromium (ma
Mai ka makahiki 2012, ua kūkulu mua ʻo Chromium i ka ʻenehana pale MaskPtr i manaʻo ʻia e hoʻoponopono i ka pilikia like, akā ʻo ka hopena mai Checkpoint e hōʻike ana i ka hana kiʻekiʻe).
Ua ʻae ʻia nā pā i manaʻo ʻia no ka lawe ʻana i ka hoʻokuʻu ʻana o ʻAukake ʻO Glibc 3.32 a e hoʻohana ʻia ka Safe-Linking ma ka paʻamau. Kākoʻo ʻo uClibc-NG i ka Safe-Linking i komo i hoʻokomo ʻia i ka hoʻokuʻu ʻana 1.0.33 a hiki ke hoʻohana ʻia e ka paʻamau. Nā hoʻololi ʻana i nā gperftools (tcmalloc kahiko) ʻae ʻia, akā e hāʻawi ʻia ma ke ʻano he koho i ka wā e hiki mai ana.

Nā mea hoʻolālā TCMalloc (tcmalloc hou) hōʻole i ka ʻae ka hoʻololi, e hōʻike ana i ka hoʻohaʻahaʻa hana koʻikoʻi a me ka pono e hoʻohui i nā hoʻokolohua nui e nānā mau i ka holo ʻana o nā mea āpau e like me ka mea i manaʻo ʻia. Ua hōʻike ʻia ka hoʻāʻo ʻana e nā ʻenekini Checkpoint ʻaʻole alakaʻi ke ʻano Safe-Linking i ka hoʻohana ʻana i ka hoʻomanaʻo hou aʻe, a hoʻemi ʻia ka hana i ka wā e hana ana i nā hana puʻu ma ka awelika e 0.02% wale nō, a i ka hanana ʻino loa e 1.5% (no ka hoʻohālikelike ʻana, ke poʻo i loko. ʻO ke ʻano i hoʻohana ʻia ma Chromium ua manaʻo ʻia ʻo ia ka "emi ma lalo o 2%"). Hoʻokomo
Loaʻa ka Safe-Linking i 2-3 mau ʻōlelo aʻo hui hou e hoʻokō ʻia i kēlā me kēia manawa e kāhea ʻia ai ka manuahi (), a me nā ʻōlelo aʻoaʻo 3-4 i kēlā me kēia manawa e kāhea ʻia ai malloc(). ʻAʻole koi ʻia ka holo ʻana i ka hoʻomaka ʻana a me ka hoʻokumu ʻana i ka waiwai.

Manaʻo ʻia ʻo Checkpoint i ka ʻenehana palekana Safe-Linking, e paʻakikī loa i ka hoʻohana ʻana i nā nāwaliwali

Hiki ke hoʻohana ʻia ʻo Safe-Linking no ka hoʻomaikaʻi ʻana i ka palekana o nā hoʻokō puʻu like ʻole, akā no ka hoʻohui pū ʻana i nā mana kūpaʻa i kēlā me kēia hale ʻikepili e hoʻohana ana i nā papa kuhikuhi o nā kuhikuhi i hoʻopili ʻia ma ka ʻaoʻao o nā buffer. He mea maʻalahi loa ke ʻano e hoʻokō a koi wale i ka hoʻohui ʻana i hoʻokahi macro a hoʻopili iā ia i nā kuhikuhi i ka poloka aʻe ma ke code (no ka laʻana, no Glibc loli he mau laina helu wale nō). Hoʻopili ke ala i nā hoʻololi aʻe:

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

ʻO ke kumu o ke ʻano, ʻo ia ka hoʻohana ʻana i ka ʻikepili maʻamau mai ka ASLR address randomization mechanism (mmap_base) e pale i nā papa inoa i hoʻopili ʻia e like me Fast-Bins a me TCache. Ma mua o ka hoʻohana ʻia ʻana o ka waiwai i kahi kikoʻī i ka mea aʻe o ka papa inoa, hana ia i ka hoʻololi ʻana i ka mask a nānā i ka alignment ʻaoʻao. Hoʻololi ʻia ka pointer e ka hopena o ka hana "(L >> PAGE_SHIFT) XOR (P)", kahi ʻo P ka waiwai o ka pointer a ʻo L ka wahi hoʻomanaʻo kahi i mālama ʻia ai ka pointer.

Manaʻo ʻia ʻo Checkpoint i ka ʻenehana palekana Safe-Linking, e paʻakikī loa i ka hoʻohana ʻana i nā nāwaliwali

Ke hoʻohana ʻia i ka ʻōnaehana ASLR (Address Space Layout Randomization) ʻāpana o nā ʻāpana L me ka helu kumu heap i loaʻa nā waiwai maʻamau i hoʻohana ʻia ma ke ʻano he kī no ka hoʻopili ʻana i ka P (i unuhi ʻia e kahi hana hoʻololi 12-bit no nā ʻaoʻao 4096-byte). Hoʻemi kēia hana ʻana i ka pilikia o ke kāʻili ʻana i ka pointer ma kahi hoʻohana, ʻoiai ʻaʻole mālama ʻia ka pointer ma kona ʻano kumu a pono e hoʻololi i ka ʻike o ka puʻu ʻana. Eia kekahi, loaʻa i ka code patch kahi hōʻoia hou no ka alignment block, ʻaʻole ia e ʻae i ka mea hoʻouka e hoʻololi i kahi pointer me kahi waiwai ʻole a koi ʻia ka ʻike o ka helu o nā bits i hoʻohālikelike ʻia, a ma nā ʻōnaehana 64-bit e ʻae i ka pale ʻana. 15 o 16 mau ho'āʻo hoʻouka kaua ʻaʻole e noʻonoʻo pono i ka alignment.

Maikaʻi ke ʻano no ka pale ʻana i nā hoʻouka ʻana e hoʻohana ana i ke kākau hou ʻana i ka ʻāpana kuhikuhi (hoʻololi i nā bytes haʻahaʻa), ke kākau hou ʻana i ka pointer holoʻokoʻa (hoʻihoʻi hou ʻana i ke code o ka mea hoʻouka) a me ka hoʻololi ʻana i ke kūlana papa inoa ma kahi helu ʻole. E like me ka laʻana, ua hōʻike ʻia ka hoʻohana ʻana o Safe-Linking ma malloc e ʻae i ka pale ʻana i ka hoʻohana ʻana i kēia manawa. ʻike ʻia e nā mea noiʻi palupalu like CVE-2020-6007 i ke kukui akamai o Philips Hue Bridge, i hoʻokumu ʻia e ka buffer overflow a hiki iā ʻoe ke loaʻa ka mana o ka hāmeʻa.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka