Malware Analizi
Reading time: 8 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Adli Bilimler Hızlı Referansları
https://www.jaiminton.com/cheatsheet/DFIR/#
Çevrimiçi Hizmetler
Çevrimdışı Antivirüs ve Tespit Araçları
Yara
Kurulum
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
Create the rules directory and execute it. This will create a file called malware_rules.yar which contains all the yara rules for malware.
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
python malware_yara_rules.py
Tarama
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 aracını kullanabilirsiniz. Bu eğitimlere göz atın: Bölüm 1, Bölüm 2, Bölüm 3
python3 yarGen.py --update
python3.exe yarGen.py --excludegood -m ../../mals/
ClamAV
Kurulum
sudo apt-get install -y clamav
Tarama
sudo freshclam #Update rules
clamscan filepath #Scan 1 file
clamscan folderpath #Scan the whole folder
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 ü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.
Tanımlı IOCs'leri bir cihazda arama yapmak için Redline gibi araçları kullanabilirsiniz.
Loki
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) , 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 gibi araçlar, dosya sistemini olası rootkit ve kötü amaçlı yazılımlar için kontrol etmek amacıyla kullanılabilir.
sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--skip-keypress]
FLOSS
FLOSS bir dizi teknik kullanarak yürütülebilir dosyalar içinde obfuscate edilmiş dizeleri bulmaya çalışan bir araçtır.
PEpper
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 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 bir dosyanın şifreli olup olmadığını tespit etmek ve ayrıca paketleyicileri bulmak için kullanılan bir araçtır.
NeoPI
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 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.
#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
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
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
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
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('<I', disp))
Yamanlamadan sonra, IDA'yı fonksiyonu yeniden analiz etmeye zorlayarak tam CFG ve Hex-Rays çıktısının geri yüklenmesini sağlayın:
import ida_auto, idaapi
idaapi.reanalyze_function(idc.get_func_attr(ea, idc.FUNCATTR_START))
5. Dolaylı API çağrılarını etiketle
Her call rax
'ın gerçek hedefi bilindiğinde, IDA'ya bunun ne olduğunu söyleyebilir ve böylece parametre türleri ve değişken adları otomatik olarak geri kazanılır:
idc.set_callee_name(call_ea, resolved_addr, 0) # IDA 8.3+
Pratik faydalar
- Gerçek CFG'yi geri yükler → dekompilasyon 10 satırdan binlerce satıra çıkar.
- String çapraz referansı ve xrefs'i etkinleştirir, davranış yeniden yapılandırmasını basit hale getirir.
- Scriptler yeniden kullanılabilir: bunları aynı hileyle korunan herhangi bir yükleyiciye bırakın.
Referanslar
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.