WordPress Hosting

WordPress sitede kötü amaçlı yazılım temizleme: belirtiler, adımlar, önlemler

Ele geçirilmiş bir WordPress sitesini tanımanın belirtileri, hesabı dondurma, temiz kopya seçimi, çekirdek, tema ve eklentileri yeniden kurma, veritabanı kontrolü, parola sıfırlama, arama motoru uyarısını kaldırma ve tekrarını önleyecek adımlar.

WordPress sitelerin ele geçirilmesinde sık görülen senaryo sofistike bir saldırı değil, eski bir eklentideki bilinen açığın otomatik araçlarla bulunmasıdır. İçeri giren kod kendini çekirdek dosyalara, tema klasörüne ve veritabanına dağıtır; yalnızca gördüğünüz dosyayı silmek sorunu çözmez, kod birkaç gün sonra geri gelebilir. Bu yazı belirtilerden başlayıp temizliği kalıcı kılan sırayı anlatır: hesabı dondurmak, temiz bir kopya belirlemek, çekirdek ve eklentileri resmi kaynaklardan yeniden kurmak, veritabanını denetlemek, bütün parolaları sıfırlamak ve arama motoru uyarısını kaldırmak. Sonunda tekrarını önleyecek adımlar var.

Belirtiler: sitenin ele geçirildiğini nasıl anlarsınız?

  • Arama sonuçlarında sitenizin başlığı ya da açıklaması ilaç, bahis, taklit ürün gibi alakasız içerik gösteriyor.
  • Tarayıcı ya da arama motoru “bu site zararlı olabilir” uyarısı veriyor; Google Search Console'da güvenlik sorunu bildirimi var.
  • Ziyaretçiler başka sitelere yönlendiriliyor; özellikle mobil ya da arama motorundan gelenler.
  • Yönetim panelinde tanımadığınız yönetici hesabı, tanımadığınız eklenti ya da değiştiremediğiniz bir ayar var.
  • Barındırma firması kötü amaçlı yazılım bildirimi gönderdi ya da hesabı askıya aldı.
  • Sunucu kaynak tüketimi aniden arttı; site yavaşladı, e-posta kutusu toplu posta gönderiyor.
  • Dosya yöneticisinde tarihini değiştirmediğiniz hâlde yakın zamanda değişmiş görünen çekirdek dosyalar, ya da wp-content/uploads içinde .php uzantılı dosyalar var.

Belirtilerden biri bile varsa siteyi ele geçirilmiş varsayıp aşağıdaki sırayı izlemek en temkinli yaklaşımdır.

Adım 1: Hesabı dondurun ve kanıt toplayın

Siteyi bakım moduna alın ya da panelden geçici olarak erişime kapatın; zararlı kodun ziyaretçilere ulaşmasını ve arama motorunun daha fazla zararlı sayfa dizine eklemesini durdurursunuz. Hemen ardından panelin, FTP'nin, veritabanının ve WordPress yöneticisinin parolalarını değiştirin; böylece saldırgan temizlik sırasında yeniden giremez. Silmeye başlamadan önce mevcut hâlin (bulaşmış hâlin) bir kopyasını alıp sunucu dışına indirin: temizlik sırasında bir şey ters giderse ya da sonradan bir dosyanın içeriğine bakmanız gerekirse bu kopya kurtarır. Erişim günlüklerini (access log) de indirin; saldırının hangi dosya ve hangi tarih üzerinden geldiğini bulmanın en önemli kaynağı bunlardır.

Adım 2: Temiz bir kopya belirleyin

Firmanın ya da sizin aldığınız kopyaları tarihe göre listeleyin ve günlüklerden kestirdiğiniz bulaşma tarihinden öncekini seçin. Bulaşma tarihi belirsizse birkaç hafta geriye gidin; çok eski kopya içerik kaybı demektir, bu yüzden geri yükledikten sonra son içerikleri dışa aktarma ile elle geri taşıyabilirsiniz. Hiç temiz kopya yoksa paniğe gerek yok; sonraki adımlar kopya olmadan da temizlik sağlar, yalnızca daha uzun sürer.

