Malware Örnekleri Ve Zararlı Yazılım Analizi

MekoR

Katılımcı Üye
6 Şub 2010
660
6
5lbPcA.png


giphy.gif


5lbPcA.png


Merhaba değerli THT Ailesi
Bugün sizlere Zararlı Yazılım Tespiti’nde kullanılan {YARA} adlı aracı ayrıca {YARA} dışında zararlı yazılım inceleme programlarında kullanılan arama-eşleştirme mantığının temelini tanıtıp örnekler ve uygulamalar ile anlatacağım.

5lbPcA.png


Konu İçeriği;

:Smiley1007: Malware Nedir?
:Smiley1007: Kısaca Malware Çeşitleri Nelerdir?
:Smiley1007: {YARA} Nedir?
:Smiley1007: Nasıl Çalışır? {YARA}
:Smiley1007: Kullanıcıya Faydası Nedir? {YARA}
:Smiley1007: Neden {YARA} Kullanalım?
:Smiley1007: Nasıl Kurulur?
:Smiley1007: Temel {YARA} Kuralının Mantığı Nedir?
:Smiley1007: {YARA} Örnekleri Ve Kullanımı


5lbPcA.png


Malware Nedir?

Software ve malicious kelimelerinin kısaltılıp birleştirilmiş halidir. Bilgisayarımıza zarar vermek isteyen, sistem ayarlarına erişim sağlamaya çalışan ve kritik bilgileri ele geçirmeye çalışan kötücül yazılımlara verilen isimdir.



Kısaca Malware Çeşitleri Nelerdir?

Adware: En yaygın olan malware türüdür.Bu malware türü sisteme teknik açıdan zarar vermemekle birlikte olur olmadık reklamları karşımıza çıkarabilir.



Spyware: Çalışma mantığı olarak teknik açıdan zarar vermeyebilir fakat gün içindeki surf aktivitelerini izleyerek bir rapor oluşturur ve bunu Adware yazılımlarına iletir.



Truva Atı (Trojan): Zararlı program barındıran yazılımlardır.İşlevselliği olan programların içine enjekte edilip arkaplanda gizlice çalışan tehlikeli bir malware çeşididir.



RootKit: Yönetici haklarını ele geçirir.



5lbPcA.png


{YARA} Nedir?

Malware araştırmacılarının, malware yazılım ve örneklerini tespit etmesi, tanımlaması ve sınıflandırmasını kolaylaştırmak için VirusTotal tarafından geliştirilmiş olan açık kaynak kodlu bir araçtır.Fakat tüm özellikleri bunlarla sınırlı değildir.
Not: YARA, antivirüs yazılımı değildir.

5lbPcA.png


Nasıl Çalışır?

İki kural mantığında çalışmaktadır.Bunlardan basit olanına değinmek gerekirse, bir dosya içerisinde belirli bir text string aramak diyebiliriz.İkincil tanımıyla, çalışmakta olan bir işlemin (process) sanal bellek adresindeki verilerini aramak diyebiliriz.
Metinsel (textual) yada ikili örüntülere (binary pattern) bağlı olarak malware çeşitlerinin kurallarını oluşturabiliriz.

5lbPcA.png


Kullanıcılara Faydası Nedir?

Zararlı Yazılım Analizi’ni kolaylaştırıp ve tespit etmemizi sağlıyor.Ayrıca tespit ettiğimiz malware yazılımlarını kategorilendirip bizlere sunuyor.

Kimler Kullanıyor?

ESET, Kaspersky Lab, McAfee, TrendMicro gibi büyük şirketler başta olmak üzere 60’dan fazla güvenlik şirketi bu aracı kullanmaktadır.

5lbPcA.png


Neden {YARA} Kullanalım?

İncelediğimiz zararlı yazılıma ait elimizde hash var,neden YARA Kuralı kullanıyoruz diye düşünebilirsiniz. Açıklamak gerekirse, İmza Tabanlı Koruma kullanımını bypass edecek yeni metodlar geliştirildiği için, sadece imza tabanlı koruma’yı (Signature-Based Protection) kullanmak tek başına bir işe yaramayabiliyor.

5lbPcA.png


Nasıl Kurulur?

Windows İçin: https://github.com/virustotal/yara/releases/tag/v4.0.2
Linux İçin: https://github.com/VirusTotal/yara.git
Mac OS X İçin: "brew install yara” komutu ile kurulum sağlanabilir.
Github – YARA: https://github.com/VirusTotal/yara

5lbPcA.png


Temel YARA Kuralının Mantığı Nedir?

