secaudit.eu
Olay müdahalesi

WordPress siteniz hacklendi mi? 12 belirti ve kontrolü

Hacklenmiş bir WordPress sitesinin 12 belirtisi: bilinmeyen yönetici hesaplarından gizli yönlendirmelere, her birinin nasıl kontrol edileceği ve ilk saatte yapılacaklar.

Yazar: , AngelForce OÜ 7 dk okuma

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

WordPress sitenizin hacklendiğini en açık biçimde gösteren işaretler şunlardır: kimsenin oluşturmadığı yönetici hesapları, yalnızca görsellerin bulunması gereken klasörlerdeki PHP dosyaları ve kendi ekranınızda hiç görmediğiniz spam sayfaları ya da yönlendirmeler. Bu belirtilerin çoğu bilerek sessiz tutulur. Saldırganlar sitenin çalışmaya devam etmesini ister; bu yüzden oturum açmış yöneticilerden saklanır, zararlı içeriği yalnızca arama motorlarına veya seçtikleri ziyaretçilere gösterirler.

Aşağıda, fark edildikleri yere göre gruplanmış 12 belirti ve her biri için somut bir kontrol yöntemi bulacaksınız. Kontrollerin bir kısmında WordPress'in komut satırı aracı WP-CLI kullanılıyor. Barındırma firmanızın dosya yöneticisi ve veritabanı aracıyla da aynı kontrolleri yapabilirsiniz, yalnızca daha yavaş ilerlersiniz.

Diyagram: hacklenmiş bir WordPress sitesinin 12 belirtisi, fark edildikleri yere göre gruplanmış
Kırmızı: dışarıdan, yani ziyaretçilerin ve Google'ın görebildiği belirtiler. Lacivert: sunucuda veya WordPress'te kontrol ederek bulduğunuz belirtiler.

WordPress hacklendi mi? Ziyaretçilerinizin fark ettiği belirtiler

1. Yalnızca mobilde veya Google'dan gelenlere yönlendirme

Birçok enfeksiyon ziyaretçilerin yalnızca bir kısmını yönlendirir: telefondan girenleri ya da Google aramasından gelenleri. Google'ın spam politikaları bu iki hileyi de tanımlar: arama motorlarına ve kullanıcılara farklı içerik gösterilmesi anlamına gelen cloaking (gizleme) ve mobil kullanıcıların bir spam alan adına yönlendirilmesi. Siz adresinizi masaüstü bilgisayarda yazarsınız, normal bir site görürsünüz ve sorunu kaçırırsınız.

Nasıl kontrol edilir: Telefonunuzda, mobil veri bağlantısıyla ve oturum açmadan sitenizi aratın, ardından arama sonucuna dokunun. Terminalden ise sıradan bir isteği, "Google'dan gelen mobil ziyaretçi" gibi görünen bir istekle karşılaştırın:

curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' https://example.com/
curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' \
  -A 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)' \
  -e 'https://www.google.com/' https://example.com/

Yalnızca ikinci sonuçta başka, tanımadığınız bir alan adına 301 veya 302 yönlendirmesi görüyorsanız bu güçlü bir uyarı işaretidir. JavaScript ile yapılan yönlendirmeler bu yöntemle görünmez; bu nedenle sayfa kaynağında tanımadığınız betiklere de bakın.

2. Tarayıcı veya antivirüs uyarıları

Tarayıcıda tam ekran bir uyarı çıkıyorsa (İngilizce arayüzde örneğin "Deceptive site ahead") ya da müşterileriniz antivirüs programlarının sitenizi engellediğini söylüyorsa, alan adınız büyük olasılıkla zararlı yazılım veya kimlik avı nedeniyle bir engelleme listesine girmiştir. Nasıl kontrol edilir: Alan adınızı Google'ın Güvenli Tarama site durumu sayfasında sorgulayın ve uyarıyı görenlerden, ekranda tam olarak ne yazdığını gösteren bir ekran görüntüsü isteyin.

Google arama sonuçlarındaki belirtiler

3. site: sonuçlarında spam sayfaları

Kumar, ilaç veya taklit ürün satışı için siteye enjekte edilmiş sayfalar, çoğu zaman siz başka bir yerde fark etmeden önce Google'da ortaya çıkar. Nasıl kontrol edilir: site:example.com şeklinde arama yapın ve sonuçlarda yabancı dilde başlıklar ya da hiç yayımlamadığınız konular olup olmadığına bakın. Aramaya casino, viagra veya loan gibi kelimeler eklemek sonuçları daraltır.

4. Search Console'da güvenlik sorunları

Siteniz Google Search Console'da doğrulanmışsa Güvenlik ve Manuel İşlemler → Güvenlik sorunları bölümünü açın (İngilizce arayüzde: Security & Manual Actions → Security issues). Google, tespit ettiği hacklenmiş içerik veya zararlı yazılım gibi sorunları burada listeler. Nasıl kontrol edilir: Mülkün doğrulanmış olduğundan ve Search Console bildirimlerinin onları gerçekten okuyan birine ulaştığından emin olun. Boş bir rapor iyi haberdir, ama kanıt değildir.

