# Malware Analizi {{#include ../../banners/hacktricks-training.md}} ## Adli Bilimler Hızlı Referansları [https://www.jaiminton.com/cheatsheet/DFIR/#](https://www.jaiminton.com/cheatsheet/DFIR/) ## Çevrimiçi Hizmetler - [VirusTotal](https://www.virustotal.com/gui/home/upload) - [HybridAnalysis](https://www.hybrid-analysis.com) - [Koodous](https://koodous.com) - [Intezer](https://analyze.intezer.com) - [Any.Run](https://any.run/) ## Çevrimdışı Antivirüs ve Tespit Araçları ### Yara #### Kurulum ```bash sudo apt-get install -y yara ``` #### Kuralları Hazırlayın Use this script to download and merge all the yara malware rules from github: [https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9](https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9)\ Create the _**rules**_ directory and execute it. This will create a file called _**malware_rules.yar**_ which contains all the yara rules for malware. ```bash wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py mkdir rules python malware_yara_rules.py ``` #### Tarama ```bash yara -w malware_rules.yar image #Scan 1 file yara -w malware_rules.yar folder #Scan the whole folder ``` #### YaraGen: Kötü amaçlı yazılımı kontrol et ve kurallar oluştur Binary'den yara kuralları oluşturmak için [**YaraGen**](https://github.com/Neo23x0/yarGen) aracını kullanabilirsiniz. Bu eğitimlere göz atın: [**Bölüm 1**](https://www.nextron-systems.com/2015/02/16/write-simple-sound-yara-rules/), [**Bölüm 2**](https://www.nextron-systems.com/2015/10/17/how-to-write-simple-but-sound-yara-rules-part-2/), [**Bölüm 3**](https://www.nextron-systems.com/2016/04/15/how-to-write-simple-but-sound-yara-rules-part-3/) ```bash python3 yarGen.py --update python3.exe yarGen.py --excludegood -m ../../mals/ ``` ### ClamAV #### Kurulum ``` sudo apt-get install -y clamav ``` #### Tarama ```bash sudo freshclam #Update rules clamscan filepath #Scan 1 file clamscan folderpath #Scan the whole folder ``` ### [Capa](https://github.com/mandiant/capa) **Capa**, potansiyel olarak zararlı **yetenekleri** yürütülebilir dosyalarda tespit eder: PE, ELF, .NET. Bu nedenle, Att\&ck taktikleri veya aşağıdaki gibi şüpheli yetenekler gibi şeyleri bulacaktır: - OutputDebugString hatasını kontrol et - hizmet olarak çalış - işlem oluştur Bunu [**Github repo**](https://github.com/mandiant/capa) üzerinden edinebilirsiniz. ### IOCs IOC, Kompromi Göstergesi anlamına gelir. Bir IOC, bazı potansiyel olarak istenmeyen yazılımları veya onaylanmış **kötü amaçlı yazılımları** tanımlayan bir **koşullar setidir**. Mavi Takımlar, bu tür tanımları **sistemlerinde** ve **ağlarında** bu tür kötü amaçlı dosyaları **arama** amacıyla kullanır.\ Bu tanımları paylaşmak çok faydalıdır çünkü bir bilgisayarda kötü amaçlı yazılım tespit edildiğinde ve o kötü amaçlı yazılım için bir IOC oluşturulduğunda, diğer Mavi Takımlar bunu kötü amaçlı yazılımı daha hızlı tanımlamak için kullanabilir. IOC'leri oluşturmak veya değiştirmek için bir araç [**IOC Editor**](https://www.fireeye.com/services/freeware/ioc-editor.html)**.**\ Tanımlı IOCs'leri bir cihazda **arama** yapmak için [**Redline**](https://www.fireeye.com/services/freeware/redline.html) gibi araçları kullanabilirsiniz. ### Loki [**Loki**](https://github.com/Neo23x0/Loki), Basit Kompromi Göstergeleri için bir tarayıcıdır.\ Tespit, dört tespit yöntemine dayanmaktadır: ``` 1. File Name IOC Regex match on full file path/name 2. Yara Rule Check Yara signature matches on file data and process memory 3. Hash Check Compares known malicious hashes (MD5, SHA1, SHA256) with scanned files 4. C2 Back Connect Check Compares process connection endpoints with C2 IOCs (new since version v.10) ``` ### Linux Malware Detect [**Linux Malware Detect (LMD)**](https://www.rfxn.com/projects/linux-malware-detect/) , paylaşımlı barındırma ortamlarında karşılaşılan tehditler etrafında tasarlanmış, GNU GPLv2 lisansı altında yayımlanan bir Linux kötü amaçlı yazılım tarayıcısıdır. Saldırılarda aktif olarak kullanılan kötü amaçlı yazılımları çıkarmak ve tespit için imzalar oluşturmak amacıyla ağ kenarı saldırı tespit sistemlerinden tehdit verilerini kullanır. Ayrıca, tehdit verileri LMD ödeme özelliği ile kullanıcı gönderimlerinden ve kötü amaçlı yazılım topluluğu kaynaklarından da elde edilmektedir. ### rkhunter [**rkhunter**](http://rkhunter.sourceforge.net) gibi araçlar, dosya sistemini olası **rootkit** ve kötü amaçlı yazılımlar için kontrol etmek amacıyla kullanılabilir. ```bash sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--skip-keypress] ``` ### FLOSS [**FLOSS**](https://github.com/mandiant/flare-floss) bir dizi teknik kullanarak yürütülebilir dosyalar içinde obfuscate edilmiş dizeleri bulmaya çalışan bir araçtır. ### PEpper [PEpper ](https://github.com/Th3Hurrican3/PEpper) yürütülebilir dosya içinde bazı temel şeyleri (ikili veriler, entropi, URL'ler ve IP'ler, bazı yara kuralları) kontrol eder. ### PEstudio [PEstudio](https://www.winitor.com/download) Windows yürütülebilir dosyaları hakkında bilgi almayı sağlayan bir araçtır; örneğin, ithalatlar, ihracatlar, başlıklar gibi bilgileri alır, ayrıca virüs toplamını kontrol eder ve potansiyel Att\&ck tekniklerini bulur. ### Detect It Easy(DiE) [**DiE**](https://github.com/horsicq/Detect-It-Easy/) bir dosyanın **şifreli** olup olmadığını tespit etmek ve ayrıca **paketleyicileri** bulmak için kullanılan bir araçtır. ### NeoPI [**NeoPI** ](https://github.com/CiscoCXSecurity/NeoPI) metin/script dosyaları içinde **obfuscate** edilmiş ve **şifreli** içeriği tespit etmek için çeşitli **istatistiksel yöntemler** kullanan bir Python betiğidir. NeoPI'nin amacı, **gizli web shell kodunun** tespitine yardımcı olmaktır. ### **php-malware-finder** [**PHP-malware-finder**](https://github.com/nbs-system/php-malware-finder) **obfuscate** edilmiş/**şüpheli kod** ile birlikte, genellikle **malware**/webshell'lerde kullanılan **PHP** fonksiyonlarını içeren dosyaları tespit etmek için elinden gelenin en iyisini yapar. ### Apple Binary Signatures Bazı **malware örneklerini** kontrol ederken, imzayı her zaman **kontrol etmelisiniz** çünkü imzayı atan **geliştirici** zaten **malware** ile **ilişkili** olabilir. ```bash #Get signer codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier" #Check if the app’s contents have been modified codesign --verify --verbose /Applications/Safari.app #Check if the signature is valid spctl --assess --verbose /Applications/Safari.app ``` ## Tespit Teknikleri ### Dosya Yığma Eğer bir web sunucusunun **dosyalarını** içeren bir klasörün **son güncellenme tarihini** biliyorsanız, **web sunucusundaki tüm dosyaların oluşturulma ve değiştirilme tarihlerini kontrol edin** ve eğer herhangi bir tarih **şüpheli** ise, o dosyayı kontrol edin. ### Temel Değerler Eğer bir klasörün dosyaları **değiştirilmemiş olmalıysa**, klasörün **orijinal dosyalarının** **hash'ini** hesaplayabilir ve bunları **mevcut** olanlarla **karşılaştırabilirsiniz**. Değiştirilen herhangi bir şey **şüpheli** olacaktır. ### İstatistiksel Analiz Bilgiler günlüklerde saklandığında, her bir web sunucusu dosyasının ne kadar sıklıkla erişildiğini kontrol edebilirsiniz; çünkü bir web shell en çok erişilenlerden biri olabilir. --- ## Dinamik Kontrol Akışını Deşifre Etme (JMP/CALL RAX Dağıtıcıları) Modern kötü amaçlı yazılım aileleri Kontrol Akış Grafiği (CFG) obfuscation'ı yoğun bir şekilde kötüye kullanmaktadır: doğrudan bir atlama/çağrı yerine, hedefi çalışma zamanında hesaplar ve `jmp rax` veya `call rax` komutunu yürütür. Küçük bir *dağıtıcı* (genellikle dokuz talimat) CPU `ZF`/`CF` bayraklarına bağlı olarak son hedefi belirler ve statik CFG geri kazanımını tamamen bozar. SLOW#TEMPEST yükleyicisi tarafından sergilenen bu teknik, yalnızca IDAPython ve Unicorn CPU emülatörüne dayanan üç adımlı bir iş akışı ile yenilebilir. ### 1. Her dolaylı atlama / çağrıyı bulun ```python import idautils, idc for ea in idautils.FunctionItems(idc.here()): mnem = idc.print_insn_mnem(ea) if mnem in ("jmp", "call") and idc.print_operand(ea, 0) == "rax": print(f"[+] Dispatcher found @ {ea:X}") ``` ### 2. Dispatcher byte-code'u çıkarın ```python import idc def get_dispatcher_start(jmp_ea, count=9): s = jmp_ea for _ in range(count): s = idc.prev_head(s, 0) return s start = get_dispatcher_start(jmp_ea) size = jmp_ea + idc.get_item_size(jmp_ea) - start code = idc.get_bytes(start, size) open(f"{start:X}.bin", "wb").write(code) ``` ### 3. Unicorn ile iki kez taklit et ```python from unicorn import * from unicorn.x86_const import * import struct def run(code, zf=0, cf=0): BASE = 0x1000 mu = Uc(UC_ARCH_X86, UC_MODE_64) mu.mem_map(BASE, 0x1000) mu.mem_write(BASE, code) mu.reg_write(UC_X86_REG_RFLAGS, (zf << 6) | cf) mu.reg_write(UC_X86_REG_RAX, 0) mu.emu_start(BASE, BASE+len(code)) return mu.reg_read(UC_X86_REG_RAX) ``` `run(code,0,0)` ve `run(code,1,1)` komutlarını çalıştırarak *false* ve *true* dal hedeflerini elde edin. ### 4. Doğrudan bir atlama / çağrıyı geri düzeltin ```python import struct, ida_bytes def patch_direct(ea, target, is_call=False): op = 0xE8 if is_call else 0xE9 # CALL rel32 or JMP rel32 disp = target - (ea + 5) & 0xFFFFFFFF ida_bytes.patch_bytes(ea, bytes([op]) + struct.pack('