Vulnerable signed firmware-access drivers (Screwed Drivers / BYOVD)¶
Eclypsium'un "Screwed Drivers" çalışması, düzgün imzalanmış, vendor-certified onlarca Windows driver'ının raw hardware primitive'lerini — MSR/CR/DR, physical memory, PCI config, MMIO ve I/O port'ları — expose ettiğini gösterdi; bu, bir saldırganın Ring 3'ten Ring 0'a ve OS'in altındaki firmware "negative ring"lerine proxy yapmasına olanak tanır. Böyle bir driver'ı abuse etmek için yüklemek, Bring Your Own Vulnerable Driver (BYOVD) tekniğidir.
Mechanism¶
Note
Windows, kernel driver'larının imzalanmasını gerektirir ve bir code-signing sertifikası artı Microsoft attestation'ı bir trust anchor olarak ele alınır. Kusur tasarım kusurudur, bir memory-safety bug'ı değildir: birçok OEM/utility driver'ı (BIOS flasher'ları, overclocking ve monitoring araçları, diagnostic agent'lar) cihazı açabilen herhangi bir caller adına arbitrary privileged hardware operation'ları gerçekleştiren IOCTL'leri kasıtlı olarak expose eder. Eclypsium'un ifadesiyle, bu driver'lar "processor ve chipset I/O space, Model Specific Registers (MSR), Control Registers (CR), Debug Registers (DR), physical memory ve kernel virtual memory'ye read ve write access gibi son derece privileged donanım kaynaklarına erişim için bir proxy görevi görür."
Kırılan boundary: low-privileged bir process o kaynaklara asla doğrudan dokunamaz, ama imzalı bir driver dokunabilir — dolayısıyla driver'ın IOCTL'ini çağırmak dolaylı bir privilege escalation'dır, "user mode'dan (Ring 3) OS kernel mode'a (Ring 0)." Daha kötüsü, birkaç primitive OS'in altına ulaşır: physical memory + MMIO + MSR'lara write access, bir saldırganın SPI flash'i yeniden programlamasına, chipset'e dokunmasına ya da SMM/firmware'e ulaşmasına olanak tanır — "negative firmware ring'leri." Gerçek malware (LoJax, Slingshot APT) bu sınıfı firmware'de persist etmek için abuse etti.
BYOVD fikri genelleştirir: zaten admin olan ama kernel korumalarıyla (DSE, PPL, EDR self-protection) bloke edilen bir saldırgan, bilinen-vulnerable ama geçerli imzalı bir driver'ı hedefe drop edip yükler ve kendi signing key'ine ihtiyaç duymadan onun hardware primitive'lerini inherit eder. "Signed and Certified Does Not Mean Safe."
Walkthrough¶
Defensive, açıklayıcı — public Eclypsium araştırması ve onun yayınlanmış driver listesi üzerine dayanır. Kanonik bir primitive, bir IOCTL tarafından expose edilen arbitrary physical-memory read/write'dır.
1. Vulnerable bir imzalı driver edin ve yükle. Eclypsium'un sıraladığı
örnekler arasında AsrDrv10x.sys (ASRock), AsUpIO64.sys (ASUS), MSI
NTIOLib_X64.sys / NBIOLib_X64.sys ailesi, phymem64.sys (Supermicro),
Realtek rtkio64.sys ve "tasarımı gereği wormhole driver" olarak tanımlanan
WinRing0x64.sys hardware-monitor driver'ı gibi OEM/utility driver'ları yer alır.
Admin bir saldırgan servisi kurar ve başlatır:
sc create vuln binPath= C:\path\driver.sys type= kernel
sc start vuln
# device now openable, e.g. \\.\<DeviceName>
2. Cihazı aç ve privileged IOCTL'i issue et. Driver, physical memory'yi map
eden ya da bir MSR'ı read/write eden DeviceIoControl code'larını expose eder. Bir
physical-R/W driver tipik olarak bir {physical_address, size} request alır ve bir
buffer döndürür/kabul eder:
HANDLE h = CreateFileA("\\\\.\\<DeviceName>", GENERIC_READ|GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
PHYS_RW req = { .phys = target_pa, .len = 8 };
DeviceIoControl(h, IOCTL_MAP_PHYS, &req, sizeof req, buf, sizeof buf, &ret, 0);
3. Escalate et. Physical R/W (ya da MSR write) ile saldırgan şunları yapabilir:
- kernel struct'larını bul ve patch'le (örn. bir token /
_EPROCESSfield'ını flip et), LSTAR/SMEP-ile-ilgili control bit'leri gibi MSR'ları temizle ya da korumaları devre dışı bırak, veya- OS'in altında persistence için SPI flash'e yaz / firmware'i yeniden programla.
Driver'ın geçerli imzası, kod tehlikeli olsa bile Driver Signature Enforcement'ın yüklemeye izin vermesini sağlar — BYOVD'nin tüm amacı budur.
Warning
Tehlike per-driver bir exploit değil, bir sınıftır: 16+ vendor'dan ~40+ driver (ASRock, ASUSTeK, AMD/ATI, Biostar, EVGA, Getac, GIGABYTE, Huawei, Insyde, Intel, MSI, NVIDIA, Phoenix, Realtek, SuperMicro, Toshiba) fonksiyonel olarak eşdeğer hardware-proxy primitive'leri shipped etti. Bunlardan herhangi biri, hedefte kurulu olmasa bile, drop edilip weaponize edilebilir.
Detection¶
- Driver load telemetry: bilinen-vulnerable hash'lerin / signer'ların
installer'ları dışında yüklenmesi için
Service Control Manager7045 (yeni kernel servisi) ve Sysmon Event ID 6 (bir driver'ınImageLoaded'ı) izle. - Vulnerable-driver hash/blocklist matching: yüklenen driver'ları Microsoft recommended driver block list'i ve Eclypsium'un yayınlanmış Screwed-Drivers listesi (SHA256 + signer) ile karşılaştır.
- Hardware IOCTL'lerin anormal kullanımı: bir monitoring/BIOS driver'ının cihazını açan ve physical-memory / MSR IOCTL'leri issue eden non-utility bir process.
- Firmware integrity drift: beklenmedik SPI-flash yazmaları, primitive'in firmware ring'lerine ulaşmak için kullanıldığını gösterir.
Mitigation¶
- Microsoft Vulnerable Driver Blocklist'i etkinleştir (son Windows'larda default olarak açık; başka yerlerde WDAC/HVCI policy üzerinden) ve HVCI / memory integrity'yi aç; böylece imzasız ya da blocklist'teki driver'lar yüklenemez.
- WHQL / EV-signing disiplinini zorunlu kıl ve raw hardware access expose eden OEM utility driver'larını kaldır/kullanma; bilinen-kötü driver'ların sertifikalarını revoke et.
- Firmware boundary'sini bağımsız olarak lock'la (SPI write protection, BIOS lock, Boot Guard); böylece kernel-level physical writes bile kolayca reflash edemesin.
- Saldırgan-tedarikli bir driver'ın en başta drop/yükleme'sini bloke etmek için application allow-listing ve EDR self-protection.