Hakops Keylogger | Statik Zararlı Yazılım Analizi

PwnLab.Me

Admin
Katılım
21 Ocak 2024
Mesajlar
202
Tepkime puanı
9
Puanları
18

Eren Yılmaz tarafından 11 Mart 2021 tarihinde yazılmıştır.​

Merhaba, bu makalemizde sizlerle beraber piyasada yaygın bir şekilde kullanılan Hakops Keylogger isimli zararlı yazılımın statik analizini yapacağız.

Statik Zararlı Yazılım Analiz nedir?​

Statik Zararlı Yazılım Analizi, yazılımın belirli işlemlerden geçirilip yorumlandıktan sonra kodlarını okuduğumuz analiz çeşididir. Dinamik Zararlı Yazılım Analizine Göre yavaş bir şekilde gerçekleşir. Dinamik analizden farkı yazılım hiç çalıştırılmaz. Kodların üzerinden belirli işlemlerden geçirilip yazılım da zararlı amaç aranır.

Yazılım hangi programlama dili ile yazıldı?​

Yazılımın hangi dil ile yazıldığını anlamak için bir çok yazılım kullanabilirsiniz, ben die (Detect It Easy) kullanacağım, dosyayı yazılıma sürüklediğimde karşıma şöyle bir ekran çıkıyor.

1705955823762.png


Burada bize yazılımın başlangıç noktası, kütüphanesi ve derleyicisi gibi bilgiler veriliyor. Yazılım net framework kütüphanesini kullanmış, vb.net ile yazılmış. Ve bunlar dışında yazılımda herhangi bir koruma olsa idi die bize onu da gösterirdi.

Yazılım hangi dll'leri import etti?​

Yazılımın içeri aktardığı dll'leri yorumlamak tersine mühendislikte en az yazılımın kodlarını okumak kadar önemli bir işlemdir. Bu işlem için "cff explorer" isimli yazılımı kullanabiliriz. Programı içeri yükleyip "import directory" isimli kısma bakalım.

1705955830075.png