Kopyayı doğrudan canlı sitenin üzerine geri yüklemek yerine önce bir alt alan adına açıp denetlemek daha güvenlidir: kopya da bulaşmış olabilir ve bunu ancak dosyaları tarayarak anlarsınız. Alt alan adındaki kopya temiz çıkarsa canlıya taşırsınız; çıkmazsa bir önceki tarihe geçersiniz. Bu deneme birkaç saat alır, ancak bulaşmış bir kopyayı canlıya almanın yol açacağı ikinci temizlikten kısadır.

Adım 3: Çekirdek, tema ve eklentileri yeniden kurun

Bu adım temizliğin kalbidir. Mantık basit: kodun bulaşabileceği her şeyi resmi kaynaktan sıfırdan kurun, yalnızca sizin ürettiğiniz veriyi (içerik, medya, ayar dosyası) koruyun.

BileşenNe yapılırDikkat
WordPress çekirdeğiwp-admin ve wp-includes klasörlerini tamamen silip aynı sürümün resmi arşivinden yeniden yükleyinKök dizindeki çekirdek dosyalar da (index.php, wp-settings.php vb.) arşivden üzerine yazılır
wp-config.phpElle açıp okuyun; tanımadığınız satır, uzun kodlanmış metin ya da include ifadesi varsa silinVeritabanı bilgilerini koruyun; tuzları (salt) 5. adımda yenileyeceksiniz, bu bütün oturumları kapatır
TemalarYalnızca kullandığınız temayı resmi kaynaktan yeniden yükleyin, diğerlerini silinAlt tema kullanıyorsanız onu elle inceleyin; functions.php sık hedef alınan dosyalardandır
EklentilerHepsini silin ve kullandıklarınızı resmi dizinden yeniden kurunLisanslı eklentileri satıcının sitesinden indirin; korsan (nulled) kopyalar bilinen bir bulaşma kaynağıdır
wp-content/uploads.php, .phtml ve benzeri çalıştırılabilir dosyaları arayıp silinGörsel klasöründe kod dosyası olmamalıdır; .htaccess ile çalıştırmayı da engelleyin
.htaccessKök ve alt klasörlerdeki .htaccess dosyalarını okuyun, yönlendirme ya da tanımadığınız kural varsa varsayılana döndürünKalıcı bağlantı ayarlarını kaydetmek yalnızca # BEGIN WordPress bloğunu yeniler, bloğun dışına eklenmiş kurallar yerinde kalır; bu yüzden blok dışını elle temizleyin (panelin eklediği PHP sürümü satırlarını koruyarak)

Dosya yöneticisinde ya da SSH ile son değişiklik tarihine göre sıralama yapmak, şüpheli dosyaları bulmanın hızlı bir yoludur; ancak saldırganlar dosya tarihini değiştirebildiği için tek ölçüt olmamalıdır. Base64 ile kodlanmış uzun satırlar, eval çağrıları ve tek satıra sıkıştırılmış kod bulaşmanın tipik işaretleridir.

Adım 4: Veritabanını denetleyin

Kod yalnızca dosyalarda değil, veritabanında da yaşayabilir. phpMyAdmin'den sırayla bakın:

  1. Kullanıcılar tablosu: Tanımadığınız yönetici hesaplarını silin. Kullanıcı sayısı panelde göründüğünden fazlaysa gizlenmiş hesap vardır.
  2. Ayarlar tablosu: siteurl ve home değerlerinin kendi adresiniz olduğunu doğrulayın; active_plugins satırında tanımadığınız eklenti varsa kaldırın.
  3. İçerik tablosu: Yazı ve sayfa içeriklerinde script etiketi ya da iframe arayın; yorum tablosunda toplu spam varsa temizleyin.
  4. Tanımadığınız tablolar: Silinmiş bir eklentinin tablosu olabilir ama içeriğine bakmadan silmeyin.

Denetimden sonra veritabanı kullanıcısının parolasını değiştirip wp-config.php'ye yeni değeri yazın.

Adım 5: Bütün parolaları ve anahtarları sıfırlayın

