Lab: https://learn.cyberexam.io/challenges/mitre/defense-evasion/mitre-defense-evasion-t1027-001
Görev Tanımı
Bu teknikte saldırganın amacı zararlı yazılımın içeriğini maskelemek ve karmaşıklaştırmasıdır. Binary padding olarak bilinen bu teknikte, zararlı yazılıma önemsiz verileri (junk data) ekleyerek boyutu değiştirilir. Böylece zararlının içeriği değişmese de hash değeri değişebilir. Hash tabanlı tespitlerde kaçınılsa da diğer tespit yöntemlerinde işe yaramayabilir. Aynı zamanda tersine mühendislik işlemlerini de karmaşıklaştırmayı hedefler. Başka bir amacı da, dosya boyutunu büyüterek sandbox gibi analiz ortamlarının analiz yapmasını engellemektir.
Lab Çözümü
Null-padded-binary dosyasını analiz edin ve dosyanın orjiinal md5 hash değeri nedir?
Dosya türünü kontrol edelim.
hexdump
komutu dosyanın hexadecimal gösterimini sağlar. -C parametresi ile ascii karşılığını da görebiliriz.
radare2 disassembler aracı ile de zero byteları görebiliriz.
Burada dikkatimizi çeken şey dosyanın son kısmında çok fazla 0(zero veya null) byteların olması. Bu teknik, Null-padding veya zero-padding binary olarak isimlendiriliyor. Basit bir python scripti ile null byteları silebiliriz.
def remove_null_padding(input_file, output_file) :
with open(input_file, 'rb') as f:
data = f.read()
trimmed_data = data.rstrip(b'\x00')
with open(output_file, 'wb') as f:
f.write(trimmed_data)
remove_null_padding('binary_file', 'cleaned_file')
Farklı yaklaşımlarda mevcut tabii, örneğin truncate
komutu ile dosyayı orjinal boyutuna getirebiliriz veya dd
(disk dump) komutu ile kopyalama işlemi yapılabilir. Burada bulunması gereken 00 olmayan son byte indexi. Chatgpt kullanarak oluşturulan bir python scripti ile buldum
Sonrasında dd komutu ile orjinal dosyayı oluşturmaya çalıştım. dd if=null-padded-binary of=original-binary bs=1 count=last_index+1
. Komut içerisinde bs=1 olarak ifade edilen blok boyutunu 1 byte olarak tanımlıyoruz. Eğer tanımlamazsak, varsayılan değer 512byte olarak alacaktır.
md5sum original-binary
komutu ile md5 hash değerini görüntüleyebiliriz.
Random-padded-binary analiz edin ve orjinal dosyanın hash değeri nedir?
Random-padding olduğu zaman işler biraz daha karmaşıklaşmaya başlıyor. Burada dosyanın sonu, başı veya belirli bir kısmına eklemeler (padding) yapılabiliyor. İlk incelediğim zaman hiçbir şey anlamadım. Düzenli bir ifade mi bulmam gerekiyor veya örüntü şeklinde mi ekleme yapılmış bunu araştırmamız lazım.
Benzer şekilde hexdump ile açtığım zaman açık olarak göremedim padding kısımları. r2 aracını kullandım ancak onunla patchleme işlemini halledemedğim için arayüze sahip cutter aracını kullanacağım. Dosyayı write modda, cutter -w random-padded
komutu ile açıyorum. Ben bu işlemi yapmadan önce random-padded-binary
dosyasının kopyasını alıp onun üzerinde çalışmalar yapacağım.
Bu aracın bir özelliği seçilen kısım hakkında hash bilgilerini sağ taraftaki arayüzde gösteriyor. Paddingleri seçmeden dosyanın orjinal olduğu kısmını seçtiğimi varsayıyorum.
Varyasyonları?
Dosyanın orjinal halindeki hash bilgisini bulduktan sonra varyasyonlarını manuel olarak tespit etmeye çalışalım, sonundaki bir zero byte dahil ediyorum. Tespit edilen zararlının hash bilgisine ulaşmak için birkaç tane de ekleyebiliriz.
Zararlı yazılımın ismi?
Bulduğum bu hash bilgisini Virus Totalde arayacağım. Daha öncesinde analizi yapılmış ve 36/65 tespit oranına sahip bir zararlıya ait olduğunu tespit ediyoruz.