Sunucu ve barındırma hesabındaki belirtiler

5. Hesabın askıya alınması veya yüksek CPU kullanımı

Barındırma firmaları spam gönderen, kimlik avı sayfası sunan veya sunucuyu aşırı yükleyen hesapları askıya alır. Ziyaretçi sayısı artmadığı hâlde CPU kullanımı birden yükseliyorsa hesabınızda bir kripto madencisi ya da spam betiği çalışıyor olabilir. Nasıl kontrol edilir: Barındırma firmasından gelen mesajı baştan sona okuyun (çoğu zaman dosya adları da verilir) ve kontrol panelinizdeki kaynak kullanım grafiklerine bakın. SSH erişiminiz varsa ps aux --sort=-%cpu | head komutu en çok kaynak tüketen süreçleri gösterir.

6. Giden spam ve e-posta kara listeleri

Kendi e-postalarınız geri dönmeye başladıysa ya da hiç göndermediğiniz mesajlar için iade bildirimleri alıyorsanız, bir betik sunucunuz üzerinden spam gönderiyor olabilir. Nasıl kontrol edilir: Barındırma firmanıza giden e-posta hacminde bir değişiklik olup olmadığını sorun ve sunucunuzun IP adresini herkese açık bir kara liste sorgulama aracında kontrol edin.

7. wp-content/uploads içinde PHP dosyaları

Yüklemeler klasöründe kod değil, görseller ve belgeler bulunmalıdır. Orada bir PHP dosyası varsa bu çoğu zaman bir web shell'dir: saldırganın sunucuda komut çalıştırmasını sağlayan bir arka kapı. Nasıl kontrol edilir:

find wp-content/uploads -type f \( -iname '*.php' -o -iname '*.phtml' -o -iname '*.phar' \)

Bazı eklentiler, dizin listelemesini engellemek için klasörlerine boş bir index.php koyar. Bu yüzden bulunan her dosyayı açın ve içinde gerçekte ne olduğuna bakın.

8. Değiştirilmiş çekirdek dosyalar

Saldırganlar kodlarını WordPress çekirdek dosyalarına gizlemeyi sever, çünkü bu dosyaları kimse okumaz. Nasıl kontrol edilir: wp core verify-checksums komutu çekirdek dosyalarınızı WordPress.org'un resmî sağlama toplamlarıyla (checksum) karşılaştırır ve eşleşmeyen her dosya için uyarı verir (komut başvurusu). wp plugin verify-checksums --all aynı işi eklentiler için yapar, ancak yalnızca WordPress.org'da barındırılan eklentilerde çalışır.

9. .htaccess veya wp-config.php dosyasında beklenmedik değişiklikler

.htaccess dosyasına eklenen birkaç satır, ziyaretçileri geldikleri sayfaya (referrer) veya kullandıkları tarayıcıya göre yönlendirebilir. wp-config.php içindeki tek bir satır ya da .user.ini dosyasındaki bir auto_prepend_file ayarı, zararlı yazılımı WordPress daha başlamadan yükleyebilir. Nasıl kontrol edilir: Her iki dosyayı da temiz olduğundan emin olduğunuz son yedekle karşılaştırın, ardından tipik kod gizleme (obfuscation) ve prepend hilelerini arayın:

grep -rnE --include='*.php' 'eval\(|base64_decode\(|gzinflate\(|str_rot13\(' . | head -50
grep -rn 'auto_prepend_file' --include='.htaccess' --include='.user.ini' --include='php.ini' .

Bu fonksiyonların bir kısmını meşru eklentiler de kullanır; bulduğunuz sonuçları hüküm olarak değil, ipucu olarak değerlendirin.

WordPress yönetim panelindeki belirtiler

10. Tanımadığınız yönetici hesapları

Yeni bir yönetici hesabı açmak, erişimi elde tutmanın klasik yoludur; bazı zararlı yazılımlar bu hesabı Kullanıcılar ekranında gizler bile. Nasıl kontrol edilir:

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

İki --skip parametresi, normal eklenti ve tema kodunun (oraya gizlenmiş zararlı yazılım da dâhil) listeyi filtrelemesini engeller. Must-use eklentileri ve wp-config.php yine de yüklenir; bu yüzden onları da kontrol edin (9. ve 11. belirtiler). WP-CLI, Kullanıcılar ekranından daha fazla yönetici gösteriyorsa bir şey bir hesabı gizliyor demektir. Her yönetici profilinde, ekibinizden kimsenin oluşturmadığı uygulama parolaları (Application Passwords) olup olmadığına da bakın.

11. Kimsenin yüklemediği eklentiler

Genel geçer adlara sahip, yazarı veya açıklaması olmayan ve ekibinizde kimsenin yüklediğini hatırlamadığı eklentilere dikkat edin. wp-content/mu-plugins klasöründeki must-use eklentileri otomatik olarak yüklenir ve kolayca gözden kaçar. Nasıl kontrol edilir: wp plugin list normal eklentileri, must-use eklentileri ve object-cache.php gibi drop-in dosyalarıyla birlikte gösterir; wp plugin list --status=must-use,dropin ise yalnızca son iki grubu listeler.

