secaudit.eu
Olay müdahalesi

WordPress zararlı yazılım temizleme: adım adım plan

Sekiz adımda WordPress zararlı yazılım temizleme: siteyi izole edin, delilleri koruyun, giriş noktasını bulun, güvenilir kaynaklardan temizleyin, sırları yenileyin.

Yazar: , AngelForce OÜ 7 dk okuma

Diğer diller: English Deutsch Français Español Italiano Polski Português

Güvenilir bir WordPress zararlı yazılım temizliği üç şey demektir: değiştirebildiğiniz her şeyi temiz olduğu bilinen kaynaklardan yenisiyle değiştirmek, saldırganın içeri girdiği açığı kapatmak ve görmüş olabileceği tüm gizli bilgileri yenilemek. Bulduğunuz tek bir şüpheli dosyayı silmek yetmez, çünkü saldırganlar geri dönmek için genellikle birden fazla yol bırakır.

Bu plan sekiz adımdan oluşuyor. Adımları sırayla uygulayın ve ilerlerken not alın: bu notlara Google, barındırma firmanız ve belki de veri koruma makamı için ihtiyacınız olacak. Sitenin ele geçirildiğinden henüz emin değilseniz hacklenmiş bir WordPress sitesinin 12 belirtisi rehberimizle başlayın.

Diyagram: WordPress zararlı yazılım temizliğinin sekiz adımı
İzole etmeden belgelemeye sekiz adım. GDPR (AB Genel Veri Koruma Tüzüğü) kapsamındaki süre, saldırıyı fark ettiğiniz anda işlemeye başlar.

WordPress zararlı yazılım temizliği öncesi: temizlik mi, geri yükleme mi, yardım mı?

Önce buna karar verin, çünkü planın geri kalanı bu karara göre şekillenir.

  • Temiz bir yedeği geri yükleyin: Enfeksiyonun aşağı yukarı ne zaman başladığını biliyorsanız ve o tarihten önce alınmış bir yedeğiniz varsa. Yine de 3., 5. ve 6. adımları uygulamanız gerekir; aksi hâlde saldırgan aynı açıktan geri gelir. Yedekten sonra oluşan siparişler, yorumlar veya form kayıtları, önceden dışa aktarmazsanız kaybolur.
  • Bir uzmana başvurun: Site ödeme alıyorsa veya hassas veriler barındırıyorsa, enfeksiyon daha önceki bir temizlikten sonra geri geldiyse, aynı sunucudaki birden fazla site etkilendiyse, bir sigorta şirketi ya da resmî makam için adli bilişim raporuna ihtiyacınız varsa veya komut satırında kendinizi rahat hissetmiyorsanız. Birçok barındırma firması da bu hizmeti sunar.
  • Kendiniz temizleyin: SSH ve WP-CLI erişiminiz, kullandığınız eklenti ve temaların bir listesi ve işi gereğince yapacak zamanınız varsa.

İzole etme: hasarı durdurun, delilleri koruyun

1. adım: Hasarı sınırlayın

Ziyaretçilere bulaşmaması için siteyi yayından kaldırın veya erişimi kısıtlayın. wp maintenance-mode activate ziyaretçilere bir bakım bildirimi gösterir, ancak yalnızca WordPress'i yükleyen istekleri etkiler: doğrudan çağrılan bir arka kapı dosyası çalışmaya devam eder. Gerçek izolasyon sunucu düzeyinde yapılır; bu yüzden barındırma firmanızdan herkese açık erişimi engellemesini veya yalnızca sizin IP adresinizle sınırlamasını isteyin.

Ardından yönetim alanını kilitleyin. Şu komut tüm kullanıcıların oturumunu kapatır:

wp user list --field=ID | xargs -n 1 wp user session destroy --all

Kendi yönetici parolanızı temiz bir cihazdan değiştirin. Tanımadığınız hesapları not edin, ama onları ancak 2. adımdan sonra silin. Enfekte bir sitede WP-CLI komutlarına --skip-plugins --skip-themes ekleyerek eklenti ve tema kodunun çalışmasını önleyebilirsiniz; must-use eklentileri ve wp-config.php yine de yüklenir.

2. adım: Enfekte durumun kopyasını alın

