APT

Lockdown Virüsü

Malware Programlama Ve Lockdown Virüsü

Virüs yazarlarını güdüleyen pek çok neden sıralayabiliriz: kimileri siber vandallık için, kimileri bu yolla para kazanmak için, kimileri ise bir kurumu zarara uğratmak, sevmediği birinden intikam almak için bu zararlı yazılımları geliştirmektedir. Virüs yazarlarının bir kısmı ise antivirüs programı yapmak ya da bunun gibi virüslere karşı önlemler alabilmek için virüslerin nasıl yapıldığını, nasıl çalıştıklarını anlamak üzere bu işe kollarını sıvarlar.
Sonuçta bu kişileri virüs yazmaya yönlendiren şey ne olursa olsun bir problem vardır ki o da internette bu konuda araştırma yaptığınızda karşınıza çıkan tek şeyin aşırı havalı antivirüs reklamları ya da kötü niyetli hackerlerin tasarladığı size fayda sağlayacakmış gibi görünen ama aslında sizi tuzağa düşüren oltalama tuzakları olmasıdır.

Sadede gelirsek bugün sizlere bir virüs yapmaya karar verdiğinizde işe nasıl başlayabilirsiniz, nasıl bir yol izleyebilirsiniz aşama aşama anlatmaya çalışacağız. Bu yazıda örnek olarak Lockdown adını vermiş olduğumuz virüs kodunun üzerinden gideceğiz.

İdeal Programlama Dilinin Seçimi

Her programlama dilinin avantajları ve dezavantajları vardır dolayısıyla virüs yapmak için tek bir programlama dilinin en iyisi olduğunu söyleyemeyiz. Burda yapılması gereken programlama dilini seçerken nasıl bir virüs yapmayı planlıyorsanız buna göre düşünmektir ancak özellikle tavsiye ettiğimiz diller object oriented olan yüksek level dillerdir (C#, Java v.b). Basit script dillerini kullanırsanız hem yapabilecekleriniz daha kısıtlı olur hem de basit script dillerinde virüs compile edilmeyeceği için kaynak kodu açıkta olacaktır buda virüsünüz için büyük bir sorun demektir.

Başlangıç Aşaması

Öncelikle yapmak istediğimiz virüsün sahip olacağı yeteneklere karar vermemiz gerekiyor mesela
buradaki örneğimizde virüsün çalıştığı zaman önce kendisini bilgisayara kopyalayıp sonrada bilgisayar her açıldığında sürekli bilgisayarı kilitleyen bir virüs olması gerekiyor.
Virüsün bilgisayarı kilitlemesi için neler yapabiliriz? Dosyaları şifreleyecek bir encryptor yada meşhur WannaCry virüsü gibi dosyaları gizli bir klasöre taşıyacak Bir şey olabilir bu sizin hayal gücünüze kalmış ama bu örnekte tercih ettiğimiz yöntem biraz daha basit düşünüp kullanıcının direkt bilgisayarı kullanmasına engel olan ve kurtarmak için aynı encryptorler gibi şifre soran bir şey yapmak.

2.özelliğimize gelirsek virüsün kendini bilgisayara yüklemesi için kendini Windows startup klasörüne kopyalamasını sağlayabiliriz böylece bilgisayar her açıldığında virüs de çalışacaktır yada başka bir yöntem virüs kendisini rastgele yada belirlenmiş bir klasöre atıp yeniden başlayabilmek için registry key oluşturabilir ama bizim buradaki örneğimizde tercih edeceğimiz 1.yöntem yani startup klasörü.

Bonus özellik olarak da virüsün meta bilgilerini gizlemek isteyebilirsiniz çünkü virüs dosyanız bulunduğunda üzerindeki meta bilgileri virüsün ne zaman bilgisayara bulaştığına dair detaylar içerir dolayısıyla virüsün ilk çalıştığı anda oluşturma, değiştirme ve son erişim tarihlerini değiştirmesi kurbanlar için iyi bir şaşırtmaca olacaktır.

Virüsümüzün kodlamasına gelirsek buradan sonra kod üstünden fonksiyon açıklamaları yapacağız dolayısıyla örnek virüsümüzün kaynak kodunu aşağıdan takip edebilirsiniz.

MetaStealth()
Fonksiyon, bonus özellik olarak bahsetmiş olduğumuz meta bilgisi gizlemek içindir burda özel olarak istediğiniz bir tarih için bir FileTime kullanabilirsiniz ancak örneğimizdeki fonksiyon her 3 meta bilgisinide 1970 tarihine ayarlamaktadır.
Diğer fonksiyonlara gelirsek;

makeadminaccount()
Fonksiyon, javadaki process ve runtime classlarını kullanarak bilgisayarda terminal komutları çalıştırır ve terminal aracılığı ile bilgisayarda admin yetkisine sahip yeni bir kullanıcı oluşturur ve bonus olarak da işlem kayıtlarını siler. Tabi bütün bu işleri yapabilmesi için virüsün admin yetkisiyle çalışmış olması gerekir.

copytostartup()
Fonksiyon, virüs önce kendi konumuna bakar ve eğer hali hazırda startup klasöründe değilse yüklenmesi gerekiyor demektir ve kendisini startup klasörüne kopyalar. Böylece bilgisayar yeniden başlatıldığında virüste çalışacaktır ancak dikkat ettiyseniz kopyalanan virüs exe değil jar dosyasıdır bunun sebebi eğer admin manifest barındıran exe olsaydı yani virüsün kullanıcının ilk tıkladığı hali diyelim ozaman bilgisayar her yeniden başladığında da en başta virüs bulaşırken olduğu gibi admin isteği yapacaktı ve artık durumun farkına varmış olan kullanıcımız buna hayır dediğinde virüs çalışmayacaktı. Bundan dolayı virüs admin olmayı gerektiren işleri en başta 1 defa yapıp kopyalandıktan sonra artık admin isteği yapmıyor, böylece bonus olarak antivirüs programlarının da tespit etmesi zorlaşmış olmaktadır.

getSHA256()
Fonksiyon, amacı verilen string değerinin sha-256 sum’unu hesaplamak böylece kurban ekrandaki textbar a şifreyi girdiği zaman program girilen şifrenin kendisini değil sha-256 sum’unu içindeki sum ile kıyaslar. Peki bu ne işe yarar ? derseniz eğer böyle yapmak yerine doğru şifreyi programın içinde string olarak tutsaydık virüsü decompile eden birisi şifreyi de öğrenebilirdi ama şimdi göreceği şey şifrenin sha-256 sum’u buda decompile edenin bir işine yaramaz.

Lock()
Fonksiyon, virüsün ana fonksiyonu diyebiliriz yani bilgisayarı kitleme sonrasında şifre sorma ve doğru şifre girildiğinde kilidi kaldırma bu fonksiyonda gerçekleşir.

DaemonThread:
Virüs çalıştıktan sonra kurban şifreyle uğraşmak yerine virüsle savaşmayı deneyecektir bu durumda virüse karşı yapılacak olası hamleleri düşünüp ona göre virüsünde kendini koruması için hazırlamanız gerekiyor peki olası hamleler neler olabilir ?
• kurban görev yöneticisinden virüsü durdurabilecek bir process başlatabilir yada virüsün hangi process olduğunu bilirse sonlandırabilir
• Görev yöneticisi yerine CMD aracılığı ile yine aynı hamleleri yapabilir bu durumda virüsün kendi processinin sonlandırılmaması için çeşitli yöntemler var (O da biz de kalsın )
Son olarak neden normal thread değil daemon thread derseniz, daemon threadlar gui programlarında javada daha iyidir çünkü normal thread’lere göre hem daha az sistem kaynaklarını kullanırken hem de EDT yani event dispatch thread’nde bug a sebep olmayacağı için virüsün bug sebebiyle doğru çalışmaması ihtimalini gidermiş oluruz.

Paketleme Aşaması

Virüsümüzün kodlamasını bitirip jar çıktısını alınca artık elde edeceğimiz jar dosyası ile virüs neredeyse kullanıma hazır sayılır ancak bir eksiğimiz var.
jar dosyası çalıştığında virüs admin yetkisine sahip olamayacağı için kendisini startup klasörüne atma ve admin hesabı oluşturma özellikleri çalışmayacaktır dolayısıyla kurban bilgisayar kitlendikten sonra bilgisayarı yeniden başlatarak virüsten kurtulabilir peki virüsün admin yetkisi sormasını nasıl sağlarız? Burda devreyere exe wraplama yöntemi giriyor yapmamız gereken şey jar dosyasını yani virüsü exe haline getirip admin isteği yaptırmamız. Sadece exe dosyaları admin isteği yapabilir bunun sebebi diğer dosya türlerinin executable olmamasıdır. Jar dosyamız aslında javaw.exe üzerinde yani java virtual machienede çalışan bir komut listesi gibidir bundan dolayı admin yetkisi jar a değil javaw.exe ye verilebilir.
Wraplama için internetten bir program arayabilirsiniz bizim tercihim Launch4j programıdır.

İndirme Linki: http://launch4j.sourceforge.net

programı indirip çalıştırdığınızda aşağıdaki ekranı göreceksiniz

Burada export ettiğimiz jar dosyasını ve onun exe wraplanmış çıktısı olacak adresi girmemiz gerekiyor ve sonrasında programın hazırlayacağı exe dosyasının admin isteği yapabilmesi için admin manifest dosyasına ihtiyacı var.  .

Sonrasında daha inandırıcı görünmesi için popüler bir uygulamanın ikonunu kullanmak isteyebilirsiniz bunun için internetten istediğiniz ikonun .ico dosyasını indirip bu programda kullanmanız mümkün ve son olarak exe yi export edebilmeniz için JRE tabına gidip min ve max jre versiyonlarını girmeniz gerekecek bunları 1.0.0 ve 8.0.0 yapabilirsiniz sonrasında dişli ikonuna yani build wrapper e basıp exe yi çıkartabiliriz.

Ayarlamaları yaptığınızda program aşağıdaki gibi görünecek.

Artık exe çıktısınıda aldıktan sonra virüsümüz kullanıma hazır.
Virüsü çalıştırdığınız zaman admin yetkisi isteyecek ve verdiğiniz zaman önce startup klasörü yoluyla bilgisayara bulaşacak ve bilgisayarınızı aşağıdaki resimde görüldiğü gibi kitleyecektir. Kurtulmanız için doğru şifreyi girip virüs kapandıktan sonra silmeniz gerekecek yada usb ile linux live boot yapıp silebilirsiniz tabi eğer virüs kendini startup klasörüne kopyalamak yerine rastgele bir yere kopyalıyor olsaydı bu seçenek olmayacaktı.

Uyarı: Makalede anlatılanlar ve beraberindeki Lockdown virüsü ve kaynak kodu tamamen eğitsel amaçlıdır dolayısıyla çevreye vereceğiniz zarardan sorumlu değiliz.