Bir "Yardım" Çığlığı, ya da admin'i... WP Backdoor
"Biz değil ama müşteriler farklı adreslere yönlendiriliyor" mesajı ile başlayan bir backdoor vakası...
WordPress tabanlı küçük bir e-ticaret sitesinde yöneticilere her şey normal görünüyor ama müşteriler farklı adreslere yönlendiriliyordu.
Önce kullandıkları tüm eklentileri listemelerini istedim, ardından yönetici erişimleri kimlerde var vs.
Şifreler sıfırlandı eski hesaplar kaldırıldı. Maksat garanti olmak elbette iş bu kadar kolay olmaz...
Sonra yine help yöneticisi belirdi. Çok yardım sever.
İlk olarak WordPress panelindeki kullanıcıları ve eklentileri kontrol ettim.
Eklenti listesinde görünmeyen fakat ./wp-content/plugins/DebugMaster/DebugMaster.php dizininde "DebugMaster Pro" adında bir eklenti vardı. Bir de ./wp-user.php dosyası.. ilk bakışta ben bile WordPress'in temel dosyalarından sandım fakat içeriği fena;

Bu kod ile önce kullanıcı oluşturma talebi veriliyor, sonra olay başlıyor. Oluşturmak istedikleri hesabın kullanıcı adı ve e-posta adresi kontrol Ediliyor. Eğer aynı değerlere sahip başka bir hesap yoksa yeni kullanıcı oluşturuluyor ve bu kullanıcıya “administrator”, yani yönetici yetkisi veriliyor.
DebugMaster Pro eklentisi de aslında aynı mantıkla çalışıyor fakat farkı yönetici bilgilerini düzenli olarak başka bir sunucuya gönderiyor olması.
add_filter('all_plugins', [$this, 'hide_plugin']);
add_action('init', [$this, 'create_admin_user']);
add_action('pre_user_query', [$this, 'filter_admin_users']);
add_action('wp_enqueue_scripts', [$this, 'load_scripts']);
add_action('admin_init', [$this, 'collect_admin_ip']);all_plugins filtresi eklentinin panelde görünmesini engelliyor, pre_user_query ise kullanıcı sorgusuna müdahale ederek saldırganın oluşturduğu yönetici hesabını listeden çıkarıyor.
Yani hem eklenti hem de kullanıcı sistemde duruyor. Sadece WordPress panelinde görünmüyor.
Eklenti kullanıcıyı oluşturduktan sonra kullanıcı adı, parola, e-posta adresi, site adresi ve sunucu IP'si gibi bilgileri JSON haline getiriyor. Ardından veriyi Base64 ile kodlayıp yönettikleri sunucuya gönderiyordu.
Bilgilerin gönderildiği adres:
hxxps://kickstar-xbloom[.]info/collect[.]php şuan hem aktif değil hem de kara listeye alınmış.
Tabii eklentinin tüm görevi bu değil, yukarda da bahsettiğim gibi yöneticilerinin "bizde normal olan site müşterileri başka yerlere yönlendiriyor." şikayetinin bir sebebi vardı. Arkada çalışan zararlı script.
Oturum açmış bir yönetici siteyi ziyaret ettiğinde veya istek daha önce kaydedilmiş bir yönetici IP adresinden geldiğinde zararlı script yüklenmiyordu. Müşteri girdiğinde ise istenilen adrese yönlendiriliyordu.
Eklenti yöneticilerin IP adreslerini de topluyor ve bunları sıradan bir WordPress option kaydı gibi görünmesi için widget_recent_entries adı altında saklıyordu.
./wp-user.php dosyası ise backdoor olarak kullanılıyordu. Oluşan hesabı silseniz, şifresini değiştirseniz bile yeni bir şifre ile tekrardan kendini oluşturuyordu. Ayrıca belirli sürelerde de bu hesabı silip tekrar oluşturuyordu. Böylelikle biri hesabı silmek yerine şifreyi değiştirip döngüyü durdurmak isterse buna engel oluyordu.
Sorun Nasıl Çözüldü?
./wp-content/plugins/DebugMaster/ ./wp-user.php Dosyalarını sildim.
Ardından help hesabını silip bu kullanıcı adında gözlem yapabilmek için normal bir hesap oluşturdum.
- WordPress çekirdek dosyalarını temiz sürümle karşılaştırdım.
- Tema, eklenti, my-plugins ve uploads dizinlerinde dosyaları kontrol ettim.
- widget_recent_entries içine saklanan IP listesini temizledim.
- WordPress, hosting, FTP/SSH ve veritabanı parolalarını değiştirdim.
- Çekirdeği, temayı ve kullanılan eklentileri güncelledim; terk edilmiş eklentileri kaldırdım.