Herhangi bir şeyi değiştirmeden önce hacklenmiş siteyi olduğu gibi kaydedin. Bu kopyaya giriş noktasını bulmak ve bir sigorta şirketine ya da resmî makama yanıt vermek için ihtiyacınız olacak; temizlik sırasında bir şey bozulursa da geri dönüş noktanız olur.

# WordPress kök dizininde çalıştırın; ~/evidence web kök dizininin dışında olmalı
mkdir -p ~/evidence
wp db export ~/evidence/db-infected-$(date +%F).sql
tar -czf ~/evidence/files-infected-$(date +%F).tar.gz .
sha256sum ~/evidence/*

sha256sum satırı sağlama toplamlarını kaydeder; böylece kopyaların sonradan değiştirilmediğini gösterebilirsiniz. Erişim ve hata günlüklerini de indirin, çünkü birçok barındırma firması bunları yalnızca sınırlı bir süre saklar.

Temizleme: açığı kapatın, dokunulan her şeyi yenileyin

3. adım: Giriş noktasını bulun

Bu adımı atlarsanız aynı siteyi bir hafta sonra yeniden temizlemek zorunda kalabilirsiniz. Tipik giriş noktaları şunlardır: güvenlik açığı bulunan eklentiler veya temalar, çalınmış ya da birden fazla yerde kullanılan parolalar ve aynı barındırma hesabındaki enfekte diğer siteler.

  • Açık barındıran eklentiler ve temalar. wp plugin list --fields=name,status,version,update ve wp theme list komutlarını çalıştırın, ardından güncel olmayan her öğeyi bir güvenlik açığı veritabanında arayın. Hız önemlidir: güvenlik şirketi Patchstack'in raporuna göre 2025'te yoğun biçimde istismar edilen açıklarda toplu istismara kadar geçen ağırlıklı medyan süre 5 saatti (State of WordPress Security in 2026).
  • Çalınmış giriş bilgileri. Tanımadığınız yönetici hesaplarının ne zaman oluşturulduğunu kontrol edin ve alışılmadık IP adreslerinden yapılan girişlere bakın.
  • Sunucu günlükleri. İlk değişen dosyanın tarihi civarında olağandışı dosyalara gönderilmiş POST isteklerini arayın.
grep '"POST ' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20
find . -type f -name '*.php' -mtime -14 -printf '%TY-%Tm-%Td %TH:%TM %p\n' | sort

access.log yerine kendi günlük dosyanızın adını yazın. İlk komut en çok POST isteği alan yolları, ikincisi son 14 günde değişen PHP dosyalarını listeler. Zaman damgaları sahte olabilir; bunları kesin bilgi değil, ipucu olarak görün. Giriş noktasını bulamazsanız en kötüsünü varsayın: tüm eklenti ve temaları yenileyin, tüm erişim bilgilerini değiştirin.

4. adım: Güvenilir kaynaklardan temizleyin

Onarmak yerine yenisiyle değiştirin: resmî kaynaktan alınmış temiz kopyalar, gizlenmiş (obfuscated) kodu satır satır okumaktan daha güvenilirdir.

WordPress çekirdeği. wp-admin ve wp-includes klasörlerini silin ve aynı sürümü yeniden indirin; böylece bu klasörlere gizlenmiş fazladan dosyalar da ortadan kalkar. Komutları WordPress kök dizininde, yani wp-load.php dosyasını ve wp-admin klasörünü içeren klasörde çalıştırın:

VER=$(wp core version)
[ -n "$VER" ] && [ -f wp-load.php ] && rm -rf wp-admin wp-includes && \
  wp core download --version="$VER" --skip-content --force
wp core verify-checksums --include-root

İkinci satır, bir sürüm bulunmadıkça ve siz WordPress kök dizininde değilseniz hiçbir şey silmez. --include-root seçeneği (WP-CLI 2.8 veya üstü) kök klasördeki bilinmeyen dosyaları da listeler.

Eklentiler ve temalar. Her eklenti ve tema klasörünü WordPress.org'dan veya geliştiricinin indirme alanından alınmış temiz bir kopyayla değiştirin. WordPress.org'daki eklentiler için wp plugin install <slug> --force kurulu kopyanın üzerine yazar; ardından wp plugin verify-checksums --all değiştirilmiş ve sonradan eklenmiş dosyaları raporlar. Kullanmadığınız her şeyi silin ve asla "nulled" (lisans kontrolü kırılmış) bir kopyadan yeniden kurulum yapmayın.

Yüklemeler. Yüklenen dosyalar yeniden kurulamaz, bu yüzden onları inceleyin: find wp-content/uploads -type f -iname '*.php' ile PHP dosyalarını arayın, klasörü enfeksiyon öncesine ait bir yedekle karşılaştırın ve medya dosyası olmayan her şeyi kaldırın.

Yapılandırma ve drop-in dosyaları. wp-config.php, .htaccess, .user.ini, wp-content/mu-plugins ve object-cache.php gibi drop-in dosyalarını elle kontrol edin.

Veritabanı. Zararlı yazılım yazılara, seçeneklere (options), kullanıcılara ve zamanlanmış olaylara da yerleşir:

wp user list --role=administrator --skip-plugins --skip-themes
wp option get siteurl && wp option get home
wp db search '<script' --all-tables
wp cron event list --fields=hook,next_run_relative,recurrence

wp db search, analiz araçlarının kod parçacıkları gibi meşru betikleri de bulur. Tanımadığınız yöneticileri, spam yazıları ve enjekte edilmiş seçenekleri ancak her birini tek tek kontrol ettikten sonra silin.

5. adım: Tüm erişim bilgilerini ve salt anahtarlarını yenileyin

Saldırganın wp-config.php dosyasını ve sunucuda saklanan tüm gizli bilgileri okuduğunu varsayın. Şunları değiştirin:

  • yönetici veya editör yetkisine sahip tüm WordPress hesaplarını; tanımadığınız uygulama parolalarını (Application Passwords) da iptal edin;
  • barındırma kontrol paneli, SFTP/FTP ve SSH erişimlerini, yetkili SSH anahtarları dâhil;
  • veritabanı parolasını, barındırma tarafında ve wp-config.php içinde aynı anda;
  • eklentilerde saklanan API anahtarlarını: ödeme, SMTP, yedekleme depolama alanı, CDN;
  • yönetici parola sıfırlama e-postalarının gittiği e-posta hesabını.

Ardından wp-config.php içindeki kimlik doğrulama anahtarlarını ve salt değerlerini yenileyin. WordPress geliştirici belgelerine göre bunları değiştirmek mevcut tüm çerezleri geçersiz kılar; böylece çalınmış bir oturumu kullanan saldırgan da dâhil herkes yeniden giriş yapmak zorunda kalır.

wp config shuffle-salts

Takip: sıkılaştırın, izleyin, belgeleyin

6. adım: Siteyi sıkılaştırın

  • Çekirdeği, eklentileri ve temaları güncelleyin; denetimleri ve otomatik güncellemeleri güvenlik açığı bulunan WordPress eklentileri rehberimizde ele alıyoruz.
  • Yönetim panelindeki dosya düzenleyicilerini kaldırmak için wp-config.php dosyasına define( 'DISALLOW_FILE_EDIT', true ); satırını ekleyin. DISALLOW_FILE_MODS bir adım daha ileri gider ve hem panelden yapılan hem de otomatik güncellemeleri engeller; bu yüzden onu yalnızca güncellemeleri başka bir yolla yapıyorsanız kullanın.
  • Tüm yöneticiler için iki faktörlü kimlik doğrulamayı açın. WordPress çekirdeğinde bu özellik yoktur.
  • Yüklemeler klasöründe PHP çalıştırılmasını engelleyin. Apache 2.4 için wp-content/uploads/.htaccess dosyasına şunu ekleyin:
<FilesMatch "\.(?i:php|phtml|phar)$">
    Require all denied
</FilesMatch>

nginx'te bu satırı genel location ~ \.php$ bloğunuzdan önce yerleştirin, çünkü nginx eşleşen ilk düzenli ifade (regex) location bloğunu kullanır:

location ~* ^/wp-content/uploads/.*\.(php|phtml|phar)$ { deny all; }

Yeniden yüklemeden önce nginx -t komutunu çalıştırın, ardından görsellerin hâlâ yüklendiğini kontrol edin.

7. adım: İzleyin ve yeniden inceleme isteyin

Sonraki haftalarda siteyi yakından izleyin: sağlama toplamı ve yüklemeler kontrollerini tekrarlayın, dosya listelerini temiz durumla karşılaştırın ve erişim günlüklerini okuyun. Enfeksiyon geri dönerse giriş noktası hâlâ açık demektir; işte o zaman bir uzmana başvurmanın vakti gelmiştir.

secaudit.eu tarafından geliştirilen Security Audit & Compliance bu aşamada size destek olabilir: dosya bütünlüğü için bir referans durum (baseline) tutar, çekirdek sağlama toplamlarını doğrular; gizli yöneticileri, şüpheli cron olaylarını ve gizli SEO spam'ini arar. Eklenti tespit eder ve raporlar; siteyi sizin yerinize temizlemez.

Google siteyi işaretlediyse, her şey temizlendikten sonra Search Console'da Güvenlik sorunları (Security issues) raporunu açın, İnceleme iste (Request a review) seçeneğini kullanın ve neleri düzelttiğinizi anlatın. Google'a göre incelemeler kimlik avında yaklaşık bir gün, zararlı yazılımda birkaç gün, hacklenmiş spam içerikte ise birkaç haftaya kadar sürer. E-posta kara listelerinden çıkarılma talebini ancak spam gönderimi durduktan sonra yapın.

8. adım: GDPR ihlal değerlendirmesini yapın ve belgeleyin

Bu adım listede en sonda yer alıyor, ama süresi ilk gün işlemeye başlar. Müşteri verileri, kullanıcı hesapları, form kayıtları veya siparişler ifşa olduysa, değiştirildiyse ya da erişilemez hâle geldiyse saldırı genellikle bir kişisel veri ihlalidir. Bu durumda, ihlalin bir risk doğurma ihtimali düşük olmadıkça, ihlali öğrendiğiniz andan itibaren gecikmeksizin ve mümkünse 72 saat içinde denetim makamına bildirimde bulunmanız gerekir (GDPR md. 33). Kişiler açısından risk yüksekse onları da bilgilendirmeniz gerekir (md. 34).

Kararınız ne olursa olsun olayın ayrıntılarını, etkilerini ve aldığınız düzeltici önlemleri belgeleyin: md. 33(5) bunu, bildirmediğiniz ihlaller dâhil her ihlal için şart koşar. Değerlendirmeyi 72 saatlik ihlal bildirimi rehberimizde adım adım anlatıyoruz. Kuruluşunuz NIS2 Direktifi kapsamındaysa, önemli olaylar için 24 saat içinde ayrıca bir erken uyarı gerekir; ülkenizin ulusal NIS2 mevzuatını kontrol edin.

Sık sorulan sorular

Bir güvenlik eklentisi zararlı yazılımı benim yerime temizleyebilir mi?

Bazı araçlar bilinen zararlı yazılımlar için otomatik temizlik sunar. Ancak hiçbiri saldırganın nasıl içeri girdiğini veya hangi parolaları ele geçirdiğini size kesin olarak söyleyemez; bu nedenle 3., 5. ve 6. adımlar yine sizin işinizdir.

WordPress çekirdeğini yeniden kurmak içeriğimi siler mi?

Hayır. Yazılar, sayfalar ve ayarlar veritabanında durur; --skip-content sayesinde eklentilerinize, temalarınıza ve yüklemelerinize de dokunulmaz. Yalnızca wp-admin, wp-includes ve kök klasördeki çekirdek dosyalar yenilenir; wp-config.php korunur.

Bu makale genel bilgi niteliğindedir, hukuki danışmanlık değildir.

Kendi sitenizi kontrol edin

Security Audit & Compliance, secaudit.eu’nun WordPress eklentisidir: zararlı yazılımları, gizli spam’i, değiştirilmiş çekirdek dosyalarını ve açıklı kodu tarar; bulguları GDPR Md. 32, NIS2 Md. 21 ve OWASP Top 10 ile eşleştirir.

Eklentinin neleri kontrol ettiğini görün
Melike Görel

Melike Görel, secaudit.eu’nun arkasındaki Tallinn merkezli yazılım şirketi AngelForce OÜ adına WordPress güvenliği ve AB uyumluluğu rehberlerini yazıyor.

Yapay zekâ desteğiyle hazırlanmış ve yayından önce doğruluğu kontrol edilmiştir. Bu makale genel bilgi niteliğindedir, hukuki danışmanlık değildir.