14 KiB
Raw Blame History

Malware Analysis

{{#include ../../banners/hacktricks-training.md}}

Forensics CheatSheets

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

Онлайн сервіси

Офлайн антивірусні та інструменти виявлення

Yara

Встановлення

sudo apt-get install -y yara

Підготуйте правила

Використайте цей скрипт, щоб завантажити та об'єднати всі yara malware rules з github: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9\
Створіть директорію rules і виконайте скрипт. Це створить файл malware_rules.yar, який міститиме всі yara rules для malware.

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

Сканування

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

YaraGen: Перевірка на malware та створення правил

Ви можете використовувати інструмент YaraGen для генерації yara rules із бінарного файлу. Перегляньте ці підручники: Part 1, Part 2, Part 3

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

ClamAV

Встановлення

sudo apt-get install -y clamav

Сканування

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

Capa

Capa виявляє потенційно шкідливі можливості в виконуваних файлах: PE, ELF, .NET. Тому він знайде такі речі, як Att&ck tactics, або підозрілі можливості, наприклад:

  • check for OutputDebugString error
  • run as a service
  • create process

Отримати його можна в Github repo.

IOCs

IOC означає Indicator Of Compromise. IOC — це набір умов, що ідентифікують деяке потенційно небажане програмне забезпечення або підтверджене malware. Blue Teams використовують такого роду визначення, щоб шукати цього роду шкідливі файли у своїх системах та мережах.
Обмін цими визначеннями дуже корисний: якщо malware виявлено на комп'ютері і створено IOC для цього malware, інші Blue Teams можуть використати його, щоб швидше ідентифікувати загрозу.

Інструмент для створення або модифікації IOCs — IOC Editor.
Ви можете використовувати інструменти, такі як Redline, щоб шукати визначені IOCs на пристрої.

Loki

Loki є сканером для Simple Indicators of Compromise.
Виявлення базується на чотирьох методах детекції:

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) — це сканер malware для Linux, випущений під ліцензією GNU GPLv2, розроблений з урахуванням загроз, які виникають у середовищах спільного хостингу. Він використовує дані про загрози із систем виявлення вторгнень на периферії мережі для вилучення malware, яке активно використовується в атаках, і генерує сигнатури для виявлення. Крім того, дані про загрози також отримуються з подань користувачів через функцію LMD checkout та ресурсів спільноти malware.

rkhunter

Інструменти на кшталт rkhunter можна використовувати для перевірки файлової системи на наявність можливих rootkits і malware.

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

FLOSS

FLOSS — інструмент, який намагається знайти obfuscated strings всередині виконуваних файлів, використовуючи різні техніки.

PEpper

PEpper перевіряє базові речі у виконуваному файлі (binary data, entropy, URLs and IPs, some yara rules).

PEstudio

PEstudio — інструмент, який дозволяє отримати інформацію про Windows executables, такі як imports, exports, headers, а також перевіряє virus total і знаходить потенційні Att&ck techniques.

Detect It Easy(DiE)

DiE — інструмент для визначення, чи файл є encrypted, а також для виявлення packers.

NeoPI

NeoPI — Python script, який використовує різні statistical methods для виявлення obfuscated та encrypted даних у текстових/скриптових файлах. Основна мета NeoPI — допомогти у detection of hidden web shell code.

php-malware-finder

PHP-malware-finder робить усе можливе, щоб виявити obfuscated/dodgy code, а також файли, що використовують PHP функції, часто вживані в malwares/webshells.

Apple Binary Signatures

Під час перевірки деякого malware sample завжди слід check the signature бінарного файлу, оскільки developer, який його підписав, може вже бути related з malware.

#Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"

#Check if the apps contents have been modified
codesign --verify --verbose /Applications/Safari.app

#Check if the signature is valid
spctl --assess --verbose /Applications/Safari.app

Техніки виявлення

File Stacking

Якщо відома папка, що містить files веб-сервера була останній раз оновлена в певну дату, перевірте дату, коли всі files на web server були створені та змінені, і якщо якась дата здається підозрілою, перевірте цей файл.

Baselines

Якщо files у папці не мали бути змінені, ви можете обчислити hash від оригінальних files папки і порівняти їх із поточними. Будь-які зміни будуть підозрілі.

Statistical Analysis

Коли інформація зберігається в logs, можна перевірити статистику, наприклад, скільки разів кожен файл на web server був доступний — web shell може бути одним із найчастіше accessed.


Android in-app native telemetry (no root)

На Android ви можете інструментувати native code всередині процесу цільового додатка, попередньо підвантаживши невелику бібліотеку логера перед ініціалізацією інших JNI libs. Це дає ранню видимість native поведінки без system-wide hooks або root. Популярний підхід — SoTap: помістіть libsotap.so для потрібного ABI в APK і інжектуйте виклик System.loadLibrary("sotap") на ранньому етапі (наприклад, static initializer або Application.onCreate), після чого збирайте логи з internal/external paths або через fallback в Logcat.

See the Android native reversing page for setup details and log paths:

{{#ref}} ../../../mobile-pentesting/android-app-pentesting/reversing-native-libraries.md {{#endref}}


Deobfuscating Dynamic Control-Flow (JMP/CALL RAX Dispatchers)

Сучасні malware families широко зловживають Control-Flow Graph (CFG) obfuscation: замість прямого jump/call вони обчислюють ціль під час виконання і виконують jmp rax або call rax. Невеликий dispatcher (зазвичай дев'ять інструкцій) встановлює кінцеву мішень залежно від CPU ZF/CF флагів, повністю ламаючи статичне відновлення CFG.

Техніку — продемонстровану в SLOW#TEMPEST loader — можна подолати трикроковим workflow, який покладається лише на IDAPython та Unicorn CPU emulator.

1. Locate every indirect 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. Витягніть байткод диспетчера

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

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), щоб отримати false і true цільові адреси гілок.

4. Відновлення прямого jump / call

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:

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

5. Позначте непрямі виклики API

Коли відоме реальне призначення кожного call rax, можна вказати IDA, що це за функція, і типи параметрів та імена змінних відновляться автоматично:

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

Практичні переваги

  • Відновлює реальний CFG → decompilation переходить з 10 рядків до тисяч.
  • Дозволяє string-cross-reference & xrefs, що робить відновлення поведінки тривіальним.
  • Скрипти повторно використовуються: просто помістіть їх у будь-який loader, захищений тим самим трюком.

Джерела

{{#include ../../banners/hacktricks-training.md}}