Bilişim çağının başlangıcından beri zararlı yazılımlar/virusler hep var olmuştur. Bunların kimisi para talep ederken, kimisi ise kendini belli etmeden, gizlice çalışır. Günümüzde yüz binlerce zararlı yazılım var, gittikçe de artıyor. Her geçen gün daha çok etki yaratabilen, kendini daha iyi gizleyebilen zararlı yazılımlar çıkıyor. Tarihe adını yazdıran bu yazılımları incelediğimizde son çıkan yazılımın öncekilere oranla daha çok mağduriyet doğurduğunu görebiliriz. Buradan da anlıyoruz ki, virüsler artık daha akıllı hale geliyor.

Günümüzde yalnızca bir virüs üretmek yeterli olmuyor. Bu virüsü öyle donatmalıyız ki, kendini iyi gizleyebilmeli, etkili olmalı, güvenlik duvarları tarafından fark edilmemeli, kendi kendini yönetebilmeli.

Yani kötü amaçlı kişiler, kodladığı virüs kendisi gece uyurken dahi saldırı yapabiliyorsa, kendisinden bağımsız çalışabiliyor ve kendi kendini yönetebiliyorsa burada yapay bir aklın varlığından söz edebiliriz.

Virüslerin çalışma mantığını anladığımız takdirde onları engellememiz daha kolay olacaktır. Bu yazıda basit bir backdoor (arka kapı virüsü) üretip hacker’ın izleyebileceği olası bir saldırı stratejisi görmüş olacağız. Virüsü PHP dilinde üreteceğiz, öyleyse başlayalım.

Adım 1)- Kendini Gizle

Yapılacaklar:

  1. Dosya tipi değiştirme,
  2. Kodları gizleme,
  3. Dosyayı saklama.

Dosya Uzantısı Değiştirmek: Dosya uzantısını .php yerine .jpg şeklinde değiştirmek gizlenmek için etkili bir yöntem olabilir. Yetkililerin “Bu bir JPG (resim) dosyası, sunucuya zarar veremez!” şeklindeki önyargısı sayesinde zararlı yazılımımızın gözlerinden kaçmasını sağlamalıyız, aynı zamanda bu şekilde bazı firewall’ların gözünden de kaçabiliriz.

Zararlı dosyamızın adı logo.jpg olsun. Çalışacağımız dizinde logo.jpg ve .htaccess adlarında iki dosya oluşturalım.

.htaccess dosyasının kodu:

Copy to Clipboard

Artık sunucu .php uzantılı dosyaları .jpg uzantısında çalıştırmamıza olanak sağlayacak.

Kodları Gizlemek: Yazdığımız virüsün kodları, sunucuda kurulu olan bir firewall tarafından algılanıp silinebilir veya sistem yetkililerine haber verilebilir. En kötü ihtimalle yetkili şüpheli gördüğü dosyayı açıp kodlarını inceleyebilir. Virüsün kodlarını o kadar iyi gizlemeliyiz ki, inceleyenler şüpheli görünen kodlarla karşılaşmasın, güvenlik duvarı içeride neler döndüğünü anlayamasın. Bu yüzden kodları doğrudan virüs dosyamızın içine (logo.jpg) eklemeyeceğiz. İlgili zararlı kodları, başka bir internet sitesinden çekeceğiz. Ne kadar masumane değil mi? 😊

Zararlı kodları çekeceğimiz adres https://infinitumit.com.tr/kodlar/virus.txt olsun.

 

O halde az önce oluşturmuş olduğumuz virüsümüze (logo.jpg dosyasına) şu kodları yazabiliriz:

Copy to Clipboard

Fakat bu betiği biraz daha gizli hale getirmemiz gerekiyor. Zira bu haliyle firewall’lar tarafından kolaylıkla algılanabilir. O zaman kodları aşağıdaki gibi değiştirelim, her iki betik de aynı görevi görecektir.

Copy to Clipboard

Doğrudan URL’i yazmama sebebimiz, tüm dosyaları kapsayacak şekilde kaynak kodlarda bir arama yapıldığında üçüncü taraf URL’in görünmemesini sağlamak. Yine doğrudan eval(); fonksiyonunu yazmadık çünkü eval fonksiyonu da genellikle firewall’lar tarafından kara listede tutulur. Aynı zamanda hata bastırma kodları ekleyerek olası bir aksaklıkta sitenin hata vermemesini sağlayacağız.

Ya da bir encoder yardımıyla şifrelerin tamamını daha güçlü bir algoritmayla şifreleyebilirsiniz.

Dosyayı Saklamak: Dosyamızı şüphe çekmeyecek bir dizinde saklamalıyız. Örneğin, WordPress yazılımında /wp-content/uploads/ klasörü gayet mantıklı. Siz hedef sitedeki CMS’e göre uyarlamalısınız, ben bilindik olduğu için WordPress’i örnek göstereceğim.

Eğer yazı sonunda bahsettiğim zamanlama özelliğinin sizin müdahaleniz olmadan çalışmasını istiyorsanız wp-config.php gibi sitenin tamamında kullanılan bir dosyaya virüsünüzü include etmelisiniz. Virüsümüzü (logo.jpg dosyası) doğrudan wp-config.php dosyasına include etmek tehlikelidir zira bir virüs bulaşması durumunda öncelikle wp-config.php dosyası kontrol edilir. O halde wp-config.php dosyasıyla bağlantılı bir dosyaya ekleyelim. Örneğin /wp-includes/default-constants.php, /wp-includes/pomo/mo.php gibi dosyalar, wp-config.php dosyasıyla bağlantılıdır. wp-config.php dosyasının içine wp-settings.php include edilir, wp-settings.php dosyasını açtığımızda da az önce bahsettiğimiz dosyaların include edilmiş olduğunu görebiliriz. Yine logo.jpg dosyamızı ilgili dizine atarak ilgili dosyalara şu kodu ekleyebiliriz:

Copy to Clipboard

Böylelikle virüsü yazmada ilk adımı (gizlilik) tamamlamış olduk.

Adım 2)- Virüsü Geliştir

Yapılacaklar:

  1. Otomatik yedek alma,
  2. Komut çalıştırma,
  3. Otomatik log silme,
  4. Kendi kendini imha etme.

Bu bölümde yazacağımız kodları https://infinitumit.com.tr/kodlar/virus.txt adresine kaydedeceğiz ve logo.jpg dosyası kodları siteden çekecek. Yani virüsümüzün kodlarını sitemizde barındıracağız, logo.jpg dosyası aracı olacak. Dolayısıyla şimdilik logo.jpg dosyasıyla işimiz yok.

Yazılacak olan betikler sunucu konfigürasyonuna göre değişiklik gösterebilir.

Otomatik Yedek Alma:

Sitenin ana dizininin .zip olarak yedeğini alacağız ve bu yedeği gizli bir klasörde saklayacağız. Bu sayede istediğimiz zaman yedeği indirebiliriz. Kırmızı renkli bölüm, arşivin saklanacağı dizini göstermektedir, mor renkli satır ise hangi fonksiyonu çalıştıracağımızı göstermektedir. Aşağıdaki kod işimizi görecektir.

Copy to Clipboard

Özelliği kullanabilmek için http://hedefsite.com/logo.jpg?i=ydk şeklinde giriş yapmak gerekir. System(); fonksiyonu örnektir.  Komut çalıştırmaya yarayan fonksiyonlardan hangileri sunucuda izinliyse, o fonksiyonları kullanabilirsiniz.

Komut Çalıştırma:

Copy to Clipboard

Sadece hedefsite.com/logo.jpg?c=KOMUT şeklinde girildiğinde çalışır. Örnek:

Log Silme:

Hacker, işi bittikten sonra bıraktığı izleri silmek isteyecektir. Aşağıdaki kod log’ların yaygın olarak bulunduğu yerleri temizler. Bu işlem yetki gerektirebilir.

Copy to Clipboard

Böylece, hedefsite.com/logo.jpg?i=lgsl olarak giriş yapıldığında sistemde kayıt edilen log’ların bir kısmı silinecektir. Daha da geliştirmek istenilirse, kontrol paneli log’ları veya veritabanında tutulan log’lar da sildirilebilir. 

Kendi Kendini İmha Etme:

Backdoor işini bitirdikten sonra yakalanmamak için kendini imha etmelidir. Bu işlem genelde backdoor’ların çalışma mantığına terstir çünkü backdoor sistemde bir yerlerde sürekli varlığını korumalıdır ki işimiz düştüğünde kullanabilelim. Fakat yazının sonunda yukarıda yaptığımız işlerin hepsini otomatik gerçekleştiren bir virüs yazacağımız için oto-imha özelliğini de eklemek istiyorum.

Aşağıdaki kod işimizi görecektir.

Copy to Clipboard

Böylece, hedefsite.com/logo.jpg?i=bom şeklinde girdiğimiz zaman backdoor kendi kendisini imha edecektir.

Birleştirelim

Şimdi de yukarıda tek tek yazdığımız özelliklerin hepsini bir araya toplayalım:

Copy to Clipboard

şeklinde giriş yapmamız yeterli.

Böylelikle aslında temel ihtiyaçları gerçekleştirebilecek basit bir backdoor yazdık. Şimdi yazının başında bahsettiğimiz zamanlama (kendi kendini yönetme) kısmına gelelim. 😊

Bir tarih ayarlayacağız, o tarihi geçtikten sonra virüsümüz son kez çalışacak ve kendini hemen imha edecek.

Aşağıdaki kod işimizi görecektir:

Copy to Clipboard

Mor kısımdaki 3600 yazan yere bütün işlemler kaç saniye sonra gerçekleşsin istiyorsak onu yazacağız. 1 saat için 3600 saniye gibi. Ayrıca, PHP tag’inden sonra dosyanın en başına session_start(); fonksiyonu eklemeliyiz.

Son olarak kodlarımızı toparlayacak olursak,

  • .htaccess kodları:
Copy to Clipboard
  • jpg kodları:
Copy to Clipboard
  • txt (sitemizden çekeceğimiz dosyanın) kodları:
Copy to Clipboard

Böylelikle hedef siteye yaklaşık 300 bayt boyutunda fakat gizli ve etkili bir backdoor virüsü yerleştirmiş olduk. Dosyalarınız arasında tarama yaparken,

  1. Tüm dosya uzantılarını içerecek geniş kapsamlı bir tarama yapmayı,
  2. Hem manuel hem de antivirus/firewall yazılımları ile tarama yapmayı,
  3. Boyutu küçük dosyaları da tarama kapsamına almayı,

unutmayın.

Birlikte daha güvenli günlere…