Temel bir YARA Kuralı, rule, m-e-t-a, strings ve condition alanlarından oluşmaktadır.Örnekler üzerinden giderek bu alanları daha iyi anlatmaya çalışacağım.

Ana Örnek;



{YARA}:Strings: Nedir?

Bir dosya ile eşleşmemiz gereken karakter dizileri (strings), imza ve desenleri içerir. YARA’da 3 çeşit karakter dizisi (Strings) vardır.Bunlar Text Strings, Regex ve Hexadecimal Strings olarak ayrılmaktadır.
Text Strings: Case Nedir?
Text Strings: Düz yazı şeklinde olan karakter dizisidir. ASCII metni biçimindedir.Aratmak istediğimiz anahtar kelime büyük-küçük harfe duyarlı olacaktır.Bunu değiştirmek içinde “nocase” parametresini eklememiz lazım.Örnek vermek gerekirse;

Büyük-Küçük Harfle Duyarlı Karakter Dizeleri;

Kod:
>[COLOR="Lime"]Örnek = $ text_case_example = “deneme”   [/COLOR] 
‘Aratılacak “deneme” kelimesi yazıldığı şekilde aratılır.Büyük-küçük harfe duyarlı olur.

Büyük-Küçük Harfe Duyarsız Karakter Dizeleri;

Kod:
[COLOR="lime"]>Örnek= $ text_nocasa_example = “deneme” nocase[/COLOR]    
‘Genelde “nocase” parametresi eklenir.

5lbPcA.png


Text Strings: Wide Nedir?

Kuralın başında iki bayd ile kodlanmış dizeleri aramak için kullanılabilir.Çoğunlukla birçok çalıştırılabilir binary dosyada kullanılmaktadır.



Bu şekilde arattığımızda wide parametresi ile, mekor kelimesini iki bayt ile kodlanmış ve nocase parametresi ile de büyük-küçük harfe duyarsız olarak arama sağlayabiliriz.

5lbPcA.png


Text Strings: Fullword Nedir?

Karakter dizinimizi fullword olarak tanımladığımız zaman doğrudan yazdığımız metni, “turkhackteam” ibaresini aratıp yakalar.Yani direkt olarak yazdığımız şekilde aramak denilebilir.
Örnek vermek gerekirse;



Yakalar:

www.turkhackteam.com
www.turkhackteam.blogspot.com

Yakalayamaz:

www.turkhackteamm.com
TurkHackTeam.org/net

5lbPcA.png


Text Strings: Koşullu Stringler Nelerdir?

String’lere koşul koyabilir ve bu şekilde aratabiliriz.Koşulumuz hexadecimal biçimde olacaktır.Hexadecimal String’in ne olduğunu aşağıdaki örnekten sonra anlatacağım.



Böyle bir koşul tanımlayıp aratırsak;

> AA 30 DB BC AA
> AA 30 C2 AA
Bu değerleri yakalar.
AA ve 30 değeri başlangıç, sondaki AA değeri bitiş, verdiğimiz DB BC ve C2 hex değeri ise başlangıç ve bitiş arasındaki aratmada gelirse bunu heximal değer olarak yakalayacaktır.

5lbPcA.png


Hexadecimal Strings Nedir?

Çıktı dosyamızda hex karakterlerle eşleşen değerlere Hexadecimal Strings adı verilir.Hex Strings kullanmanın bize bazı faydaları vardır.
>Arattığımız baytlar arasından bazılarının bilinmediğini ve herhangi bir sonuçla eşleşmeyeceğini belirten Wildcard karakterleri bulmamızı sağlar.Bu karakterler “?” ile gösterilir.Örnek vermek gerekirse;

Kod:
[COLOR="Lime"]$ hex_example = {B2 B3? ? B5}  [/COLOR]  
‘Burada B3 değerinden sonraki bayt’ları bilmiyorsak “[COLOR="Cyan"]?[/COLOR]” ekleyerek geçebiliriz.

5lbPcA.png


Jumps

Kalıptaki değerlerin başını biliyorsak fakat belirli aralıklardaki uzunluklarından emin değilsek atlayabiliriz.Örnek vermek gerekirse;

Kod:
[COLOR="Lime"]$ jump_example = {H1 H2 [6-8] 24} [/COLOR]
‘Burada 6 bayttan, 8 bayta kadar olan herhangi bir kayıt dizinini aratmak istediğimizi gösterir.

5lbPcA.png


Hexadecimal Strings Örnek



