Malware Analizi - 06
Malware Analizi
Malware Analizi serisinin ilk bölümüne ulaşmak için: Malware Analizi - 01
Analiz - Devam
IDA PRO
API’lere o kadar değindikten sonra şüphelendiğimiz bir API’nin analizini nasıl yapacağımıza değinmeden geçmek olmaz. Zararlımızı tekrar çalıştırmak istediğimizde sebepsizce duruyor. Bu durumdan kurtulmak için son aldığımız snapshota geri dönüyoruz. Zararlımızı tekrardan yükledikten sonra IDA ile statik analizimize devam edeceğiz.
Zararlımız olan dxvr.exe’yi PE dosyası olarak Dissassemble etmesini istiyoruz.
Grafiksel bir ekran bizi karşılıyor. Sağ tıklayıp Text View olarak göstermesini istiyoruz. Adresler ile uğraşacağımız ve sadece bir tane API’yi inceleyeceğimiz için bu gösterim bizim için daha anlaşılır olacaktır.
Imports sekmesinde programın çalışmadan evvel kendine dahil ettiği API’leri görüyoruz. Zararlı sayılabilecek olan API’lerimizden WinExec API’sini bulup çift tıklıyoruz. IDA bizi API’nin çağırıldığı yere götürüyor.
API’nin üzerine bir kere tıkladıktan sonra x tuşuna basarak API’nin referanslarını (yani program içinde çağrıldığı yerleri) gösteriyor. İlk referansa tıklayarak assembly kod bloğunun olduğu yere gidiyoruz.
Program çalıştıktan sonra WinExec API’sinin ilk çağrıldığı yerin VA (Virtual Address) sını alıyoruz. İki üst satırında lpCmdLine ve uCmdShow stringlerini görüyoruz. WinExec API’sine MSDN‘den baktığımız zaman bu stringlerin WinExec’in çalışması için parametre olarak kullanıldığını görüyoruz. Bu parametrelerin içeriğini görmek için dinamik analiz sırasında bu API çağrılmadan hemen öncesine breakpoint koymamız gerekiyor. API’nin çağrıldığı adresi biliyoruz o zaman Immunity Debugger’a geçiş yapalım ve parametrelerin almış olduğu değerleri inceleyelim.
Immunity Debugger
Aşağıdaki küçük konsola b 481ee8 yazarak WinExec API’sinin çağrıldığı noktaya bir breakpoint koyduk. Yukarıdaki sekmelerden breakpoint anlamına gelen b karakterine basarak breakpointimizin koyulduğunu teyit etmiş olduk. Tekrar c karakterine basarak assembly ekranına dönebiliriz.
Programımız şu an kullanıma hazır. F9‘a basarak programımızın ilk breakpointe kadar çalışmasını sağladık. İlk breakpoint Immunity tarafından otomatik olarak koyuluyor. Daha sonra bizim koyduğumuz breakpointe kadar çalışması için F9‘a tekrar basıyoruz.
Tam fonksiyonu çağıracakken durdu. Şimdi F7‘ye basarak çağrılan fonksiyonun içine gireceğiz. Çağrılan fonksiyonun içine girmeden önce stack ve registerların değerlerini kontrol edelim. Sağ alttaki stack ekranımızda görüldüğü üzere fonksiyonumuz çağrılmadan hemen önce iki tane paramtere girilmiş. Bunlardan biri daha önce MSDN’den öğrendiğimiz CmdLine parametresidir.
CmdLine = "reg add "HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel" /v "HomePage" /d "00000001" /f"
Parametrenin içeriğinden anladığımız kadarıyla kayıt defterine yeni bir kayıt ekliyor. Programımız kendisini Administrator yetkileri ile çalıştırdığı için hiç bir hata almadan bu kaydı ekleyebiliyor. Tekrardan F7‘ye basarak çağrılan fonksiyonun içine giriyoruz.
Fonksiyon çalıştırılmak üzere hazırlıkları tamamladıktan sonra görevi ntdll’e aktarıyor. ntdll’in içerisinde nasıl bir çağrı yapıldığını anlamaya çalışmamıza gerek yok o yüzden F8‘e basarak bir sonraki assembly koduna geçiyoruz.
Register kaydı eklemek için çağrılan fonksiyonun içerisinde bir tane process oluşturulduğunu görüyoruz. Stack bölümüne baktığımızda WinExec fonksiyonunun çağırdığı parametrelerin haricinde processin oluşturulması için gereken parametrelerin de eklenmiş durumda olduğunu görüyoruz.
WinExec fonksiyonu ile başka işimiz kalmadı. Ctrl+F9‘a basarak içinde bulunduğumuz fonksiyonun sonuna geliyoruz. Fonksiyonun içine girmeden önce stacke kaydettiğimiz, programın son kaldığı adres gözüküyor. F8‘e basarak WinExec komutunu ilk çağırdığımız yere dönüyoruz.
WinExec analizini yaparken registrya kayıt ekleme işinin bu fonksiyon ile yapıldığını öğrenmiş olduk. Önceki analizlerimizden bildiğimiz kadarıyla birden çok registry kaydı ekleniyor. Bu kayıtların hepsinin WinExec fonksiyonu ile eklendiğini varsayarak WinExec üzerine koyduğumuz breakpointe bir daha uğrayacağımızı farzediyoruz. Immunity’nin bir sonraki breakpointe kadar çalışması için F9‘a basarak tezimizi doğruluyoruz. Eklenen diğer kayıtlardan bazılarını burada toplu şekilde görüyoruz. Fonksiyonun içindeki işleyiş aynı olduğu için fonksiyona dallanmamıza gerek yok. Şüpheli gördüğümüz diğer API’leri de bu şekilde kontrol edebiliriz.
Online Sandboxlar
Buraya kadar bir malware analizi sırasında yapılması gerekenleri anlatmaya çalıştım. Bu alanda daha fazla pratik yapabilmek için örnekler barındıran bir çok site mevcuttur. Online Sandbox olarak anılan bu siteler başkaları tarafından yüklenen zararlı yazılımları analiz edebilecek izole bir ortam sunmakla beraber zararlı yazılımları indirmemize ve kendi ortamımızda analiz etmemize de olanak sağlar.
Any Run
Zararlımızı kendi ortamımızda analiz ettik. Kendi sanal makinemizi kurup ekstra programlarla destekledik. Bazen bütün logları bi anda alamadık. Sanal ortamımız her an yanımızda olmayabilir, ya da işimiz acele olabilir. Başka bir bilgisayardayızdır. Bu gibi durumlarda any.run yardımımıza koşuyor. Sade ve şık bir tasarımı olup kullanımı çok basittir.
Yeni bir üyelik açarak login oluyoruz. Ardından kendi sanal ortamımızda test ettiğimiz malware.exe yazılımını yükleyip sandbox üzerinden test edeceğiz.
Hazırlıklar tamamlandıktan sonra sanal makinemiz ayağa kalktı. Vermiş olduğumuz zip dosyasını açık bir şekilde bize sundu. malware.exe dosyamızı çalıştırıyoruz.
Dosyayı çalıştırır çalıştırmaz sağdaki listede eklenen registry kayıtları oluşturulan dosyalar vs. gözükmeye başladı.
malware.exe dosyası hakkında daha fazla detay istiyoruz. Üstüne çift tıklayarak More Info diyoruz.
Zararlımız tarafından yüklenen dosyaları görüyoruz.
Buradaki sht.ps dikkatimizi çekmemişti. İçini incelediğimizde string analizinde karşımıza çıkan URL adreslerinin bu dosyaya yazıldığını teyit etmiş olduk. Zararlımız 100 üzerinden 100 puan aldı :)
Kaynakça
- https://blacknbunny.github.io/2019/05/16/malware-analysis-part-1.html
- https://ring0.info/posts/pe-dosya-formatina-dalis
- http://blog.btrisk.com/2018/01/zararli-yazilim-analizi-egitimi-1.html
- https://blog.kowalczyk.info/articles/pefileformat.html
- https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
- https://www.siberportal.org/red-team/exploit-development/before-exploitation-part-2-x86-architecture-and-registers/