Malware Analizi
Reading time: 9 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 Bilişim CheatSheet'leri
https://www.jaiminton.com/cheatsheet/DFIR/#
Çevrimiçi Servisler
Çevrimdışı Antivirüs ve Tespit Araçları
Yara
Kurulum
sudo apt-get install -y yara
Kuralları hazırla
Bu scripti, github'dan tüm yara malware kurallarını indirmek ve birleştirmek için kullanın: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
rules dizinini oluşturun ve scripti çalıştırın. Bu, tüm yara malware kurallarını içeren malware_rules.yar adlı bir dosya oluşturacaktır.
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: malware kontrolü ve kural oluşturma
Bir binary'den yara rules oluşturmak için YaraGen aracını kullanabilirsiniz. Bu öğreticilere göz atın: Part 1, Part 2, Part 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, yürütülebilir dosyalarda: PE, ELF, .NET, potansiyel olarak kötü amaçlı capabilities tespit eder. Böylece Att&ck tactics gibi şeyleri veya şu tür şüpheli capabilities'leri bulur:
- OutputDebugString hatası için kontrol etme
- servis olarak çalıştırma
- süreç oluşturma
Edinin: Github repo.
IOCs
IOC, Indicator Of Compromise anlamına gelir. Bir IOC, potansiyel olarak istenmeyen yazılımları veya teyit edilmiş malware'i tanımlayan bir dizi koşuldur. Blue Teams bu tür tanımları bu tür kötü amaçlı dosyaları aramak için kendi sistemlerinde ve ağlarında kullanır.
Bu tanımları paylaşmak çok faydalıdır; çünkü bir bilgisayarda malware tespit edildiğinde ve o malware için bir IOC oluşturulduğunda, diğer Blue Teams bunu kullanarak malware'i daha hızlı tespit edebilir.
IOC oluşturmak veya değiştirmek için bir araç IOC Editor.
Tanımlı IOC'leri bir cihazda aramak için Redline gibi araçları kullanabilirsiniz.
Loki
Loki Simple Indicators of Compromise için bir tarayıcıdır.
Tespit dört farklı yönteme dayanı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) GNU GPLv2 lisansı altında yayımlanan ve paylaşılan hosting ortamlarında karşılaşılan tehditlere göre tasarlanmış bir Linux malware tarayıcısıdır. Saldırılarda aktif olarak kullanılan malware'leri çıkarmak ve tespit için imzalar üretmek amacıyla ağ kenarı saldırı tespit sistemlerinden gelen tehdit verilerini kullanır. Ayrıca tehdit verileri, LMD checkout özelliğiyle yapılan kullanıcı gönderimleri ve malware topluluk kaynaklarından da elde edilir.
rkhunter
Tools like rkhunter can be used to check the filesystem for possible rootkits and malware.
sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--skip-keypress]
FLOSS
FLOSS farklı teknikler kullanarak executables içindeki obfuscated strings'i bulmaya çalışan bir araçtır.
PEpper
PEpper executable içinde bazı temel şeyleri kontrol eder (binary data, entropy, URLs and IPs, some yara rules).
PEstudio
PEstudio Windows executables hakkında imports, exports, headers gibi bilgiler almayı sağlar; ayrıca virus total'u kontrol eder ve potansiyel Att&ck tekniklerini bulur.
Detect It Easy(DiE)
DiE bir dosyanın encrypted olup olmadığını tespit etmek ve packers'ı bulmak için bir araçtır.
NeoPI
NeoPI is bir Python scriptidir ve text/script dosyalar içindeki obfuscated ve encrypted content'i tespit etmek için çeşitli statistical methods kullanır. NeoPI'nin amaçlarından biri detection of hidden web shell code'a yardımcı olmaktır.
php-malware-finder
PHP-malware-finder obfuscated/dodgy code'ları ve sıklıkla malwares/webshells içinde kullanılan PHP fonksiyonlarını kullanan dosyaları tespit etmek için elinden geleni yapar.
Apple Binary Signatures
Bazı malware sample'larını incelerken, binary'nin check the signature'ını her zaman kontrol etmelisiniz çünkü imzalayan developer zaten related with malware 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
Detection Techniques
File Stacking
Eğer bir klasörün, bir web sunucusunun filesını içerdiğini ve last updated on some date olduğunu biliyorsanız. Web sunucusundaki tüm filesın oluşturulma ve değiştirilme datelerini Check edin; eğer herhangi bir tarih suspicious ise o dosyayı inceleyin.
Baselines
Eğer bir klasörün filesı shouldn't have been modified ise, klasörün original filesının hashini hesaplayıp bunları current olanlarla compare edebilirsiniz. Değişmiş olan herhangi bir şey suspicious olacaktır.
Statistical Analysis
Bilgiler loglarda saklandığında, bir web shell en çok erişilenlerden biri olabileceği için her bir web sunucusu dosyasının kaç kez erişildiği gibi istatistikleri check edebilirsiniz.
Android in-app native telemetry (no root)
Android'de, hedef uygulama sürecinin içindeki native kodu diğer JNI kütüphaneleri initialize olmadan önce küçük bir logger kütüphanesini preload ederek instrument edebilirsiniz. Bu, sistem çapında hook'lara veya root'a ihtiyaç duymadan native davranışa erken görünürlük sağlar. Popüler bir yaklaşım SoTap'tır: doğru ABI için libsotap.so'yu APK'ye koyun ve erken bir noktada System.loadLibrary("sotap") çağrısı enjekte edin (örn. static initializer veya Application.onCreate), ardından logları internal/external yollarından veya Logcat fallback'ten toplayın.
See the Android native reversing page for setup details and log paths:
Deobfuscating Dynamic Control-Flow (JMP/CALL RAX Dispatchers)
Modern malware families heavily abuse Control-Flow Graph (CFG) obfuscation: instead of a direct jump/call they compute the destination at run-time and execute a jmp rax
or call rax
. A small dispatcher (typically nine instructions) sets the final target depending on the CPU ZF
/CF
flags, completely breaking static CFG recovery.
The technique – showcased by the SLOW#TEMPEST loader – can be defeated with a three-step workflow that only relies on IDAPython and the Unicorn CPU emulator.
1. Locate every indirect jump / call
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 bunu iki kez emüle 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 branch hedeflerini elde edin.
4. Doğrudan jump / call'ı geri patch'layın
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))
Patching yaptıktan sonra, IDA'yı fonksiyonu yeniden analiz etmeye zorlayın, böylece tam CFG ve Hex-Rays çıktısı geri yüklenir:
import ida_auto, idaapi
idaapi.reanalyze_function(idc.get_func_attr(ea, idc.FUNCATTR_START))
5. Dolaylı API çağrılarını etiketleyin
Her call rax
'in gerçek hedefi belirlendiğinde IDA'ya bunun ne olduğunu söyleyebilirsiniz, böylece parametre tipleri & 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-cross-reference & xrefs'i etkinleştirir, davranışın yeniden yapılandırılmasını kolaylaştırır.
- Scripts yeniden kullanılabilir: aynı yöntemi kullanan herhangi bir loader'a yerleştirilebilir.
Kaynaklar
- Unit42 – Evolving Tactics of SLOW#TEMPEST: A Deep Dive Into Advanced Malware Techniques
- SoTap: Hafif uygulama içi JNI (.so) davranış kaydedicisi – github.com/RezaArbabBot/SoTap
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.