Linux nüvəsinin zibil toplayıcısında imtiyazların artmasına səbəb ola biləcək yarış vəziyyəti

Bir vaxtlar Spectre və Meltdown zəifliklərini müəyyən edən Google Project Zero komandasından Jann Horn Linux nüvəsinin zibil toplayıcısında zəiflikdən (CVE-2021-4083) istifadə etmək üçün bir texnika dərc etdi. Zəiflik unix yuvalarında fayl deskriptorlarını təmizləyərkən yarış vəziyyəti ilə əlaqədardır və potensial olaraq yerli imtiyazsız istifadəçiyə öz kodunu nüvə səviyyəsində icra etməyə imkan verir.

Problem maraqlıdır, çünki yarış şəraitinin baş verdiyi vaxt pəncərəsi real istismarlar yaratmaq üçün çox kiçik hesab olunurdu, lakin tədqiqatın müəllifi göstərdi ki, hətta ilkin olaraq şübhə ilə yanaşan belə zəifliklər belə, istismarın yaradıcısı belə bir hücumun mənbəyinə çevrilə bilər. lazımi bacarıq və vaxt. Yann Horn göstərdi ki, filigran manipulyasiyalarının köməyi ilə siz close() və fget() funksiyalarını eyni vaxtda çağırarkən baş verən yarış vəziyyətini tam istifadə oluna bilən zəifliyə çevirə və artıq azad edilmiş məlumatlara çıxış əldə edə bilərsiniz. nüvənin daxili quruluşu.

Eyni zamanda close() və fget() çağırarkən fayl deskriptorunun bağlanması prosesi zamanı yarış vəziyyəti baş verir. Close() çağırışı fget() icra edilməzdən əvvəl baş verə bilər ki, bu da zibil toplayıcını çaşdıracaq, çünki yenidən hesablamaya əsasən, fayl strukturunda xarici istinadlar olmayacaq, lakin fayl deskriptoruna əlavə olaraq qalacaq, yəni. Zibil yığan şəxs onun struktura eksklüziv çıxışı olduğunu düşünəcək, lakin əslində, qısa müddət ərzində fayl deskriptor cədvəlində qalan giriş hələ də azad edilən struktura işarə edəcək.

Yarış vəziyyətinə düşmə ehtimalını artırmaq üçün bir neçə fənddən istifadə edildi ki, bu da sistemə xas optimallaşdırmaları tətbiq edərkən istismar uğurunun ehtimalını 30%-ə çatdırmağa imkan verdi. Məsələn, fayl deskriptorları olan bir struktura daxil olma vaxtını bir neçə yüz nanosaniyə artırmaq üçün, keşi başqa bir CPU nüvəsindəki fəaliyyətlə zibilləməklə məlumat prosessorun keşindən çıxarıldı, bu da strukturu yaddaşdan deyil, yaddaşdan götürməyə imkan verdi. sürətli CPU önbelleği.

İkinci vacib xüsusiyyət, yarış vəziyyətinin vaxtını artırmaq üçün bir aparat taymeri tərəfindən yaradılan kəsmələrin istifadəsi idi. An elə seçilmişdir ki, kəsmə idarəçisi yarış vəziyyəti baş verəndə işə düşsün və kodun icrasını bir müddət dayandırsın. Nəzarətin qaytarılmasını daha da gecikdirmək üçün epoll-dan istifadə edərək gözləmə növbəsinə təxminən 50 min giriş yaradıldı, bu da kəsmə idarəedicisi vasitəsilə axtarışı tələb etdi.

Zəiflikdən istifadə texnikası 90 günlük açıqlanmayan müddətdən sonra açıqlanıb. Problem kernel 2.6.32-dən bəri yaranır və dekabrın əvvəlində düzəldilib. Düzəliş kernel 5.16-a daxil edildi və həmçinin ləpələrin LTS filiallarına və paylamalarda təqdim olunan kernel paketlərinə köçürüldü. Maraqlıdır ki, zəiflik MSG_PEEK bayrağının işlənməsi zamanı zibil yığıcıda özünü göstərən CVE-2021-0920 oxşar probleminin təhlili zamanı müəyyən edilib.

Mənbə: opennet.ru

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