Saldırı altında mısınız? Olay müdahalesi için bize ulaşın

info@angelforce.eu
WordPress

Uygulamaya dönük WordPress güvenlik kontrol listesi

Mantıklı bir sırayla on iki WordPress sıkılaştırma adımı: güncellemeler ve terk edilmiş eklentilerden 2FA, XML-RPC, yedek, dosya bütünlüğü ve WAF’a.

Diğer diller:EnglishDeutschFrançaisEspañolItalianoPolskiNederlandsEesti

İllüstrasyon: Uygulamaya dönük WordPress güvenlik kontrol listesi

Bir WordPress sitesi, en zayıf eklentisi, hesabı ya da yedeği kadar güçlüdür. WordPress çekirdeği düzenli olarak güvenlik güncellemeleri alır; ona ne eklediğiniz ve siteyi nasıl işlettiğiniz ise size kalmıştır. Bu kontrol listesi en önemli önlemleri, aşağı yukarı bizim uygulayacağımız sırayla ele alır.

1. Çekirdeği, eklentileri ve temaları güncel tutun

Çekirdek için arka planda otomatik güncellemeler WordPress 3.7’den beri vardır ve varsayılan olarak küçük sürümleri kapsar. WordPress 5.5’ten beri her eklenti ve tema için otomatik güncellemeyi yönetim ekranlarından da açabilirsiniz.

  • Saygın geliştiricilerin eklentileri için otomatik güncellemeyi açın, diğerlerini her hafta gözden geçirin.
  • Otomatik güncellemeler WP-Cron’a dayanır. Araçlar > Site sağlığı (Tools > Site Health) ekranında hata olup olmadığına bakın, çünkü bozuk bir cron güncellemelerin sessizce durması demektir.
  • Otomatik güncellemelere güvenmeden önce geri dönebildiğinizden emin olun. WordPress belgeleri de bunu önerir.

2. Terk edilmiş ve kullanılmayan eklentileri kaldırın

WordPress sıkılaştırma kılavuzu bu konuda açıktır: eklentileri güncel tutun ve kullanmadıklarınızı silin. Devre dışı bırakmak yeterli değildir, çünkü kod sunucuda kalır.

WordPress.org eklenti dizini size iki uyarı işareti verir:

  • Bir eklentinin “WordPress’in son 3 ana sürümüyle test edilmediğini” belirten sarı bir uyarı.
  • Bir eklentinin kapatıldığını ve artık indirilemediğini belirten kırmızı bir uyarı. 60 gün sonra kapatılma nedeni gösterilir; listelenen nedenlerden biri de “güvenlik sorunu”dur.

Kapatılmış bir eklenti WordPress.org üzerinden güncelleme almaz. Onu başka bir eklentiyle değiştirin. Ücretli eklentilerin “nulled” (lisans koruması kırılmış) kopyalarını asla kurmayın; eklentileri yalnızca WordPress.org’dan ya da güvendiğiniz üreticilerden kurun.

3. Yönetici hesaplarını denetleyin

Yönetici (Administrator) rolüne sahip tüm hesapları listeleyin ve kimsenin açıklayamadığı hesapları kaldırın. WP-CLI ile:

wp user list --role=administrator --fields=ID,user_login,user_email,user_registered

Herkese kendi adını taşıyan ayrı bir hesap verin; asla ortak bir admin hesabı kullanmayın. İşi görecek en düşük rolü kullanın: içerik editörlerinin çoğunun Yönetici rolüne ihtiyacı yoktur. Güçlü ve benzersiz parolalar isteyin; parolalar tercihen bir parola yöneticisinde saklansın.

4. İki faktörlü kimlik doğrulamayı açın

Her yönetici için 2FA’yı açın. WordPress çekirdeği 2FA içermez; bu yüzden 2FA’yı zorunlu tutan bir eklentiye ya da tek oturum açma (SSO) sağlayıcısına ihtiyacınız vardır. Eklentiniz destekliyorsa güvenlik anahtarları ya da geçiş anahtarları gibi yöntemleri tercih edin ve kurtarma kodlarını güvenli bir yerde saklayın.

5. Oturum açma denemelerini sınırlayın ve XML-RPC hakkında karar verin

