YARA Nedir? YARA ile Malware Tespiti

PwnLab.Me

Admin
Katılım
21 Ocak 2024
Mesajlar
203
Tepkime puanı
10
Puanları
18
Yusuf Can Çakır tarafından yazılmıştır.

[TR] YARA Nedir? YARA ile Malware Tespiti​




Merhabalar herkese, bugün sizlere YARA’nın ne olduğundan ve YARA kuralları ile zararlı yazılımın nasıl tespit edildiğini, kuralının nasıl yazıldığından bahsedeceğim. Şimdiden keyifli okumalar.



YARA Nedir?​


YARA, VirusTotal tarafından üretilmiş zararlı yazılımların kodları üzerinde çalışan kişilerin, zararlının kodlarını sınıflandırma ve tanımlamalarına olanak sağlayan, zararlı yazılım analizi ve tespiti yapan bir araçtır. Uzman kişilerin, zararlı yazılımın kodlarını hızlıca analiz edip, derinlemesine analize geçişlerini hızlandırmaktadır. Ayrıca adli bilişim olaylarında bellek analizinde (volatility ile) YARA kurallarının kullanılmasına olanak tanımaktadır. Unutulmaması gereken önemli bir şey de YARA bir anti-virüs yazılımı değildir.



Neden YARA Kuralları?​


Üstte de belirttiğim gibi zararlı yazılımların sınıflandırılması ve tespitinde rol oynayan YARA kuralları, yapılan işi hızlandırmaktadır. Bu kurallarda zararlı yazılımın ailesini, bu zararlı yazılımı yazan grubun kimliği gibi verileri öğrenebiliriz.



YARA Kurulumu​


YARA’yı https://plusvic.github.io/yara sitesinden Linux, Windows ve MacOS için sürümlerini indirebilirsiniz. İndirme işlemini yaptıktan sonra aşağıdaki adımları izleyerek kurulumu yapabilirsiniz.

tar -zxf yara-4.0.5.tar.gz

cd yara-4.0.5

./build.sh

sudo make install



Kurulumu tamamladık. YARA’yı çalıştırmak için komut satırına yara yazdığımızda hangi komutları çalıştırabileceğimizi gösteriyor. yara –help komutunu çalıştırdığımızda ise aşağıdaki çıktıyı vermektedir.

┌─[can@parrot]─[~/Desktop/yara-4.0.5]
└──╼ $yara --help
YARA 4.0.5, the pattern matching swiss army knife.
Usage: yara [OPTION]... [NAMESPACE:]RULES_FILE... FILE | DIR | PID

Mandatory arguments to long options are mandatory for short options too.

--atom-quality-table=FILE path to a file with the atom quality table
-C, --compiled-rules load compiled rules
-c, --count print only number of matches
-d, --define=VAR=VALUE define external variable
--fail-on-warnings fail on warnings
-f, --fast-scan fast matching mode
-h, --help show this help and exit
-i, --identifier=IDENTIFIER print only rules named IDENTIFIER
-l, --max-rules=NUMBER abort scanning after matching a NUMBER of rules
--max-strings-per-rule=NUMBER set maximum number of strings per rule (default=10000)
-x, --module-data=MODULE=FILE pass FILE's content as extra data to MODULE
-n, --negate print only not satisfied rules (negate)
-w, --no-warnings disable warnings
-m, --print-meta print metadata
-D, --print-module-data print module data
-e, --print-namespace print rules' namespace
-S, --print-stats print rules' statistics
-s, --print-strings print matching strings
-L, --print-string-length print length of matched strings
-g, --print-tags print tags
-r, --recursive recursively search directories (follows symlinks)
--scan-list scan files listed in FILE, one per line
-k, --stack-size=SLOTS set maximum stack size (default=16384)
-t, --tag=TAG print only rules tagged as TAG
-p, --threads=NUMBER use the specified NUMBER of threads to scan a directory
-a, --timeout=SECONDS abort scanning after the given number of SECONDS
-v, --version show version information

Send bug reports and suggestions to: [email protected].



YARA Kurallarının Tanımlanması​