şeklinde arattığımızda aşağıdaki iki kuralda eşleşecektir.Yani soru işaretleri koyduğumuz kısma 01 ve AA arasındaki bir sayısal-alfabetik değeri eşleştirecektir.

BB 41 01 D6 AA FB
BB 41 AA D6 AA FB

5lbPcA.png


Conditions

Bir YARA Kuralının Mantığı Nedir? başlığında verdiğimiz örnekte bulunan durum alanıdır.Koşullar olarak
adlandırabiliriz.Koşul kümeleri, bool ifadelerini değerlendirir.Aşağıdaki ana örneğimizde $a veya $b parametresinin true veya false olmasını belirleyen kısımdır.



Conditions Seçenekleri:String Sayısı

Herhangi bir Hexadecimal Strin’in kaç defa geçebileceğini veya şu kadar sayıdan fazla veya azdır şeklinde tanımlamalar yapabiliriz.
Örnek vermek gerekirse Strings sayısı;

Kod:
[COLOR="Lime"]$test_string1 = a
$test_string2 = b
$test_string1 = 2  and  $test_string2 <10 [/COLOR]     
‘Şeklinde aratırsak aşağıdaki gibi bir eşleşme yakalayacaktır.Yani “a” değerimiz 2’ye eşit ve “b” değerimiz 10’dan küçük şeklinde…

Yakalar:

aabbbbb , aabbb, aabbbbbb

Yakalayamaz:

aaabbbbbbbb, bbbbbbbbbbbbbbbbbbbbbbbbaa

5lbPcA.png


Conditions Seçenekleri:Offset

String Offset: Bir condition içerisinde kullanıldığında bağlı bulunduğu string’in dosya içerisinde belirli bir ofsette olup olmadığını öğrenmek istediğimiz zaman kullanabiliriz.Örnek vermek gerekirse;

Kod:
[COLOR="Lime"]$a at 200 and $b at 400   [/COLOR]
‘A değerini 200. ofsette ve b değerini 400. ofsette bulunmasını bekliyorsak ve arıyorsak bu şekilde yazabiliriz.
> Bir örnek daha verip daha iyi kavramaya çalışalım;



Burada ‘a’ değişkenini “Turk” ve ‘b’ değişkenini “hackteam” olarak belirledik.Koşullar kısmınada, 0x64 ofsetinde ‘a’ değişkenini, 0xC8 offsetinde ise ‘b’ değişkenini aradığımızı doğrudan bir kural ile belirtebiliriz.

Deneme: Buraya kadar bahsettiğimiz kurallardan bir örnek kural oluşturup YARA üzerinden eşleştirme sağlamaya çalışalım;
Not Defterini açıp ana örneğimizi buraya yazalım. Notepad++ kullanmanızı öneririm.



Kural adını deneme olarak ayarladık.M-e-t-a kısmına author ve description’u yazdık.M-e-t-a kısmını yazmak zorunda değilsiniz.
Ardından strings kısmına $a ve $b olmak üzere iki adet değişken ekledim. $a değişkeni ‘Turkhackteam’ kelimesini aramasını ve $b değişkeninin ‘mekor’ ismini aramasını istiyorum.

Condition kısmına ise $a or $b yazdım.Yukarıda bahsettiğimiz üzere bu parametre, incelediğimiz bir dosyanın içerisinde $a ve $b değişkeninden birisi geçiyorsa bu kuralın eşleştirme sağlamasını istedim.
Bu dosyayı .txt olarak ‘İndirilenler’ kısmına kaydediyorum siz istediğiniz yere kaydedebilirsiniz fakat Windows için indirmiş olduğunuz yara64.exe dosyası ile aynı dizinde olsun.



Gördüğünüz gibi yara64.exe ve kaydetmiş olduğum deneme kuralı aynı klasörde yer alıyor.
Şimdi Başlat > Çalıştır > cmd yazalım ve ‘İndirilenler’ klasörüne inelim.



Klasöre girdikten sonra ‘yara64.exe --help’ ile komutlarımıza bakalım.



Başta oluşturmuş olduğumuz deneme kuralımıza, bulmasını istediklerimizi yukarıda yazmıştık.Şimdi ise yeni bir dosya oluşturalım ve içine rastgele kelimeler yazalım.



Şimdi komut penceresini açalım ve başta oluşturduğumuz kural dosyasını yazıp eşleştirelim.



