chkrootkit ile Linux Sistemlerde Rootkit Tespiti ve Kullanımı

Sisteminizde bir rootkit olduğundan şüpheleniyorsanız ya da düzenli güvenlik taramalarını rutininize dahil etmek istiyorsanız, chkrootkit tam olarak aradığınız araç. Açık kaynaklı, hafif ve onlarca yıllık geçmişiyle kendini kanıtlamış bu araç, Linux sistemlerindeki rootkit varlığını tespit etmek için hala en güvenilir seçeneklerden biri. Bu yazıda chkrootkit’i sıfırdan kurarak, nasıl kullanacağınızı ve çıktıları nasıl yorumlayacağınızı gerçek dünya senaryolarıyla ele alacağız.

chkrootkit Nedir ve Ne İşe Yarar?

chkrootkit (Check Rootkit), 1997 yılında Nelson Murilo ve Klaus Steding-Jessen tarafından geliştirilen bir güvenlik tarama aracıdır. Temel amacı, sistemdeki rootkit belirtilerini tespit etmektir. Rootkit’ler, saldırganların sisteme yetkisiz erişim sağladıktan sonra varlıklarını gizlemek için kullandıkları kötü amaçlı yazılımlardır. Sistem araçlarını değiştirirler, süreçleri gizlerler ve log dosyalarını manipüle ederler.

chkrootkit şu tehditleri tespit edebilir:

  • Bilinen rootkit imzaları: LRK, t0rn, Adore, Suckit gibi popüler rootkit ailelerini tanır
  • Değiştirilmiş sistem araçları: ls, ps, netstat, find gibi kritik araçların manipüle edilip edilmediğini kontrol eder
  • Şüpheli ağ arayüzleri: Promiscuous modda çalışan arayüzleri tespit eder
  • Gizlenmiş süreçler: Kernel seviyesinde gizlenmeye çalışan süreçleri arar
  • Lastlines kontrolü: wtmp ve lastlog dosyalarındaki tutarsızlıkları inceler

Şunu da açıkça belirtmek gerekir: chkrootkit, imza tabanlı bir araçtır. Yeni, bilinmeyen rootkit’leri yakalamakta yetersiz kalabilir. Bu yüzden rkhunter gibi araçlarla birlikte kullanmak her zaman daha sağlıklı sonuç verir.

Kurulum

Paket Yöneticisi ile Kurulum

Çoğu Linux dağıtımında chkrootkit resmi depolardan kurulabilir.

Debian/Ubuntu tabanlı sistemler:

sudo apt update
sudo apt install chkrootkit -y

RHEL/CentOS/AlmaLinux tabanlı sistemler:

RHEL tabanlı sistemlerde chkrootkit resmi depolarda bulunmayabilir. EPEL deposunu etkinleştirmeniz gerekebilir:

sudo dnf install epel-release -y
sudo dnf install chkrootkit -y

Arch Linux:

sudo pacman -S chkrootkit

Kaynak Koddan Derleme (Önerilen Yöntem)

Gerçek bir rootkit saldırısından şüpheleniyorsanız, paket yöneticisini kullanmak riskli olabilir. Çünkü paket yöneticisi araçları da ele geçirilmiş olabilir. Bu durumda chkrootkit’i temiz bir ortamda derleyip sisteme taşımanız gerekir.

# Önce temiz bir makineye indirin
wget https://www.chkrootkit.org/dl/chkrootkit.tar.gz

# Dosya bütünlüğünü kontrol edin (SHA256)
sha256sum chkrootkit.tar.gz

# Arşivi açın
tar xvzf chkrootkit.tar.gz

# Dizine girin ve derleyin
cd chkrootkit-*
make sense

# Şüpheli sistemde çalıştırmak için binary'yi kopyalayın
# veya USB üzerinden transfer edin

Önemli bir not: Gerçek bir saldırı senaryosunda, derlenmiş chkrootkit binary’sini USB ile taşıyıp şüpheli sistemde şu şekilde çalıştırın:

# USB mount edildiğini varsayarak
/mnt/usb/chkrootkit/chkrootkit -p /mnt/usb/chkrootkit

-p parametresi, chkrootkit’in kendi araçlarını belirtilen dizinden kullanmasını sağlar. Bu sayede değiştirilmiş sistem araçlarını bypass eder.

Temel Kullanım

İlk Tarama

chkrootkit’i root yetkisiyle çalıştırmanız gerekir:

sudo chkrootkit

Bu komut tüm testleri çalıştırır ve sonuçları ekrana basar. Çıktı oldukça uzun olacak, bu yüzden genellikle bir dosyaya yönlendirmek tercih edilir:

sudo chkrootkit 2>&1 | tee /var/log/chkrootkit-$(date +%Y%m%d).log

Önemli Parametreler

-l: Mevcut tüm testleri listeler

sudo chkrootkit -l

-x: Expert mode, daha detaylı çıktı sağlar

sudo chkrootkit -x 2>&1 | less

-q: Quiet mode, sadece şüpheli sonuçları gösterir

sudo chkrootkit -q

-r: Alternatif bir kök dizin belirtir (chroot ortamları için)

sudo chkrootkit -r /mnt/compromised

-p: Güvenilir araçların bulunduğu dizini belirtir

sudo chkrootkit -p /media/usb/bin

-n: NFS bağlantılarını yok sayar

sudo chkrootkit -n

Belirli bir testi çalıştırmak için test adını argüman olarak geçebilirsiniz:

sudo chkrootkit trojans
sudo chkrootkit bindshell
sudo chkrootkit lkm

Çıktıları Yorumlama

chkrootkit çıktısında üç tür sonuç görürsünüz:

  • INFECTED: Rootkit belirtisi tespit edildi, acil inceleme gerektirir
  • not infected: Test temiz, sorun yok
  • not found: İlgili araç veya dosya sistemde bulunamadı
  • Vulnerable: Bilinen bir güvenlik açığı tespit edildi

Örnek bir temiz sistem çıktısı şöyle görünür:

