· kaynak Hacker News – Front Page (hnrss.org)
Xbox 360 Bad Update hypervisor açığı artık saniyeler içinde, neredeyse %100 başarıyla çalışıyor
Xbox 360 Bad Update hypervisor açığına topluluk tarafından yapılan iyileştirmeler çalışma süresini yaklaşık 20 dakika ve kabaca %30 güvenilirlikten saniyeler ve neredeyse %100 başarıya indirirken disk gereksinimini de ortadan kaldırdı.

Neler değişti
Xbox 360'ın hypervisor'üne yönelik bir kavram kanıtı (proof-of-concept) saldırı, yavaş ve güvenilmez bir demodan hızlı ve güvenilir bir hale geldi. icode4.coffee'de yayınlanan ve Hacker News ana sayfasında öne çıkan Hacking the Xbox 360 Hypervisor serisinin üçüncü yazısına göre Bad Update açığı başlangıçta deneme başına kabaca 20 dakika sürüyor ve yalnızca yüzde 30 civarında başarı sağlıyordu. İki tur topluluk katkısının ardından artık saniyeler içinde tamamlanıyor ve başarı oranı yüzde 100'e yakın.
Rock Band Blitz üzerinden disksiz bir giriş noktası
İlk büyük iyileştirme, ihatecompvir ve InvoxiPlayGames takma adlarını kullanan katkıcılardan geldi; onlar Rock Band Blitz'in ücretsiz demo sürümünün içinde DaTArrest adında yeni bir giriş noktası oluşturdular. Yazıda açıklandığı gibi demo, originally Xbox Live mağazasından konsolun sabit diskine veya bellek birimine indirilen bir paket dosyası. Microsoft 360'a USB depolama desteği eklediğinde, dahili depolamadan çalışmak üzere imzalanmış paketler USB belleklerden de önyüklenebilecek şekilde grandfathered edildi. Bu nedenle demo sıradan bir dosya olarak herhangi bir USB belleğe kopyalanabiliyor ve uyumlu bir yazılım sürümü çalıştıran her konsolun dashboard'undan başlatılabiliyor.
Oyunun DLC ayrıştırma kodundaki bellek bozulması açıklarını kullanarak ikili, Bad Update'in ikinci aşama ROP zincirini başlatan ve hypervisor exploit zincirini tetikleyen bir oyun kaydı (game save) hazırladı. Pratik etkisi büyük: saldırı artık önceki sürümlerin bağlı olduğu Tony Hawk American Wasteland oyun diskine ihtiyaç duymuyor. Yazarın tanımıyla açığı çalıştırmak artık dosyaları bir USB belleğe kopyalamak, belleği konsola takmak ve Rock Band Blitz'i başlatmak kadar basit.
Race condition'ın hızlandırılması
İkinci iyileştirme, Máté adlı bir katkıcının gönderdiği bir pull request olarak geldi; o, hypervisor saldırısının merkezindeki race condition'ı optimize etti. İşi üç değişiklik yaptı: açığın ihtiyaç duyduğu kötü niyetli ciphertext değerlerini önceden hesaplayıp saklayan bir hash tablosu, daha iyi bir cache flushing primitive'i ve XKE update payload'ını çalıştıran thread ile ciphertext üzerine yazma işlemini yapan thread arasındaki iyileştirilmiş zamanlama. Bunlar birlikte çalışma süresini birkaç saniyeye indirdi ve race'in başarı oranını çarpıcı biçimde yükseltti.
Orijinal PoC neden lookup tablosunu atladı
Hash tablosu, orijinal kavram kanıtının bir sınırlamasını ele alıyor. Bad Update, konsolun şifrelenmiş belleğine hypervisor API'leriyle önceden belirlenmiş adreslerde şifreli tahsisler oluşturarak, ardından seçilen plaintext'in ciphertext'ini iki farklı bellek yolu üzerinden yakalayarak saldırıyor. Şifreleme şemasının whitening değeri 12 bit genişliğinde, yani herhangi bir plaintext'in 1024 olası ciphertext'i var — ancak orijinal PoC bunlardan yalnızca biri için ciphertext üretti.
Yazar bunun nedenini açıkça anlatıyor. Erken bir prototip bir lookup tablosu denedi ama incelikli bir nedenden dolayı başarısız oldu: araştırmanın üzerinde başladığı 2011 dönemi hypervisor derlemesi, bellek şifrelemesini ayarlayan hypervisor fonksiyonunun içinde bir TLB flush yapıyordu. Sonraki derlemeler bu flush'ı kaldırdı çünkü fonksiyonu saran kernel wrapper zaten bir tane yapıyor — ve Bad Update hypervisor syscall'ını doğrudan çağırarak wrapper'ı atlıyor. TLB tembel yüklendiği için whitening bitleri bayatladı ve bellekten okunan ciphertext geçersiz oldu. Tablo en son (17559) hypervisor'da da sorun çıkarınca, CPU cache sorunlarının peşinde koşan yazar onu rafa kaldırıp yoluna devam etti. Yazı bu konuyu bir öz eleştiriyle kapatıyor: doğru hamle, hatalar ortaya çıktığında onları araştırmak ya da projeyi bir kenara bırakıp clear bir kafayla geri dönmek olurdu.
Hash tablosu nasıl çalışıyor
Lookup yapısı, açığın bellekte görmeyi beklediği ciphertext'in ilk N bitini, iki diziye indeks olarak kullanıyor. İlk dizi, hash collision durumunda bir girdiyi doğrulamak için kullanılan oracle ciphertext'inin ilk 64 bitini saklıyor; ikincisi ise belleğe yazılacak kötü niyetli ciphertext'i saklıyor. Kod CPU ve onun cache'leriyle yarıştığı için collision'lar kovalarla (bucket) ele alınmak yerine yalnızca atlanıyor — bir yinelemeyi yeniden yapmak, eklenen karmaşıklıktan daha ucuz. Máté'nin orijinal pull request'i 10 bitlik bir anahtar kullanıyordu; yazar onu 20 bite genişletti, bu da collision'ları sıfırda ya da düşük tek basamaklı sayılarda tutarken iki tablo için kabaca 24MB bellek maliyeti getiriyor.
Neden önemli
Konsol güvenliği araştırması için güvenilirlik, bir merak konusu ile kullanılabilir bir sonuç arasındaki farktır. Neredeyse anında tetiklenen ve hemen hemen her seferinde başarılı olan bir hypervisor açığı, Bad Update'i etkileyici bir demodan ileri çalışma için pratik bir temele dönüştürüyor — ve serinin yeni bir peer pressure açığını ele alan 4. bölümü zaten vaat edilmiş durumda.
Rock Band Blitz giriş noktası en az bunun kadar önemli. Herhangi bir USB belleğe kopyalanıp dashboard'dan başlatılabilen ücretsiz bir demo paketi, belirli bir perakende oyun diskine bağımlılığı ortadan kaldırıyor. Uzun zaman önce üretimden kalkmış bir konsolda giriş engelini düşürmenin homebrew ve yazılım korunumu için gerçek bir değeri var.
Exploit geliştiricileri için daha sessiz bir ders de var: lookup tablosu fikir yanlış olduğu için değil, hypervisor derlemeleri arasındaki küçük bir davranış farkı — kaldırılan bir TLB flush — sonuçlarını sessizce bozduğu için başarısız oldu. Terk edilmiş varsayımlara taze gözlerle geri dönmek, açığı dakikalarca beklemekten saniyelere taşımanın değerinde çıktı.
- #xbox-360
- #security
- #exploit
- #hypervisor
- #reverse-engineering