rkhunter ile Linux Sistemlerde Rootkit Tespiti ve Temizleme
Sunucunuza sabah erkenden bağlandığınızda her şey normal görünüyor, servisler çalışıyor, diskler dolu değil, ağ trafiği makul seviyelerde. Ama bir şeyler sizi rahatsız ediyor. Belki de haklısınız. Rootkit’ler tam da bu yüzden tehlikelidir: sessiz, sinsi ve kendilerini gizlemekte ustadırlar. rkhunter (Rootkit Hunter), bu sessiz tehditleri ortaya çıkarmak için sistem yöneticilerinin araç kutusunda bulunması gereken temel araçlardan biridir.
rkhunter Nedir ve Nasıl Çalışır?
rkhunter, Linux sistemlerinde rootkit, backdoor ve yerel exploit’leri tespit etmek için tasarlanmış açık kaynaklı bir güvenlik tarama aracıdır. 2003 yılından bu yana aktif olarak geliştirilen bu araç, sistem dosyalarını bilinen rootkit imzalarıyla karşılaştırır, kritik ikililerin (binary) hash değerlerini kontrol eder ve şüpheli sistem yapılandırmalarını tespit eder.
Araç temel olarak şu yöntemlerle çalışır:
- Hash karşılaştırması: Kritik sistem dosyalarının MD5/SHA256 hash değerlerini önceden alınan referans değerlerle karşılaştırır
- İzin ve sahiplik kontrolleri: Sistem dosyalarındaki olağandışı izin değişikliklerini saptar
- Bilinen rootkit imzaları: 200’den fazla rootkit için imza tabanlı tarama yapar
- Port ve process kontrolü: Gizlenmiş process’leri ve şüpheli açık portları arar
- Sistem çağrısı testi: Kernel seviyesinde manipülasyon belirtilerini kontrol eder
Önemli bir not: rkhunter bir antivirüs değildir. Hash değerleri eşleşmiyorsa veya şüpheli bir dosya bulunursa size uyarı verir, ancak her uyarı mutlaka bir enfeksiyonu göstermez. Sistem güncellemeleri de hash değişikliklerine yol açar. Bu yüzden false positive yönetimi bu aracı kullanırken kritik önem taşır.
Kurulum
Çoğu Linux dağıtımında rkhunter paket depolarında mevcuttur.
Debian/Ubuntu tabanlı sistemler için:
sudo apt update
sudo apt install rkhunter
RHEL/CentOS/AlmaLinux tabanlı sistemler için:
sudo dnf install epel-release
sudo dnf install rkhunter
Kaynak koddan derlemek isteyenler için (en güncel imza veritabanını kullanmak için önerilir):
wget https://downloads.sourceforge.net/project/rkhunter/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz
tar -xzf rkhunter-1.4.6.tar.gz
cd rkhunter-1.4.6
sudo ./installer.sh --install
Kurulum sonrasında aracın doğru çalıştığını doğrulayın:
rkhunter --version
İlk Yapılandırma: Referans Veritabanı Oluşturma
Bu adım çok kritik ve çoğunlukla atlanıyor. rkhunter‘ı ilk kez kullanmadan önce, sisteminizin temiz olduğundan emin olduğunuz bir anda referans veritabanını oluşturmanız gerekir. Bu veritabanı, gelecekteki taramalarda karşılaştırma için temel alınır.
sudo rkhunter --propupd
Bu komut sisteminizde bulunan kritik ikililerin (ls, ps, netstat, find vb.) özelliklerini kaydeder. Önemli uyarı: Sisteme yeni bir paket yükledikten veya güncelleme yaptıktan sonra bu komutu çalıştırmanız gerekir, aksi takdirde bir sonraki taramada bu değişiklikler “şüpheli” olarak işaretlenecektir.
Referans veritabanının nerede saklandığını görmek için:
cat /var/lib/rkhunter/db/rkhunter.dat | head -20
Temel Yapılandırma Dosyası
rkhunter‘ın ana yapılandırma dosyası /etc/rkhunter.conf konumundadır. Bu dosyada yapmanız gereken bazı temel ayarlamalar vardır:
sudo nano /etc/rkhunter.conf
Dikkat etmeniz gereken önemli direktifler:
- MAIL-ON-WARNING: Uyarı durumunda e-posta gönderilecek adres
- MAIL_CMD: E-posta gönderim komutu (mail veya sendmail)
- TMPDIR: Geçici dosyalar için dizin
- DBDIR: Veritabanı dosyalarının konumu
- SCRIPTDIR: Script dosyalarının konumu
- LOGFILE: Log dosyasının yolu
- ALLOW_SSH_ROOT_USER: SSH ile root girişine izin verilip verilmeyeceği
- ALLOW_SSH_PROT_V1: SSH protokol v1 kullanımına izin
- ENABLE_TESTS: Hangi testlerin çalıştırılacağı
- DISABLE_TESTS: Devre dışı bırakılacak testler
- PKGMGR: Paket yöneticisi (RPM, DPKG, vb.)
- UNHIDETCP_PATH: unhide-tcp aracının yolu
Özellikle PKGMGR direktifini doğru ayarlayın. Bu ayar, rkhunter‘ın hash karşılaştırmalarını yaparken paket yöneticisi veritabanını kullanmasını sağlar ve false positive sayısını önemli ölçüde azaltır:
# Debian/Ubuntu için
PKGMGR=DPKG
# RHEL/CentOS için
PKGMGR=RPM
İlk Tarama: Sistemin Durumunu Değerlendirme
Temel taramayı başlatmak için:
sudo rkhunter --check
Bu komut çalışırken her test grubu için ENTER’a basmanızı ister. Tamamen etkileşimsiz bir tarama için:
sudo rkhunter --check --sk
–sk (skip keypress) parametresi sayesinde tarama durmadan ilerler. Uzak sunucularda cron job’lara bu parametreyi mutlaka ekleyin.
Daha ayrıntılı çıktı için:
sudo rkhunter --check --sk --rwo
–rwo (report warnings only) parametresi yalnızca uyarı içeren satırları gösterir, bu sayede çıktıyı incelemek çok daha kolay hale gelir.
Tarama tamamlandıktan sonra özet raporu görüntülemek için:
sudo rkhunter --check --sk 2>&1 | tail -30
Log Dosyasını Anlamak
rkhunter log dosyası genellikle /var/log/rkhunter.log konumundadır. Bu dosyayı okumayı öğrenmek, gerçek tehditlerle false positive’leri ayırt etmenin anahtarıdır.
sudo cat /var/log/rkhunter.log | grep -E "Warning|ERROR|Found"
Tipik bir log çıktısında şunları görürsünüz:
[08:15:23] Warning: The command '/usr/bin/unhide.rb' has been replaced by a script: /usr/bin/unhide.rb: Ruby script, ASCII text executable
[08:15:24] Warning: The file '/etc/hosts.allow' is empty
[08:15:25] Warning: Hidden directory found: /etc/.java
Her uyarıyı tek tek ele almanız gerekir. Mesela /etc/.java dizini genellikle Java Runtime Environment tarafından oluşturulan meşru bir dizindir. Bu tür bilinen false positive’leri whitelist’e ekleyebilirsiniz.
False Positive Yönetimi
Gerçek hayatta rkhunter çalıştırdığınızda onlarca uyarıyla karşılaşabilirsiniz. Bunların büyük çoğunluğu false positive’dir. Bunları yönetmenin yolu yapılandırma dosyasına uygun direktifler eklemektir.
sudo nano /etc/rkhunter.conf
Örnek whitelist konfigürasyonları:
# Belirli dosyaları hash kontrolünden muaf tut
EXISTWHITELIST=/etc/ld.so.preload
# Belirli dizinleri gizli dizin kontrolünden muaf tut
ALLOWHIDDENDIR=/etc/.java
ALLOWHIDDENDIR=/dev/.udev
# Belirli dosyaları gizli dosya kontrolünden muaf tut
ALLOWHIDDENFILE=/etc/.gitconfig
# Belirli process'leri muaf tut
ALLOWPROCDELFILE=/usr/lib/systemd/systemd
# Belirli portları muaf tut
ALLOWUDPPORT=68
ALLOWTCPPORT=80
ALLOWTCPPORT=443
ALLOWTCPPORT=22
Yapılandırma dosyasını düzenledikten sonra sözdizimini doğrulayın:
sudo rkhunter --config-check
Gerçek Dünya Senaryosu: Şüpheli Sistem Üzerinde Tarama
Bir e-ticaret şirketinde çalıştığınızı ve bir gece anomali tespiti sisteminizin olağandışı dış bağlantılar algıladığını düşünelim. Sabah sunucuya bağlandığınızda şüphelerinizi doğrulamak için şu adımları izliyorsunuz:
1. Adım: Hızlı sistem kontrolü
# Açık ağ bağlantılarını kontrol et
sudo ss -tulpn
sudo netstat -anlp | grep ESTABLISHED
# Çalışan process'lere bak
sudo ps auxf
# Son login kayıtlarını incele
sudo last -20
sudo lastb -20
2. Adım: rkhunter ile kapsamlı tarama
sudo rkhunter --check --sk --report-mode
3. Adım: Tarama çıktısını analiz et
sudo grep -i "warning|infected|found|suspect" /var/log/rkhunter.log
Bu senaryoda rkhunter‘ın /usr/bin/find için hash uyuşmazlığı rapor ettiğini varsayalım. Bu ciddi bir bulgu olabilir çünkü find gibi temel araçların değiştirilmesi rootkit kurulumunun klasik göstergesidir.
4. Adım: Şüpheli dosyayı araştır
# Dosyanın özelliklerini incele
stat /usr/bin/find
# Paket yöneticisiyle karşılaştır (Debian örneği)
dpkg -V findutils
# Dosyanın hash değerini al
sha256sum /usr/bin/find
# Paket deposundaki orijinal hash ile karşılaştır
apt-get download findutils
dpkg-deb -x findutils_*.deb /tmp/findutils_check
sha256sum /tmp/findutils_check/usr/bin/find
Eğer hash değerleri farklıysa ve güncelleme kaynağınız da değilse, sisteminiz gerçekten tehlikeye girmiş olabilir.
Otomatik Tarama ile Düzenli Monitoring
Manuel tarama güzel ama bir sysadmin olarak her şeyi otomatize etmelisiniz. Cron job ile günlük tarama kurulumu:
sudo crontab -e
Aşağıdaki satırı ekleyin:
# Her gece 02:00'de rkhunter taraması çalıştır ve sonuçları e-posta gönder
0 2 * * * /usr/bin/rkhunter --cronjob --update --quiet 2>&1 | mail -s "rkhunter Daily Scan - $(hostname)" [email protected]
Veya daha gelişmiş bir script yazabilirsiniz:
#!/bin/bash
# /usr/local/bin/rkhunter_daily.sh
LOGFILE="/var/log/rkhunter_daily.log"
REPORT="/tmp/rkhunter_report_$(date +%Y%m%d).txt"
ADMIN_MAIL="[email protected]"
HOSTNAME=$(hostname -f)
# Önce veritabanını güncelle
/usr/bin/rkhunter --update --nocolors > /dev/null 2>&1
# Taramayı çalıştır
/usr/bin/rkhunter --check --cronjob --nocolors --report-warnings-only > "$REPORT" 2>&1
# Uyarı varsa e-posta gönder
WARNING_COUNT=$(grep -c "Warning" "$REPORT" 2>/dev/null || echo 0)
if [ "$WARNING_COUNT" -gt 0 ]; then
echo "rkhunter $WARNING_COUNT uyari tespit etti. Rapor asagidadir:" |
cat - "$REPORT" |
mail -s "[UYARI] rkhunter - $HOSTNAME - $WARNING_COUNT Uyari" "$ADMIN_MAIL"
fi
# Geçici dosyaları temizle
rm -f "$REPORT"
Bu script’i çalıştırılabilir yapın ve cron’a ekleyin:
sudo chmod +x /usr/local/bin/rkhunter_daily.sh
echo "0 2 * * * root /usr/local/bin/rkhunter_daily.sh" | sudo tee /etc/cron.d/rkhunter
İmza Veritabanını Güncelleme
rkhunter‘ın etkinliği büyük ölçüde güncel imza veritabanına bağlıdır. Düzenli olarak güncelleme yapın:
sudo rkhunter --update
Güncelleme sonrasında mevcut veritabanı sürümünü kontrol edin:
sudo rkhunter --versioncheck
Güncelleme proxy arkasında çalışmıyorsa:
export http_proxy="http://proxy.sirketiniz.com:8080"
sudo -E rkhunter --update
Rootkit Tespiti Sonrası Yapılacaklar
rkhunter gerçek bir rootkit tespit ettiğinde veya siz manuel olarak enfeksiyonu doğruladığınızda yapmanız gerekenler bellidir ama genellikle panikle gözden kaçar.
Sistemi izole edin: Etkilenen sunucuyu ağdan ayırın ama kapatmayın. Kapatmak bellek içindeki delilleri yok eder.
# Ağ arabirimlerini devre dışı bırak (SSH bağlantısı varsa çalışırken yapın)
sudo ip link set eth0 down
Adli analiz için kanıtları koruyun:
# Çalışan process listesini kaydet
sudo ps auxf > /tmp/process_snapshot.txt
# Ağ bağlantılarını kaydet
sudo ss -tulpn > /tmp/network_snapshot.txt
sudo netstat -rn > /tmp/routing_table.txt
# Açık dosya listesini kaydet
sudo lsof > /tmp/open_files.txt
# Kernel modüllerini kontrol et
sudo lsmod > /tmp/kernel_modules.txt
Sistemi temizlemeye çalışmayın. Rootkit bulaşmış bir sistemde temizleme yapmak neredeyse imkansızdır çünkü rootkit’in kendisi size yanlış bilgi gösterebilir. Doğru yaklaşım şudur:
- Sistemi tamamen yeniden kurun
- Temiz bir yedekten verilerinizi geri yükleyin (yedekleri de kontrol edin)
- Kullanıcı parolalarını ve API anahtarlarını tüm sistemlerde değiştirin
- Saldırı vektörünü tespit edip kapatın
- Incident response sürecinizi belgeleyin
rkhunter ile Birlikte Kullanılabilecek Araçlar
rkhunter tek başına bir güvenlik stratejisi oluşturmaz. Şu araçlarla birlikte kullanıldığında çok daha güçlü bir savunma hattı oluşturursunuz:
- chkrootkit: Alternatif rootkit tarayıcı, farklı imza veritabanı kullanır, ikisi birlikte çalıştırıldığında kapsama alanı genişler
- AIDE (Advanced Intrusion Detection Environment): Dosya bütünlüğü izleme için,
rkhunter‘ın hash kontrolünden çok daha kapsamlı - Lynis: Sistem sertleştirme ve güvenlik denetimi için
- Fail2ban: Brute force saldırılarını engellemek için
- auditd: Sistem çağrılarını kayıt altına almak için
chkrootkit ile paralel tarama örneği:
sudo apt install chkrootkit
sudo chkrootkit 2>&1 | grep -i "infected|warning|suspect"
İki aracın bulgularını karşılaştırmak, false positive oranını azaltmanıza yardımcı olur.
Yaygın Sorunlar ve Çözümleri
Günlük kullanımda karşılaşılan sorunların büyük kısmı yapılandırma kaynaklıdır.
“Unable to find the command ‘unhide'” hatası:
sudo apt install unhide
# veya
sudo dnf install unhide
Güncelleme sonrası çok fazla uyarı alıyorsanız:
# Paket güncellemesinden sonra referans veritabanını yenile
sudo rkhunter --propupd
Log dosyası büyüme sorunu:
# Logrotate konfigürasyonu ekle
sudo nano /etc/logrotate.d/rkhunter
/var/log/rkhunter.log {
weekly
rotate 4
compress
delaycompress
missingok
notifempty
}
Belirli bir testi atlamak için:
sudo rkhunter --check --sk --disable-tests=suspscan,hidden_ports
Güvenlik Politikası Çerçevesinde rkhunter
rkhunter‘ı bir kez çalıştırıp unutmak işe yaramaz. Etkin bir güvenlik politikasının parçası olarak şunları yapın:
- Günlük otomatik tarama ile sürekli izleme sağlayın
- Her sistem güncellemesinden sonra
--propupdçalıştırın - Uyarıları hemen değerlendirin, biriken uyarılar gerçek tehditleri gizler
- Baseline oluşturun: Temiz bir sistemin tarama çıktısını kaydedin ve referans olarak kullanın
- Tarama sonuçlarını merkezi log sistemine gönderin: Syslog veya ELK stack entegrasyonu yapın
# Syslog'a rkhunter çıktısı gönderme
sudo rkhunter --check --sk 2>&1 | logger -t rkhunter -p security.warning
Sonuç
rkhunter, Linux güvenlik arsenalinin vazgeçilmez bir parçasıdır ancak her araç gibi doğru kullanıldığında değer üretir. Aracı kurup bir kez çalıştırmak sizi güvende hissettirebilir ama bu yanıltıcı bir güvenliktir. Gerçek değeri, düzenli ve otomatize edilmiş taramalar, güncel imza veritabanı ve titiz false positive yönetimiyle ortaya çıkar.
Unutmayın: rkhunter bir semptom göstergesidir, tedavi aracı değil. Rootkit tespiti yapıldığında asıl yapılacak iş sistemi yeniden kurmak ve saldırı vektörünü kapatmaktır. Enfekte bir sistemde çalışan hiçbir araca tamamen güvenemezsiniz çünkü rootkit’in kendisi sistem çağrılarını manipüle ederek size yanlış sonuçlar gösterebilir.
En iyi savunma hala önleyici tedbirlerdir: düzenli güncellemeler, minimal servis yüzeyi, güçlü kimlik doğrulama ve network segmentasyonu. rkhunter bu savunma katmanlarının son halkasıdır, ilk değil.
