WordPress siteniz hacklendi mi veya garip girişler mi görüyorsunuz?
Cuma sabahı uyanırsınız ve siteniz bir kumarhane sayfasına dönüşmüştür. Ya da daha kötüsü, Google ziyaretçilere sitenizin "phishing" olduğu konusunda uyarı verir. Bu senaryo, İran'daki binlerce WordPress site yöneticisi için tekrarlanmıştır. Son zamanlarda sunucu raporlarında çok sayıda başarısız giriş görüyorsanız veya uploads klasöründe bilinmeyen dosyalar belirdiyse, WordPress güvenliğini ciddiye almanın zamanı gelmiştir. Bu makale, şu anda bu sorunla boğuşan biri içindir, sadece "genel bir bilgi" edinmek isteyen biri için değil.
WordPress'e yapılan saldırılar genellikle üç yoldan biriyle gerçekleştirilir: brute force (zorla giriş), eklenti veya temadaki açık ve sunucu ayarlarındaki zayıflık. Üçü de önlenebilir. Ancak önleme, kendisi yeni bir güvenlik açığı haline gelen "her işe yarar" bir eklenti kurmak değil, teknik bilgi gerektirir.
İlk savunma hattı: wp-config.php dosyasını kilitleyin
wp-config.php dosyası WordPress'in kalbidir. Birisi buna erişirse, veritabanı şifrenizi, kimlik doğrulama anahtarlarınızı ve güvenlik ayarlarınızı görür. İlk adım, bu dosyayı doğrudan web erişiminden çıkarmaktır. Sitenin kökündeki .htaccess dosyasına şu kuralları ekleyin:
<Files wp-config.php>
Order Allow,Deny
Deny from all
</Files>
Bu, dosyaya HTTP erişimini engeller. Ancak sunucunuz Nginx ise, sunucu bloğuna şu satırı eklemelisiniz:
location ~ ^/wp-config\.php$ {
deny all;
}
Bu değişiklikten sonra, yoursite.com/wp-config.php adresinin 403 hatası verdiğini test edin. 200 döndürürse, ayarlarınız doğru uygulanmamış demektir.
İkinci adım, kimlik doğrulama anahtarlarını (Salt Keys) değiştirmektir. Siteniz daha önce hacklendiyse ve siz sadece eklentileri sildiyseniz, bu anahtarlar saldırganın elinde olabilir. https://api.wordpress.org/secret-key/1.1/salt/ adresinden yeni anahtarlar alın ve wp-config.php dosyasında değiştirin. Bu işlemden sonra tüm kullanıcıların tekrar giriş yapması gerekecektir. Bu iyi bir işarettir, bir sorun değil.
Girişi sınırlama; çoğu sitenin başarısız olduğu yer
wp-login.php sayfasına yapılan brute force saldırısı, sızmanın en kolay yoludur. wpscan ve hydra gibi araçlar birkaç saat içinde binlerce şifreyi deneyebilir. Şifreniz admin123 veya wordpress ise, siteniz yarın sabaha kadar hacklenmiş olur.
İlk iş: admin kullanıcı adını silin. Sitenizde hâlâ admin adında bir kullanıcı varsa, yönetici rolüyle yeni bir kullanıcı oluşturun ve eski kullanıcıyı silin. Bu en basit ve en etkili yoldur.
İkinci iş: Giriş denemesi sayısını sınırlayın. Limit Login Attempts Reloaded gibi eklentiler bunu yapar. Ancak bunu eklenti olmadan yapmak istiyorsanız, sunucu seviyesinde fail2ban kullanabilirsiniz. SSH güvenlik rehberinde fail2ban'ı SSH için nasıl yapılandıracağınızı anlattık; aynı kurallar WordPress girişi için de geçerlidir, sadece Apache veya Nginx ile ilgili filtreyi etkinleştirmeniz yeterlidir.
Çoğu site yöneticisinin yapmadığı üçüncü iş: Tüm kullanıcılar için iki faktörlü kimlik doğrulama (2FA), sadece yöneticiler için değil. Zayıf şifreli bir yazar, sitenize açılan kapı olabilir. Wordfence veya iThemes Security gibi bir eklenti kullanıyorsanız, 2FA'yı sadece yöneticiler için değil, tüm roller için etkinleştirin.
Burada hata yapıyorlar: Giriş sınırlama eklentisini kuruyorsunuz ancak önbelleği temizlemiyorsunuz
Giriş sınırlama eklentisini kurduktan sonra, giriş sayfası önbelleğe alınmış olabilir. Kullanıcılar birkaç kez dener, "aşırı deneme" hatası alır ve siz eklentinin çalıştığını düşünürsünüz. Ancak gerçekte, saldırgan farklı bir IP'den veya proxy üzerinden devam eder. Giriş sınırlama eklentileri, hem IP'ye hem de tarayıcı çerezlerine göre sınırlama uygulamalıdır. Eklentiniz yalnızca IP'yi kontrol ediyorsa, saldırgan VPN veya Tor gibi hizmetlerle IP değiştirerek kolayca atlatır. "Çerez tabanlı sınırlama" seçeneği olan bir eklenti seçin.
Sürüm ifşasını kaldırma; neden hangi WordPress sürümüne sahip olduğunuzu söyleyesiniz?
Sitenizin HTML kodunda şu meta etiketi bulunur:
<meta name="generator" content="WordPress 6.4.2" />
Bu etiket, saldırgana 6.4.2 sürümünü kullandığınızı söyler. Bu sürümde bilinen bir güvenlik açığı varsa, saldırgan hangi exploit'i kullanacağını tam olarak bilir. Bu etiketi kaldırmak basit bir iştir. Temanızın (veya alt temanın) functions.php dosyasına şu kodu ekleyin:
remove_action('wp_head', 'wp_generator');
Ayrıca WordPress sürümü CSS ve JS dosyalarında da görünür. Bunu kaldırmak için şu kodu ekleyin:
function remove_wp_version_from_assets($src) {
if (strpos($src, 'ver=')) {
$src = remove_query_arg('ver', $src);
}
return $src;
}
add_filter('style_loader_src', 'remove_wp_version_from_assets', 9999);
add_filter('script_loader_src', 'remove_wp_version_from_assets', 9999);
Bu, güvenliği yüzde yüz garanti etmez, ancak saldırı yüzeyini azaltır. Saldırgan yine de diğer kalıplardan sürümü tahmin edebilir, ancak işi zorlaşır.
Kendisi güvenlik açığı olan eklentiler
WordPress güvenliğindeki en büyük hata, gereksiz eklentiler kurmaktır. Her eklenti yeni bir saldırı yüzeyidir. İstatistikler, WordPress hack'lerinin %90'ından fazlasının WordPress çekirdeği üzerinden değil, güvenlik açığı bulunan eklentiler üzerinden yapıldığını gösteriyor.
Aşağıdaki eklentileri derhal kaldırın:
- Bir yıldan uzun süredir güncellenmeyen eklentiler.
- Resmi olmayan depolardan (çatlak veya nulled) kurulan eklentiler. Bu eklentiler genellikle arka kapı (backdoor) içerir.
- Birbirinin işini yapan eklentiler. Örneğin, üç farklı önbellek eklentisi.
Herhangi bir eklenti kurmadan önce şu soruyu sorun: "Bunu functions.php'de 10 satır kodla yapabilir miyim?" Cevap evet ise, eklentiyi kurmayın. Örneğin, XML-RPC'yi (bilinen bir saldırı yüzeyi) devre dışı bırakmak için .htaccess dosyasına şu kodu ekleyin:
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
Veya functions.php içinde:
add_filter('xmlrpc_enabled', '__return_false');
XML-RPC, mobil uygulamaların ve harici hizmetlerin bağlanması için kullanılır. Bu hizmetleri kullanmıyorsanız, devre dışı bırakın. XML-RPC üzerinden yapılan brute force saldırıları, tek bir istekle yüzlerce şifreyi deneyebilir (amplification attack).
Güvenlik eklentileri: Hangisini seçmeliyiz?
Wordfence, Sucuri ve iThemes Security arasında Wordfence'i öneriyorum. Nedeni basit: Uygulama seviyesi güvenlik duvarı (WAF) ücretsiz olarak sunuluyor ve imza veritabanı güncel. Ancak Wordfence sunucu kaynaklarını tüketir. Siteniz zayıf bir paylaşımlı sunucudaysa, Cloudflare WAF kullanmak ve daha hafif bir eklenti kurmak daha iyi olabilir.
Önemli bir not: Güvenlik eklentisi, doğru sunucu yapılandırmasının yerini tutmaz. Sunucunuz güncel değilse veya gereksiz portlar açıksa, hiçbir eklenti yardımcı olmaz. Ağ seviyesinde koruma için DDoS korumasını inceleyin. Bu hizmet, trafik sunucunuza ulaşmadan önce bir güvenlik katmanı ekler.
Güncellemeleri ciddiye alın; ancak körü körüne değil
WordPress çekirdeğini, eklentileri ve temaları güncellemek en önemli güvenlik işidir. Ancak körü körüne güncelleme sitenizi çalışmaz hale getirebilir. Güncellemeden önce sitenizden yedek alın. Paylaşımlı hosting kullanıyorsanız, hosting sağlayıcınızın yedekleme aracını kontrol edin. Özel sunucunuz varsa, veritabanı yedeği için wp-cli kullanın:
wp db export backup-$(date +%Y%m%d).sql
Ardından güncellemeyi bir test ortamında (staging) deneyin. Test ortamınız yoksa, güncellemeyi düşük trafikli bir saatte yapın ve siteyi hemen kontrol edin.
Kritik eklentiler için otomatik güncellemeyi etkinleştirin. wp-config.php dosyasına şu satırı ekleyin:
define('WP_AUTO_UPDATE_CORE', true);
add_filter('auto_update_plugin', '__return_true');
Ancak dikkatli olun: Bir eklentiyi kişiselleştirdiyseniz (kodunu değiştirdiyseniz), otomatik güncelleme değişikliklerinizi bozar. Bu eklentiler için otomatik güncellemeyi devre dışı bırakın.
İzleme ve olay müdahalesi
Hiçbir güvenlik yüzde yüz değildir. Önemli olan saldırıyı erken tespit etmektir. Kimin, ne zaman ve hangi IP'den giriş yaptığını görmek için denetim günlüklerini etkinleştirin. WP Activity Log gibi eklentiler bunu yapar. Ancak günlükler yalnızca okunduklarında faydalıdır. Önemli olaylar için bir e-posta uyarısı ayarlayın: yeni yönetici girişi, çekirdek dosya değişikliği, yeni eklenti kurulumu.
Sunucu seviyesinde, Apache veya Nginx günlüklerini inceleyin. wp-login.php sayfasına yapılan POST isteklerinin hacmi anormal derecede yüksekse, bu bir uyarı işaretidir. Bunu şu komutla kontrol edebilirsiniz:
grep "wp-login.php" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20
Bu komut, giriş sayfasına en çok istek yapan 20 IP'yi gösterir. Belirli bir IP dakikada onlarca kez denediyse, onu güvenlik duvarında engelleyin.
Sitenin genel sağlığını ve Google kara listesinde olup olmadığını kontrol etmek için DNS ve ağ kontrol araçlarını kullanın. Bu araç, DNS kayıtlarınızın manipüle edilip edilmediğini gösterir. Yaygın saldırılardan biri, kullanıcıları bir kimlik avı sitesine yönlendirmek için DNS kaydını değiştirmektir.
Pratik özet: 10 dakikalık kontrol listesi
Sadece 10 dakikanız varsa, şunları yapın:
adminkullanıcısını silin.- XML-RPC'yi devre dışı bırakın.
- WordPress sürüm etiketini kaldırın.
- Salt anahtarlarını değiştirin.
- Gereksiz ve çatlak eklentileri kaldırın.
- Bekleyen güncellemeleri uygulayın.
- Taze bir yedek alın ve sunucu dışında saklayın.
Bu işlemler yaygın saldırıların %80'ini engeller. Kalan %20, daha derin sunucu yapılandırması gerektirir. Sitenizin daha önce hacklendiğini ve saldırganın ne değiştirdiğini bilmediğinizi düşünüyorsanız, en iyisi tam sıfırlamadır: WordPress'i yeniden kurun, eklentileri resmi depodan tek tek kurun ve temayı güvenilir bir kaynaktan alın. Ardından tüm şifreleri değiştirin. Bu birkaç saat sürer, ancak en güvenli yoldur.
Bu işler sizin için karmaşıksa veya yeterli zamanınız yoksa, ServerNet'in güvenlik hizmetleri bu kontrolleri sizin için yapabilir. Ancak bir uzman yardımıyla bile, işin doğru yapılıp yapılmadığını anlayabilmek için temel ilkeleri bilmelisiniz.
Sıkça sorulan sorular
WordPress sitemin hacklendiğini nasıl anlarım?
Yaygın hack belirtileri arasında site görünümünün değişmesi, başka sayfalara yönlendirme, Google'ın kimlik avı veya kötü amaçlı yazılım uyarısı ve klasörlerde bilinmeyen dosyaların bulunması yer alır. Kontrol etmek için wp-content/uploads klasörüne bakın ve PHP dosyaları arayın. Bu klasörde hiçbir PHP dosyası bulunmamalıdır. Ayrıca WordPress yönetim panelinde yönetici rolüne sahip yeni kullanıcıları kontrol edin.
Wordfence eklentisi WordPress güvenliği için yeterli mi?
Wordfence iyi bir araçtır ancak yeterli değildir. Güvenlik eklentileri sorunun yalnızca bir kısmını çözer. Doğru sunucu yapılandırması, düzenli güncelleme ve gereksiz eklentilerin kaldırılması da aynı derecede önemlidir. Wordfence kuruluysa ancak hâlâ zayıf bir şifre kullanıyorsanız veya eski eklentileriniz varsa, sitenizin güvenliği hâlâ risk altındadır.
Neden XML-RPC'yi devre dışı bırakmalıyım?
XML-RPC, harici uygulamaların WordPress'e bağlanması için kullanılan eski bir protokoldür. Saldırganlar bunu yüksek hacimli brute force saldırıları için kullanır, çünkü tek bir istekle yüzlerce şifreyi deneyebilirler. WordPress mobil uygulamasını veya XML-RPC gerektiren harici hizmetleri kullanmıyorsanız, devre dışı bırakın.
Site hacklendikten sonra ne yapmalıyım?
İlk olarak, siteyi bakım moduna alın. İkinci olarak, veritabanından ve dosyalardan yedek alın (daha sonra incelemek için). Üçüncü olarak, tüm şifreleri değiştirin: hosting şifresi, veritabanı, FTP ve tüm WordPress kullanıcıları. Dördüncü olarak, eklentileri ve temayı silin ve WordPress'i yeniden kurun. Beşinci olarak, eklentileri resmi depodan tek tek kurun ve siteyi kontrol edin. Saldırganın ne değiştirdiğini bilmiyorsanız, tam sıfırlama en güvenli seçenektir.
Yorumlar 0
Henüz yorum yok — ilk siz olun!