Malware Analysis
Reading time: 9 minutes
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.
Forensics CheatSheets
https://www.jaiminton.com/cheatsheet/DFIR/#
Usługi online
Offline — narzędzia antywirusowe i wykrywania
Yara
Instalacja
sudo apt-get install -y yara
Przygotuj reguły
Użyj tego skryptu, aby pobrać i scalić wszystkie reguły yara dotyczące malware z GitHub: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
Utwórz katalog rules i uruchom go. Spowoduje to utworzenie pliku o nazwie malware_rules.yar, który zawiera wszystkie reguły yara dla malware.
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
python malware_yara_rules.py
Skanowanie
yara -w malware_rules.yar image #Scan 1 file
yara -w malware_rules.yar folder #Scan the whole folder
YaraGen: Sprawdź malware i twórz yara rules
Możesz użyć narzędzia YaraGen aby wygenerować yara rules z pliku binarnego. Zobacz te samouczki: Part 1, Part 2, Part 3
python3 yarGen.py --update
python3.exe yarGen.py --excludegood -m ../../mals/
ClamAV
Instalacja
sudo apt-get install -y clamav
Skanowanie
sudo freshclam #Update rules
clamscan filepath #Scan 1 file
clamscan folderpath #Scan the whole folder
Capa
Capa wykrywa potencjalnie złośliwe możliwości w plikach wykonywalnych: PE, ELF, .NET. Dzięki temu znajdzie rzeczy takie jak Att&ck tactics, albo podejrzane możliwości takie jak:
- sprawdzenie błędu OutputDebugString
- run as a service
- create process
Pobierz go w Github repo.
IOCs
IOC oznacza Indicator Of Compromise. IOC to zestaw warunków, które identyfikują potencjalnie niechciane oprogramowanie lub potwierdzone malware. Blue Teams używają tego rodzaju definicji, aby wyszukiwać tego typu złośliwe pliki w swoich systemach i sieciach.
Współdzielenie tych definicji jest bardzo przydatne — gdy malware zostanie zidentyfikowane na komputerze i utworzony zostanie IOC dla tego malware, inne Blue Teams mogą użyć go do szybszej identyfikacji zagrożenia.
Narzędziem do tworzenia lub modyfikowania IOCs jest IOC Editor.
Możesz użyć narzędzi takich jak Redline aby wyszukać zdefiniowane IOC na urządzeniu.
Loki
Loki to skaner dla Simple Indicators of Compromise.
Wykrywanie opiera się na czterech metodach detekcji:
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 malware dla Linuxa wydany na licencji GNU GPLv2, zaprojektowany z myślą o zagrożeniach występujących w środowiskach hostingu współdzielonego. Wykorzystuje dane o zagrożeniach z systemów IDS na krawędzi sieci do ekstrakcji malware, które są aktywnie wykorzystywane w atakach, i generuje sygnatury do wykrywania. Dodatkowo dane o zagrożeniach pochodzą także ze zgłoszeń użytkowników za pomocą LMD checkout feature oraz z malware community resources.
rkhunter
Narzędzia takie jak rkhunter można użyć do sprawdzenia systemu plików w poszukiwaniu możliwych rootkits i malware.
sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--skip-keypress]
FLOSS
FLOSS jest narzędziem, które spróbuje znaleźć obfuscated strings wewnątrz executables używając różnych technik.
PEpper
PEpper sprawdza podstawowe rzeczy w executable (binary data, entropy, URLs and IPs, some yara rules).
PEstudio
PEstudio to narzędzie pozwalające uzyskać informacje o Windows executables takich jak imports, exports, headers, ale także sprawdzi virus total i znajdzie potencjalne Att&ck techniques.
Detect It Easy(DiE)
DiE to narzędzie do wykrywania, czy plik jest encrypted oraz do znajdowania packers.
NeoPI
NeoPI is skrypt w Pythonie, który używa różnych statistical methods do wykrywania obfuscated i encrypted treści w plikach tekstowych/skryptach. Celem NeoPI jest pomoc w detection of hidden web shell code.
php-malware-finder
PHP-malware-finder stara się jak najlepiej wykryć obfuscated/dodgy code, a także pliki używające funkcji PHP często stosowanych w malwares/webshells.
Apple Binary Signatures
Przy sprawdzaniu jakiegoś malware sample zawsze powinieneś check the signature binarnego pliku, ponieważ developer, który go podpisał, może być już related 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
File Stacking
Jeśli wiesz, że jakiś folder zawierający pliki serwera WWW został ostatnio zaktualizowany w określonym terminie. Sprawdź daty utworzenia i modyfikacji wszystkich plików na serwerze WWW i jeśli jakaś data jest podejrzana, sprawdź ten plik.
Linia bazowa
Jeśli pliki w folderze nie powinny były być modyfikowane, możesz policzyć 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, np. ile razy każdy plik serwera WWW był dostępny — web shell może być jednym z najczęściej występujących.
Natywna telemetryka in-app na Androidzie (no root)
Na Androidzie możesz instrumentować kod natywny wewnątrz procesu docelowej aplikacji, preloadując małą bibliotekę loggera przed zainicjalizowaniem innych bibliotek JNI. Daje to wczesną widoczność zachowania natywnego bez hooków systemowych czy roota. Popularne podejście to SoTap: wrzuć libsotap.so dla właściwego ABI do APK i wstrzyknij wywołanie System.loadLibrary("sotap") wcześnie (np. static initializer lub Application.onCreate), następnie zbieraj logi ze ścieżek wewnętrznych/zewnętrznych lub jako fallback Logcat.
Zobacz stronę Android native reversing po szczegóły konfiguracji i ścieżki logów:
Deobfuskacja dynamicznego przepływu sterowania (JMP/CALL RAX Dispatchers)
Nowoczesne rodziny malware intensywnie nadużywają obfuskacji Control-Flow Graph (CFG): zamiast bezpośredniego jump/call obliczają cel w czasie wykonania i wykonują jmp rax
lub call rax
. Mały dispatcher (zwykle dziewięć instrukcji) ustawia końcowy target w zależności od flag CPU ZF
/CF
, całkowicie łamiąc statyczne odzyskiwanie CFG.
Technika — pokazana przez loader SLOW#TEMPEST — może zostać pokonana za pomocą trzyetapowego procesu, który opiera się wyłącznie na IDAPython i emulatorze CPU Unicorn.
1. Zlokalizuj każdy pośredni jump / call
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 dispatcher byte-code
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 dwukrotnie przy użyciu 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 false i true.
4. Przywrócenie bezpośredniego skoku / wywołania
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 patching, wymuś w IDA ponowną analizę funkcji, aby przywrócić pełny CFG i Hex-Rays output:
import ida_auto, idaapi
idaapi.reanalyze_function(idc.get_func_attr(ea, idc.FUNCATTR_START))
5. Oznacz pośrednie wywołania API
Gdy znane jest rzeczywiste przeznaczenie każdego call rax
, możesz powiedzieć IDA, czym ono jest, aby typy parametrów & nazwy zmiennych zostały odzyskane automatycznie:
idc.set_callee_name(call_ea, resolved_addr, 0) # IDA 8.3+
Praktyczne korzyści
- Przywraca prawdziwy CFG → dekompilacja zmienia się z 10 linii do tysięcy.
- Umożliwia string-cross-reference & xrefs, co czyni rekonstrukcję zachowania trywialną.
- Skrypty są wielokrotnego użytku: umieść je w dowolnym loaderze chronionym tą samą sztuczką.
AdaptixC2: Ekstrakcja konfiguracji i TTPs
Zobacz dedykowaną stronę:
Adaptixc2 Config Extraction And Ttps
Źródła
- Unit42 – Evolving Tactics of SLOW#TEMPEST: A Deep Dive Into Advanced Malware Techniques
- SoTap: Lightweight in-app JNI (.so) behavior logger – github.com/RezaArbabBot/SoTap
- Unit42 – AdaptixC2: A New Open-Source Framework Leveraged in Real-World Attacks
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.