Security Door Key

CryptoPHP Backdoor Analizi ve Tespiti

Merhaba

Geçtiğimiz haftalarda foxitsecurity firması tarafından tespit edilen CryptoPHP arka kapısı 23.000’den fazla siteyi etkilemiştir. Bu hafta yayınlanan GüvenlikTV 35. Bölümü’nde bahsi geçen CryptoPHP ile detay bilgi vermeyi amaçlayan bu bu yazıda CryptoPHP’nin nasıl yayıldığı ve hangi tür yetenekleri olduğu ele alınarak, kendi sisteminizi tarayabilme yöntemlerine değinilecektir.

CryptoPHP Nedir ?

WordPress, Jommla , Drupal gibi populer içerik yönetim sistemi yazılımlarında görülen bir arka kapıdır. Bilinen en popüler bulaşma yöntemi ise “webmaster” ların theme’i ücretli olarak almak yerine farklı kaynaklardan indirirerek sistemlerine kurmalarıdır. Aynı durum plug-in ve benzer 3. parti modüller içinde geçerlidir.

Web sitesi sahibi tarafından CryptoPHP içeren bir modül sisteme yüklendiği anda hedef sunucuya özgü bir kod yapısına bürünebilmektedir. Ardından 3 farklı yöntem ile “sahiplerine” bilgi aktarabilir.

  1. Backdoor içerisinde bulunan C2 sunucuları
  2. Email yöntemi
  3. Manuel yönetim

Hedef sisteme yüklendiği anda C2 sunucu ile Public Key Encryption metodunu  kullanarak iletişime geçmektedir. CryptoPHP’nin erişimi için geliştiricisi tarafından belirlenen C2 sunucuları/domain’lerine erişim kesilirse, bu sefer Email yolu ile iletişim kurmaktadır. Yapısında bulunan C2 sunucu listesi veya direk kendisi, uzaktan verilen bir komut ile güncellenebilmektedir.

CryptoPHP Analizi

Foxitsecurity firması tarafından yayınlanan bildiride, CryptoPHP arka kapısını normal olmayan bir HTTP talebinin fark ederek tespit ettikleri belirtilmiş. Kendi müşterilerine ait bir sunucudan User-Agent ve Referer  bilgisi boş olan bir HTTP Post talebinin, farklı bir domaine gönderildiği tespit edilmiş. Giden talepte taşınan verinin ise encrypted olduğu fark edilmiş. Sunucu bölgesinden çıkan tek bir HTTP talebini fark edip, sonuna kadar analiz ederek ortaya bu bilinmeyen saldırıyı çıkarttıkları için kendilerini tebrik etmek isterim.

Joomla kurulu bir web sitesinin administratorunun sisteme JSecure adından bir module kurduğu bilgisine ulaşılmış ve backdoor bu modülde tespit edilmiş. Burada ki bir diğer ilginç nokta ise sistem yöneticisinin JSecure modülünü Joomla’nın resmi sitesinde yayınlanan listeden indirmesi.

Bende bu bilgiden yola çıkarak jSecure-Authentication_3.0 isimli modülü indirip analize başladım. İlk başta dikkatimi çeken şey dosya tarihleri oldu. Gördüğünüz üzere jsecure.php dosyası diğer tüm dosyalardan farklı bir tarihte güncellenmiş.

cryptophp

jsecure.php dosyasının kaynak kodları ise aşağıdaki gibidir.

2006’lı yıllarda Joomla componentleri üzerinde güvenlik araştırması yaptığım zamanlardan hatırladığım fonksiyon isimlerinide göz önünde bulundurarak kaynak kodu okudum. Yani JFactory class’ında analiz yapmaya gerek yok. Çünkü eğer infection bu tür class’larda ise Joomla Core infect edilmiş demektir ki bu da olası bir durum değil, zira peşinde olduğumuz şey CryptoPHP olduğunu düşünürsek 3. parti modül dışına çıkılmasının pek bir anlamı yok.

Son satır direk dikkatleri üzerine çekmekte. PNG uzantalı bir dosyanın include edilmesi ?! Son derece şüphe uyandırıcı çünkü php geliştiricileri tarafından kullanan 2 yaklaşım vardır. Include edilecek dosya uzantısı ya .php’dir yada .inc . Ki son yıllarda en çok .php kullanılmaktadır.  Bu da saldırganın backdoor kodlarını .png uzantılı bir dosyada sakladığını göstermektedir. include()  fonksiyonu için erişilen dosyanın uzantısı önemli değildir.

Dosyanın içeriğine baktığımızda ;

crypto php source code

Beklediğimiz üzere obfuscation işlemi yapılmış PHP kaynak kodu görmekteyiz. Bu kod takibini oldukça zorlaştıran bir yöntemdir.

Backdoor Kodlarına İlk Bakış

Açıkça söylemem gerekirse bu güne kadar gördüğüm en başarılı web backdoor’u diyebilirim. Kaynak kodlara ilk bakışta fark edilecek şey Backdoor’un Joomla, WordPress ve Drupal sistemlerinin kendi fonksiyonlarını ve veri tabanını kullanmakta olduğudur. Örneğin kendi bilgilerini saklayabilmek adına aşağıdaki kod parçacığı ile hedef sistemin veri tabanına kendisine ait olan bir tablo oluşturmakta.

