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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Ściągi do forensyki
https://www.jaiminton.com/cheatsheet/DFIR/#
Usługi online
Offline narzędzia antywirusowe i detekcyjne
Yara
Instalacja
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.
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
python malware_yara_rules.py
Skanuj
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
python3 yarGen.py --update
python3.exe yarGen.py --excludegood -m ../../mals/
ClamAV
Instalacja
sudo apt-get install -y clamav
Skanuj
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.
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.
#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
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
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
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
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:
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:
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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.