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