Virüs yazmak için hangi programlama dilleri kullanılır? [Siber Güvenlik]
Hamiline,
İşbu yazı ve dahi tüm site içeriği, ben öğrendikçe kendini evriltecektir. Mevzubahis “malware” ve türleri, şahsi lügatimde olduğu haliyle yer yer “silah” ya da “sanat eseri” olarak adlandırılacaktır.
Bununla birlikte, her ne kadar çok tıklansın diye bu yazının başlığını “Virüs yazmak için hangi programlama dilleri kullanılır?” olarak girsem de yazı içeriği; ulema, cühela ve ehli dubara’yı; ehli namus, ehli işret ve erbab-ı livata’yı tatmin edecek haldedir. İlan, hikayet ve beyan olunur!
İmza: Bir Dost
Soru: Malware kodlarken hangi programlama dillerini kullanmak mantıklıdır, hangilerini kullanmak değildir, neden?
Havadis
Bir milyar malware, kablolarda cirit atıyor. Tüm bunların kaynak kodunu inceleyip istatistik tutmadım lakin yazılanlara göz atacak olursam durum şu: Malware’lerin %53’ü .exe
. Peşine %6 ile .pdf
geliyor. Tüm bunlar ise tamamen hükümran platformla alakalı. Windows yaygın. Haliyle .exe
…
C veya C++ ile .exe
derlenebilir lakin C, C++’dan daha tercih edilesi. Malware yazacaksanız, C++’daki dinamik bellek yönetimi ayağınıza dolanıyor. Bunun yanında C++ kodunuz yazdığınız zamanda çalışıyor olsa da yarın bir gün STL‘de bir şeyleri değiştirseler çalışmıyor. C++ bence bir çöplük (eskilerin tabiriyle “piç” dil) ve sağlıklı insan zihnini bozuyor.
Her .exe
oluşturan dil işe yarar diye bir durum da yok. Final dosya boyununun mümkün olduğunca küçük olması, Windows özelinde bakacak olursak Windows API ile konuşabiliyor olması ve bağımlılıklarının (.Net) olmaması gerek. Final dosya boyutu için bir örnek vereyim: C/C++/ASM ile kodlanan zararlı 100kb’tan ufak bir PE (Portable Executable) oluyorken aynı işi yapan Golang PE’i minimum 800kb oluyor. Sekiz katı daha fazla…
Eskiler 1990’a kadar coğunlukla Assembly ve Common Lisp ile malware kodladıklarından bahsediyorlar. Dediklerine göre Morris Worm, C ile yazılmış ilk malware. Bunun yanında, malware yazarken tercih edilecek dilin içine Assembly gömebiliyor olmak (C, Turbo Pascal, Delphi vs.) büyük bir artı.
Söz Delphi’ye gelmişken bahsetmek istediklerim var: “Delphi de neymiş!” demeyin zira Delphi ile çok fazla malware yazılıyor. İşin içibe BobSoft Packer’ı ile paketleme ve normal kullanıcı davranışı analizi ve simülasyonu girince de malware tespiti ve analizi zorlaşıyor. Hatırlarsanız MEB, 2020 yılında Embarcadero’dan bir milyon Delphi lisansı almıştı. Öğrenenlerin %0.1’inin malware kodladığını düşünün. Let the sunshine in babe…
Peki ya Rust, DLang ve Nim dilleriyle yapılabileceklere ne demeli? “C öğrendim, bitti, bu bana yeter!” demek anlamsız. Güvenlik araçlarından saklanmak için bu dillerdeki yenilikleri denemek ve böylece bir adım önde olmak mümkün. Örneğin C ile kodlanmış eski ve yakalanan bir malware, Rust‘a ya da Nim‘e sarılarak Stege I’de başarıyla sahne alabiliyor. Koyun postu giymiş kurt… Peki neden? Bir dilde tersine mühendislik ne kadar zorsa, o dilde malware geliştirmek için o kadar iyi!
Madem malware konuşuyoruz; Self-modifying Code, Polymorphic Code ve Metamorphic Code meselelerini de hatırlatmak istiyorum. Her dil bunları desteklemiyor.
Ben malware’e malware demem
Self-modifying, Polymorphic ve dahi Metamorphic olmayınca
Karacaoğlan
Şimdi de genel malware türlerine bakalım ve ardından yeni başlıkla birlikte daha da derinlere dalalım:
- Virus
- Worm
- Trojan, RAT
- Rootkit
- Ransomware
- Logger
- Grayware
- Botnet
- Spyware
- Adware
Tüm bunları hedef ortamınıza göre çeşitli dillerle gerçekleyebilirsiniz lakin özelde dikkat çekmek istediğim şöyle bir durum var: Rootkit yazacaksanız kesinlikle Assembly lazım. Zira bunun device driver yazmaktan farkı yok. Ransomeware yazacaksanız da encryption hızı en yüksek algoritmayı yazacağınız dili seçmeniz lazım.
Ransomware hakkında konudan alakasız olarak öğrendiğim bir bilgiden bahsedeyim: Herhangi bir saldırının farkedilmesi altı ayı bulabiliyor. Altı aydır sistemde farkedilmeden gezen, alacağını almış, yükünü tutmuş saldırgan, sistemden çıkarken Ransomware basıp çıkıyor. Bir nevi “Çilli horozu yedik, suyuna da pilav pişirelim” der gibi..
Buraya kadar yazdığım genel geçer şeyler cevap olarak yetmez zira bence bu sorunun cevabı;
- amacınız ve zaman kısıtınızla,
- yalnız mı yoksa ekip olarak mı çalıştığınızla,
- zararlı yazılımı kullanmak istediğiniz süreyle,
- hedef sistem ve saldırınızın hangi safhasında olduğunuzla doğrudan alakalı.
Amaç ve Zaman
Yüzlerce programlama dili var. Diğer pek çok şey gibi programlama dilleri de ihtiyaca binaen doğarlar ve her ne kadar benzer işi yapıyor görünseler de yetkinlikleri farklı. Programlama dili seçimi ise bana daha çok din seçimi gibi geliyor. Ortalık, aşina olduğu programlama dilini yaymaya çalışan sahte peygamberlerle dolu. C’yi geliştiren Dennis Ritchie bile C’den başka diller de geliştirmişken huzur verin paşam! Aslanların işini hangi dil optimum görüyorsa onu seçsinler. Zira Bane maskesi ile lokum yiyemeyeceğiniz gibi, Tantra Chair’la da sığ ve zevksiz iş yapamazsınız.
Geliştirme için harcayacağınız zaman da önemli. Sir Tim Barnes-Lee gibi Objective-C ile web işleri yapar ve hatta bunu NFT olarak satarsınız lakin kodlamak için harcadığınız onca vakte yazık. Zira Objective-C öğrenene kadar 50 tane Django işi yapar, üçe beşe bakmaz ekmeğinizi kazanırsınız.
Sizi, amacınıza belirlenen zamanda ulaştıracak optimum dil tercih edilmeli. Bu da eldekiyle yetinmeyen, araştırmacı, yeniliğe açık, öğrenmeye ve evrilmeye meraklı bir bilinç olmakla mümkün.
Solo? Koro?
Malware’lerin türüne göre çeşitli özellikleri var. Benim gibi Yalnız Kurt modundaysanız ve aklınızdakileri yapabiliyor ya da yapamadığınızda oturup öğrenmeye koyuluyorsanız, optimum dilinizle ya da dillerinizle at koşturabilirsiniz.
Ekip olarak çalışıyorsanız ortak dil/diller belirlemeli, kod standardı ve kalitesi oluşturmalısınız. Koro olarak yapılan tüm işlerde, herhangi birinin bilerek ya da bilmeyerek bırakabileceği en ufak bir zafiyetin işi akamete uğratacağını ve hatta sizi yakalatacağını da hatırlatmakta fayda var.
Buna ek olarak dikkat edilmesi gereken bir konu daha var: Solo veya koro farketmeksizin Lengüistik, Unabomber‘ı yakalattığı gibi sizi de yakalatabilir.
Malware Amortismanı
Malware’e biçtiğiniz amortismanı da göz önünde bulundurmak gerek. Terzi işi yani çok özel üç beş hedefte kullanacağınız, dokunduğunu affetmeksizin kesen ve bu çok özel üç beş hedeften sonra emekliye ayıracağınız sanat eserleri başka; uzun süre boyunca kullanmayı hedeflediğiniz ve zaman içinde evrilteceğiniz şeyler kodlayacaksanız başka yollar izlemelisiniz. Uzun süreli kullanımlar için, yalnızca spesifik bir işi yapan modüllere ayrılmış, modüler bir zararlı ailesi kodlamak optimumdur. Olur da farkedilirseniz, yalnızca yakalanan modülü yeniden kodlamanız işinizi sürdürmenizi sağlar. Bunu tüm aracı değil yalnızca bozulan parçayı değiştirmek gibi düşünebilirsiniz. Bu, “terzi işi silahlar modüler şekilde kodlanmaz” demek değil! İşi ne ka minimal delege ederseniz o ka iyi!
Hedef Sistem ve Saldırı Safhası
Tarayıcıya üzerinden id/email, parola, kredi kartı bilgileri veya cookie gibi bilgileri hedefliyorsanız JavaScript veya süpersetleri optimum. Windows veya Linux’te bir şeyler yapacaksanız x86 Assembly/C/C++, Apple’da Objective-C, Android’de Java veya NDK ile C++ …
Bunun yanında Windows’da, .sh
, .py
, .pl
vs. zararlılarınız MinGW, Cygwin veya kodladığınız dilin yorumlayıcısı yoksa çalışmaz. .bat
veya .ps1
zararlılarınız da Unix-like OS‘larda çalışmaz.
APT gruplarına baktığımızda görünen şu: Her safha için kullanılan araç ve kodlandığı dil farklı. APT29 üzerinden örnekleyeyim:
Phishing epostası ekine MS Office belgesi koyuyor, içine .vbs
gömüyorlar. Reverse Shell’le C2’ya erişip C2 üzerinden hedef sistemde .bat
ve .ps1
çalıştırıyorlar. Eğer işlerini Windows’da default gelen WMI ya da Sysinternals araçlarıyla yapabiliyorlarsa gizliden gitmek için onlarla yapıyor (LotL: Fileless Attack), yapamıyorlarsa geliştirdikleri .exe
araçları sisteme dağıtıyorlar.
Görünen o ki hedef platformda o an işlerini görecek optimum aracı kodlayabilecekleri dil hangisiyse o dille kodluyorlar.
Phishing mailine ekli MS Office dokümanı içine .vbs
payload gömmek alışılagelen bir şey. Peki ya AutoDesk AutoCAD’in kullandığı Common Lisp diyalekti olan AutoLisp‘le zararlı yazıp sanayi hırsızlığı yapmak?
Dahası da var! Karşınızda elli yıl önce COBOL üzerine inşa edilmiş ve hala çalışan bir bankacılık ya da sağlık sistemi mainframe’i varsa? CERN’ün gülü FORTRAN‘a ne demeli? Veya hedef, üzerinde Sel4 mikrokernel koşturan tam güvenli bir DARPA dronu ya da %99’u Ada üzerine kurulu bir Boeing uçağıysa? Ya da süper bilgisayarlarda veya NASA’nın gönderdiği uydularda çoğunlukta olduğu gibi, hedef sistem aslında state of the art bir Lisp makinesiyse?
Hatırlatmakta fayda var: Oğuz budununun ALGOL boyunun yaman delikanlısı C ve torunları çoğu işlemci ailesinde çalışır ama her işlemci ailesinde çalışmaz. “C’yi anladık eyvallah lakin peki ya Assembly?” diye soracak olanları merakta bırakmamak adına yazayım: Üretimde olan kırktan fazla farklı işlemci mimarisi var ve her birinin Assembly’si birbirinden farklı.
İlig bolsa isiz ajunug buzar, Kızıklısı bolmasa yoldın azar.
Kağan kötü olursa halkı bozar, Kızıklılar olmazsa yolundan azar.
Yusuf Has Hacib, Kutadgu Bilig, 5282