12. Tuhaf cron görevleri

Zararlı yazılım, siz onu sildikten sonra geri gelebilmek için çoğu zaman kendini zamanlanmış bir göreve ekler. Nasıl kontrol edilir:

wp cron event list --fields=hook,next_run_relative,recurrence

Kullandığınız bir eklentiyle ilişkilendiremediğiniz her hook'u araştırın. Sunucu düzeyindeki cron görevleri de önemlidir: bunları crontab -l komutuyla ya da barındırma panelinizin cron bölümünde görebilirsiniz.

İlk bir saatte yapmanız gerekenler

Bu belirtilerden biri veya birkaçı bir saldırıya işaret ediyorsa, sonraki bir saat, neler olduğunu ne kadar ortaya çıkarabileceğinizi belirler. Sakin kalın ve şu sırayla ilerleyin:

  1. Panikle silmeyin. Şüpheli dosyayı veya tanımadığınız yöneticiyi silmek delilleri yok eder ve enfeksiyonun tamamını nadiren temizler, çünkü saldırganlar geri dönmek için genellikle birden fazla yol bırakır.
  2. Delilleri koruyun. Dosyaların ve veritabanının hacklenmiş hâliyle tam bir anlık görüntüsünü veya yedeğini alın. Web sunucusunun 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. Kopyayı çevrim dışı bir yerde tutun ve "enfekte" olarak etiketleyin.
  3. Parolaları temiz bir cihazdan değiştirin. Barındırma hesabından başlayın, ardından SFTP/SSH, veritabanı ve tüm WordPress yöneticileri gelsin. Kendi bilgisayarınızın da ele geçirilmiş olma ihtimali varsa başka bir bilgisayar kullanın ve tüm yöneticiler için iki faktörlü kimlik doğrulamayı açın.
  4. Barındırma firmanıza haber verin. Sunucu günlüklerini, aynı hesaptaki diğer siteleri ve giden e-postaları onlar görebilir; siteyi çoğu zaman hızla izole edebilirler.
  5. Saati not edin. Saldırıyı ilk ne zaman fark ettiğinizi ve o ana kadar neler gözlemlediğinizi yazın.

Son madde, GDPR (AB Genel Veri Koruma Tüzüğü) açısından önemlidir. Saldırgan müşteri verilerine, iletişim formu kayıtlarına, kullanıcı hesaplarına veya siparişlere erişebildiyse, saldırı genellikle bir kişisel veri ihlalidir. GDPR madde 33 uyarınca, ihlalin bir risk doğurma ihtimali düşük olmadıkça, durumu öğrendiğiniz andan itibaren gecikmeksizin ve mümkünse 72 saat içinde denetim makamına bildirimde bulunmanız gerekir. Bu değerlendirmeyi nasıl yapacağınızı GDPR'de 72 saatlik ihlal bildirimi rehberimizde anlatıyoruz.

Deliller güvenceye alındıktan sonra adım adım WordPress zararlı yazılım temizleme planımızla devam edin: siteyi izole edin, giriş noktasını bulun, temiz olduğu bilinen kaynaklardan yeniden kurun ve tüm erişim bilgilerini yenileyin.

secaudit.eu tarafından geliştirilen WordPress eklentisi Security Audit & Compliance, bu belirtilerin birçoğunu sizin yerinize kontrol eder: gizli yönetici hesapları, şüpheli cron olayları, çekirdek sağlama toplamları, bir referans duruma (baseline) göre dosya değişiklikleri ve gizli SEO spam'i. Eklenti tespit eder ve raporlar; zararlı yazılımı temizlemek yine size ya da bir uzmana düşer.

Sık sorulan sorular

Bir site hiçbir görünür belirti olmadan hacklenmiş olabilir mi?

Evet. Birçok enfeksiyon, site sahibine görünmeyecek şekilde tasarlanır: oturum açmış kullanıcıları atlar, yalnızca arama motorlarını hedef alır ya da yalnızca sunucuda çalışır. Yukarıdaki kontrollerin ana sayfanıza bakmakla yetinmemesinin nedeni budur.

Her hack bir GDPR veri ihlali midir?

Hepsi değil, ama birçoğu öyledir. Kişisel verilere erişildiyse, veriler değiştirildiyse, kaybolduysa veya erişilemez hâle geldiyse bu bir kişisel veri ihlalidir. Sonuç ne olursa olsun değerlendirmenizi belgeleyin: madde 33(5), bildirmediğiniz ihlaller de dâhil olmak üzere her ihlalin kayıt altına alınmasını şart koşar.

Dünkü yedeği hemen geri yüklemeli miyim?

Ancak enfekte durumu kaydettikten ve saldırının aşağı yukarı ne zaman başladığını öğrendikten sonra. Saldırıdan sonra alınmış bir yedek arka kapıyı da içerir; giriş noktasını kapatmadan geri yükleme yaparsanız saldırgan doğrudan geri döner.

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.