Yukarıdaki çıktıya bakarsanız eğer yara‘nın kurallardan oluştuğuna görebilirsiniz. YARA da oluşturulan kurallar diğer uygulamalarda (volatility de bellek analizi veya https://www.hybrid-analysis.com/ daki YARA Search kısmı gibi.) kullanılabilmektedir. Kısa bir örnek yapıp bunun üzerinde anlatmak istiyorum.


rule Kural_adi
{
meta:
author="Yusuf Can Çakır"
description= "[email protected]"

strings:
$x = "zararlı yazılım"
$y = "yara kuralı"

condition:
$x or $y
}

Strings​

Rule​


YARA kuralları rule anahtar sözcüğü ile başlar ve bir isim verilir. meta alanındaki kısımlar ise yara kuralının temel bilgileridir, kim yaptı, açıklaması gibi.

Strings​


Strings bilgiler zararlı yazılım ile eşleşmesi gereken bölümdür. Burada üç farklı string yapısı vardır:

  • Hexadecimal Strings
  • Regex
  • Text Strings

Hexadecimal Strings​


Hexadecimal string verileri, dosyanın hex karakterleri ile eşlenecektir. Burada kullanılan önemli bir parametre olan Wildcard karakter den bahsetmek istemekteyim.

Wildcard karakter “??” şeklinde tanımlanmaktadır ve siz kuralınızda bunu kullanırsanız, dosyada ne olursa olsun eşleşecektir. Altta örnekli gösterim de daha rahat anlayabilirsiniz.


rule Kural_adı
{
meta:
author="Yusuf Can Çakır"
description= "[email protected]"

strings:
$hex_strings = { B9 02 07 00 00 BE ?? ?? ?? ?? 8B F8 6A 00 F3 A5 }
condition:
$hex_strings
}

Buradaki önemli olan şey şudur: örnek olarak:

B9 02 07 00 00 BE AA AA AA AA 8B F8 6A 00 F3 A5 da olsa eşleşecektir.
B9 02 07 00 00 BE BB BB BB BB 8B F8 6A 00 F3 A5 olsa da eşleşecektir.

Text Strings​


Text Strins kısmı ASCII veri şeklinde olmaktadır.

nocase​


Büyük küçük harf duyarlı olmaması için nocase kullanmalıyız. Örnek olarak:


Büyük küçük harfe duyarlı değişkenler
$text_case = "Deneme1"

Büyük küçük harfe duyarsız değişkenler
$text_nocase = "deneme1" nocase



Fullword​


Buradaki önemli husus, verdiğimiz text verisinin tamamen aynısı olan bir veri ile eşleşmesi gerekiyor.


rule PwnLabMe
{
strings:
$text_fullword = "pwnlab.me"
condition:
$text_fullword
}

Eşleşmede yakalayabilecekleri:


Eşleşmede yakalayamayacakları:

Regular Expressions​


String değerleri gibi tanımlanmaktadır fakat çift tırnak işaretleri yerine eğik çizgiler ile işlem yapılmaktadır.


rule PwnLabMe
{
strings:
$regular = /md5: [0-9a-fA-F]{32}/

condition:
$regular
}

Regular Expressions’larda da strings’lerdeki gibi wide, fullword ve nocase gibi ifadeler kullanılmaktadır.

Strings’ler daha geniş fakat burada sonlandırıyorum.

String Tamamlayıcıları​

https://yara.readthedocs.io/en/stable/writingrules.html#id4

YARA Anahtar Kelimeleri​

https://yara.readthedocs.io/en/stable/writingrules.html#id3

Conditions (Koşullar)​


Koşullar bütün programlama dillerindeki if koşulu gibidir ve boole‘dan farklı bir şey değildir. Tipik koşul ifadeleri and, or ve not; bağıntısal ifadeler ise <=, >=, <, > ve != şeklindedir.


rule PwnLabMe

{
strings:
$k = "text1"
$l = "text2"
$m = "text3"
$n = "text4"

condition:
($k or $l) and ($m or $n)
}

Strings Sayı​


rule PwnLabMe
{
strings:
$a = "pwnlab"
$b = "yusuf can"

condition:
$a == 6 and $b > 10
}

Örnek üzerinden anlatmak daha kolay olacağı için ilk olarak örnek verdim. Burada $a değişkeninde 6 tane olursa ve $b değişkenide 10 kereden fazla olursa eşleşme olacaktır.

Strings Offset​


Koşullarda kullandığımız strings ile hedefteki process memory’nin herhangi bir noktasında olup olmadığını öğrenmek için kullanılmaktadır.

$k at 100 and $l at 150

Örnekteki gibi $k için çalışan process’deki virtual address kısmının 100 olup olmadığına bakar. Aynı şeyler $l içinde geçerlidir.

YARA kuralları için anlatacaklarım bu kadardı, şimdi de YARA kurallarını oluşturmamızda bizlere yardımcı olan araçlardan bahsedeceğim.

YARA için Araçlar​

Yabin​


Alien Vault tarafından geliştirilen bir araçtır. GitHub adresine gitmek için: https://github.com/AlienVault-OTX/yabin

YaraGenerator​


Xen0ph0n/ tarafından geliştirilen bir araçtır. GitHub adresine gitmek için: https://github.com/Xen0ph0n/YaraGenerator

Bunları da verdikten sonra ufak bir demo yapalım birlikte.



Demo (ZeroLocker)​


Öncelikle zararlı yazılım ve ona uygun bir yara kural dosyası bulmamız(veya kendimiz yazmamız) gerekiyor. Zararlı yazılım örneklerini https://thezoo.morirt.com/ buradan indirebilirsiniz.Kurulumu oldukça kolaydır fakat kısaca anlatmak isterim.

Kod:
git clone https://www.github.com/ytisf/theZoo
cd theZoo
pip install --user -r requirements.txt

şeklinde yapmalısınız. Ardından bir malware seçmemiz gerekiyor ki ben ZeroLocker isimli malware’i seçtim. Uygun YARA kural dosyasını https://github.com/reversinglabs/reversinglabs-yara-rules buradan indirebilirsiniz. Şimdi YARA’yı zaten indirmiştik başta, şimdi kullanımına geçelim.

Yara_kullanımı
Yara_kullanımı

yara -mrs yara_kural_dosyası.yar zararlı_yazılım

şeklinde yazıyoruz. Buradaki parametrelerin anlamını anlatayım.

-m -print-meta = meta data'yı yazdırır.

-r -recursive = Alt dizinlerine kadar tarar

-s -print-string = eşleşen string değerlerini yazdırır.



Anlatacaklarım bu kadardı, umarım beğenmişsinizdir. Başka bir yazıda görüşmek üzere^^.
 
Moderatör tarafında düzenlendi:
Geri
Üst