Resimde görüldüğü üzere ‘yara64 deneme.txt .’ komutunu girdikten sonra aynı dizinde bulunan ornek.txt dosyasını başarıyla eşleştirdi.Burada dosyayı aratmak yerine oluşturduğumuz kuralın adını yazıp kuralın yanına koyduğumuz incelenecek dosyayı bulmasını sağlıyoruz.
Şimdi ise eşleştirilen dosya üzerinde ‘-s’ parametresi ekleyerek sonuca bakalım.



Gördüğünüz gibi işaretli yerde ki ornek.txt dosyamızda 0x42 offsetin’de ‘$a’ değişkeninde yakaladığı ‘MekoR’ ismini bize sundu.İşaretli kısmın üzerindeki kural dosyamızda ise aranacak isimleri görebiliriz.
Ornek.txt dosyasına sadece MekoR ismini yazdık bu yüzden Turkhackteam kelimesini karşımıza çıkarmadı.
Ornek.txt dosyamıza Turkhackteam kelimesini ekleyelim ve tekrar eşleştirme yapalım.





Yukarıdaki örnekte $a değişkeninde MekoR ismini bulmuştu.Şimdi ise 0x42 Ofsetin’de ‘Turkhackteam’ kelimesini yakaladı.
Ana kuralımıza dönecek olursak $a or $b değişkeni eklemiştik.Yani MekoR veya Turkhackteam isimlerinden herhangi biri var ise eşleştirmesini istemiştik.Şimdi $a and $b değişkeni ile MekoR ve Turkhackteam isimlerinden ikisi birden varsa eşleştirmesini isteyelim.



'Yara64 deneme.txt . -s' parametresini yazıp sonuca bakalım.



Evet görüldüğü üzere eşleştirme sağlanmadı çünkü ben $a and $b parametresini ekledikten sonra ornek.txt dosyasından Turkhackteam kelimesini silmiştim.Şimdi ise turkhackteam kelimesini tekrardan ekleyip deneyelim.



Gördüğünüz gibi eşleştirdi.
Konunun başında bahsetmiş olduğum kuralları komut istemi üzerinde test ederek sonlandırdık.Siz kendi kurallarınızı oluşturup pratik yapabilirsiniz.
Şimdi PE Studio indirmemiz gerekiyor.Bu program dosya yapısındaki strings’leri baz alarak yazacağımız kuralı eşleştirmek ve doğrulatmak için gereklidir.

-PE Studio İndirme Bağlantısı-

Buraya kadar temel mantık ve örneklerle .txt üzerinden bir anlatım gerçekleştirdik.Şimdi ise örnek olarak bir şifre çalıcı malware indiriyorum.



İndirmiş olduğum Password Stealer Malware’ı PE Studio içine sürükle-bırak şeklinde atıyorum.



Sol taraftan strings sekmesine basıyoruz.Sağ tarafta 3 adet URL yakaladı.Biz bu URL’leri ne yapacağız?
Oluşturduğumuz YARA Kuralının strings kısmına ekleyeceğiz.



Hemen örnek bir .yara dosyası oluşturalım.Önceki örneklerimizde bu dosyayı oluşturmamıştık çünkü deneme yaptığımız için bir karışıklık olmaması adına eşleştirme sonuçlarında hem kural dosyamız olan deneme.txt hemde incelediğimiz ornek.txt’nin CMD çıktılarını görmenizi istedim.Şimdi Notepad++ ile kuralımızı yazalım.



Önceki oluşturduğumuz kuralda 2 tane değişken eklemiştik.Bu kuralda 3 adet değişken ekliyorum ve 3. Değişkenin adını $c yapıyorum. Çünkü PE Studio’nun strings kısmında bize 3 adet bağlantı URL verdi bu yüzden bu şekilde kural dosyamı düzenleyip kural.yara şeklinde kaydediyorum.
Kuralımızı kaydettikten sonra Komu İstemi’ni (CMD) açalım ve YARA’yı attığımız dizine gelelim.Ben İndirenler kısmına attığım için ‘cd Downloads’ komutu ile bu klasöre geliyorum.



Önceki komutlarımızda ‘yara64.exe -s’ parametresini kullanmıştık.Şimdi ise ‘yara64.exe -s -r’ parametresini kullanacağız.
-r parametresi recursive yani, istenilen koşullar sağlandığı takdirde bir fonksiyonun kendini tekrarlaması komutudur.



‘yara64.exe -s -r kural.yara’ yazdıktan sonra malware örneğimizi sürükleyerek komut isteminin üzerine bırakıyoruz kendisi dosya yolunu oraya yazacaktır.



Ardından ENTER’a basıp eşleşme var mı kontrol edelim.



