Analiza złośliwego oprogramowania

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Ściągi do forensyki

https://www.jaiminton.com/cheatsheet/DFIR/#

Usługi online

Offline narzędzia antywirusowe i detekcyjne

Yara

Instalacja

bash
sudo apt-get install -y yara

Przygotuj zasady

Użyj tego skryptu, aby pobrać i połączyć wszystkie zasady yara dotyczące złośliwego oprogramowania z github: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
Utwórz katalog rules i uruchom go. To stworzy plik o nazwie malware_rules.yar, który zawiera wszystkie zasady yara dotyczące złośliwego oprogramowania.

bash
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
python malware_yara_rules.py

Skanuj

bash
yara -w malware_rules.yar image  #Scan 1 file
yara -w malware_rules.yar folder #Scan the whole folder

YaraGen: Sprawdź złośliwe oprogramowanie i utwórz reguły

Możesz użyć narzędzia YaraGen do generowania reguł yara z pliku binarnego. Sprawdź te samouczki: Część 1, Część 2, Część 3

bash
python3 yarGen.py --update
python3.exe yarGen.py --excludegood -m  ../../mals/

ClamAV

Instalacja

sudo apt-get install -y clamav

Skanuj

bash
sudo freshclam      #Update rules
clamscan filepath   #Scan 1 file
clamscan folderpath #Scan the whole folder

Capa

Capa wykrywa potencjalnie złośliwe zdolności w plikach wykonywalnych: PE, ELF, .NET. Znajdzie więc takie rzeczy jak taktyki Att&ck lub podejrzane zdolności, takie jak:

  • sprawdzenie błędu OutputDebugString
  • uruchomienie jako usługa
  • utworzenie procesu

Pobierz to w repozytorium Github.

IOCs

IOC oznacza Wskaźnik Kompromitacji. IOC to zestaw warunków, które identyfikują potencjalnie niechciane oprogramowanie lub potwierdzone złośliwe oprogramowanie. Zespoły Blue używają tego rodzaju definicji do wyszukiwania tego rodzaju złośliwych plików w swoich systemach i sieciach.
Dzielenie się tymi definicjami jest bardzo przydatne, ponieważ gdy złośliwe oprogramowanie zostanie zidentyfikowane na komputerze i utworzone zostanie IOC dla tego złośliwego oprogramowania, inne zespoły Blue mogą je wykorzystać do szybszej identyfikacji złośliwego oprogramowania.

Narzędziem do tworzenia lub modyfikowania IOC jest IOC Editor.
Możesz używać narzędzi takich jak Redline, aby wyszukiwać zdefiniowane IOC w urządzeniu.

Loki

Loki to skaner dla Prosty Wskaźników Kompromitacji.
Wykrywanie opiera się na czterech metodach wykrywania:

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) to skaner złośliwego oprogramowania dla systemu Linux wydany na licencji GNU GPLv2, zaprojektowany z myślą o zagrożeniach występujących w środowiskach współdzielonych. Wykorzystuje dane o zagrożeniach z systemów wykrywania intruzji na krawędzi sieci, aby wyodrębnić złośliwe oprogramowanie, które jest aktywnie wykorzystywane w atakach, i generuje sygnatury do wykrywania. Dodatkowo dane o zagrożeniach pochodzą również z zgłoszeń użytkowników z funkcji LMD checkout oraz zasobów społeczności złośliwego oprogramowania.

rkhunter

Narzędzia takie jak rkhunter mogą być używane do sprawdzania systemu plików pod kątem możliwych rootkitów i złośliwego oprogramowania.

bash
sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--skip-keypress]

FLOSS

FLOSS to narzędzie, które próbuje znaleźć obfuskowane ciągi w plikach wykonywalnych, używając różnych technik.

PEpper

PEpper sprawdza podstawowe rzeczy w pliku wykonywalnym (dane binarne, entropię, adresy URL i IP, niektóre reguły yara).

PEstudio