PS: Ben olsam config.php dosyasından prefix’i okur ve o prefixe uygun PREFIX_options adından bir tablo oluşturarak Webmaster’ın dikkatini çekmemeye çalışırdım.

Kaynak kodu okumaya backdoor class’ının kurucu fonksiyonundan başlıyoruz. Hedef sisteme kendisini yerleştirme ve C2 sunucularına iletişim kurma gibi adımlar, backdoor ilk çalıştığında gerçekleştiriliyor olması kuvvetle muhtemeldir. İlk çalışan fonksiyon aşağıdaki kodlardı.

 Hedef sistemdeki CMS’i tespit etmek

Yukarıdaki kaynak kodlar hem Joomla hemde WordPress karakteri gösteren yapıdadır. Backdoor ilk olarak JFactory isimli bir sınıfın varlığını kontrol etmektedir.

JFactory provides access to a group of core Joomla Objects. In each case it returns an object, usually with the current site settings.

Hedef bu sınıf mevcut değilse get_home_url isimli fonksiyonun varlığına bakılmaktadır. WordPress geliştiricilerinin yakından tanıdığı bu fonksiyon WordPress kurulu sitenin URL adresini vermektedir.

The get_home_url template tag retrieves the home url for a given site. Returns the ‘home’ option with the appropriate protocol, ‘https’ if is_ssl() and ‘http’ otherwise. If scheme is ‘http’ or ‘https’, is_ssl() is overridden.

Bu fonksiyon backdoor’un yerleştiği websitesinin URL’ini tespit etmeyi hedeflediği aşikardır. Eğer tanımlayamadığı bir PHP ıuygulamasına yerleşmiş ise PHP Global değişkeni olan HTTP_HOST bilgisini url olarak kabul etmektedir. Hedef sistem hakkında bir takım bilgiler elde ettikten sonra bu verileri aşağıdaki fonksiyon ile toplayıp C2 sunucularından bir tanesine göndermekte.

C2 sunucu listesi hardcoded şekilde backdoor’un içerisinde encoded olarak bulunmakta.  Bu kısmında “code hacking” yaparak listeyi aşağıdaki oluşturdum.

PS: Türk hosting firmalarının bu domainleri yasaklamalarını öneririm.

Bununla yeterli kalmayıp bulaştığı yazılımı tespit edebilmesi halinde WordPress ve Joomla için veritabanına administrator yetkisinde kullanıcı eklemektedir.

Görüldüğü üzere wp_create_user API’sini kullanarak hedef sisteme admin yetkilerinde kullanıcı eklemekte.

Sonuç

Alışıla gelmiş web backdoor’ların aksine  1600+ satır kodu olan ve iyi düşünülmüş bir backdoor ile karşılaştığımızı aşikardır. Kendi sistemlerinizde bu backdoor’u tespit etmek istiyorsanız backdoor’u tespit eden firma tarafından yazılmış aşağıdaki betiki kullanabilirsiniz. Web dizini altında .png vb dosyaların hash’ini alıp tespit edilen varyantların hashi ile karşılaştırılmakta.

https://github.com/fox-it/cryptophp/blob/master/scripts/check_filesystem.py

Bu listede olmayan varyantları tespit etmek mümkün olmayacaktır. Ben yazdığım aşağıdaki bash betiğini tercih etmekteyim. Sonuç olarak hash’i, adı ne olursa olsun, include edilen .png uzantılı dosya PHP script olmak zorundadır.

 

  • Selahattin

    Teşekkürler :) Ayrıca config dosyasından prefix okuma önerinize katılıyorum nasıl atlamış acaba orayı :))

  • Dediklerinden yola çıkarak bir kaç sitemde olduğunu fark ettim :) Teşekkürker.

    • mehmet ince

      Harika. Blog yazısının birilerine faydasını görmek enfes bir duygu, teşekkürler.

  • Mehmet UĞUR

    Merhaba hocam. Forum sitelerinden ücretsiz wordpress teması aramam üzerine beğendiğim bir tane ücretsiz wordpress teması indirdim. .zip dosyasını açtığımda antivirüsüm (eset) PHP/Agent.nel Truva Atı uyarısını verdi ve virüsün bulıunduğu konumu sildi. (Tema içinde bulunan function.php sayfasını notepad de açtığımda kodların en altında social.png dosyasına include edildiğini gördüm.)

    Konuyu form sitelerinden araştırmam sonucu sizinde bastettiğiniz gibi tema içinde bulunan function.php dosyası içinde veritabanı tablosu oluşturulduğu ve id vb. bilgilerinin çekildiğinden bahsedilmiş.

    Size sormak istediğim wordpress de biz bu durumu nasıl bertaraf edebiliriz. Cevabınız için şimdiden teşekkür ederim. Ekran fotoğrafını ve bahsettiğim temayı ek olarak ekliyorum. Saygılarımla https://drive.google.com/file/d/0Bx6it7J-GoYPZkpkVXc0cEVFckU/view?usp=sharing