Yoxlama məntəqəsi zəifliklərdən istifadə etməyi çətinləşdirən Safe-Linking mühafizə texnikasını təklif etdi

Checkpoint şirkəti təqdim Malloc çağırışını yerinə yetirərkən ayrılmış buferlərə göstəricilərin tərifini və ya modifikasiyasını manipulyasiya edən istismarların yaradılmasını çətinləşdirən Safe-Linking mühafizə mexanizmi. Safe-Linking zəifliklərdən istifadə imkanını tamamilə maneə törətmir, lakin minimal yüklə müəyyən istismar kateqoriyalarının yaradılmasını əhəmiyyətli dərəcədə çətinləşdirir, çünki istismar edilə bilən bufer daşmasına əlavə olaraq, haqqında məlumatların sızmasına səbəb olan başqa bir zəifliyi tapmaq lazımdır. yığının yaddaşda yerləşdirilməsi.

Safe-Linking tətbiq edən yamalar Glibc (ptalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) və Google TCMalloc üçün hazırlanmışdır və həmçinin Chromium-da qorunmanın təkmilləşdirilməsi üçün təklif edilmişdir
2012-ci ildən bəri Chromium eyni problemi həll etməyə yönəlmiş MaskPtr qoruma texnikasında artıq qurulmuşdur, lakin Checkpoint-in həlli daha yüksək performans nümayiş etdirir).
Təklif olunan yamaqlar artıq avqust buraxılışında çatdırılmaq üçün təsdiqlənib Glibc 3.32 və Safe-Linking defolt olaraq aktiv ediləcək. uClibc-NG Safe-Linking dəstəkləyir girdi 1.0.33 buraxılışına daxildir və standart olaraq aktivdir. gperftools-da dəyişikliklər (köhnə tcmalloc) qəbul edildi, lakin gələcək buraxılışda seçim kimi təklif olunacaq.

Yaradıcılar TCMalloc (yeni tcmalloc) qəbul etməkdən imtina etdi dəyişdirmək, performansın ciddi şəkildə pisləşməsini və hər şeyin gözlənildiyi kimi işlədiyini müntəzəm olaraq yoxlamaq üçün geniş testlər əlavə etmək ehtiyacını əsas gətirərək. Checkpoint mühəndisləri tərəfindən aparılan sınaqlar göstərdi ki, Safe-Linking metodu əlavə yaddaş istehlakına səbəb olmur və yığın əməliyyatlarını yerinə yetirərkən performans orta hesabla cəmi 0.02%, ən pis halda isə 1.5% azalır (müqayisə üçün Chromium-da istifadə olunan metod “2%-dən az” olaraq qiymətləndirilir). Daxiletmə
Safe-Linking hər dəfə free() çağırılanda 2-3 əlavə montaj təlimatının və malloc() hər dəfə çağırılanda 3-4 təlimatın icrası ilə nəticələnir. Başlanğıc və təsadüfi dəyər yaratma mərhələlərinin icrası tələb olunmur.

Yoxlama məntəqəsi zəifliklərdən istifadə etməyi çətinləşdirən Safe-Linking mühafizə texnikasını təklif etdi

Safe-Linking yalnız müxtəlif yığın tətbiqlərinin təhlükəsizliyini yaxşılaşdırmaq üçün deyil, həm də buferlərin yanında yerləşdirilmiş göstəricilərin bir-birinə bağlı siyahılarından istifadə edən hər hansı məlumat strukturlarına bütövlük nəzarətləri əlavə etmək üçün istifadə edilə bilər. Metodun həyata keçirilməsi çox sadədir və yalnız bir makro əlavə etmək və onu koddakı növbəti bloka göstəricilərə tətbiq etmək tələb olunur (məsələn, Glibc üçün dəyişikliklər yalnız bir neçə sətir kod). Metod aşağıdakı dəyişikliklərə əsaslanır:

+#müəyyənləşdirin PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))

+#REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr) təyin edin

- nextp = p->fd;
+ növbətip = REVEAL_PTR (p->fd);
...

Metodun mahiyyəti Fast-Bins və TCache kimi tək-tək bağlı siyahıları qorumaq üçün ASLR ünvanının təsadüfiləşdirmə mexanizmindən (mmap_base) təsadüfi məlumatlardan istifadə etməkdir. Siyahıdakı növbəti elementə göstəriciyə dəyər tətbiq edilməzdən əvvəl o, maskanın çevrilməsini həyata keçirir və səhifənin düzülməsini yoxlayır. Göstərici "(L >> PAGE_SHIFT) XOR (P)" əməliyyatının nəticəsi ilə əvəz olunur, burada P göstəricinin dəyəri, L isə göstəricinin saxlandığı yaddaş yeridir.

Yoxlama məntəqəsi zəifliklərdən istifadə etməyi çətinləşdirən Safe-Linking mühafizə texnikasını təklif etdi

Sistemdə istifadə edildikdə ASLR Yığın əsas ünvanı olan L bitlərinin (Ünvan Məkanının Təsadüfiləşdirilməsi) hissəsi P-ni kodlaşdırmaq üçün açar kimi istifadə olunan təsadüfi dəyərləri ehtiva edir (12 baytlıq səhifələr üçün 4096 bitlik sürüşmə əməliyyatı ilə çıxarılır). Bu manipulyasiya, istismarda göstəricinin qaçırılması riskini azaldır, çünki göstərici orijinal formada saxlanmır və onu əvəz etmək yığınların ayrılması haqqında bilik tələb edir. Bundan əlavə, yamaq kodu həmçinin blokun düzülməsi üçün əlavə yoxlamanı ehtiva edir ki, bu da təcavüzkarın göstəricini hizalanmamış dəyərlə əvəz etməsinə imkan vermir və 64 bitlik sistemlərdə əlavə olaraq bloklamağa imkan verən uyğunlaşdırılmış bitlərin sayını bilmək tələb edir. 15 hücum cəhdindən 16-i hizalanmanı nəzərə almır.

Metod göstəricinin qismən yenidən yazılması (aşağı baytların dəyişdirilməsi), göstəricinin tam yenidən yazılması (təcavüzkarın koduna yönləndirmə) və sıralanmamış ünvanda siyahı mövqeyinin dəyişdirilməsindən istifadə edən hücumlardan qorunmaq üçün effektivdir. Nümunə olaraq göstərilir ki, malloc-da Safe-Linking-in istifadəsi son vaxtlar istismarın qarşısını almağa imkan verəcəkdir. müəyyən edilmişdir eyni zəiflik tədqiqatçıları tərəfindən CVE-2020-6007 Philips Hue Bridge ağıllı işığında, bufer daşması nəticəsində yaranıb və cihaza nəzarəti əldə etməyə imkan verir.

Mənbə: opennet.ru

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