PEstudio to narzędzie, które pozwala uzyskać informacje o plikach wykonywalnych Windows, takie jak importy, eksporty, nagłówki, ale także sprawdzi virus total i znajdzie potencjalne techniki Att&ck.

Detect It Easy(DiE)

DiE to narzędzie do wykrywania, czy plik jest szyfrowany oraz do znajdowania packerów.

NeoPI

NeoPI to skrypt w Pythonie, który wykorzystuje różnorodne metody statystyczne do wykrywania obfuskowanej i szyfrowanej zawartości w plikach tekstowych/skryptowych. Celem NeoPI jest pomoc w wykrywaniu ukrytego kodu web shell.

php-malware-finder

PHP-malware-finder stara się jak najlepiej wykrywać obfuskowany/podejrzany kod, a także pliki używające funkcji PHP często stosowanych w malware/webshellach.

Apple Binary Signatures

Podczas sprawdzania niektórych próbek malware zawsze powinieneś sprawdzić podpis pliku binarnego, ponieważ deweloper, który go podpisał, może być już powiązany z malware.

bash
#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

Techniki Wykrywania

Stacking Plików

Jeśli wiesz, że jakiś folder zawierający pliki serwera WWW był ostatnio aktualizowany w jakiejś dacie. Sprawdź datę wszystkich plików w serwerze WWW, które zostały utworzone i zmodyfikowane, a jeśli jakakolwiek data jest podejrzana, sprawdź ten plik.

Bazowe Wartości

Jeśli pliki w folderze nie powinny były być modyfikowane, możesz obliczyć hash oryginalnych plików folderu i porównać je z aktualnymi. Wszystko, co zostało zmodyfikowane, będzie podejrzane.

Analiza Statystyczna

Gdy informacje są zapisywane w logach, możesz sprawdzić statystyki, takie jak ile razy każdy plik serwera WWW był dostępny, ponieważ web shell może być jednym z najczęstszych.


Deobfuskacja Dynamicznego Przepływu Kontroli (JMP/CALL RAX Dispatcher)

Nowoczesne rodziny złośliwego oprogramowania intensywnie nadużywają obfuskacji Grafu Przepływu Kontroli (CFG): zamiast bezpośredniego skoku/wywołania obliczają miejsce docelowe w czasie rzeczywistym i wykonują jmp rax lub call rax. Mały dispatcher (zwykle dziewięć instrukcji) ustawia ostateczny cel w zależności od flag CPU ZF/CF, całkowicie łamiąc statyczne odzyskiwanie CFG.

Technika – zaprezentowana przez loader SLOW#TEMPEST – może być pokonana za pomocą trzyetapowego przepływu pracy, który opiera się tylko na IDAPython i emulatorze CPU Unicorn.

1. Zlokalizuj każdy pośredni skok / wywołanie

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. Wyodrębnij bajtowy kod dispatcher'a

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. Emuluj to dwa razy za pomocą 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)

Uruchom run(code,0,0) i run(code,1,1), aby uzyskać cele gałęzi fałszywej i prawdziwej.

4. Napraw bezpośredni skok / wywołanie

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))

Po załataniu wymuś na IDA ponowną analizę funkcji, aby przywrócić pełny CFG i wyjście Hex-Rays:

python
import ida_auto, idaapi
idaapi.reanalyze_function(idc.get_func_attr(ea, idc.FUNCATTR_START))

5. Oznacz pośrednie wywołania API

Gdy znana jest prawdziwa destynacja każdego call rax, możesz powiedzieć IDA, co to jest, aby typy parametrów i nazwy zmiennych zostały automatycznie odzyskane:

python
idc.set_callee_name(call_ea, resolved_addr, 0)  # IDA 8.3+

Praktyczne korzyści

  • Przywraca prawdziwy CFG → dekompilacja przechodzi z 10 linii do tysięcy.
  • Umożliwia krzyżowe odniesienia do ciągów i xrefs, co sprawia, że rekonstrukcja zachowania jest trywialna.
  • Skrypty są wielokrotnego użytku: wrzuć je do dowolnego loadera chronionego tym samym trikiem.

Odniesienia

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks