(FUD) Malware Development – 1

Geçtiğimiz sene boyunca kıymetli ağabeyim Berk Cem Göksel’in mentörlüğünde zararlı yazılımlar üzerinde çalışmaktaydım ve öğrendiklerimi anlatmak üzere bir yazı serisi oluşturmak istedim.

Bu seride aşağıdaki konuları ele alacağız:

  • Zararlı Yazılım nedir?
  • Antivirüsler nasıl çalışır?
  • Antivirüsler nasıl atlatılır?

Bu yazıda ise Malware, yani Zararlı Yazılım kavramını tanıyacağız ve bazı terimlerin neler olduklarını, birbirlerinden farkları üzerinde duracağız. Bunlara ek olarak, çeşitli antivirüs atlatma tekniklerinden bahsedeceğiz.

FUD Nedir ?

FUD, “Fully Undetectable”in kısaltılmış halidir. Yani “tamamen algılanamaz, tamamen yakalanamaz” anlamına gelmektedir. FUD bir malware hiçbir antivirüs programı tarafından algılanamayan, tespit edilemeyen zararlı yazılım anlamına gelmektedir.

Malware Nedir ?

“Malicious Software”ın kısaltılmış halidir. Zararlı yazılımlar da birer bilgisayar programıdır. Her program gibi zararlı yazılımlar da bir takım faaliyetleri yerine getirmek için çeşitli işlemler gerçekleştirir. Bu işlemler, kullanıcıya veyahut kullanıcının bilgisayarına zarar vermek amacıyla kimi zaman kurbanın dosyalarını şifrelemek (Ransomware – Fidye yazılımı), kimi zaman kullanıcın isteği ve izni olmadan kişisel ya da kritik verileri sızdırmak (Spyware) kimi zaman da kullanıcının cihazında reklam göstermek (Adware) olabilir.

Genellikle zararlı yazılımlardan bahsedilince insanların aklına gelen birkaç terimin ne olduğuna bakalım. 

Komut Satırı (Command Line) ve Kabuk (Shell)

Shell, işletim sisteminin kullanıcıdan gelen komutları anlayabilmesi ve komutlara uygun işlevleri gerçekleştirebilmesi için kullanıcıdan gelen komutları yorumlayan bir yazılımdır. Shell sayesinde işletim sistemi ile iletişim kurabilir ve bilgisayar üzerinde birçok işlem gerçekleştirebiliriz.

(FUD) Malware Development - 1 Riftsec

Terminal, kullanıcıların komutları girmesini sağlayan bir arayüzdür. Girilen komutları kabuğa (shell) iletir ve bu sayede istenilen işlemler gerçekleştirilir.

(FUD) Malware Development - 1 Riftsec

Çoğu zararlı yazılım “client” (zararlı yazılımın çalıştığı yer, kurbanın bilgisayarı) üzerinde çalıştığı zaman komuta kontrol sunucusu (kontrolü saldırganda olan internete açık bir sunucu veya saldırganın bilgisayarı) ile bir bağlantı kurulur. Komuta kontrol sunucusu (C&C veya C2 olarak da tabir edilir) ile kurban arasındaki bağlantı, klasik bir sunucu-istemci (server-client) altyapısıdır.

Bu bağlantı iki şekilde gerçekleşebilir. Siber güvenlik terminolojisiyle, “Reverse shell” ve “Bind shell” olmak üzere iki farklı yöntem kullanılabilir. Peki “Reverse shell” ve “Bind shell” nedir ve aralarında ne gibi farklılıklar vardır ?

Bind shell, saldırganın veya komuta kontrol sunucusunun bağlantıyı başlatarak, istemciye bağlanmasıyla sağlanan bağlantıdır.

Reverse shell, bağlantı gerçekleşirken kullanıcının sunucu tarafına bağlantı sağlamasıyla gerçekleşen bağlantıdır.

Firewall cihazları genellikle dışarıya çıkan (outbound) trafikten ziyade, içeri giren (inbound) trafiği engelleyecek şekilde ayarlanmıştır. Host-based Firewall yazılımları varsayılan olarak dışarı çıkan trafiği engellemez çünkü kullanıcının istediği sunucuya istediği port üzerinden bağlanmasını engellemek, kullanıcının kullanımını kısıtlayarak kullanıcı deneyimi üzerinde negatif bir etki bırakmaktadır. Bu sebepten ötürü bizler zararlı yazılım geliştirirken genellikle “reverse” bağlantı sağlarız. Böylece çeşitli güvenlik cihazları tarafından tespit edilme ve engellenme olasılığımızı biraz olsun azaltabiliriz.

Antivirüslerin zararlı yazılımları tespit etmek için kullandığı bazı teknikler vardır. Bu tekniklerden bazıları:

  • İmza kontrolü
  • String check
  • Code re-use
  • Skorlama sistemi

olarak bilinir. Peki bu teknikler nasıl işlemektedir ?

İmza Kontrolü 

Antivirüsler bir dosyayı tararken dosyayı daha önce veri tabanlarına kaydetmiş oldukları imzalar  ile karşılaştırır. Taranan dosyanın imzası daha önce zararlı olarak veri tabanına kaydedilmiş ise, dosyanın cihaz üzerinde barındırılması engellenir ve dosya karantinaya alınır. Bu kontrol genellikle tamamen disk üzerinde gerçekleşir.

String Check

Antivirüsler, yazılımlar içerisinde bulunan Stringlere bakarak zararlı olabilecek bir String bulundurup bulundurmadığını kontrol ederler. Yazılım içerisindeki Stringlerde “cmd.exe” gibi “/bin/bash” gibi Stringlerin veya “example.ddns.net” gibi adresin bulunması gibi problem teşkil edebilecek Stringleri araştırır.

Davranışsal Analiz

Code Re-use

Code re-use, daha önce tespit edilen zararlılarda kullanılan kod bloklarının başka yazılımlarda kullanılıp kullanılmadığının kontrolüdür.  

Skorlama Sistemi

Modern çözümler (kum havuzu(sandbox) uygulamaları, dinamik analiz araçları ve EDR çözümleri) yazılımları zararlı veya zararlı değil (malicious – benign) olarak sınıflandırmaktansa, onlara çeşitli zararlı skorları vererek, dosyanın zararlı olup olmadığı çıkarımını kullanıcıya bırakabilir veya belirli bir skor seviyesinin üzerindeki yazılımları “zararlı” olarak etiketleyebilir.

 

Antivirüs Atlatmak

Antivirüslerin gerçekleştirdiği bazı dinamik analiz tekniklerini, String kontrollerini, değişken ismi kontrollerini ve imza kontrollerini atlatmak için zararlı yazılımımıza 2 önemli işlem uygulayabiliriz. “Junk code” eklemek ve “Code obfuscation” gerçekleştirmek.

Junk code, programın asıl işlevini gerçekleştirmesini engel olmadan çalışan ekstra koddur. Malicious işlemleri arka arkaya gerçekleştirmek antivirüsler tarafından yakalanma olasılığımız artırmakta olduğu için malicious işlemler arasına “junk code” eklemek hem run-time’da (arka arkaya malicious işlemler gerçekleşmesini önlüyoruz) hem scan-time’da (kod hacmini arttığı ve arka arkaya gelen malicious kod miktarı azaldığı için yakalanmış kodlardan uzaklaşıyoruz) antivirüs tarafından yakalanma olasılığımızı düşürmektedir. Bu işlemi gerçekleştirirken dikkat etmemiz gereken çok önemli bir unsur var. Junk code eklemesi yapabilecek programlardan uzak durmak! Antivirüsler bu programların junk code üretme ve ekleme algoritmalarını az-çok bildikleri için saptayabilirler ve kodumuzu yakalayabilirler. 

