Kargaşa - sudo ve OpenSSH kimlik doğrulamasını atlamak için bellek biti bozulması saldırısı

Worcester Politeknik Enstitüsü'nden (ABD) araştırmacılar, kimlik doğrulama ve güvenlik kontrollerinin yapılıp yapılmadığına karar vermek için programda bayrak olarak kullanılan yığın değişkenlerinin değerlerini değiştirmek için Rowhammer dinamik rastgele erişim belleği bit bozulma tekniğini kullanan yeni bir Kargaşa saldırısı türü tanıttı. geçti. Saldırının pratik örnekleri, SUDO, OpenSSH ve MySQL'deki kimlik doğrulamayı atlamak ve OpenSSL kütüphanesindeki güvenlikle ilgili kontrollerin sonuçlarını değiştirmek için gösterilmiştir.

Saldırı, sıfırdan farklı değerleri karşılaştırmak için kontrolleri kullanan uygulamalara uygulanabilir. Güvenlik açığı bulunan kod örneği: int auth = 0; ... // kimlik doğrulamanın başarılı olması durumunda kimlik doğrulama değerini değiştiren doğrulama kodu if(auth != 0) return AUTH_SUCCESS; aksi takdirde AUTH_FAILURE değerini döndürür;

Bu örnek bağlamında, başarılı bir saldırı için yığındaki 32 bitlik kimlik doğrulama değişkeniyle ilişkili bellekteki herhangi bir bitin bozulması yeterlidir. Değişkendeki herhangi bir bit bozulursa değer artık sıfır olmayacak ve koşullu operatör, kimlik doğrulamanın başarıyla tamamlandığını belirleyecektir. Bu tür doğrulama kalıpları uygulamalarda oldukça yaygındır ve örneğin SUDO, OpenSSH, MySQL ve OpenSSL'de bulunur.

Kargaşa - sudo ve OpenSSH kimlik doğrulamasını atlamak için bellek biti yönetimi saldırısı

Saldırı aynı zamanda "if(auth == 1)" biçimindeki karşılaştırmalara da uygulanabilir, ancak bu durumda uygulanması daha karmaşık hale gelir, çünkü 32'nin herhangi bir bitini değil son bitini çarpıtmak gerekir. Yöntem aynı zamanda işlemci kayıtlarındaki değişkenlerin değerlerini etkilemek için de kullanılabilir, çünkü kayıtların içerikleri bir bağlam anahtarı, işlev çağrısı veya sinyal işleyicisi tetiklendiğinde geçici olarak yığına aktarılabilir. Register değerlerinin hafızada olduğu süre boyunca, bu hafızaya bozulmalar getirilebilir ve değiştirilen değer, kaydediciye geri yüklenecektir.

Kargaşa - sudo ve OpenSSH kimlik doğrulamasını atlamak için bellek biti yönetimi saldırısı

Bitleri bozmak için RowHammer sınıfı saldırısının modifikasyonlarından biri kullanılır. DRAM belleği, her biri bir kapasitör ve bir transistörden oluşan iki boyutlu bir hücre dizisi olduğundan, aynı bellek bölgesinin sürekli okunması, komşu hücrelerde küçük bir yük kaybına neden olan voltaj dalgalanmalarına ve anormalliklere neden olur. Okuma yoğunluğu yüksekse, komşu hücre yeterince büyük miktarda şarj kaybedebilir ve bir sonraki yenileme döngüsünün orijinal durumuna geri dönmek için zamanı olmayacaktır, bu da hücrede depolanan verilerin değerinde bir değişikliğe yol açacaktır. . Yonga üreticileri, RowHammer'a karşı koruma sağlamak için, özel durumlarda hücre bozulmasını engelleyen ancak olası tüm saldırı çeşitlerine karşı koruma sağlamayan bir TRR (Hedef Satır Yenileme) mekanizması ekledi.

Kargaşa saldırısına karşı korunmak için, karşılaştırmalarda sıfırdan farkların değerlendirilmesi veya birle tesadüf yerine sıfırdan farklı sekizlilere sahip rastgele bir tohum değeri kullanan bir eşleşme kontrolü kullanılması önerilir. Bu durumda, değişkenin istenen değerini ayarlamak için, bir bitin bozulmasının aksine, gerçekçi olmayan, önemli sayıda bitin doğru bir şekilde bozulması gerekir. Saldırıya uğramaz kod örneği: int auth = 0xbe406d1a; ... // kimlik doğrulamanın başarılı olması durumunda auth değerini 0x23ab8701 olarak ayarlayan doğrulama kodu if(auth == 0x23ab8701) return AUTH_SUCCESS; aksi takdirde AUTH_FAILURE değerini döndürür;

Belirtilen koruma yöntemi zaten sudo geliştiricileri tarafından kullanılmış ve CVE-1.9.15-2023 güvenlik açığına yönelik bir düzeltme olarak 42465 sürümüne dahil edilmiştir. Savunmasız ana projelerde düzeltmeler yapıldıktan sonra saldırıyı gerçekleştirmek için kodun bir prototipini yayınlamayı planlıyorlar.

Kaynak: opennet.ru

Yorum ekle