İlk adımda değiştirdiğiniz parolaları temizlik bittikten sonra bir kez daha yenileyin; temizlik sırasında hâlâ çalışan bir arka kapı yeni parolayı yakalamış olabilir. Liste: barındırma müşteri hesabı, panel, FTP/SFTP, veritabanı, bütün WordPress kullanıcıları (kullanıcılar listesindeki toplu parola sıfırlama bağlantısı gönderme işlemiyle ya da bir eklentiyle), posta kutuları ve varsa API anahtarları. wp-config.php'deki güvenlik tuzlarını yenilemek bütün oturumları sonlandırır. İki adımlı doğrulamayı bu aşamada açın.

Adım 6: Arama motoru uyarısını kaldırın

Temizlik tamamlandığında Google Search Console'daki güvenlik sorunları bölümünden inceleme talebi gönderin; yaptığınız işlemleri kısaca yazmanız beklenir. İnceleme birkaç gün sürebilir ve uyarı kalkana kadar tarayıcı uyarısı da sürer. Dizine eklenmiş spam sayfaları için kaldırma aracını kullanın ve site haritasını yeniden gönderin. Firmanın hesabı askıya aldığı durumda destek talebiyle temizliğin bittiğini bildirin; hesabın yeniden açılması için firmanın kendi taramasını tekrarlaması gerekebilir.

Önlemler: tekrarını engellemek

Temizlik tekrarı önlemezse birkaç hafta içinde aynı yoldan yeniden bulaşır. Açığı kapatmadan iş bitmiş sayılmaz.

  • Çekirdek, tema ve eklentileri güncel tutun; kullanılmayanları silin. Korsan tema ve eklenti kullanmayın.
  • Her hesapta uzun, benzersiz parola ve iki adımlı doğrulama; “admin” kullanıcı adını kaldırın.
  • Dosya izinlerini 755/644, wp-config.php'yi 600 yapın; uploads klasöründe PHP çalıştırmayı kapatın.
  • Firmanın sunucu düzeyindeki taramasını (Imunify360 ve benzeri) ve WAF'ı kullanın; yoksa WordPress içinde tarama yapan bir eklenti kurun ve dosya değişikliği bildirimlerini açın.
  • Haftalık sunucu dışı kopya alın ve geri yüklemeyi bir kez deneyin; temiz kopya, bir sonraki olayda saatler kazandırır.
  • Aynı barındırma hesabında birden fazla site varsa birindeki bulaşma diğerlerine geçebilir; siteleri ayrı hesaplara ya da ayrı paketlere bölmeyi düşünün.
  • Sitenin güncellemelerini üstlenen yönetilen WordPress paketleri, bakım yapacak zamanı olmayanlar için makul bir seçenektir; farkı paylaşımlı mı, WordPress hosting mi? yazısında anlattık.

Temizlikten sonra barındırma firmasının güvenlik araçlarını bir karşılaştırma ölçütü olarak yeniden değerlendirmek isteyebilirsiniz; WordPress hosting firmaları ve paylaşımlı hosting firmaları sayfalarından firma sayfalarına geçip paket kartlarında firmanın beyan ettiği tarama ve yedek bilgisine bakabilir, genel önlemler için hosting güvenliği yazısını okuyabilirsiniz.

İlgili yazılar

WooCommerce için hosting seçimi: kaynak, önbellek ve ödeme güvenliği

Bir WooCommerce mağazası için paket seçerken eş zamanlı işlem kapasitesi, PHP işçisi, nesne önbelleği, SSL ve PCI kapsamı, ödeme altyapısıyla uyum ve yedek sıklığına nasıl bakılacağını, VPS'e ne zaman geçileceğini anlatıyoruz.

Ücretsiz site taşıma sunan hosting firmaları

Ücretsiz site taşıma beyan eden 16 sağlayıcıyı, taşımanın kaç siteyi ve hangi bileşenleri (dosya, veritabanı, e-posta, DNS) kapsadığına dair paket notlarını ve sipariş öncesi sorulması gereken kapsam sorularını listeledik.

TTFB nedir? Sunucu yanıt süresini etkileyen etkenler

TTFB'yi oluşturan adımlar (DNS, bağlantı, TLS, sunucu işleme), LCP ile ilişkisi, önbellek, PHP, veritabanı, lokasyon ve CDN'in etkisi; tarayıcı geliştirici araçları ve curl ile kendi ölçümünüzü doğru yapmanın yöntemi.