Skip to content

BYOVD - RTCore64.sys arbitrary kernel R/W (CVE-2019-16098)

MSI Afterburner'ın legal şekilde imzalı kernel driver'ı, herhangi bir authenticated user tarafından erişilebilen IOCTL'ler expose eder; bunlar arbitrary kernel virtual memory read/write ve MSR erişimi sağlar — RobbinHood ve BlackByte ransomware tarafından EDR ürünlerini kernel callback seviyesinde sessizce öldürmek için abuse edilir.

Mechanism

Note

RTCore64.sys, IOCTL dispatch'ini caller'ları privileged process'lerle kısıtlamadan register eder. I/O control code'ları doğrudan arbitrary kernel virtual address'leri ve Model-Specific Register'ları (MSR) read/write eder — bunlar normalde SeLoadDriverPrivilege ya da doğrudan donanım erişimi arkasında gate'lenen primitive'lerdir. Herhangi bir authenticated local user \\.\RTCore64'ü açabilir, bu IOCTL'leri issue edebilir ve sınırsız kernel memory operasyonu yapabilir. Bu durum, Microsoft'un kendi kılavuzunu ihlal eder: arbitrary kernel memory erişimine izin veren IOCTL code'ları, driver imzalı olsa bile doğası gereği tehlikelidir.

Walkthrough

Etkilenen driver: Micro-Star MSI Afterburner 4.6.2.15658 ve daha eski sürümlerle gelen RTCore64.sys (ve RTCore32.sys).

CVE: CVE-2019-16098 (CVSS 7.8 HIGH; CWE-125/CWE-787; 2019-09-11 tarihinde yayımlandı).

Device symbolic link: \\.\RTCore64

IOCTL code'ları (public research'ten):

Code Operation
0x80002030 Bir Model-Specific Register'dan (MSR) read
0x80002048 Arbitrary 4-byte kernel virtual memory read
0x8000204C Arbitrary 4-byte kernel virtual memory write

Read için kavramsal input buffer (0x80002048):

Offset 0x00:  [source kernel address]   // address to read from
Offset 0x08:  [output field]            // receives the 4-byte value

Token-stealing exploitation yolu:

1. OpenFile("\\.\RTCore64")             // any authenticated user
2. Locate ntoskrnl.exe base             // via EnumDeviceDrivers / NtQuerySystemInformation
3. Read PsInitialSystemProcess          // IOCTL 0x80002048 → SYSTEM EPROCESS pointer
4. Walk EPROCESS.ActiveProcessLinks     // find own EPROCESS
5. Read SYSTEM EPROCESS Token field     // IOCTL 0x80002048
6. Write SYSTEM token into own EPROCESS // IOCTL 0x8000204C
7. Spawn privileged shell

Gerçek dünyadan BYOVD kill-chain (BlackByte ransomware, 2022, Sophos'a göre):

1. Drop RTCore64.sys into %APPDATA%\Roaming\
2. Register as a service → driver loads
3. Read kernel version from ntoskrnl.exe PE headers
4. Look up offsets for PspCreateProcessNotifyRoutine,
   PspCreateThreadNotifyRoutine, PspLoadImageNotifyRoutine
   (hardcoded encrypted table of ~1,000 version-specific offsets)
5. Enumerate callback array entries via 0x80002048
6. Compare driver names against list of >1,000 EDR/AV driver names
7. Zero out matching callback pointers via 0x8000204C
8. Deploy ransomware payload with EDR blind
RTCore64 kernel read (örnek DeviceIoControl çağrısı)
// Read 4 bytes from kernel address 'kernAddr'
struct { ULONG64 addr; ULONG64 result; } buf = { kernAddr, 0 };
DeviceIoControl(hDriver, 0x80002048,
                &buf, sizeof(buf),
                &buf, sizeof(buf),
                &bytesRet, NULL);
// buf.result now contains *(ULONG*)kernAddr

Detection

  • Driver hash blocklist: LOLDrivers, bilinen RTCore64.sys varyantları için altı SHA-256 hash dokümante eder (LOLDrivers UUID e32bc3da-4db1-4858-a62c-6fbe4db6afbd):
  • 01aa278b07b58dc46c84bd0b1b5c8e9ee4e62ea0bf7a695862444af32e87f1fd
  • cdd2a4575a46bada4837a6153a79c14d60ee3129830717ef09e0e3efd9d00812
  • f1c8ca232789c2f11a511c8cd95a9f3830dd719cad5aa22cb7c3539ab8cb4dc3
  • ad215185dc833c54d523350ef3dbc10b3357a88fc4dde00281d9af81ea0764d5
  • d9a2bf0f5ba185170441f003dc46fbb570e1c9fdf2132ab7de28b87ba7ad1a0c
  • 22e125c284a55eb730f03ec27b87ab84cf897f9d046b91c76bea2b5809fd51c5 (Tam liste: loldrivers.io)
  • Service/driver oluşturma: MSI Afterburner kurulum yolunun dışında RTCore64.sys yükleyen sc create veya NtLoadDriver event'lerinde alarm üret.
  • Device open: MSI Afterburner (MSIAfterburner.exe) olmayan herhangi bir process'ten \\.\RTCore64 üzerine yapılan CreateFile.
  • IOCTL telemetry: RTCore64 device'ına karşı 0x80002048 / 0x8000204C loglayan EDR veya kernel filter driver.
  • Kernel callback enumeration: PspCreateProcessNotifyRoutine entry'lerinin toplu olarak sıfırlanmasını izlemek, BlackByte/RobbinHood pattern'i için yüksek güvenilirlikte davranışsal bir göstergedir.
  • ETW + Sysmon: RTCore64.sys için YARA ve Sigma kuralları LOLDrivers GitHub'da tutulur.

Mitigation

  • Microsoft Vulnerable Driver Blocklist: RTCore64.sys, Microsoft'un önerilen block list'ine dahildir. Windows 11 ve Windows Server 2022 bunu varsayılan olarak zorunlu kılar; daha eski sistemler block'u WDAC DriverSiPolicy.p7b üzerinden uygulayabilir.
  • HVCI: Integrity check'lerini geçemeyen driver'ların kurulumunu engeller; ayrıca HVCI tarafından korunan code page'leri hedefleyen arbitrary kernel write'ların faydasını sınırlar.
  • WDAC custom policy: Etkilenen driver sürümü için hash'e ya da MSI signing certificate'ına göre deny et.
  • Kullanılmıyorsa MSI Afterburner'ı kaldır: Driver'ı attack surface'ten tamamen çıkarır.
  • Kernel callback monitoring: Callback'leri ObRegisterCallbacks üzerinden register eden ve callback table bütünlüğünü out-of-band doğrulayan (ör. korumalı bir hypervisor agent'ı ile) korumalı bir EDR konuşlandır.
  • Driver hardening (geliştirme): IOCTL caller'ları açık bir DACL ile IoCreateDeviceSecure üzerinden kısıtlanmalı; kernel memory erişimi asla unprivileged user'lara expose edilmemeli.

References