Kullanacağımız junk code’ları da zararlı yazılımın kodlarını da olabildiğince özgün bir şekilde bizlerin yazması gerekmektedir. Bu yüzden işin mantığı kavrayarak kendi kodumuzu kendimiz yazmalıyız, internetten bulduğumuz kodları kopyala-yapıştır yaparak kullanmamalıyız. Özgün kod yazmak daha önce yakalanmış olan zararlı yazılımların çalışırken gerçekleştirdiği patternden uzaklaşmamızı sağlayacak ve böylece run-time’da yakalanma olasılığımızı düşürecektir. Bunun dışında daha önce yakalanmış zararlı yazılımlardan üretilen imzalardan da çok ciddi oranda uzaklaşmamızı sağlayacaktır, bu sayede özgün kod kullanarak hem run-time’da hem scan-time’da çok ciddi oranda yakalanma olasılığımız düşecektir.

blog_ae_image8

Code obfuscation, tam olarak bu anlama gelmese de kodu karmaşıklaştırmak anlamına geliyor diyebiliriz. Kod içerisinde kullandığımız variable (değişken) isimlerini, önemli String’leri (örneğin “cmd.exe”,  “ahmeterenboyaci.ddns.net”, PORT , HOST gibi) oldukları gibi kod içerisine yerleştirmemeliyiz. Mesela şifreleyip koyabilir ve kod çalışırken deşifre edebiliriz. Ya da bir String belirleyebilir içerisine harfler koyabilir, böylece “cmd.exe” yerine (“c” + harfler[5] (5’in m’nin indexi olarak düşünün) + \u0044 + “.e” + \u2717 + “e”) olarak yazabiliriz. Bu işlem sonrasında hem scan-time’da yakalanma olasılığımız düşecektir hem de kodumuzu analiz etmek isteyen uzmanların işi zorlaşacaktır. Ancak code obfuscation gerçekleştirirken dikkat etmemiz gereken bir unsur var. Code obfuscation işlemini uyguladıktan sonra programımız aynen eskisi gibi çalışmalıdır. Yani obfuscation işlemi işleyişi bozmayacak şekilde uygulanmalıdır.

Code Obfuscation Örneği:

(FUD) Malware Development - 1 Riftsec

(Code obfuscation uygulayacağımız kod)

(FUD) Malware Development - 1 Riftsec

(İşleme girecek olan kodumuzun çıktısı)

Code obfuscation örneği görebilmek için bir tool (araç) kullanabilirsiniz. Bu aracı nasıl kullanacağınızı göstermek istiyorum.

( tool: https://github.com/QQuick/Opy)

  1. Öncellikle Github adresinden aracı indirin.
  2. Opy-master klasörünün altında bulunan opy klasörü içerisindeki opy.py ve opy_config.txt dosyalarını programınızın olduğu klasöre kopyalayın.
(FUD) Malware Development - 1 Riftsec

 3. opy scriptini çalıştırın.

(FUD) Malware Development - 1 Riftsec
(FUD) Malware Development - 1 Riftsec
(FUD) Malware Development - 1 Riftsec

opy.py çalıştıktan sonra [opy.py’ın root klasör adı_opy] adında bir klasör oluşacaktır ve bu klasör içerisinde yeni bir Python dosyası oluşacaktır.

(FUD) Malware Development - 1 Riftsec

Oluşan yeni Python dosyası obfuscated kod oldu. Ben yeniden isimlendirip Blog klasörü içerisine kopyaladım. Şimdi kod nasıl gözüküyor bakalım.

(FUD) Malware Development - 1 Riftsec

Gördüğünüz üzere kod eskisine göre oldukça karmaşık bir halde. Göz ile algılaması zorlaştığı gibi antivirüslerin kritik Stringleri saptamasını engellendi. Ayrıca değişken isimleri de ele verici durumdan çıkmış durumda. (Örneğin zararlı yazılım içerisinde cmd gibi değişken isimlerinin olması problem çıkarabilir.)

Obfuscated kod aynen eskisi gibi çalışmalı. Bakalım uygulanan işlemler programda herhangi bir hasara sebep oldu mu ?

(FUD) Malware Development - 1 Riftsec

Gördüğünüz üzere programımız olması gibi çalışmakta. Bu kodu bir örnek olarak görün ve obfuscation işlemlerini bizzat kendiniz yapın. Aksi takdirde yaygın obfuscator toollar antivirüsler tarafından fark edilebileceği için zararlı yazılımımızın yakalanmasına sebebiyet verebilir.