WordPress belgeleri, wp-login.php ve xmlrpc.php dosyalarını kaba kuvvet saldırılarının yaygın hedefleri olarak tanımlar. Oturum açma denemelerinin uçta (bir WAF ya da CDN üzerinde) veya web sunucusunda sınırlanmasını önerir. Bir güvenlik eklentisi de oturum açma denemelerini yavaşlatabilir, ancak PHP içinde çalıştığı için yoğun trafik altında sunucu düzeyindeki çözüm daha dayanıklıdır.

XML-RPC kullanmıyorsanız kapatın. Bazı mobil uygulamalar ve Jetpack gibi servisler buna ihtiyaç duyar; önce kontrol edin. xmlrpc_enabled filtresinin yalnızca kimlik doğrulaması gerektiren yöntemleri devre dışı bıraktığını unutmayın. Pingback’ler ve kimlik doğrulaması gerektirmeyen diğer yöntemler çalışmaya devam eder. Tamamen kapatmak için dosyayı web sunucusunda engelleyin. nginx için:

location = /xmlrpc.php {
    deny all;
}

6. Yerleşik dosya düzenleyiciyi kapatın

Yönetim panelindeki tema ve eklenti düzenleyicisi, yönetici oturumu olan herkesin PHP kodunu değiştirmesine olanak tanır. Bunu wp-config.php içinde devre dışı bırakın:

define( 'DISALLOW_FILE_EDIT', true );

wp-config.php belgelerine göre DISALLOW_FILE_MODS bir adım daha ileri gider ve yönetim panelinden eklenti ve tema kurulumunu ve güncellemesini de engeller. Bunu yalnızca değişiklikleri Git ya da WP-CLI gibi başka bir yolla dağıtıyorsanız kullanın.

7. Yedekleri sunucunun ve web kök dizininin dışında tutun

Sıkılaştırma kılavuzu hem dosyaların hem de veritabanının düzenli olarak yedeklenmesini, birden fazla anlık görüntü (snapshot) tutulmasını ve güvenilir bir depolama yeri kullanılmasını önerir. Yedeklerin bütünlüğünü şifrelemeyle, kayda geçirilmiş hash değerleriyle ya da salt okunur ortamlarla koruyun.

Buradan iki pratik kural çıkar. Web kök dizini içindeki bir yedek, örneğin wp-content içindeki bir zip dosyası, adını tahmin eden herkes tarafından indirilebilir. Aynı sunucudaki bir yedek de aynı saldırgan tarafından silinebilir. En az bir kopyayı sitenin kimlik bilgilerinin ulaşamayacağı bir yerde tutun ve tam bir geri yüklemeyi test edin.

8. Dosya bütünlüğünü kontrol edin

WP-CLI, WordPress’i yüklemeden dosyalarınızı WordPress.org’un resmî sağlama değerleriyle karşılaştırabilir:

wp core verify-checksums --include-root
wp plugin verify-checksums --all

İlk komut değiştirilmiş çekirdek dosyalarını işaretler; --include-root de kök dizindeki beklenmeyen dosyalar hakkında uyarır. İkinci komut eklentileri WordPress.org sağlama değerleriyle karşılaştırır; bu yüzden yalnızca orada barındırılan eklentiler için işe yarar. Normalde yalnızca medya dosyaları içermesi gereken wp-content/uploads klasöründe PHP dosyası olup olmadığına da bakın.

9. En az yetkili bir veritabanı kullanıcısı kullanın

Her siteye kendi veritabanını ve yalnızca o veritabanında yetkisi olan kendi veritabanı kullanıcısını verin. Asla veritabanının root kullanıcısıyla bağlanmayın.

Sıkılaştırma kılavuzu, günlük işleyiş için yalnızca SELECT, INSERT, UPDATE ve DELETE yetkilerinin gerektiğini belirtir. Eklentiler ve büyük güncellemeler şemayı değiştirmek zorunda kalabileceği için DROP, ALTER ve GRANT yetkilerinin geri alınmasını önermez. Yine de kaldırırsanız test edilmiş yedekleriniz olsun.

10. Dosya izinlerini ayarlayın

Kılavuzun başlangıç noktası dizinler için 755, dosyalar için 644’tür. Çekirdek dosyalar, wp-admin ve wp-includes web sunucusu tarafından değil, yalnızca sizin kullanıcı hesabınız tarafından yazılabilir olmalıdır. İstisna wp-content’tir: web sunucusunun yüklemeler için buraya yazabilmesi gerekir. Kılavuz wp-config.php için 400 ya da 440 önerir.

find /var/www/example -type d -exec chmod 755 {} \;
find /var/www/example -type f -exec chmod 644 {} \;
chmod 440 /var/www/example/wp-config.php