yazılıma mscore.dll isimli dll'i import ettiğini görüyoruz. Biraz araştırma yaptığım ve dll'in tarayıcı her çalıştığında kendini başlatabilme potansiyeline sahip olduğunu gördüm. (bknz kaynak: https://tr.nex-software.com/mscoreedll-dosyasi-nedir )

Şimdi zaman kaybetmeden yazılımın kodlarını yorumlama aşamasına geçelim.

Yazılımın kodlarını nasıl yorumlarız?​

Net framework kütüphanesini kullanan yazılımların kaynak kodlarını yorumlamak için en kazançlı yazılım Dnspy'dır. Dnspy bu işlemler nasıl yapıyor? diye soracak olursanız şöyle özetleyeyim.

Net framework kütüphanesini kullanan yazılımlar nasıl çalışır?​

.Net kütüphanesini kullanan bir yazılım derlendiğinde masaüstünde IL kodlarının .exe uzantısına dönüşmüş haliyle durur sonra çalıştırıldığında bir daha derlenir. Derleme işleminden itibaren yazılımın kodlarını makinenin anlayabileceği java'nın byte kodlarına benzeyen bir yapıya yani IL kodlarına dönüştürülür. Sonra IL kodları jit'e gider, jit'te yazılımın IL kodlarını runtime makine koduna çevirip yazılımı çalıştırır. Net framework ile yazılmış bir yazılım bu şekilde çalışır.

Peki bu işin tersine olan kısmını nasıl yapacağız?​

Kodların yorumlanacağı yazılımı ilk olarak Disassemble işleminden geçireceğiz, bu işlemde IL kodları makine diline dönüştürülür. Sonra kodu makine dilinden hedef dile yorumlamak için decomple işlemi yaparız. Decomple işleminde makine dili hedef programlama diline göre yorumlanır. Yukarda anlattığım gibi bu işin tersine kısmını dnspy ile otomatize bir şekilde halledebiliriz.

Şimdi aksiyon zamanı! Yazılımın kodlarını inceleyip yorumlayalım.​

Yazılımımızı dnspy ile açtığımızda karşımıza şu şekilde bir ekran geliyor.

1705955840695.png


Şimdi ise ilk önce başlangıç noktasının (entry point) üstüne basarak programın main fonksiyonuna gidiyoruz. Fakat işimize yarar bir şey bulamıyoruz.

1705955845110.png


Bu arada yazılımın kodlarını okur iken sol tarafta karşımıza windowsolaygünlüğü.exe diye bir isim çıkıyor. Bizim elimizdeki yazılımın ismi anonimlerddos.exe bu 2si çakışıyor. Belli ki yazılım kendini kullanıcıya masum göstermeye çalışıyor şeklinde bir varsayımda bulunuyoruz. Devam edelim.

1705955850098.png


Şimdi yazılımın kodlarını arayalım, ben buldum. kodlar "Windows_Olay_gunlügü>Form1 (@02000008) " konumunda, burda yazılımın class'larını görüyoruz.
1705955855140.png



Classların hepsini okuyup yorumlamamız gerekli ama bu çok uzun bir süreç olacağından dolayı ben önceden kodları okudum. Okuduğum kodları gelin beraber yorumlayalım.

Appdata klasörüne svchost.exe'yi kopyalama​

İlk olarak Form1>Form1_Load sınıfının 81. satırında bulunan koda bir bakalım.

FileSystem.FileCopy(Application.ExecutablePath, Interaction.Environ("appdata") + "\\svcshost.exe");
Bu kodda açık olarak bilgisayarımızın appdata klasörüne svchost isimli bir yazılım kopyalandığını görüyoruz.

1705955859444.png


Svchost.exe'yi gizleme​

Şimdi Form1>Form1_Load sınıfının 91. satırında bulunan koda bi göz atalım.

Kod:
FileSystem.SetAttr(Interaction.Environ("appdata") + "\\svcshost.exe", FileAttribute.Hidden);
Bu kodda anladığım kadarı ile svchost.exe'yi gizli bir dosya haline getiriyor.

1705955867470.png


Svchost.exe'yi başlangıca ekleme​

Sırada ki kodumuz Form1>Form1_Load sınıfının 108 ve 102. satırlarında.
Kod:
MyProject.Computer.Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\Windows Olay Günlügü").SetValue("Windows Olay Günlügü", Interaction.Environ("appdata") + "\\svcshost.exe");
//Regedit'te subkey oluşturma
MyProject.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\", true).SetValue("Windows Olay Günlügü", Interaction.Environ("appdata") + "\\svcshost.exe");
//Regedit subkey açma
Bu kodda basit olarak anlatmak gerekir ise svchost.exe isimli yazılımı windowsun başlangıcına ekliyor. Yani bilgisayar her başlatıldığında bu yazılım da başlatılıyor.

1705955873396.png


Görev yöneticisini devre dışı bırakma​

Bir sonraki kodumuz Form1>Form1_Load sınıfının 64 ve 67 satırlarında bulunuyor.

Kod:
RegistryKey registryKey = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");
//Subkey oluşturarak işlem yapılacak bölümü registrykey değişkeninin içine atıyor.
registryKey.SetValue("DisableTaskMgr", 1);
//DisableTaskMgr girdisine 1 değerini atayarak görev yöneticisini devre dışı bırakıyor.
// Kaynak: https://getadmx.com/HKCU/Software/Microsoft/Windows/CurrentVersion/Policies/System
Bu kod ile windowsta bulunan görev yöneticisini devre dışı bırakıyor. Yani bir nevi yazılımı çalışırken kapatmamızı veya başlangıçtan silmemizi acemice engelliyor.

1705955880583.png


Türkçe karakterleri İngilizce karakterlere çevirme​

Şimdi ki kodumuz Form1>duzenle sınıfında bulunuyor.

Kod:
private object Duzenle(string Kelime)
{
Kelime = Strings.Replace(Kelime, "ç", "c", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "Ç", "C", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "İ", "I", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "ı", "i", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "ğ", "g", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "Ğ", "G", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "ş", "s", 1, -1, CompareMethod.Binary);
Kelime = Strings.Replace(Kelime, "Ş", "S", 1, -1, CompareMethod.Binary);
return Kelime;
}
Bu kodun amacı verilen Türkçe karakterleri İngilizce karakterlere dönüştürmek. Bu da keyloggerlerin sıklıkla yaptığı bir davranıştır.

1705955895703.png


Yazılımın iletişim adresini bulma​

Son olarak yazılımın iletişim adresini bulmalıyız, bu işin en komplike kısmı. Şahsen ben bu konuda yazılımı ilk analiz ettiğimde baya yardım almıştım. Yazılımın kodlarının belirli yerlerinde sunucu isimli değişkenler bulunuyor. Örnek olarak Form1>Getİp sınıfının 19. satırında.

1705955900457.png


sunucu değişkenine sağ tıklayıp analiz diyoruz.

1705955904560.png


atayan kısmının altındaki ifadeye çift tıkladığımda değişkenin tanımlandığı yere geliyoruz.
1705955909040.png



sVeri[1] listesinin 1. girdisinde yazan değeri kendine atıyor. Acaba orda ne var?

673. satırda file open fonksiyonunu kullanarak kendine 1 değerini vermiş. 678. satırda az önce aldığı 1 değerinin boyutunu almış.681. satırda fileget fonksiyonu ile kendi byte kodlarını çekmiş. 690. satırda az önce anlattığım zımbırtıları kullanarak iletişim adresini yazılımın byte kodlarından çekmiş. Yani işin Türkçesi yazılımı not defteri gibi bir yazılım ile açıp <-hakops-> sorgusunu arattığınızda bu kelimenin yanında iletişim adresini bulacaksınız.

Bu kısmı biraz karışık anlatmış olabilirim, açık söylemek gerekir ise ben de iletişim adresi bulma kısmını yardım alarak yaptım ve konuya çok fazla hakim değilim.
1705955913994.png



"Hakops Keylogger Statik Zararlı Yazılım Analizi" konusunu işlediğim makalem bu kadardı, reverse engineering çok geniş bir kavram haliyle bilmediğim veya yanlış&eksik anlattığım bölümler olabilir. Böyle durumlarda yorumlar kısmını kullanırsanız hem bana hem de bu makaleyi okuyan diğer insanlara yardım edebilirsiniz. :)

Zararlı yazılımın indirme linki: https://www.dosya.tc/server33/6f08et/anonimler_ddos.exe.html

DipNot: Zararlı yazılım şahsıma ait değildir ve yazılımı açıp bilgisayarınıza vereceğiniz herhangi bir hasarda pwnlab.me ve şahsım sorumlu tutulamaz.
 
Geri
Üst