Checking `amd'...                                           not found
Checking `basename'...                                      not infected
Checking `biff'...                                          not found
Checking `chfn'...                                          not infected
Checking `chsh'...                                          not infected
Checking `cron'...                                          not infected
Checking `crontab'...                                       not infected
Checking `curl'...                                          not infected
Checking `date'...                                          not infected

False Positive Durumları

chkrootkit’in en tartışmalı yanı, false positive (yanlış alarm) üretmesidir. Özellikle şu durumlar sıkça yanlış alarm üretir:

bindshell testi: Bazı meşru uygulamalar (özellikle eski yazılımlar) chkrootkit’in rootkit bağlantı noktası olarak tanımladığı portları kullanabilir.

Packet sniffer testi: Docker, VirtualBox veya VPN yazılımları promiscuous modda ağ arayüzleri oluşturur. Bu tamamen normaldir ama chkrootkit bunu şüpheli olarak işaretleyebilir.

wted testi: Sistem çöküşleri veya ani kapanmalar sonucunda wtmp dosyasında tutarsızlıklar oluşabilir, bu da yanlış alarm tetikler.

Bir INFECTED sonucu gördüğünüzde paniklemeden önce şu adımları izleyin: Önce hangi testin alarm verdiğini not edin, ardından o testin ne aradığını araştırın, son olarak sonucu manuel olarak doğrulayın.

Gerçek Dünya Senaryoları

Senaryo 1: Üretim Sunucusunda Periyodik Tarama

Bir e-ticaret firmasının sysadmin’i olduğunuzu düşünün. Haftalık güvenlik taramalarınızı otomatikleştirmek istiyorsunuz. İşte bu iş için kullanabileceğiniz bir cron setup’ı:

# /etc/cron.weekly/chkrootkit-scan dosyası oluşturun
sudo nano /etc/cron.weekly/chkrootkit-scan
#!/bin/bash

LOGDIR="/var/log/security"
LOGFILE="$LOGDIR/chkrootkit-$(date +%Y%m%d-%H%M%S).log"
ADMIN_EMAIL="[email protected]"
HOSTNAME=$(hostname -f)

# Log dizini yoksa oluştur
mkdir -p "$LOGDIR"

# Taramayı çalıştır
/usr/sbin/chkrootkit 2>&1 > "$LOGFILE"

# INFECTED sonuçlarını kontrol et
if grep -q "INFECTED" "$LOGFILE"; then
    INFECTED_LIST=$(grep "INFECTED" "$LOGFILE")
    
    # Email gönder
    mail -s "UYARI: $HOSTNAME - chkrootkit INFECTED bulgular tespit etti!" 
         "$ADMIN_EMAIL" << EOF
Sunucu: $HOSTNAME
Tarih: $(date)
Tarama Raporu: $LOGFILE

Şüpheli Bulgular:
$INFECTED_LIST

Lütfen sistemi acilen inceleyin!

Tam rapor: $LOGFILE
EOF
fi

# Eski logları temizle (30 günden eski)
find "$LOGDIR" -name "chkrootkit-*.log" -mtime +30 -delete
# Scripti çalıştırılabilir yapın
sudo chmod +x /etc/cron.weekly/chkrootkit-scan

Senaryo 2: Şüpheli Sistem İncelemesi

Bir sabah sunucunuza bağlandınız ve bazı anormallikler fark ettiniz: beklenmedik ağ trafiği, yüksek CPU kullanımı, bilinmedik processler. Rootkit şüphesi var. İşte izlemeniz gereken süreç:

# Önce mevcut durumu belgeleyin
sudo ps aux > /tmp/ps_snapshot.txt
sudo netstat -tulpn > /tmp/netstat_snapshot.txt
sudo ss -tulpn > /tmp/ss_snapshot.txt
sudo ls -la /proc/*/exe 2>/dev/null > /tmp/proc_snapshot.txt

# chkrootkit'i quiet modda çalıştırın (sadece sorunları görmek için)
sudo chkrootkit -q 2>&1 | tee /tmp/chkrootkit_quick.log

# Sonuçlara bakın
cat /tmp/chkrootkit_quick.log

Eğer lkm (Loadable Kernel Module) testinde INFECTED sonucu alırsanız, bu çok ciddi bir işarettir. Kernel seviyesinde bir rootkit olabileceği anlamına gelir:

# Yüklenmiş kernel modüllerini inceleyin
lsmod | sort > /tmp/lsmod_current.txt

# Bilinen modüllerle karşılaştırın
# (Baseline bir sisteminiz varsa)
diff /tmp/lsmod_baseline.txt /tmp/lsmod_current.txt

# /dev dizininde şüpheli dosyaları arayın
sudo find /dev -type f -name ".*" 2>/dev/null
sudo find /dev -type f ! -name ".*" | head -20

Senaryo 3: Baseline Oluşturma ve Karşılaştırma

En iyi güvenlik pratiği, temiz bir sistemin baseline’ını almak ve sonraki taramalarla karşılaştırmaktır:

#!/bin/bash
# baseline_compare.sh

BASELINE_FILE="/etc/security/chkrootkit_baseline.txt"
CURRENT_SCAN="/tmp/chkrootkit_current.txt"

echo "Tarama başlıyor..."
sudo chkrootkit 2>&1 > "$CURRENT_SCAN"

if [ ! -f "$BASELINE_FILE" ]; then
    echo "Baseline bulunamadı. Mevcut tarama baseline olarak kaydediliyor..."
    sudo cp "$CURRENT_SCAN" "$BASELINE_FILE"
    echo "Baseline kaydedildi: $BASELINE_FILE"
else
    echo "Baseline ile karşılaştırılıyor..."
    DIFF=$(diff "$BASELINE_FILE" "$CURRENT_SCAN")
    
    if [ -z "$DIFF" ]; then
        echo "Fark yok. Sistem baseline ile uyumlu."
    else
        echo "DİKKAT: Baseline'dan farklılıklar tespit edildi!"
        echo "$DIFF"
    fi
fi

chkrootkit’i rkhunter ile Birlikte Kullanma

Hiçbir araç tek başına yeterli değildir. chkrootkit ve rkhunter’ı birlikte kullanmak, tespit oranını önemli ölçüde artırır:

# rkhunter kurulumu
sudo apt install rkhunter -y

# rkhunter database güncelleme
sudo rkhunter --update

# Her iki aracı art arda çalıştırın
sudo chkrootkit 2>&1 | tee /var/log/chkrootkit-$(date +%Y%m%d).log
sudo rkhunter --check --skip-keypress 2>&1 | tee /var/log/rkhunter-$(date +%Y%m%d).log

# Sonuçları birleştirerek özet rapor
echo "=== CHKROOTKIT INFECTED BULGULAR ===" > /var/log/security-summary.log
grep "INFECTED" /var/log/chkrootkit-$(date +%Y%m%d).log >> /var/log/security-summary.log

echo "=== RKHUNTER UYARILAR ===" >> /var/log/security-summary.log
grep "Warning" /var/log/rkhunter-$(date +%Y%m%d).log >> /var/log/security-summary.log

cat /var/log/security-summary.log

Sistem Ele Geçirilmişse Ne Yapmalı?

chkrootkit INFECTED sonucu verdi ve doğruladınız, rootkit var. Peki şimdi ne yapacaksınız? Önce sakin olun, ardından şu adımları izleyin:

Acil adımlar:

  • Sistemi ağdan izole edin ama kapatmayın (kapatmak forensic kanıtları yok edebilir)
  • Tüm aktif bağlantıları belgeleyin
  • Bellek dump’ı alın (mümkünse)
  • Disk imajı oluşturun

Temizleme değil, yeniden kurulum:

Rootkit temizleme girişimleri çoğunlukla başarısız olur. Rootkit’in tam olarak neyi değiştirdiğini bilemezsiniz. Tek güvenilir çözüm sistemi yeniden kurmak, güvenilir bir backup’tan restore etmek ve saldırı vektörünü kapatmaktır.

# Sistemi ağdan izole etmek için (kapatmadan)
# Tüm interface'leri down edin
sudo ip link set eth0 down

# Aktif bağlantıları belgeleyin (öncesinde)
sudo ss -tulpn > /forensics/connections.txt
sudo ps auxf > /forensics/processes.txt
sudo lsof -n > /forensics/open_files.txt
sudo find / -newer /etc/passwd -type f 2>/dev/null > /forensics/recently_modified.txt

Güvenlik Duvarı ve chkrootkit Entegrasyonu

chkrootkit’i fail2ban ile entegre ederek, tespit edilen tehditlere otomatik yanıt verebilirsiniz:

# /etc/chkrootkit/chkrootkit.conf dosyası oluşturun
# (bazı dağıtımlarda bu dosya zaten vardır)

# Günlük otomatik tarama için systemd timer kullanabilirsiniz
sudo nano /etc/systemd/system/chkrootkit.service
[Unit]
Description=chkrootkit Security Scan
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/chkrootkit -q
StandardOutput=append:/var/log/chkrootkit/scan.log
StandardError=append:/var/log/chkrootkit/scan.log
sudo nano /etc/systemd/system/chkrootkit.timer
[Unit]
Description=Run chkrootkit daily

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
# Timer'ı etkinleştirin
sudo systemctl enable chkrootkit.timer
sudo systemctl start chkrootkit.timer

# Durumu kontrol edin
sudo systemctl status chkrootkit.timer

Logrotate Konfigürasyonu

Tarama loglarının yönetimi için logrotate ayarlayın:

sudo nano /etc/logrotate.d/chkrootkit
/var/log/chkrootkit/*.log {
    weekly
    rotate 12
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
}

Sonuç

chkrootkit, Linux güvenlik araç kutunuzda mutlaka bulunması gereken, sade ama etkili bir araçtır. Kurulumu kolay, kaynak kullanımı minimal ve yorumlanması görece basittir. Ancak şunu hiçbir zaman unutmayın: chkrootkit tek başına bir güvenlik stratejisi oluşturmaz.

Gerçek bir güvenlik duruşu için chkrootkit’i rkhunter ile birlikte kullanın, taramaları otomatikleştirin ve sonuçları düzenli olarak gözden geçirin. Baseline oluşturma alışkanlığı edinin, özellikle yeni sunucular devreye alındığında temiz sistemin fotoğrafını çekin. False positive durumlarına karşı eleştirel düşünün, her INFECTED sonucu gerçek bir tehdit olmayabilir ama hiçbirini de görmezden gelmeyin.

En önemlisi, chkrootkit bir rootkit tespit ettiğinde artık temizleme modunda değil, olay müdahale modunda düşünün. Zaten ele geçirilmiş bir sisteme güvenemezsiniz, bu yüzden yeniden kurulum her zaman en temiz çözümdür. Güvenlik bir ürün değil, süreçtir ve chkrootkit bu sürecin küçük ama değerli bir parçasıdır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir