DKHOS - Rev300 Çözümü

Aloha,

geçtiğimiz günlerde yapılan Dünyayı Kurtaran Hackerın Oğlunun Sevgilisi (wut) adlı yarışmada yaptığım Rev300, Nam-ı diğer "Kambersiz Düğün Olmaz" sorusunun çözümünü paylaşmak istedim.

Les go

Elimizde bir exe dosyası var (ya ne olacağıdı demeyin yarışanlar bilir). Dosyayı çalıştırdığımızda bizi linux'tan aşina olduğumuz SegFault'un serseri abisi ACCESS VIOLATION hatası karşılıyor.





evet immunity kullanıyorum çok mu komik.

burada müslüm denen bir hıyar varmış diyip assembly koduna dalmak gibi bir gaflete düşmüyorum çünkü neden yapayım. onun yerine müslüm abiye bir "merhaba" demek için önce dosyayı temel statik analize tâbi tutup beni yönlendirecek ipucu arıyorum. Ne ucu demeden önce ben söyleyeyim
yani dosya packlenmiş mi, anti analiz var mı, beklenmedik bir itlik puştluk var mı onlara bakayım hele bi dur





Nothing found dediğine göre yazımızı burada sonlandırıy...





Vay anasını sayın seyirciler. Entropi neydi, entropi düzensizlikti. Veride tekrar olmamasıydı. Verideki tekrarları bozarak tanınmaz hale getiren algoritmalara ne deniyordu? Parolalama algoritmaları deniyordu :(

Şimdi efenim bu dosyanın entropisi yüksek ancak bilindik packing algoritmalarına dair bir imza bulunamadı. O zaman yazımızı burada sonlandırıy...



Yarışmayı düzenleyen abiler bizi düşünüp ipucunu gözümüzün önüne koymuş sağolsunlar. Peki bu amber ne ola ki?




Ege arkadaşımızın yazdığı bir packer yazılımının ta kendisi! Bu packer henüz yaygın olarak kullanılmadığından dolayı imzası araçların veritabanında yer almıyor doğal olarak, bu yüzden de tanımlayamıyor.

Ha şayet custom packing kullanıldıysa ne yapacaz beyim derseniz o da güzel hikaye ama erken anlatılırsa tadı kaçar.

RTFM tavsiyesine uyup da amber'in dökümantasyonunu okursanız RC4 parolalama algoritmasının kullanıldığını göreceksiniz. Elimizde amber ile packlenmiş bir exe var ama bir nedenden dolayı program çalışmıyor. Şimdi DKHOS'un ilerleyen saatlerde verdiği ipucuna bakalım.



O zaman ilk işimiz decryption routine'i bulmak. Nasıl bulacağız dediğinizi duyar gibiyim?

beyle ile ilgili görsel sonucu

Şaka şaka. Müslüm abiye merhaba diyelim dedik ya, hah işte onun amaçlarından biri de şüpheli import ve stringleri tespit etmek.



Zararlı analizi yapanlar laykladı bile. Şimdi bu fonksiyonlar ne, neden şüpheli?
Hemen hemen bütün packer'ların işleyişi aşağı yukarı şu şekildedir (kendilerine sorarsanız inkar edeceklerdir, aldırmayın);
  1.  Çalışacak kodun yerleşeceği bellek alanı ayır.
  2.  Ayırdığın bellek alanını Executable yap.
  3.  Kodu deşifrele ve bu alana kopyala
  4.  Kodu çalıştır
 Burada işaretlediğim fonksiyonlar da bellek alanı ayırma, bellek alanının izinlerini değiştirme ve veri kopyalama ile ilgili fonksiyonlar olduğu için ilgimizi çekmekte. Normalde bunlar tek başlarına şüpheli fonksiyonlar olmasa bile dosyanın packlenmiş olduğunu bildiğimiz için şüpheli hâl alıyor bu fonksiyonlar.

Deşifre edilen payload bellek alanına memcpy fonksiyonuyla kopyalanıyor olabilir. Bi takip edip bakalım öyle miymiş.



KOÇOVALİLAAAAR!! Hem VirtualAlloc hem memcpy aynı fonksiyonda. Şimdi bu fonksiyonun neyi nereye kopyaladığını, kimin kimi kopardığını anlamak için memcpy çağrısının yapıldığı yere debuggerımızda breakpoint koyup bekleyelim.

Program breakpoint'de durduğu zaman stackimizde neler varmış bakalım hadi


02680000 adresine 373223 MİLYAR MİLYON byte veri kopyalayacak terbiyesize bak sen?? Step over dedikten sonra o adrese bakalım o kadar kopyalayacak ne varmış.


Decryption routine'imize hoşgeldiniz :) Şimdi buraya da bir breakpoint koyup adım adım ilerleyelim. Sert koyun breakpointi ama, çözemeseniz de ne koydu bee derler.

Adım adım ilerlerken artık kodun decrypt edildiği yere geldiğimizde duruyoruz. Yani şuna benzer bir kod gördüğünüz zaman: https://raw.githubusercontent.com/EgeBalci/Amber/master/core/RC4.asm

Bak oku ne demiş en yukarda;


a



O zaman önce RC4 key'i alalım. Key boyutu 16 byte, nerden mi anladım? Herşey kodda yazıyor :)

RC4 Key'imiz: "FD56A3A8C8867111FA840A7A44850D3A"

Şimdi sıra şifrelenmiş veriyi almaya geldi. Bunu raw bytes olarak almak istiyorum ancak Immunity'de belli adres aralığını raw olarak dump etme işlemi nasıl oluyor bilmiyorum, bilen varsa yeşillendirebilir. Başladığı yeri ve boyutunu bildiğim için komple memory dump alıp dd ile ayıklayacağım.





Şimdi elimizde şifreli veri ve anahtar olduğuna göre decrypt etme zamanı. Şöyle bir site buldum: http://rc4.online-domain-tools.com/

Deşifre edilmiş olan odt.dat dosyasını indirdikten sonra binwalk ile bakalım gerçekten exe'miz burada mı.





Şimdi de exe dosyamızı içeriden kurtarıp içinde flag arayalım.



Bir sonraki yazıda görüşmek üzere.

Yorumlar

Bu blogdaki popüler yayınlar

Part 1: Tersinden Tersine Mühendisliğe Giriş

Bir Güvenlikçi, Virüs ile Karşılaşırsa