Hacklenen Siteyi Temizleme; Panikten Doğru Adıma
Sitenizin hacklendiğini fark ettiğinizde ilk tepki genellikle panik ve virüslü dosyaları silmek olur. Ancak plansız ilerlerseniz hem delilleri yok edersiniz hem de büyük ihtimalle sızma yolunu açık bırakırsınız. Hacklenen siteyi temizleme sırasıyla yapılması gereken sistematik bir süreçtir: izole etme, yedekleme, temizleme, şifreleri değiştirme ve son olarak güvenlik açığını kapatma. Bu makalede tam olarak bu yolu pratik komutlar ve gerçek örneklerle izliyoruz.
Önemli not: Siteniz paylaşımlı hostingdeyse ve aynı sunucuda başka siteler de varsa, karşılıklı bulaşma riski yüksektir. Bu durumda önce hosting destek ekibiyle koordine olun ve mümkünse siteyi izole bir ortama (VPS veya ayrı dizin) taşıyın. ServerNet de bu tür durumlarda iyi bir seçenek olabilecek güvenli barındırma hizmetleri sunar, ancak bu makalenin odak noktası temizleme sürecinin kendisidir.
Adım 1: İzole Etme ve Erişimi Kesme
Bu aşamanın amacı bulaşmanın yayılmasını önlemek ve delilleri korumaktır. Siteniz SSH erişimli bir Linux sunucusundaysa şu komutları çalıştırın:
# Web erişimini site dizinine kapat
sudo a2dissite your-site.conf
sudo systemctl reload apache2
# veya nginx kullanıyorsanız:
sudo rm /etc/nginx/sites-enabled/your-site
sudo systemctl reload nginx
SSH erişiminiz yoksa (paylaşımlı hosting), cPanel veya DirectAdmin üzerinden siteyi geçici olarak devre dışı bırakın veya index yerine bir maintenance.html sayfası koyun. Bu, ziyaretçilerin ve arama motorlarının virüslü içeriğe erişmesini engeller.
İlk İnceleme: Ne Değişti?
Herhangi bir işlem yapmadan önce dosya değişiklik geçmişini inceleyin. Git kullanıyorsanız:
cd /var/www/your-site
git status
git diff --stat
Git yoksa, yakın zamanda değiştirilmiş dosyaları bulun:
find /var/www/your-site -type f -mtime -7 -exec ls -la {} \;
Bu çıktı, hacklenme zaman aralığında hangi dosyaların değiştiğini gösterir. Genellikle yükleme dizinlerindeki veya temalardaki .php dosyaları ana hedeftir.
Adım 2: Virüslü Siteden Yedek Alma
Garip görünebilir, ancak virüslü siteden yedek almalısınız. Neden? Çünkü bu yedek, zararlı yazılımı analiz etmek ve saldırı desenini belirlemek için gereklidir. Daha sonra hacker'ın veritabanına eriştiğini fark ederseniz, bu yedek işinize yarar.
# Dosyaların tam yedeği
tar -czf /backup/compromised-site-$(date +%Y%m%d).tar.gz /var/www/your-site
# Veritabanı yedeği (MySQL örneği)
mysqldump -u root -p your_database > /backup/db-compromised-$(date +%Y%m%d).sql
Bu yedekleri sunucu dışında güvenli bir yerde saklayın (örneğin kişisel bilgisayarınızda veya bulutta). Temizlikten sonra analiz gerekiyorsa bu dosyaları kullanırsınız.
Adım 3: Dosyaları ve Veritabanını Temizleme
Şimdi asıl iş zamanı. Hacklenen siteyi temizleme iki bölümden oluşur: dosyalar ve veritabanı.
Dosyaları Temizleme
En iyi yöntem orijinal sürümle karşılaştırmaktır. WordPress kullanıyorsanız, çekirdeği resmi sürümle karşılaştırın:
# Sitenizle aynı sürümdeki WordPress'i indirin
wget https://wordpress.org/wordpress-6.5.3.tar.gz
tar -xzf wordpress-6.5.3.tar.gz
# Çekirdek dosyalarını karşılaştırın
diff -r wordpress/ /var/www/your-site/wp-admin/ | head -50
diff -r wordpress/ /var/www/your-site/wp-includes/ | head -50
Karşılaştırmada farklı olan veya orijinal sürümde bulunmayan dosyalar şüphelidir. Temalar ve eklentiler için de aynı işlemi resmi sürümlerle yapın.
Yaygın şüpheli dosyalar:
wp-content/uploads/— orada olmaması gereken PHP dosyalarıwp-content/mu-plugins/— panelde görünmeyen gizli eklentilerwp-config.php— dosya sonundaki ekstra kodlar.htaccess— zararlı yeniden yazma kuralları
Kesinlikle virüslü dosyaları silmek için:
# Yükleme klasöründeki PHP dosyalarını silme (örnek)
find /var/www/your-site/wp-content/uploads -name "*.php" -delete
# Zararlı yazılım belirtisi olan eval ve base64 dosyalarını silme
grep -rl "eval(base64_decode" /var/www/your-site --include="*.php" | xargs rm -f
grep ile silmeden önce çıktıyı mutlaka inceleyin. Bazen yasal eklentiler de base64_decode kullanır. Önce dosya listesini görün, sonra karar verin.Veritabanını Temizleme
Hacker'lar genellikle zararlı kodları tema seçeneklerine veya yazı içeriklerine enjekte eder. Bu sorgularla iz aranır:
-- İçerikteki zararlı script'leri arama
SELECT ID, post_title, post_content
FROM wp_posts
WHERE post_content LIKE '%eval(%'
OR post_content LIKE '%base64_decode(%'
OR post_content LIKE '%%';
-- Tema seçeneklerini kontrol etme
SELECT option_name, option_value
FROM wp_options
WHERE option_name LIKE '%theme%'
OR option_name LIKE '%widget%';
Virüslü içerik bulursanız, sağlıklı içerikle değiştirin veya yazıyı silin. Tema seçenekleri için genellikle en iyisi temayı varsayılana sıfırlamaktır.
Adım 4: Tüm Şifreleri Değiştirme
Dosyaları temizledikten sonra tüm şifrelerin ele geçirildiğini varsaymalısınız. Şunları mutlaka değiştirin:
- FTP/SFTP ve SSH şifreleri
- Veritabanı şifresi (ve
wp-config.phpgüncellemesi) - Tüm kullanıcılar için WordPress panel şifresi
- Alan adıyla ilişkili e-posta şifreleri (ör.
admin@yourdomain.com) - API anahtarları ve harici servis token'ları
MySQL'de veritabanı şifresini değiştirmek için:
ALTER USER 'wp_user'@'localhost' IDENTIFIED BY 'NewStrongPassword!2024';
FLUSH PRIVILEGES;
Ardından wp-config.php içindeki DB_PASSWORD değerini güncelleyin.
Ayrıca WordPress güvenlik anahtarlarını değiştirin. Yeni anahtarları şu adresten alın: https://api.wordpress.org/secret-key/1.1/salt/ ve AUTH_KEY'den NONCE_KEY'e kadar olan değerleri değiştirin.
Adım 5: Sızma Yolunu Kapatma
Güvenlik açığını kapatmadan temizlik yapmak faydasızdır. Hacker'lar genellikle şu yollardan girer:
1. Eski Eklentiler ve Temalar
Eski eklentilerdeki bilinen güvenlik açıkları en yaygın sızma yoludur. Tüm eklentileri ve temaları son sürüme güncelleyin. Artık desteklenmeyen eklentileri kaldırın.
2. Zayıf Şifreler
Site yönetici şifreniz admin123 ise hacklenmenize şaşırmamak gerekir. Güçlü şifreler kullanın ve iki faktörlü kimlik doğrulamayı (2FA) etkinleştirin.
3. wp-admin'e Yetkisiz Girişler
wp-login.php erişimini sınırlayın. .htaccess içinde yalnızca belirli IP'lere izin verebilirsiniz:
<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from 192.168.1.100
Allow from 203.0.113.5
</Files>
Sabit IP'niz yoksa, giriş denemelerini sınırlayan bir eklenti kullanın.
4. Logları İnceleme
Saldırı desenini bulmak için sunucu loglarını inceleyin:
# Apache erişim logunu kontrol etme
grep "wp-login.php" /var/log/apache2/access.log | tail -20
# Yükleme klasöründeki PHP dosyalarına POST isteklerini arama
grep "POST.*uploads.*\.php" /var/log/apache2/access.log | tail -20
Bu loglar hacker'ın hangi noktadan girdiğini gösterir. Belirgin bir desen görürseniz (örneğin belirli bir dosyaya çok sayıda istek), o noktayı kapatın.
Sitenin Geri Yüklenmesi ve Sürekli İzleme
Tam temizlik ve güvenlik açığını kapattıktan sonra siteyi yeniden etkinleştirin. Ancak iş bitmedi. Birkaç hafta boyunca logları ve dosyaları izleyin:
# Günlük yeni dosya kontrolü
find /var/www/your-site -type f -mtime -1 -exec ls -la {} \;
# Ana dosyalardaki değişiklikleri kontrol etme
md5sum /var/www/your-site/wp-config.php
Ayrıca dosyaları tarayan ve değişiklikleri raporlayan bir güvenlik eklentisi (Wordfence veya Sucuri gibi) kurun.
Özet
Hacklenen siteyi temizleme acele yapılmaması gereken çok aşamalı bir süreçtir. Doğru sıralama: izole etme, yedek alma, dosyaları ve veritabanını temizleme, tüm şifreleri değiştirme ve son olarak güvenlik açığını kapatma. Her adımı doğru yaparsanız, hacker'ın geri dönme olasılığı minimuma iner. Unutmayın ki güvenlik sürekli bir süreçtir, tek seferlik bir eylem değildir. Sitenizi güncel tutun, güçlü şifreler kullanın ve logları düzenli olarak kontrol edin.