Blog
Kernel Düzeyi Anti-Cheat Sistemleri Nasıl Çalışır?
Modern rekabetçi çevrim içi oyunlarda hile yazılımları, basit kullanıcı arayüzü manipülasyonlarından donanım ve işletim sistemi katmanlarına inen sofistike yazılımlara dönüştü. Bu dönüşümün doğal bir sonucu olarak kernel anti-cheat çözümleri, hile tespitini işletim sisteminin en yetkili katmanı olan Ring 0 seviyesinde yürütmek üzere tasarlandı. Bir anti-cheat sürücüsünün temel görevi, oyun belleğini dış müdahalelerden izole etmek, yetkisiz bellek okuma/yazma girişimlerini engellemek ve sistemde çalışan şüpheli kod parçacıklarını yürütülmeden önce yakalamaktır.
Bu sistemlerin arka planında yatan mantığı anlamak, işletim sistemi mimarisinin güvenlik modellerini ve bellek yönetim mekanizmalarını incelemeyi gerektirir.
Ring 0 ve Ring 3 ayrımı: Çekirdek düzeyine inişin nedeni
x86 ve x64 mimarilerinde işletim sistemleri, donanım kaynaklarını ve kritik sistem bileşenlerini korumak amacıyla hiyerarşik ayrıcalık halkaları (Privilege Rings) kullanır. Bu modelde iki temel alan öne çıkar:
- Ring 3 (Kullanıcı Modu – User Mode): Standart kullanıcı uygulamaları, tarayıcılar, Discord ve bizzat oyunun kendi yürütülebilir dosyası (.exe) bu alanda çalışır. Ring 3’te çalışan bir program, donanıma veya diğer süreçlerin bellek alanlarına doğrudan erişemez; tüm kritik taleplerini Windows API üzerinden işletim sistemi çekirdeğine iletmek zorundadır.
- Ring 0 (Çekirdek Modu – Kernel Mode): İşletim sisteminin kalbi olan çekirdek (ntoskrnl.exe) ve donanım sürücüleri burada çalışır. Ring 0, fiziksel belleğe, işlemci kayıtlarına (CPU registers) ve donanım kesmelerine tam, kısıtlamasız erişim yetkisine sahiptir.
+---------------------------------------------------+
| RING 3 (User Mode) |
| [Oyun .exe] [Discord] [Kullanıcı Hilesi] |
+---------------------------------------------------+
| (Sistem Çağrıları - syscall)
v
+---------------------------------------------------+
| RING 0 (Kernel Mode) |
| [Windows Çekirdeği] [Kernel Anti-Cheat Sürücüsü]|
| [Fiziksel Bellek Denetimi] [Sürücü Doğrulama] |
+---------------------------------------------------+
|
v
+---------------------------------------------------+
| DONANIM KATMANI |
| [CPU] [RAM] [PCIe] |
+---------------------------------------------------+
Geleneksel anti-cheat yazılımları Ring 3 seviyesinde çalışıyordu. Bu durum belirgin bir asimetri yarattı: Bir hile geliştiricisi, imzalı veya güvenlik açığı barındıran yasal bir sürücü (BYOVD tekniği) kullanarak kodunu Ring 0’a taşıdığında, Ring 3’te bulunan bir güvenlik aracının bu işlemi tespit etmesi teorik olarak imkansız hale gelir. Çekirdekte çalışan bir yazılım, kullanıcı modundaki bir sürecin bellek okumalarını gizleyebilir, sistem API’lerini yanıltabilir ya da anti-cheat sürecini tamamen körleştirebilir.
Oyun geliştiricileri bu asimetriyi dengelemek adına kendi güvenlik çözümlerini birer çekirdek sürücüsü (.sys) olarak derleyip sisteme yüklemeye başladı.
Kernel anti-cheat mimarisinin temel yapı taşları
Modern bir çekirdek düzeyi koruma motoru, oyun başlatıldığında (bazen de işletim sistemi önyüklenirken) devreye girer ve işletim sisteminin sağladığı resmi geri çağırma (callback) mekanizmalarını kaydeder.
1. Süreç ve tanıtıcı (Handle) kısıtlamaları: ObRegisterCallbacks
Bir hile yazılımının oyun belleğini değiştirebilmesi için öncelikle hedef sürece bir “tanıtıcı” (handle) açması gerekir. Windows API’sinde bu işlem genellikle OpenProcess çağrısıyla yapılır.
Kernel anti-cheat sürücüleri, ObRegisterCallbacks rutinini kullanarak işletim sistemi düzeyinde bir filtre kurar. Sisteme herhangi bir süreç, oyun sürecine yönelik bir tanıtıcı talep ettiğinde çekirdek sürücüsü araya girer:
| Talep Edilen Yetki | Normal İşleyiş | Anti-Cheat Müdahalesi |
|---|---|---|
PROCESS_VM_READ |
Süreç belleğini okur | İzin maskesinden yetki sıyrılır (Strip Rights) |
PROCESS_VM_WRITE |
Süreç belleğine veri yazar | Çağrı reddedilir veya sessizce geçersiz kılınır |
PROCESS_ALL_ACCESS |
Tam denetim sağlar | Yalnızca temel senkronizasyon izinlerine düşürülür |
Bu mekanizma sayesinde yetkisiz hiçbir kullanıcı modu programı, oyun belleğine doğrudan erişim sağlayamaz.
2. Sayfa tablosu (Page Table) ve CR3 denetimi
İşletim sistemi, sanal bellek adreslerini fiziksel RAM adreslerine dönüştürmek için sayfa tabloları (Page Tables) kullanır. Her sürecin kendine ait bir sayfa tablosu dizini ve bunu işaret eden bir kontrol kaydı (CR3 register) bulunur.
Gelişmiş hileler, OpenProcess gibi API çağrılarını tamamen atlayarak doğrudan fiziksel bellek üzerinden sanal adres çözümlemesi yapmaya çalışır. Kernel anti-cheat sistemleri:
- İşlemcinin
CR3kaydının manipüle edilip edilmediğini takip eder. - Geçersiz sayfa tablosu girişlerini (PTE – Page Table Entry) tarar.
- Bellek sayfalarının erişim bayraklarını (
PAGE_EXECUTE_READWRITEgibi şüpheli izinler) periyodik olarak denetler.
3. Sistem iş parçacığı (System Thread) ve yığın (Stack) doğrulaması
Çekirdek düzeyinde yürütülen her kod parçacığı bir çağrı yığını (call stack) bırakır. Anti-cheat sürücüleri, zamanlayıcı kesmeleri (DPC – Deferred Procedure Call) ve sistem iş parçacıkları aracılığıyla yığın bütünlüğünü kontrol eder:
- Yürütülen kodun meşru, dijital olarak imzalanmış bir Windows modülünden mi yoksa bellek üzerinde tahsis edilmiş kimliksiz (unbacked) bir alandan mı geldiği doğrulanır.
- Kernel kancaları (hooks) tespit edilir. Windows’un kendi güvenlik mekanizması olan PatchGuard (Kernel Patch Protection – KPP) rutin aralıklarla çalışırken, anti-cheat sürücüleri kritik çekirdek dizinlerini çok daha yüksek frekansla tarayarak değişiklikleri raporlar.
Bellek ve donanım denetimi: Tespit yöntemleri
Kernel düzeyinde çalışan bir koruma sistemi, sadece belleğin içindeki verileri değil, bu belleğe erişmeye çalışan dış etkenleri de analiz eder.
Gizli sürücü tespiti ve DKOM denetimi
Gelişmiş hile yazılımları, Windows’un aktif sürücü listesinden (PsLoadedModuleList) kendilerini silerek çalışmayı hedefler. Buna Doğrudan Çekirdek Nesnesi Manipülasyonu (DKOM) denir.
Kernel anti-cheat sürücüleri, yalnızca bağlı listeleri (linked lists) kontrol etmekle yetinmez; nesne başlıklarını, havuz etiketlerini (pool tags) ve bellek tahsis kalıplarını tarayarak listede görünmeyen ancak fiziksel RAM’de kod yürüten sahte sürücüleri ortaya çıkarır.
Donanım kimlikleme (HWID Profiling)
Yasaklanan bir kullanıcının oyuna yeniden girmesini engellemek, çekirdek seviyesinde donanım bileşenlerinin doğrudan sorgulanmasını gerektirir. Kullanıcı modundaki yazılımlar sistem kayıt defterini (Registry) veya basit WMI çağrılarını yanıltabilirken, kernel anti-cheat şu bileşenlerin ham seri numaralarını donanım denetleyicileri üzerinden okur:
- Depolama Aygıtları: NVMe/SATA denetleyicisine gönderilen doğrudan
SMARTveIDENTIFYkomutlarıyla disk seri numaraları. - Anakart & BIOS: SMBIOS tablolarının fiziksel bellek bloklarından okunması ve UUID doğrulaması.
- Ağ Arayüzleri: Ağ kartı ROM’undan kalıcı MAC adresinin çekilmesi.
- İşlemci ve GPU: CPUID komut çıktıları ve ekran kartı firmware kimlikleri.
Bu parametrelerin birleşimi, sistemin parmak izini (Hardware ID) oluşturur. Bu kimlikleme, standart işletim sistemi yeniden yüklemeleriyle silinemez.
DMA (Direct Memory Access) ve harici aygıt izleme
Son yıllarda hile yöntemleri, oyun bilgisayarına PCIe yuvası üzerinden bağlanan ikinci bir donanım kartı (DMA kartları) aracılığıyla belleği doğrudan okuma yoluna gitmiştir. Bu yöntemde ana bilgisayarın işlemcisinde hiçbir yabancı yazılım çalışmaz; okuma işlemi donanım veri yolu üzerinden gerçekleşir.
Kernel anti-cheat’ler bu tehdide karşı iki yönlü savunma yürütür:
- IOMMU / VT-d Kontrolü: Giriş/Çıkış Bellek Yönetim Birimi’nin (IOMMU) aktif olup olmadığını denetler. IOMMU, PCIe aygıtlarının erişebileceği bellek bölgelerini kısıtlayarak yetkisiz DMA okumalarını donanım düzeyinde engeller.
- PCIe Konfigürasyon Alanı Analizi: Sistem yoluna bağlı aygıtların Vendor ID ve Device ID bilgilerini inceler; şüpheli aygıt gömülü yazılımlarını (firmware spoofing kalıplarını) algılar.
Çekirdek düzeyinde çalışmanın getirdiği riskler ve ödünleşimler
Bir güvenlik yazılımını Ring 0’a yerleştirmek, mutlak güvenlik sağlamadığı gibi beraberinde ciddi teknik ve yapısal sorumluluklar getirir.
Sistem kararlılığı ve mavi ekran (BSOD) riski
Kullanıcı modunda çöken bir uygulama yalnızca kendi sürecini sonlandırır; işletim sistemi çalışmaya devam eder. Ancak Ring 0 düzeyinde meydana gelen tek bir bellek erişim ihlali (örneğin sayfalanamayan bir alanda geçersiz işaretçi kullanımı) doğrudan sistemin çökmesine (IRQL_NOT_LESS_OR_EQUAL veya PAGE_FAULT_IN_NONPAGED_AREA kodlu BSOD) neden olur.
Kernel anti-cheat sürücülerinin her Windows güncellemesiyle, farklı donanım kombinasyonlarıyla ve üçüncü taraf sürücülerle kusursuz bir uyum içinde çalışması zorunludur.
Saldırı yüzeyinin genişlemesi
Ring 0 seviyesindeki her sürücü, potansiyel bir saldırı vektörüdür. Eğer anti-cheat sürücüsünün kendisinde bir bellek taşması veya giriş doğrulama açığı (IOCTL açığı) bulunursa, bu durum kötü niyetli aktörlerin tüm işletim sisteminin kontrolünü ele geçirmesine olanak tanıyabilir. Bu senaryo, bizzat koruma aracının bir güvenlik açığına dönüşmesi riskini doğurur.
Sıkça sorulan sorular
Bir kernel anti-cheat kişisel dosyalarımı okuyabilir mi?
Ring 0 düzeyinde bir sürücü, teknik olarak sistemdeki tüm dosyalara, belleğe ve ağ trafiğine erişim yetkisine sahiptir. Ancak ticari anti-cheat sistemleri, yasal düzenlemeler (GDPR vb.) ve veri koruma protokolleri gereğince yalnızca oyun süreçlerini, belleğe müdahale eden kütüphaneleri ve şüpheli sürücüleri denetlemek üzere sınırlandırılmıştır.
Oyun kapalıyken kernel sürücüsünün çalışması neden gereklidir?
Bazı modern koruma sistemleri, işletim sistemi başlarken devreye giren “boot-start” sürücüler kullanır. Bunun temel nedeni, hile geliştiricilerinin oyundan önce kendi imzasız sürücülerini sisteme yüklemesini (örneğin işletim sistemi açılışında PatchGuard devreye girmeden önce bellek yamalaması yapmasını) engellemektir. Sürücü oyun başlamadan devrede değilse, hilenin daha erken yüklenip kendini gizleme ihtimali doğar.
Sanal makinelerde (VM) bu oyunlar neden engellenir?
Hipervizör (Hypervisor) katmanı, Ring 0’ın da altında, sanallaştırma mimarisinde Ring -1 olarak adlandırılan yetkide çalışır. Bir sanal makine içinde çalışan kernel anti-cheat, kendisini barındıran hipervizörün bellek manipülasyonlarını göremez. Bu nedenle çekirdek tabanlı çoğu anti-cheat, iç içe sanallaştırma (nested virtualization) tespit ettiği sistemlerde oyunun açılışına izin vermez.
Savunma mimarisinin geleceği
Kernel düzeyindeki güvenlik çözümleri, kedi-fare oyununu yazılım katmanından donanım ve firmware seviyesine taşımıştır. Günümüzde hile tespit mimarisi yalnızca işletim sistemi API’lerini gözetleyen izole kodlardan ibaret değildir; UEFI Secure Boot doğrulaması, TPM (Trusted Platform Module) çipleri ve sanallaştırma tabanlı güvenlik (VBS – Virtualization-based Security) standartlarıyla entegre çalışan çok katmanlı bir savunma hattıdır. Bir sistemin bütünlüğü, artık çalışan sürecin izinlerinden ziyade, donanımın ilk elektrik aldığı andan itibaren kurulan güven zincirinin (Chain of Trust) kırılmamış olmasına dayanmaktadır.