APT

AV Yazılımları BYPASS Teknikleri

AV Yazılımları Nasıl Bypass Edilir

AV Yazılımlarının Ortak Kullandıkları Tespit Yöntemleri

Checksum Bazlı Tespit:

AV firmalarının bilinen virüsleri daha kolay tanımak için kullandıkları veritabanları vardır tabii ortalama bir dosyanın hash imzasının veri büyüklüğü dosyanın kendisinden çok daha küçük olacaği için hem bunları veritabanında depolamak daha kolay olur hemde transfer etmek bu sayede AV yazılımları bir dosyanın hash checksumunu hesaplayıp bunu veritabanındakilerle kıyaslayarak o dosya daha önceden bilinen bir virüsmü yoksa değilmi hemen anlayabilir.

Davranış Bazlı Tespit:

Checksum bazlı tespit yöntemi özellikle yeni çıkmış virüslere karşı etkisiz olduğu için modern AV yazılımları ayrıca davraış bazlı tespit yöntemi sunar. Bunun amacı çalıştırılabilinen dosyaları bilgisayarda çalıştırmadan önce AV yazılımının sanal ortamında çalıştırıp davranışlarını inceleyerek zararlımı yoksa değilmi anlamaktır. İncelenen davranışlar genelde söz konusu program biryere dosya çıkartıyormu, registry key oluşturma yada modifiye etmeye çalışıyormu bunun gibi davranışlardır böylece AV yazılımı söz konusu program virüsmü yoksa değilmi bunu program bilgisayarda çalışıp bilgisayara zarar vermeden önce tespit etmiş olur.

Bypass Etme Yöntemleri

EXE Formunda Olmayan Virüsler Yapın:

EXE gibi doğrudan executable olan bir virüs yapmak yerine script formunda olan bir virüs yaparsanız mesela perl yada python kullanarak, bu scriptlerin çalışabilmesi için bilgisayarda interpreterlerinin yüklenmiş olması gerekir ve eğer bypass edilmeye çalışılan AV yazılımının sandbox sistemi iyi ayarlanmamışsa söz konusu scriptleri çalıştıramayıp davranışlarınıda analiz edemez ve ayrıca bazı AV yazılımlarının dokunulmaması için ayarladıkları beyaz listeleri vardır ve söz konusu EXE olmayan virüsler bir interpreter aracılığı ile çalışacaği için virüsün yapacaği davranışları aslında o interpreterler yapmış olur yani virüs scriptiniz yada java virtual machine üzerinde çalışacak olan java virüsünüz sadece interpretere yada JVM ye verilen bir komut listesi gibidir dolayısıyla eğer söz konusu interpreter yada JVM beyaz listedeyse zaten AV yazılımını doğrudan bypass etmiş olursunuz.

Yapacağınız Virüs VM içindemi Çalışıyor Anlayabilmeli:

Virüsünüzün kaynak kodu içerisinde native code kullanarak virüsün sanal makinedemi yoksa gerçek ortamdamı çalışıyor anlayabileceği fonksiyonlar yapabilirsiniz buda AV yazılımlarının sandbox tespit sistemini bypass etmenizi sağlayabilir mesela virüs eğer sanal makinede çalışıyorsa kendisinin sandboxta olduğunu düşünüp 2+2 işlemini yapmak gibi masum bir davranış sergiler ve eğer sanal makinede değilsene normal virüs fonksiyonlarını yapar.
Javada native code kullanabilmemiz için JNA (Java Native Access) library var.

İndirme Linki: https://github.com/java-native-access/jna

Bu testi yapmamızın 2 yolu var.
1) Kontrol etmemiz gereken şeyler;

–processlerdeki, dosya sistemindeki yada registrydeki VME artifactları
–memorydeki VME artifactları
–VME ye özgü virtual hardware
–VME ye özgü processor komutları ve özellikleri

2) Virtualization yazılımı tarafından gelen standart dışı x86 komutlarını kullanıp hata alıyormuyuz diye bakabiliriz buradaki mantık eğer program bu komutları kullandığında hata alıyorsa gerçek ortamdadır çünki söz konusu komutlar sadece sanal makinede çalışacaktır.

Ayrıca bir diğer test yöntemi “The Red Pill” olarak bilinir ve 2004 kasım ayında Joanna Rutkowska tarafından yapılmıştır. Bu yöntemin mantığı daha doğrusal yaklaşır ve SIDT “Store Interrupt Descriptor Table” denilen tek bir makine dili komutu çalıştırır ancak biz 2.yolu yani VM ziyaretçi araçları tarafından ayarlanan değerleri okuyacak olan komutları kullanacağız.

2.Yolun Örnek Kullanımı:

İlk önce aşağıdaki c++ kaynak koduna sahip bir dll dosyası yapmamız gerekiyor.

Bunu compile edebilmek için Visual Studio 2005 (yada daha yükseği) ve Microsoft Platform SDK 2003 indirmeniz gerekmektedir.
Yeni bir DLL projesi oluşturun sonra yukarıdaki kodu main CPP dosyasına kopyala yapıştır yapın ve build edin. Artık elimizdeki dll dosyası sanal ortam kontrolu için gereken fonksiyona sahip yani yapmamız gereken tek şey java virüsümüzde bu fonksiyonu çağırmamız.

VmCheck.java dosyasını oluşturun ve aşağıdaki kodu yapıştırın

Bu bizim VmCheck arayüzümüz olacak sonrasındada Test.java dosyasını oluşturun ve aşağıdaki kodu yapıştırın

Test.java yı çalıştırdığımızda bize VMWare, virtual pc yada gerçek ortamdamı çalışıyor söyleyecektir.

Prefer Making Malware Scripts That Can Change İts Source Code:

Script dosyalarının kaynak kodu aynı zamanda o dosyanın hash imzasını belirleyen tek şeydır bundan dolayı kaynak kodundaki bir değişkenin ismini değiştirmek yada fazladan 1 satır daha kod eklemek gibi şeyler söz konusu script dosyanızın hash imzasınıda değiştirecektir ve bu durumu checksum bazlı tarama yöntemini bypass etmek için kullanabiliriz.

Örnek Kullanımı:

Elimizde bir bat virüsü olduğunu düşünelim mesela özellikleri şunlar olsun; kendisini bilgisayarla birlikte yeniden başlatmak için registry key oluşturmak, lokal ağ ile kendisini diğer bilgisayarların startup klasörüne kopyalamak ve son olarak sistemdeki diğer dosyaları kendisi ile değiştirmek.
Aşağıdaki kaynak kodu böyle bir virüse ait.

Bu virüsün popüler olması durumunda AV yazılımlarının kullandıkları veritabanlarında hash imzası bulunacaği için AV yazılımları bunu kolaylıkla tespit edebilir yani virüse yeni bir özellik katıp her çalıştığında kendi hash imzasınıda değiştirmesini sağlamalıyız.

Burda söz konusu virüsümüz bir executable dosya olmayıp basit bir bat scripti olduğu için ve bat scriptlerinde komutlar compile edilmeyip satır satır uygulandığı için bunu başarmamız çok basit yani eğer script her çalıştığında kodların en sonuna rastgele harfler yazarsa mesela kaynak kodu değişmiş olacağından hash imzasıda değişmiş olur.

Yukarıda göreceğiniz üzere kodumuza 2.satırda “echo abc >> service.bat” ve son 2 satırdada “:hashchanger” ve boş satır olmak üzere eklemeler yaptık bunların anlamı virüs artık her çalıştığında virüs fonksiyonlarını çalıştırmadan önce kaynak kodunda “:hashchanger” satırından sonra gelen boş satıra “abc” yazacak (örnekteki bat dosyasının ismi service.bat).

Test:

İlk çalıştırmadan önce dosyanın crc-32 değeri aşağıdaki gibi 5BD129F0

1.çalıştırmadan sonra değiştirilen a.zip dosyasıyla beraber aşağıda gördüğünüz gibi virüsün crc-32 değeri 35724FE0 oluyor.

4.çalıştırmadan sonra virüsün kaynak kodunda en sonda “abcabcabcabc” yazıyor ve crc-32 değeride A3E64EAE oluyor

Windows defenderde virüsü aşağıda gördüğünüz üzere aynı popüler AV yazılımları gibi algılamıyor çünki bu basit yöntem sayesinde virüs için kesin bir hash imzası olduğu artık söylenemez.

Kaynaklar:

https://stackoverflow.com/questions/18122711/how-do-i-check-if-my-java-program-is-running-in-a-virtual-machine

https://stackoverflow.com/questions/35587412/how-this-batch-worm-works

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir