Linux çekirdeği çöp toplayıcısında ayrıcalık artışına yol açabilecek yarış durumu

Spectre ve Meltdown güvenlik açıklarını tanımlayan Google Project Zero ekibinden Jann Horn, Linux çekirdeği çöp toplayıcısındaki bir güvenlik açığından (CVE-2021-4083) yararlanmaya yönelik bir teknik yayınladı. Güvenlik açığı, unix soketlerindeki dosya tanımlayıcıları temizlerken oluşan bir yarış durumundan kaynaklanıyor ve potansiyel olarak yerel, ayrıcalığı olmayan bir kullanıcının kodunu çekirdek düzeyinde yürütmesine izin veriyor.

Sorun ilginç çünkü yarış durumunun meydana geldiği zaman penceresinin, gerçek istismarlar yaratmak için çok küçük olduğu tahmin ediliyordu, ancak çalışmanın yazarı, istismar yaratıcısının bu tür başlangıçta şüpheci olan güvenlik açıklarının bile gerçek saldırıların kaynağı haline gelebileceğini gösterdi. gerekli beceriler ve zaman. Yann Horn, telkari manipülasyonların yardımıyla, close() ve fget() işlevlerini aynı anda çağırırken ortaya çıkan yarış durumunu, tamamen istismar edilebilir bir serbest bırakmadan sonra kullanım güvenlik açığına nasıl dönüştürebileceğinizi ve halihazırda serbest bırakılmış bir verilere nasıl erişebileceğinizi gösterdi. çekirdeğin içindeki yapı.

Close() ve fget() çağrılırken aynı anda bir dosya tanımlayıcının kapatılması işlemi sırasında bir yarış durumu oluşur. close() çağrısı fget() yürütülmeden önce gerçekleşebilir; bu durum çöp toplayıcının kafasını karıştırır çünkü refcount'a göre dosya yapısında dış referanslar olmayacak, ancak dosya tanımlayıcıya bağlı kalacaktır, yani. Çöp toplayıcı yapıya özel erişime sahip olduğunu düşünecektir, ancak aslında kısa bir süre için dosya tanımlayıcı tablosunda kalan giriş hala yapının serbest bırakıldığını işaret edecektir.

Yarış durumuna girme olasılığını artırmak için, sisteme özel optimizasyonlar uygulanırken kullanım başarısı olasılığını% 30'a çıkarmayı mümkün kılan çeşitli püf noktaları kullanıldı. Örneğin, dosya tanımlayıcıları olan bir yapıya erişim süresini birkaç yüz nanosaniye artırmak için, önbellek başka bir CPU çekirdeğindeki etkinliklerle doldurularak veriler işlemci önbelleğinden çıkarıldı; bu da yapının bellekten alınmasını mümkün kıldı. hızlı CPU önbelleği.

İkinci önemli özellik ise yarış koşul süresini artırmak için donanım zamanlayıcı tarafından oluşturulan kesintilerin kullanılmasıydı. Bu an, bir yarış durumu oluştuğunda kesme işleyicisinin harekete geçmesi ve kodun yürütülmesini bir süreliğine kesintiye uğratması için seçildi. Kontrolün geri dönüşünü daha da geciktirmek için, kesme işleyicisinde arama yapılmasını gerektiren epoll kullanılarak bekleme kuyruğunda yaklaşık 50 bin giriş oluşturuldu.

Güvenlik açığından yararlanma tekniği, 90 günlük gizlilik süresinin ardından açıklandı. Sorun, çekirdek 2.6.32'den bu yana ortaya çıkıyor ve Aralık ayı başlarında düzeltildi. Düzeltme, çekirdek 5.16'ya dahil edildi ve ayrıca dağıtımlarda sağlanan çekirdek ve çekirdek paketlerinin LTS dallarına da aktarıldı. MSG_PEEK bayrağını işlerken çöp toplayıcıda kendini gösteren benzer bir CVE-2021-0920 sorununun analizi sırasında güvenlik açığının tespit edilmesi dikkat çekicidir.

Kaynak: opennet.ru

Yorum ekle