Uzun bir süredir WordPress ile geliştirdiğim birçok web sitesi belli aralıklarla “Error Establishing a Database Connection” (veritabanına bağlantısı yok) şeklinde hata vermekteydi. Birşekilde MySQL sunucusu çalışmaz hale geliyordu.
Bu web sitelerini Digital Ocean’da “Droplet” diye adlandırılan sanal sunucularda bulunduruyorum. cPanel kullanmadan SSH client ve WinSCP gibi programlar yardımıyla işletim sistemi ubuntu olan sanal sunuculara bağlanarak sitelerimi yönetiyorum. Bir süredir acaba sitelerimden hangisi hataya düştü diye hergün kara kara düşünmekteydim.
Yaptığım araştırmalar hep makinenin kaynaklarını yükseltmem gerektiği konusunda beni yönlendirmekteydi. Diğital Ocean üzerindeki kaynak kullanımlarını kontrol ettiğimde nekadar çok RAM ve CPU ya sahip olursam olayım sonunda %100 leri görmekteydim. Sunucularım 1GB RAM ve tek çekirdek CPU ya sahipler. Her bir sanal sunucuda tek bir wordpress sitesi yayını yapmaktayım ve kaynakların bunun için yeterli olmalıydı.
Swap dosyası oluşturmam gerektiği önerisi de en çok karşıma çıkan çözümlerdendi. Performansı artıran ve fazla yüklenme olduğu durumlarda sigorta görevi gören swap dosyaları gerçekten faydalı bir iyileştirme fakat yaşadığım soruna yinede çözüm olmadı.
Sitelerimden ikisi tamamen kullanılmaz hale geldi ve yedeklerim sayesinde tekrar kurabildim. Artık işin tadı kaçmaya başlamıştı ve daha çok araştırmaya başladım.
Araştırmalar sonucu “Brute Force” diye adlandırılan en çok karşılaşılan siber saldırı tipine sitelerimin maruz kaldı sonucuna ulaştım. Bu saldırı WordPress’in “xmlrpc.php” dosyasına yapılan “XML-RPC” saldırısıydı. Şimdi “XML-RPC” saldırısını nasıl tespit edebileceğimizi, nasıl etkilerinin olduğunu ve bu saldırıya uğramamak için neler yapabileceğimizi anlatmaya çalışalım.
XML-RPC DDOS Saldırısı Nedir?
Bu saldırı “xmlrpc.php” dosyasına çok sayıda istek gönderilmesidir. Birçok blogerın kullandığı “Pingback” sistemini kötüye kullanarak yapılan bir DDOS saldırısıdır. “Pingback” sistemi bir blog yazarının yazısını birisi linklediğinde yazara yazısının linklendiğine dair bilgi verilmesini sağlar. Bu sistem yazarlara kimlerin yazılarını takip ettiğini yada yazılarına atıfta bulunduklarını takip etme olanağı sunar. WordPress’in de sahip olduğu “Pingback” özelliği vazgeçilmesi kolay bir özellik değildir. Eğer blog yazarıysanız “Pingback” hayatidir.
XML-RPC DDOS Saldırısını Nasıl Tespit Ederiz?
Saldırı başladığı ilk zamanlar kendini hissettirmesede zamanla sunucumuzu meşkul etme oranı artmaktadır. Sunucu kaynaklarımızı incelediğimizde tüm kaynak kullanımlarının tavan yaptığını görürürüz. Şekil 1’de görüldüğü üzere bu saldırı karakteri gereği kaynaklarımızı tüketecektir.
Şekil 1 – Sunucu Kaynaklarının Durumu
Şekil 2’de XML-RPC sistemini hedef alan saldırıların bir örneklemesi verilmiştir. Saldırgan tek bir HTTP requestinde yüzlerce şifre kullanarak wp-login.php sayfası üzerinden saldırı deneyebilir veya tek denemeler ile xmlrpc üzerinden saldırı yapabilir. Basit matematik bilgisi ile saldırıların boyutlarını ve potansiyel etkilerini görmek mümkün. Grafikte görüldüğü üzere saldırının boyutları günden güne artmaktadır.
Şekil 2 – XML-RPC Saldırılarının Bir Örneklemesi
Saldırıları kesin olarak tespit etmek için sunucu loglarına göz atmamaız yeterlidir. “Access Log” dosyasında (Erişim Logu) “POST /xmlrpc.php HTTP/1.0” şeklinde loglara rastladığınız durumda XML-RPC saldırısına maruz kaldığınıza emin olabilirsiniz. “Access Log” dosyasının yeri kullandığınız linux işletim sistemne göre değişecektir. Ubuntu 14.04’de çalışan Apache server için XML-RPC saldırılarını access.log dosyasında sorgulayabilmek için aşağıdaki komutu kullanabiliriz.
“$ grep xmlrpc /var/log/apache2/access.log“
Eğer sitemiz “XML-RPC” saldırılarına mahsur kalmış ise çalıştırılan yukardaki sorgu sonucunda Şekil 3’de ki gibi birçok satırdan oluşan bir sonuçla karşılaşırız.
Şekil 3 – Access Log Dosyasındaki XML-RPC Saldırı Kayıtları
Bu çıktı ile karşılaştıktan sonra “XML-RPC” saldırısına maruz kaldığımızı kesin olarak tespit etmiş bulunuyoruz, artık bu problemin çözüm yollarından bahsedeceğiz.
XML-RPC Saldırılarından Korunma Yolları
1) Jetpack Eklentisi Kurulumu
Ideal olan XML-RPC saldırılarını henüz olmamışken bundan korunmakır. WordPress Jetpack eklentisi “XML-RPC” saldırılarını “Protect” fonksiyonu aracılığı ile blok etmektedir. Jetpack aktif olduğunda sunucu loglarınızda XML-RPC kayıtlarını görmeye devam edebilirsiniz fakat kötü niyetli oturum açma girişimleri nedeniyle veritabanınız üzerindeki oluşan yüklenmeyi %90 oranında azaltacaktır.
Jetpack eklentisini kurabilmek için WordPress.com dan bir hesap oluşturmanız gerekiyor.
Jetpack WordPress kontrol panelini (backend) kullanarak kolaylıkla kurulabilmektedir. WordPress kontrol panelinde oturum açtıktan sonra sol menüden “Eklentiler->Yeni Ekle” seçeneğine tıklıyoruz.
Şekil 4 – Jetpack Eklentisi Kurulumu
Jetpack yeni eklenti ekleme sayfasına girdiğimizde otomatik olarak listede en üstlerde görülecektir. Eğer göremezseniz arama kutucuğuna Jetpack yazarak arama yapabilirsiniz.
Jetpack’i indirip yüklemek için “Şimdi Kur” düğmesine basıyoruz. Yükleme başarılı birşekilde tamamlandıktan sonra “Eklentiyi Etkinleştir” linkine basıyoruz ve sistem bizi eklentiler sayfasına geri döndğrecektir. Üst tarafta yeşil bir başlık göreceksiniz. Şekil 5’de gördüğümüz bu başlıkta “Jetpack’iniz neredeyse hazır!” yazıyor olacak. Başlık içinde bulunan “WordPress.com’a bağlan” düğmesine basarak Jetpack’in aktivasyon işlemini tamamlıyoruz.
Şekil 5- Jetpack’iniz neredeyse hazır
Şimdi WordPress.com hesabı kullanarak oturum açıyoruz. Eğer hesabımız yoksa oluşturabilirsiniz.
WordPress.com hesabı ile oturum açtıktan sonra Jetpack aktivasyonu tamamlanmış olacaktır. Karşınıza çıkan ekranda “Sitenizi hızlı başlatın” başlığını göreceksiniz. “Hızlı Başlat” düğmesine basarak Jetpack’in en çok tercih edilen özelliklerini etkinleştirebilirsiniz.
Şekil 6 – Sitenizi Hızlı Başlatın
“Hızlı Başlat” düğmesine bastığınızda sitenizi koruyacak özellikler otomatikmen etkinleşecektir. Artık ekranınızda Jetpack’in gösterge panelininde “Koruma“ seçeneğinin aktif olduğunu göreceksiniz. Şekil 7’de görülen “Koruma” seçeneğinin yanındaki çarka tıklayarak “Güvenilir Adresler Listesi Yönetimi” sayfasına ulaşabilirsiniz.
Şekil 7 – Jetpack Gösterge Paneli
Güvenilir adresler listesine eklediğiniz bir IP adresi Jetpack tarafından kesinlikle engellenmez. Evinizde, ofisinizde veya diğer yerlerde değişebildiği için en sık kullanılan IP adreslerinizi eklemeye dikkat edin. Aşağıdaki listeden kaldırdığınız IP adresi, güvenilir adresler listenizden de çıkarılır. Güvenilir adresler listesine eklemek istediğimiz IPv4 ve IPv6 adreslerini Şekil 8’de gördüğümüz text alana giriş yaparak “Kaydet” düğmesine basıyoruz ve güvenilir adresler listesini güncellemiş oluyoruz.
Şekil 8 – Güvenilir Adresler Listesi Sayfası
2) “a2enconf block-xmlrpc” özelliği ile
Digital Ocean’da One-Click WordPress kurulumu seçeneğini seçtiğinizde kurulan WordPress’e Aralık 2015 tarihinden itibaren “a2enconf block-xmlrpc” özelliği eklenmiştir. Bu özelliği kullanarak “XML-RPC” saldırılarını web sunucusu seviyesinde engelleyebiliriz.
XML-RPC blok scriptini aktive etmek için aşağıdaki komutu çalıştırıyoruz. Bu komutu kullanabilmek için DigitalOcean WordPress One-Click kurulumu için geçerlidir.
$ sudo a2enconf block-xmlrpc
Apache’yi yeniden başlatarak özelliği aktive ediyoruz.
$ sudo service apache2 restart
Uyarı: Bu metod Jetpack ve WordPress Mobil app. gibi XML-RPC kullanan tüm özellikleri engelleyecektir.
3) XML-RPC Trafiğini Manuel Bloklama
Alternatif olarak; XML-RPC saldırıları manuel şekilde Apache konfigürasyonunuzu düzenleyerek de bloklanabilmektedir.
Ubuntu 14.04 için Apache konfigurasyon dosyasını aşağıdaki komut aracılığı ile güncellemek için açalım:
$ sudo nano /etc/apache2/sites-available/000-default.conf
Kırmızı ile işaretlenen satırları “<VirtualHost>” tagları arasına yerleştirin.
Satırları ekledikden sonra kaydedip dosyayı kapatıyoruz. Sonrasında Apache web sunucumuzu yeniden başlatmak için aşağıdaki komutu çalıştırıyoruz.
$ sudo service apache2 restart
Uyarı: Bu metod Jetpack ve WordPress Mobil app. gibi XML-RPC kullanan tüm özellikleri engelleyecektir.
Sonuç
Yukarda bahsettiğimiz herbir çözümü uyguladığımız zaman WordPress sitemiz daha az kaynak tüketecektir. Sitenizin ofline olmasında en çok neden olan şey aşırı kaynak tüketimidir ve XML-RPC trafiği buna neden olmaktadır. Bu yazıda ayrıntılı olarak bahsettiğim XML-RPC saldırılarından korunma metodlarını uygulayarak WordPress sitemizin online kalmasını sağlayabiliriz.