mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/generic-methodologies-and-resources/basic-forensic-meth
This commit is contained in:
		
							parent
							
								
									49e30fe598
								
							
						
					
					
						commit
						569c1dce41
					
				@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## Шпаргалки з Судової Експертизи
 | 
			
		||||
## Чит-листи для Судмедекспертів
 | 
			
		||||
 | 
			
		||||
[https://www.jaiminton.com/cheatsheet/DFIR/#](https://www.jaiminton.com/cheatsheet/DFIR/)
 | 
			
		||||
 | 
			
		||||
@ -67,7 +67,7 @@ clamscan folderpath #Scan the whole folder
 | 
			
		||||
 | 
			
		||||
### IOCs
 | 
			
		||||
 | 
			
		||||
IOC означає Indicator Of Compromise. IOC - це набір **умов, які ідентифікують** деяке потенційно небажане програмне забезпечення або підтверджене **шкідливе ПЗ**. Blue Teams використовують таке визначення, щоб **шукати такі шкідливі файли** у своїх **системах** та **мережах**.\
 | 
			
		||||
IOC означає Індикатор Компрометації. IOC - це набір **умов, які ідентифікують** деяке потенційно небажане програмне забезпечення або підтверджене **шкідливе ПЗ**. Команди Blue Teams використовують таке визначення, щоб **шукати такі шкідливі файли** у своїх **системах** та **мережах**.\
 | 
			
		||||
Д sharing these definitions is very useful as when malware is identified in a computer and an IOC for that malware is created, other Blue Teams can use it to identify the malware faster.
 | 
			
		||||
 | 
			
		||||
Інструмент для створення або модифікації IOCs - це [**IOC Editor**](https://www.fireeye.com/services/freeware/ioc-editor.html)**.**\
 | 
			
		||||
@ -75,7 +75,7 @@ IOC означає Indicator Of Compromise. IOC - це набір **умов, я
 | 
			
		||||
 | 
			
		||||
### Loki
 | 
			
		||||
 | 
			
		||||
[**Loki**](https://github.com/Neo23x0/Loki) - це сканер для простих індикаторів компрометації.\
 | 
			
		||||
[**Loki**](https://github.com/Neo23x0/Loki) - це сканер для Простих Індикаторів Компрометації.\
 | 
			
		||||
Виявлення базується на чотирьох методах виявлення:
 | 
			
		||||
```
 | 
			
		||||
1. File Name IOC
 | 
			
		||||
@ -106,27 +106,27 @@ sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--sk
 | 
			
		||||
 | 
			
		||||
### PEpper
 | 
			
		||||
 | 
			
		||||
[PEpper](https://github.com/Th3Hurrican3/PEpper) перевіряє деякі основні речі всередині виконуваного файлу (бінарні дані, ентропія, URL-адреси та IP-адреси, деякі правила yara).
 | 
			
		||||
[PEpper ](https://github.com/Th3Hurrican3/PEpper)перевіряє деякі базові речі всередині виконуваного файлу (бінарні дані, ентропія, URL-адреси та IP-адреси, деякі правила yara).
 | 
			
		||||
 | 
			
		||||
### PEstudio
 | 
			
		||||
 | 
			
		||||
[PEstudio](https://www.winitor.com/download) - це інструмент, який дозволяє отримувати інформацію про виконувані файли Windows, такі як імпорти, експорти, заголовки, але також перевіряє virus total і знаходить потенційні техніки Att\&ck.
 | 
			
		||||
[PEstudio](https://www.winitor.com/download) - це інструмент, який дозволяє отримувати інформацію про виконувані файли Windows, такі як імпорти, експорти, заголовки, але також перевірить virus total і знайде потенційні техніки Att\&ck.
 | 
			
		||||
 | 
			
		||||
### Detect It Easy(DiE)
 | 
			
		||||
 | 
			
		||||
[**DiE**](https://github.com/horsicq/Detect-It-Easy/) - це інструмент для виявлення, чи файл є **зашифрованим**, а також для знаходження **пакерів**.
 | 
			
		||||
[**DiE**](https://github.com/horsicq/Detect-It-Easy/) - це інструмент для виявлення, чи є файл **зашифрованим**, а також для знаходження **пакерів**.
 | 
			
		||||
 | 
			
		||||
### NeoPI
 | 
			
		||||
 | 
			
		||||
[**NeoPI**](https://github.com/CiscoCXSecurity/NeoPI) - це скрипт на Python, який використовує різноманітні **статистичні методи** для виявлення **обфусцованого** та **зашифрованого** контенту в текстових/скриптових файлах. Заплановане призначення NeoPI - допомогти у **виявленні прихованого коду веб-оболонки**.
 | 
			
		||||
[**NeoPI** ](https://github.com/CiscoCXSecurity/NeoPI) - це скрипт на Python, який використовує різноманітні **статистичні методи** для виявлення **обфусцированого** та **зашифрованого** контенту в текстових/скриптових файлах. Заплановане призначення NeoPI - допомогти у **виявленні прихованого коду веб-оболонки**.
 | 
			
		||||
 | 
			
		||||
### **php-malware-finder**
 | 
			
		||||
 | 
			
		||||
[**PHP-malware-finder**](https://github.com/nbs-system/php-malware-finder) робить все можливе, щоб виявити **обфусцований**/**підозрілий код**, а також файли, що використовують функції **PHP**, які часто використовуються в **шкідливих програмах**/веб-оболонках.
 | 
			
		||||
[**PHP-malware-finder**](https://github.com/nbs-system/php-malware-finder) робить все можливе, щоб виявити **обфусцирований**/**підозрілий код**, а також файли, що використовують функції **PHP**, які часто використовуються в **шкідливих програмах**/веб-оболонках.
 | 
			
		||||
 | 
			
		||||
### Apple Binary Signatures
 | 
			
		||||
 | 
			
		||||
При перевірці деякого **зразка шкідливого ПЗ** ви завжди повинні **перевіряти підпис** бінарного файлу, оскільки **розробник**, який його підписав, може вже бути **пов'язаний** зі **шкідливим ПЗ**.
 | 
			
		||||
При перевірці деякого **зразка шкідливого ПЗ** ви завжди повинні **перевіряти підпис** бінарного файлу, оскільки **розробник**, який його підписав, може бути вже **пов'язаний** зі **шкідливим ПЗ.**
 | 
			
		||||
```bash
 | 
			
		||||
#Get signer
 | 
			
		||||
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
 | 
			
		||||
@ -141,7 +141,7 @@ spctl --assess --verbose /Applications/Safari.app
 | 
			
		||||
 | 
			
		||||
### Складання файлів
 | 
			
		||||
 | 
			
		||||
Якщо ви знаєте, що деяка папка, що містить **файли** веб-сервера, була **останніми оновленнями на певну дату**. **Перевірте** **дату** створення та модифікації всіх **файлів** на **веб-сервері**, і якщо якась дата є **підозрілою**, перевірте цей файл.
 | 
			
		||||
Якщо ви знаєте, що деяка папка, що містить **файли** веб-сервера, була **останніми оновленнями на певну дату**. **Перевірте** **дату** всіх **файлів**, які були створені та змінені на **веб-сервері**, і якщо якась дата є **підозрілою**, перевірте цей файл.
 | 
			
		||||
 | 
			
		||||
### Базові лінії
 | 
			
		||||
 | 
			
		||||
@ -149,6 +149,88 @@ spctl --assess --verbose /Applications/Safari.app
 | 
			
		||||
 | 
			
		||||
### Статистичний аналіз
 | 
			
		||||
 | 
			
		||||
Коли інформація зберігається в журналах, ви можете **перевірити статистику, наприклад, скільки разів кожен файл веб-сервера був доступний, оскільки веб-оболонка може бути однією з найбільш**.
 | 
			
		||||
Коли інформація зберігається в журналах, ви можете **перевірити статистику, наприклад, скільки разів кожен файл веб-сервера був доступний, оскільки веб-оболонка може бути одним з найбільш**.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## Деобфускація динамічного контролю потоку (JMP/CALL RAX диспетчери)
 | 
			
		||||
 | 
			
		||||
Сучасні сімейства шкідливих програм сильно зловживають обфускацією графа контролю потоку (CFG): замість прямого стрибка/виклику вони обчислюють призначення під час виконання та виконують `jmp rax` або `call rax`. Невеликий *диспетчер* (зазвичай дев'ять інструкцій) встановлює остаточну ціль залежно від флагів CPU `ZF`/`CF`, повністю порушуючи статичне відновлення CFG.
 | 
			
		||||
 | 
			
		||||
Цю техніку – продемонстровану завантажувачем SLOW#TEMPEST – можна подолати за допомогою трьохетапного робочого процесу, який покладається лише на IDAPython та емулятор CPU Unicorn.
 | 
			
		||||
 | 
			
		||||
### 1. Знайдіть кожен непрямий стрибок / виклик
 | 
			
		||||
```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. Витягніть байт-код диспетчера
 | 
			
		||||
```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
 | 
			
		||||
```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)` та `run(code,1,1)`, щоб отримати цілі *хибної* та *істинної* гілок.
 | 
			
		||||
 | 
			
		||||
### 4. Виправте прямий перехід / виклик
 | 
			
		||||
```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))
 | 
			
		||||
```
 | 
			
		||||
Після патчінгу, примусьте IDA повторно проаналізувати функцію, щоб відновити повну CFG та вихід Hex-Rays:
 | 
			
		||||
```python
 | 
			
		||||
import ida_auto, idaapi
 | 
			
		||||
idaapi.reanalyze_function(idc.get_func_attr(ea, idc.FUNCATTR_START))
 | 
			
		||||
```
 | 
			
		||||
### 5. Позначте непрямі виклики API
 | 
			
		||||
 | 
			
		||||
Якщо відомо справжнє призначення кожного `call rax`, ви можете повідомити IDA, що це так, щоб типи параметрів і імена змінних відновлювалися автоматично:
 | 
			
		||||
```python
 | 
			
		||||
idc.set_callee_name(call_ea, resolved_addr, 0)  # IDA 8.3+
 | 
			
		||||
```
 | 
			
		||||
### Практичні переваги
 | 
			
		||||
 | 
			
		||||
* Відновлює реальний CFG → декомпіляція переходить з *10* рядків до тисяч.
 | 
			
		||||
* Дозволяє перехресне посилання на рядки та xrefs, що робить реконструкцію поведінки тривіальною.
 | 
			
		||||
* Скрипти можна повторно використовувати: просто вставте їх у будь-який завантажувач, захищений тим самим трюком.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## Посилання
 | 
			
		||||
 | 
			
		||||
- [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}}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user