Kural.yara dosyasında girdiğimiz URL’ler ile malware örneğimizi eşleştirdi.Şimdi ise Hex Editor ile dosyayı inceleyelim ve MZ yapısını kontrol edelim.

-Hex Editor İndirme Bağlantısı-

MZ: Hex Editor ile açılan herhangi bir PE (Portable Executable) dosyasının en üstünde bulunan iki baytlık yapıya denir.
Bu yapı .exe uzantılı çalıştırıabilir dosyalarda bulunur.Fakat bizdeki dosya bir PE yani .exe dosyası gibi gözükmüyor.Bunu anlamamız için Hex Editor ile açıp en üstteki girdiye bakmak ve bu girdiyi oluşturduğumuz kural ile YARA aracılığıyla eşleştirmektir.



Kırmızı ile işaretlediğim yerde 4D 5A Ofsetin’de MZ yapısını görmekteyiz.Kural.yara dosyamızı düzenleyip bu Offseti eşleştirelim.



Kuralımızı düzenledikten sonra Komut İstemi’ne (CMD) gelelim ve tekrar eşleşmesini sağlayalım.



0x0 ofsetinde MZ olduğunu doğruladık.
Not: Çalıştırılabilir dosyalarda MZ yapısı her zaman ilk ofset’de bulunur.

5lbPcA.png


YARA’da birçok örnek kural oluşturulabilir bu sizin hayalgücünüze kalmış.Ben temel olanlardan bahsettim fakat YARA ile ilgili oluşturulmuş birçok hazır kurala aşağıda vereceğim bağlantıdan ulaşıp kendinize göre düzenlebilirsiniz.

5lbPcA.png


-YARA Kural Paylaşımları Bağlantı Linki -

Bu yazıda bir Şifre Çalıcı malware inceledik.Siz de böyle örnek virüsler indirmek isterseniz (WannaCry, Fidye Virüsü v.b) yine aşağıda vereceğim linkten bu örnek malware’ları indirip derlediğiniz kurallar neticesinde eşleştirme yapıp yapmadığını test ederek pratik yapabilirsiniz.

-Örnek Malware’lar Bağlantı Linki-

5lbPcA.png


Herkese İyi Forumlar :)

5lbPcA.png
 

ѕeleɴια

Kıdemli Üye
18 May 2018
2,619
907
ZYZZ
Elinize sağlık emekli harika konu

Peki hocam bunun atlatılma ihtimali hakkında bir fikriniz var mı
 

x4807

Katılımcı Üye
10 Ağu 2019
985
17
Elinize sağlık emekli harika konu

Peki hocam bunun atlatılma ihtimali hakkında bir fikriniz var mı

Tabiki evet. Maalesef günümüzde bir türlü anlaşılamayan bir durum YARA ya da başka programların sonuçlarının %100 güvenilir olmadığı. Eğer kesin sonuca varmak istersen ilk olarak kaynak kodlarını okursun sonra dinamik analiz sırasında yaptıklarını gözlemlersin.
 

MekoR

Katılımcı Üye
6 Şub 2010
660
6
Elinize sağlık emekli harika konu

Peki hocam bunun atlatılma ihtimali hakkında bir fikriniz var mı

Öncelikle yorum için teşekkür ederim. Evet hiçbir zaman %100 güvenlik yoktur bazı YARA Kuralları bypass edilebilir.Örneğin PE dosyasının en baştaki hex değeri 0x0 ofsetindeki MZ yapısıdır.Fakat incelenen dosyada hex string şifrelenmiş ise YARA'nın bu kuralı bypass edilir. Kural paylaşımları linkinde çok daha detaylı kurallar oluyor gün geçtikçe güvenlik artmakta.
İyi Forumlar.


Elinize sağlık emekli harika konu

Peki hocam bunun atlatılma ihtimali hakkında bir fikriniz var mı

Güzel konu olmuş .

Ellerine sağlık mekor, güzel ve faydalı konu olmuş.

ᑕᕮᗰ ΛDΓİΛП;9235862' Alıntı:
Eline sağlık mekor

Teşekkür ederim :)
 
Moderatör tarafında düzenlendi:

Vepers

Kıdemli Üye
26 Ara 2015
2,297
30
21
İstanbul
Eline sağlık

⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀
 

MekoR

Katılımcı Üye
6 Şub 2010
660
6
Güzel konu elinize sağlık

Ellerine sağlık dostum :))

Eline Sağlık hepsini okudum yararlı makale :)

Eline sağlık

⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀

ellerinize saglik

Teşekkür ederim :)
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.