IOMMU bypass via device hotplug¶
IOMMU açıkken bile kötü niyetli, hot-plug edilmiş bir peripheral (Thunderbolt/PCIe) host memory'ye ulaşır — çünkü IOMMU varsayılan olarak kapalı/passthrough'dur, kaba page granularity'de map'ler, lazy unmapping yüzünden stale window'lar bırakır ya da hassas veriyi DMA buffer'larıyla aynı yere koyar.
Mechanism¶
Açık bir IOMMU, sınırlayan bir IOMMU ile aynı şey değildir
IOMMU'nun görevi, bir peripheral'ın driver'ın ona atadığı buffer'ların dışına DMA yapmasını engellemektir. Pratikte ise birkaç açık, hot-plug edilen bir cihazın asla dokunmaması gereken belleği okumasına ya da yazmasına izin verir:
- Varsayılan olarak kapalı / passthrough. Windows, Linux ve FreeBSD tarihsel olarak Thunderbolt hot-plug için IOMMU'yu varsayılan olarak etkinleştirmiyordu (Linux 5.0'da sınırlı destek ekledi) ve güvenliği performans için takas ediyordu — yani runtime'da takılan bir cihaz çoğu zaman hiç remapping ile karşılaşmaz.
- Page granularity paylaşımı. IOMMU belleği page'ler hâlinde map'ler,
ama kernel allocator'ları (örn.
kmalloc) tek bir page'e çok sayıda object sıkıştırır. Kendi buffer'ına meşru bir mapping'i olan bir cihaz aynı page'deki komşu object'leri okuyabilir/yazabilir — DMA buffer'larıyla aynı yere konmuş hassas veri. - Lazy/deferred unmapping. Performans için OS'ler IOMMU TLB invalidation'ını erteler ve zaten free edilmiş/yeniden kullanılmış belleğe açılan stale, hâlâ yazılabilir window'lar bırakır.
- ATS "already-translated" bypass. Thunderclap, PCIe ATS etkinken kötü niyetli bir cihazın TLP'lerini "already-translated" olarak işaretleyerek açık IOMMU'yu tamamen bypass edebildiğini gösterdi.
Thunderbolt ham PCIe tünellediği için, hot-plug edilen bir "USB-C projektör" ya da "güç adaptörü" aslında bağlandıktan saniyeler sonra bu açıkları istismar eden, DMA yapabilen bir PCIe cihazıdır.
Bu, FireWire DMA attack'in modern, IOMMU çağındaki ardılıdır ve toolchain'ini PCILeech ile paylaşır; temel araştırma ise Thunderclap'tir.
Walkthrough¶
1. Çalışan bir DMA peripheral'ı sun. OS'in bir driver bind edeceği ve DMA mapping'leri vereceği gerçek bir cihazı taklit eden bir FPGA/Thunderbolt platformu (örn. Thunderclap) kullan.
[*] attach malicious NIC over Thunderbolt (raw PCIe tunnel)
[*] OS loads driver, sets up IOMMU mappings for the device's buffers
2. Buffer'ın ötesine uzan. Komşu kernel object'lerini okumak için page granularity ortak yerleşimini kullan, ya da stale bir lazy-unmap window'unu istismar et, ya da mapping'den tamamen kaçmak için hatalı biçimlendirilmiş message field'leri kullan.
[*] read same-page neighbours of granted buffer -> kernel pointers / data
[*] write a function pointer / task struct -> hijack kernel control flow
3. Yükselt. Code execution elde etmek için secret'ları (key'ler, hash'ler) çıkar ya da kernel yapılarını boz — macOS, FreeBSD, Linux ve Windows'a karşı gösterildi.
Kernel DMA Protection'ın kendi window'ları var
Kernel DMA Protection mevcut olduğunda bile, yalnızca OS ayağa kalktıktan sonra koruma sağlar; pre-boot/firmware DMA firmware'in sorumluluğundadır ve IOMMU'nun yapılandırılmadığı herhangi bir aralık (early boot, belirli hotplug yolları) bir fırsattır. Kaba mapping'ler ve lazy unmap'ler, o açıkken bile yerinde kalır.
Detection¶
- Bir cihaz map'inin dışına dokunduğunda IOMMU fault log'ları (DMAR/AMD-Vi).
- Kilitli ya da boşta bir makinede beklenmedik Thunderbolt/PCIe cihaz enumeration'ı.
Mitigation¶
- Hot-plug için IOMMU'yu etkinleştir ve strict (deferred olmayan) invalidation kullan; harici portlar için passthrough modundan kaçın.
- Bounce buffer'lar / özel DMA page'leri ile cihaz buffer'larının hassas kernel object'leriyle asla aynı page'i paylaşmamasını sağla (yazılımda sub-page izolasyonu).
- Kernel DMA Protection artı firmware (pre-boot) DMA koruması ve kullanılmayan Thunderbolt/PCIe hotplug'ının devre dışı bırakılması.
References¶
- Markettos et al. Thunderclap: Exploring Vulnerabilities in Operating System IOMMU Protection via DMA from Untrustworthy Peripherals. NDSS 2019 — https://www.ndss-symposium.org/ndss-paper/thunderclap-exploring-vulnerabilities-in-operating-system-iommu-protection-via-dma-from-untrustworthy-peripherals/
- The Thunderclap vulnerabilities. LWN — https://lwn.net/Articles/782381/
- Microsoft. Kernel DMA Protection. — https://learn.microsoft.com/en-us/windows/security/hardware-security/kernel-dma-protection-for-thunderbolt