Аналіз Шкідливого ПЗ
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Чит-листи для Судмедекспертів
https://www.jaiminton.com/cheatsheet/DFIR/#
Онлайн Сервіси
Офлайн Антивірусні та Інструменти Виявлення
Yara
Встановлення
sudo apt-get install -y yara
Підготовка правил
Використовуйте цей скрипт для завантаження та об'єднання всіх правил yara для шкідливого ПЗ з github: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
Створіть директорію rules і виконайте його. Це створить файл під назвою malware_rules.yar, який міститиме всі правила yara для шкідливого ПЗ.
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: Перевірка на наявність шкідливого ПЗ та створення правил
Ви можете використовувати інструмент YaraGen для генерації правил yara з бінарного файлу. Ознайомтеся з цими навчальними посібниками: Частина 1, Частина 2, Частина 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 або підозрілі можливості, такі як:
- перевірка на помилку OutputDebugString
- запуск як служба
- створення процесу
Отримайте його в Github репозиторії.
IOCs
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.
Ви можете використовувати такі інструменти, як Redline, щоб шукати визначені IOCs на пристрої.
Loki
Loki - це сканер для Простих Індикаторів Компрометації.
Виявлення базується на чотирьох методах виявлення:
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) - це сканер шкідливого ПЗ для Linux, випущений під ліцензією GNU GPLv2, який розроблений з урахуванням загроз, що виникають у середовищах спільного хостингу. Він використовує дані про загрози з систем виявлення вторгнень на краю мережі для виявлення шкідливого ПЗ, яке активно використовується в атаках, і генерує сигнатури для виявлення. Крім того, дані про загрози також отримуються з подань користувачів за допомогою функції перевірки LMD та ресурсів спільноти шкідливого ПЗ.
rkhunter
Інструменти, такі як rkhunter, можуть бути використані для перевірки файлової системи на можливі rootkits та шкідливе ПЗ.
sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--skip-keypress]
FLOSS
FLOSS - це інструмент, який намагатиметься знайти обфусцировані рядки всередині виконуваних файлів, використовуючи різні техніки.
PEpper
PEpper перевіряє деякі базові речі всередині виконуваного файлу (бінарні дані, ентропія, URL-адреси та IP-адреси, деякі правила yara).
PEstudio
PEstudio - це інструмент, який дозволяє отримувати інформацію про виконувані файли Windows, такі як імпорти, експорти, заголовки, але також перевірить virus total і знайде потенційні техніки Att&ck.
Detect It Easy(DiE)
DiE - це інструмент для виявлення, чи є файл зашифрованим, а також для знаходження пакерів.
NeoPI
NeoPI - це скрипт на Python, який використовує різноманітні статистичні методи для виявлення обфусцированого та зашифрованого контенту в текстових/скриптових файлах. Заплановане призначення NeoPI - допомогти у виявленні прихованого коду веб-оболонки.
php-malware-finder
PHP-malware-finder робить все можливе, щоб виявити обфусцирований/підозрілий код, а також файли, що використовують функції PHP, які часто використовуються в шкідливих програмах/веб-оболонках.
Apple Binary Signatures
При перевірці деякого зразка шкідливого ПЗ ви завжди повинні перевіряти підпис бінарного файлу, оскільки розробник, який його підписав, може бути вже пов'язаний зі шкідливим ПЗ.
#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
Техніки виявлення
Складання файлів
Якщо ви знаєте, що деяка папка, що містить файли веб-сервера, була останніми оновленнями на певну дату. Перевірте дату всіх файлів, які були створені та змінені на веб-сервері, і якщо якась дата є підозрілою, перевірте цей файл.
Базові лінії
Якщо файли папки не повинні були бути зміненими, ви можете обчислити хеш оригінальних файлів папки та порівняти їх з поточними. Усе, що було змінено, буде підозрілим.
Статистичний аналіз
Коли інформація зберігається в журналах, ви можете перевірити статистику, наприклад, скільки разів кожен файл веб-сервера був доступний, оскільки веб-оболонка може бути одним з найбільш.
Деобфускація динамічного контролю потоку (JMP/CALL RAX диспетчери)
Сучасні сімейства шкідливих програм сильно зловживають обфускацією графа контролю потоку (CFG): замість прямого стрибка/виклику вони обчислюють призначення під час виконання та виконують jmp rax
або call rax
. Невеликий диспетчер (зазвичай дев'ять інструкцій) встановлює остаточну ціль залежно від флагів CPU ZF
/CF
, повністю порушуючи статичне відновлення CFG.
Цю техніку – продемонстровану завантажувачем SLOW#TEMPEST – можна подолати за допомогою трьохетапного робочого процесу, який покладається лише на IDAPython та емулятор CPU Unicorn.
1. Знайдіть кожен непрямий стрибок / виклик
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)
, щоб отримати цілі хибної та істинної гілок.
4. Виправте прямий перехід / виклик
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 → декомпіляція переходить з 10 рядків до тисяч.
- Дозволяє перехресне посилання на рядки та xrefs, що робить реконструкцію поведінки тривіальною.
- Скрипти можна повторно використовувати: просто вставте їх у будь-який завантажувач, захищений тим самим трюком.
Посилання
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.