Бақылау пункті осалдықтарды пайдалануды қиындата отырып, Safe-Linking қорғау әдісін ұсынды

Бақылау пункті компаниясы ұсынылған Malloc шақыруын орындау кезінде бөлінген буферлерге көрсеткіштердің анықтамасын немесе модификациясын басқаратын эксплуаттарды жасауды қиындататын Safe-Linking қорғау механизмі. Safe-Linking осалдықтарды пайдалану мүмкіндігін толығымен бұғаттамайды, бірақ ең аз шығынмен ол эксплуатациялардың белгілі бір санаттарын құруды айтарлықтай қиындатады, өйткені эксплуатацияланатын буфердің толып кетуінен басқа, ол туралы ақпараттың ағып кетуіне әкелетін басқа осалдықты табу қажет. үйіндінің жадқа орналасуы.

Қауіпсіз байланыстыруды жүзеге асыратын патчтар Glibc (ptmalloc), uClibc-NG (dmalloc), gperftools (tcmalloc) және Google TCMalloc үшін дайындалған, сондай-ақ Chromium жүйесінде қорғанысты жаңарту үшін ұсынылған.
2012 жылдан бастап Chromium дәл сол мәселені шешуге бағытталған MaskPtr қорғау техникасында құрастырылған, бірақ Checkpoint шешімі жоғары өнімділікті көрсетеді).
Ұсынылған патчтар тамыз айындағы шығарылымда жеткізуге мақұлданған Glibc 3.32 және Safe-Linking әдепкі бойынша қосылады. uClibc-NG қауіпсіз байланыстыруды қолдайды кірді 1.0.33 шығарылымына кіреді және әдепкі бойынша қосылады. gperftools (ескі tcmalloc) өзгерістері қабылданды, бірақ болашақ шығарылымда опция ретінде ұсынылады.

Әзірлеушілер TCMalloc (жаңа tcmalloc) қабылдаудан бас тартты түзету, өнімділіктің қатты төмендеуін және барлығы күткендей жұмыс істеп тұрғанын жүйелі түрде тексеру үшін ауқымды сынақтарды қосу қажеттілігін келтіре отырып. Checkpoint инженерлерінің тестілеуі Safe-Linking әдісі қосымша жадты тұтынуға әкелмейтінін көрсетті, ал үйме операцияларын орындау кезінде өнімділік орташа есеппен 0.02%-ға, ал ең нашар жағдайда 1.5%-ға (салыстыру үшін, қосымша шығындар) төмендейді. Chromium жүйесінде қолданылатын әдіс «2%-дан аз» деп бағаланады). Қосылу
Safe-Linking нәтижесінде free() шақырылған сайын 2-3 қосымша құрастыру нұсқаулары және malloc() шақырылған сайын 3-4 нұсқау орындалады. Баптандыру және кездейсоқ мәнді генерациялау кезеңдерін іске қосу қажет емес.

Бақылау пункті осалдықтарды пайдалануды қиындата отырып, Safe-Linking қорғау әдісін ұсынды

Қауіпсіз байланыстыруды әртүрлі үйме енгізулердің қауіпсіздігін жақсарту үшін ғана емес, сонымен қатар буферлердің жанында орналасқан көрсеткіштердің жеке байланыстырылған тізімдерін пайдаланатын кез келген деректер құрылымдарына тұтастықты басқару элементтерін қосу үшін де пайдалануға болады. Әдісті орындау өте қарапайым және тек бір макросты қосуды және оны кодтағы келесі блокқа көрсеткіштерге қолдануды қажет етеді (мысалы, Glibc үшін өзгерістер кодтың бірнеше жолы). Әдіс келесі өзгерістерге байланысты:

+#PROTECT_PTR(pos, ptr) анықтау \
+ ((__түрінің (ptr)) ((((өлшем_t) pos) >> 12) ^ ((өлшем_т) птр)))

+#REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr) анықтау

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

Әдістің мәні Fast-Bins және TCache сияқты жеке байланыстырылған тізімдерді қорғау үшін ASLR мекенжайын рандомизациялау механизмінен (mmap_base) кездейсоқ деректерді пайдалану болып табылады. Мән тізімдегі келесі элементке көрсеткішке қолданбас бұрын, ол маска түрлендіруін орындайды және беттің туралануын тексереді. Көрсеткіш "(L >> PAGE_SHIFT) XOR (P)" операциясының нәтижесімен ауыстырылады, мұнда P - көрсеткіштің мәні және L - меңзер сақталатын жад орны.

Бақылау пункті осалдықтарды пайдалануды қиындата отырып, Safe-Linking қорғау әдісін ұсынды

Жүйеде қолданғанда ASLR (Мекенжай кеңістігі орналасуын рандомизациялау) үйме негізгі мекенжайы бар L биттерінің бөлігі P кодтау үшін кілт ретінде пайдаланылатын кездейсоқ мәндерді қамтиды (12 байт беттер үшін 4096 биттік ауыстыру операциясымен шығарылған). Бұл манипуляция эксплуатацияда көрсеткішті ұрлау қаупін азайтады, себебі көрсеткіш бастапқы түрінде сақталмайды және оны ауыстыру үйме бөлуді білуді қажет етеді. Сонымен қатар, патч кодында блокты туралаудың қосымша тексеруі бар, ол шабуылдаушыға көрсеткішті реттелмеген мәнмен ауыстыруға мүмкіндік бермейді және 64 биттік жүйелерде қосымша блоктауға мүмкіндік беретін тураланған биттердің санын білуді талап етеді. 15 шабуыл әрекетінің 16-і теңестіруді ескермейді.

Бұл әдіс көрсеткішті ішінара қайта жазуды (төмен байттарды өзгерту), толық көрсеткішті қайта жазуды (шабуылдаушының кодына қайта бағыттау) және реттелмеген мекенжайдағы тізім орнын өзгертуді қолданатын шабуылдардан қорғау үшін тиімді. Мысал ретінде, malloc-та Safe-Linking пайдалану соңғы уақытта пайдалануды блоктауға мүмкіндік беретіні көрсетілген. анықталды сол осалдықты зерттеушілер CVE-2020-6007 буфердің толып кетуінен туындаған және құрылғыны басқаруға мүмкіндік беретін Philips Hue Bridge смарт шамында.

Ақпарат көзі: opennet.ru

пікір қалдыру