İçeriğe geç
edumintsBlog
Güvenlik3 dk okuma

Firecracker VM Kaçışı: PwnEscape Bölüm 2

Kaynak: Hacker News

Paylaş
GüvenlikEdumints Blog
İçindekiler 2 başlık

Firecracker, güvenilmeyen kodları bir microVM içinde izole etmek için tasarlanmış bir teknolojidir. Ancak PWN Research ekibinden Paulos Yibelo tarafından yürütülen bu çalışmada (CVE-2026-99999), bu izolasyon aşılarak ana makinede (host) root yetkileriyle kod çalıştırma başarısı elde edildi. PwnEscape Bölüm 1'de tanıtılan ana makine bellek erişim ilkelini (host memory primitive) temel alan bu bölüm, misafir (guest) sistemin içinden Firecracker sürecini bellekte bulmayı ve canlı bir iş parçacığını (thread) ele geçirmeyi adım adım inceliyor. Üstelik geçici yığın (stack) değişiklikleri geri yüklenerek Firecracker'ın çalışmaya devam etmesi ve sanal makinenin SSH üzerinden erişilebilir kalması sağlandı.

00 / Kontrolün Ele Geçirileceği Noktayı Seçmek#

Bir Firecracker microVM, ana makinede kendisini yöneten bir sürece sahiptir. Her sanal CPU (vCPU), bu süreç içinde bir iş parçacığına karşılık gelir. İş parçacığı, misafir sistemi çalıştırmak için KVM'ye girer ve kullanıcı alanında (userspace) işlenmesi gereken bir olay olduğunda Firecracker'a geri döner. Sanal CPU'yu çalıştıran sistem çağrısı şu şekildedir:

ioctl(vcpu_fd, KVM_RUN, 0);

İş parçacığı bu sistem çağrısı içindeyken, ana makine çekirdeği (host kernel) kullanıcı alanı yazmaçlarını (registers) pt_regs adlı bir yapıda saklar. Bu yapı, yürütmenin nerede devam edeceğini belirten komut işaretçisini (instruction pointer) ve hangi kullanıcı alanı yığınının kullanılacağını gösteren yığın işaretçisini (stack pointer) barındırır.

Bu durum, KVM_RUN çağrısından dönüş noktasını oldukça cazip bir hedef haline getirir:

  • Kaydedilmiş çerçeve (saved frame) bulunup değiştirilebilirse, iş parçacığı kullanıcı alanına döndüğünde Firecracker'ın çalıştıracağı kod seçilebilir.
  • Böyle bir dönüşe neden olan herhangi bir misafir işlemi, tetikleyici (trigger) görevi görür.
  • Mevcut fiziksel bellek erişimini kullanmak için Firecracker sürecini tanımlamak, süreç içinde çağrılabilecek kodu bulmak ve aktif vCPU iş parçacığına ait yazmaç çerçevesini tespit etmek gerekir. Başlangıç noktası olarak misafir içinde kontrol edilen bir bellek sayfası seçilmiştir.

Pratik Çıkarımlar: Sanallaştırma ve konteyner güvenliğinde çekirdek ile kullanıcı alanı arasındaki geçiş sınırları (context switch) en kritik saldırı yüzeyleridir. Sistem mimarisi tasarlarken yalnızca misafir izolasyonuna güvenmek yerine, ana makinedeki yönetim süreçlerinin bellek bütünlüğünü ve sistem çağrısı dönüşlerini koruyacak ek savunma katmanları uygulanmalıdır.

01 / Misafir Sayfamızı Ana Makinede Bulmak#

Misafir ve ana makine farklı fiziksel adres alanları kullanır. Bir bellek sayfası sanal makine içinde Misafir Fiziksel Adresi (GPA), arka plandaki fiziksel makinede ise Ana Makine Fiziksel Adresi (HPA) ile tanımlanır. Hedef sistemde bu iki adres arasındaki çevrimi Genişletilmiş Sayfa Tabloları (EPT - Extended Page Tables) sağlar.

Çevrimi doğrulamak için şu adımlar izlenmiştir:

  • Misafir içindeki bir bellek sayfasına tanınabilir bir bayt dizisi (nonce) yerleştirildi.
  • İlk çözücü (resolver), sayfanın bilinen GPA'sını ve içeriğini girdi olarak aldı.
  • Bellek erişim ilkelinin kapsadığı fiziksel aralıklarda aday EPT kökleri (EPT roots) arandı.
  • Her aday için misafir adresinin seçtiği girdiler takip edilerek fiziksel bir sayfaya ulaşıldı ve bu sayfada nonce değerinin olup olmadığı (contents == nonce) kontrol edildi.

Pratik Çıkarımlar: Düşük seviyeli sistem geliştirmelerinde ve güvenlik araştırmalarında bellek soyutlama katmanlarının (GPA ve HPA gibi) nasıl eşleştiğini anlamak kritik önem taşır. Bellek sızıntısı veya yetkisiz erişim açıklarında, saldırganlar bilinen bir veri desenini (nonce) belleğe yazarak karmaşık adres uzaylarında kendi konumlarını doğrulayabilirler.


Bu konuyu derinlemesine öğrenmek isterseniz: Güvenli Model Registry ve Container Güvenliği modülüne göz atın.

Kaynak ve atıf

Bu yazı, Hacker News üzerinde yayımlanan içerikten yararlanılarak Edumints tarafından yapay zekâ desteğiyle Türkçe hazırlandı. Ayrıntılar ve yazarların kendi anlatımı için orijinaline bakabilirsin:

  • pwn.ai/blog/firecracker-escape