Bu komutları çalıştırmadan önce yolları ve dosya sahipliğini barındırma düzeninize göre ayarlayın.

11. Güvenlik başlıkları gönderin

Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options ve Referrer-Policy gibi başlıklar tarayıcı tarafında koruma ekler. Mümkünse bunları bir eklenti yerine web sunucusunda ya da CDN’de ayarlayın. Temalar ve sayfa oluşturucular satır içi betiklere dayanabileceği için yalnızca raporlama modundaki bir Content Security Policy ile başlayın.

12. Önüne bir WAF koyun

WordPress belgeleri üç düzey tanımlar: istekleri WordPress içinde süzen güvenlik eklentileri, ModSecurity gibi sunucu düzeyinde bir güvenlik duvarı ve trafiği sunucunuza ulaşmadan önce süzen ters vekil sunucu (reverse proxy) servisleri. Süzme ne kadar dışarıda yapılırsa PHP’ye o kadar az yük ulaşır. WAF güncellemelerin yerini tutmaz; bir açığın duyurulmasıyla sizin yamanız arasında zaman kazandırır.

Kısa özet

AlanAsgari düzey
GüncellemelerÇekirdek küçük sürüm otomatik güncellemeleri açık, eklentiler her hafta gözden geçiriliyor
EklentilerKapatılmış, terk edilmiş ya da kullanılmayan eklenti kurulu değil
HesaplarKişiye özel hesaplar, az sayıda yönetici, hepsinde 2FA
Oturum açmaSunucuda ya da uçta deneme sınırı, kullanılmıyorsa XML-RPC engelli
Kod değişiklikleriDISALLOW_FILE_EDIT ayarlı
YedeklerSunucu dışında, web kök dizininin dışında, geri yükleme test edilmiş
BütünlükSağlama değerleri doğrulanmış, uploads içinde PHP yok
VeritabanıHer site için bir kullanıcı, yetkisi yalnızca kendi veritabanında
TarayıcıHSTS ve test edilmiş bir CSP
Çevre güvenliğiÖnünde bir WAF ya da ters vekil sunucu

Nereden başlamalı

İlk dört maddeyle başlayın. Az zaman alırlar ve barındırma düzeninizde değişiklik gerektirmezler. Ardından mevcut başlıklarınızı güvenlik başlıkları taramamızla kontrol edin.

Bu kontrollerin sizin için yapılmasını istiyorsanız SecAudit, WordPress sitelerini zararlı yazılım ve web shell’ler için tarar, dosya bütünlüğünü resmî sağlama değerlerine göre doğrular ve kurulu eklentileri bilinen güvenlik açıklarıyla eşleştirir.

Nasıl yardımcı olabiliriz

SecAudit

Kendi ürünümüz. SecAudit, WordPress sitelerini zararlı yazılım, açıklı kod, değiştirilmiş dosyalar ve bilinen açıklar için tarar; sonuçları OWASP, GDPR ve NIS2’ye göre eşleştirilmiş raporlara dönüştürür.

Güvenlik başlıkları taraması

Sitenizin HTTP güvenlik başlıklarını, çerezlerini ve TLS sertifikasını notlandırın; her bulgu için çözüm alın.

Bize yazın
AngelForce ekibi

Bu yazıyı AngelForce ekibi hazırladı: Avrupa ve Türkiye’deki kurumların sistemlerini test eden, izleyen ve koruyan; CEH, LPT Master ve CISA sertifikalı güvenlik danışmanları.

Aşağıda listelenen herkese açık kaynaklardan yapay zekâ desteğiyle yazıldı ve yayından önce AngelForce ekibi tarafından incelendi.

Kaynaklar

  1. developer.wordpress.org/advanced-administration/security/hardening/
  2. developer.wordpress.org/advanced-administration/security/brute-force/
  3. developer.wordpress.org/plugins/wordpress-org/alerts-and-warnings/
  4. developer.wordpress.org/reference/hooks/xmlrpc_enabled/
  5. developer.wordpress.org/cli/commands/core/verify-checksums/
  6. wordpress.org/documentation/article/plugins-themes-auto-updates/

WordPress hakkında yazılar

Neyi korumanız gerektiğini anlatın

Altyapınızı ve hedefinizi kısaca yazın, size e-postayla dönelim.

Bize yazın
info@angelforce.eu

AngelForce OÜ · Tallinn, Estonya