Translated ['src/generic-methodologies-and-resources/basic-forensic-meth

This commit is contained in:
Translator 2025-07-13 02:49:44 +00:00
parent 03cf7e7531
commit 1dc5e841b5

View File

@ -1,8 +1,8 @@
# Kötü Amaçlı Yazılım Analizi
# Malware Analizi
{{#include ../../banners/hacktricks-training.md}}
## Adli Bilişim Hile Sayfaları
## Adli Bilimler Hızlı Referansları
[https://www.jaiminton.com/cheatsheet/DFIR/#](https://www.jaiminton.com/cheatsheet/DFIR/)
@ -24,8 +24,8 @@ sudo apt-get install -y yara
```
#### Kuralları Hazırlayın
Bu script'i kullanarak github'dan tüm yara kötü amaçlı yazılım kurallarını indirin ve birleştirin: [https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9](https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9)\
_**rules**_ dizinini oluşturun ve çalıştırın. Bu, tüm kötü amaçlı yazılım için yara kurallarını içeren _**malware_rules.yar**_ adlı bir dosya oluşturacaktır.
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
@ -57,17 +57,17 @@ 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 şüpheli yetenekler gibi şeyleri bulacaktır:
**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
- bir hizmet olarak çalış
- hizmet olarak çalış
- işlem oluştur
Bunu [**Github repo**](https://github.com/mandiant/capa) üzerinden edinebilirsiniz.
### IOCs
IOC, Kompromi İndikatörü anlamına gelir. Bir IOC, bazı potansiyel olarak istenmeyen yazılımları veya onaylanmış **kötü amaçlı yazılımları** tanımlayan **koşulların** bir 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.\
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)**.**\
@ -75,7 +75,7 @@ Tanımlı IOCs'leri bir cihazda **arama** yapmak için [**Redline**](https://www
### Loki
[**Loki**](https://github.com/Neo23x0/Loki), Basit Kompromi İndikatörleri için bir tarayıcıdır.\
[**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
@ -102,7 +102,7 @@ sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--sk
```
### FLOSS
[**FLOSS**](https://github.com/mandiant/flare-floss) bir dizi farklı teknik kullanarak yürütülebilir dosyalar içinde obfuscate edilmiş dizeleri bulmaya çalışan bir araçtır.
[**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
@ -114,15 +114,15 @@ sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--sk
### 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 bir araçtır.
[**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.
[**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 kodu** ve ayrıca **malware**/webshell'lerde sıkça kullanılan **PHP** fonksiyonlarını içeren dosyaları tespit etmek için elinden gelenin en iyisini yapar.
[**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
@ -145,10 +145,92 @@ Eğer bir web sunucusunun **dosyalarını** içeren bir klasörün **son güncel
### 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 her şey **şüpheli** olacaktır.
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 loglarda saklandığında, her bir web sunucusu dosyasının ne kadar kez erişildiği gibi **istatistikleri kontrol edebilirsiniz; çünkü bir web shell en çok erişilenlerden biri olabilir**.
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('<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:
```python
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:
```python
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
- [Unit42 Evolving Tactics of SLOW#TEMPEST: A Deep Dive Into Advanced Malware Techniques](https://unit42.paloaltonetworks.com/slow-tempest-malware-obfuscation/)
{{#include ../../banners/hacktricks-training.md}}