hacktricks/reversing/common-api-used-in-malware.md

11 KiB
Raw Permalink Blame History

Загальні API, що використовуються в шкідливому ПЗ

{% hint style="success" %} Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримати HackTricks
{% endhint %}

Загальні

Мережа

Сирі сокети WinAPI сокети
socket() WSAStratup()
bind() bind()
listen() listen()
accept() accept()
connect() connect()
read()/recv() recv()
write() send()
shutdown() WSACleanup()

Постійність

Реєстр Файл Служба
RegCreateKeyEx() GetTempPath() OpenSCManager
RegOpenKeyEx() CopyFile() CreateService()
RegSetValueEx() CreateFile() StartServiceCtrlDispatcher()
RegDeleteKeyEx() WriteFile()
RegGetValue() ReadFile()

Шифрування

Назва
WinCrypt
CryptAcquireContext()
CryptGenKey()
CryptDeriveKey()
CryptDecrypt()
CryptReleaseContext()

Анти-аналіз/VM

Назва функції Інструкції асемблера
IsDebuggerPresent() CPUID()
GetSystemInfo() IN()
GlobalMemoryStatusEx()
GetVersion()
CreateToolhelp32Snapshot [Перевірте, чи працює процес]
CreateFileW/A [Перевірте, чи існує файл]

Непомітність

Назва
VirtualAlloc Виділення пам'яті (пакери)
VirtualProtect Зміна дозволів пам'яті (пакер надає дозвіл на виконання секції)
ReadProcessMemory Ін'єкція в зовнішні процеси
WriteProcessMemoryA/W Ін'єкція в зовнішні процеси
NtWriteVirtualMemory
CreateRemoteThread Ін'єкція DLL/процесу...
NtUnmapViewOfSection
QueueUserAPC
CreateProcessInternalA/W

Виконання

Назва функції
CreateProcessA/W
ShellExecute
WinExec
ResumeThread
NtResumeThread

Різне

  • GetAsyncKeyState() -- Логування клавіш
  • SetWindowsHookEx -- Логування клавіш
  • GetForeGroundWindow -- Отримати назву активного вікна (або вебсайту з браузера)
  • LoadLibrary() -- Імпорт бібліотеки
  • GetProcAddress() -- Імпорт бібліотеки
  • CreateToolhelp32Snapshot() -- Список запущених процесів
  • GetDC() -- Скриншот
  • BitBlt() -- Скриншот
  • InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Доступ до Інтернету
  • FindResource(), LoadResource(), LockResource() -- Доступ до ресурсів виконуваного файлу

Техніки шкідливого ПЗ

Ін'єкція DLL

Виконати довільну DLL всередині іншого процесу

  1. Знайти процес для ін'єкції шкідливої DLL: CreateToolhelp32Snapshot, Process32First, Process32Next
  2. Відкрити процес: GetModuleHandle, GetProcAddress, OpenProcess
  3. Записати шлях до DLL всередині процесу: VirtualAllocEx, WriteProcessMemory
  4. Створити потік у процесі, який завантажить шкідливу DLL: CreateRemoteThread, LoadLibrary

Інші функції для використання: NTCreateThreadEx, RtlCreateUserThread

Рефлексивна ін'єкція DLL

Завантажити шкідливу DLL без виклику звичайних API Windows.
DLL відображається всередині процесу, вона вирішить адреси імпорту, виправить переміщення та викличе функцію DllMain.

Захоплення потоку

Знайти потік з процесу та змусити його завантажити шкідливу DLL

  1. Знайти цільовий потік: CreateToolhelp32Snapshot, Thread32First, Thread32Next
  2. Відкрити потік: OpenThread
  3. Призупинити потік: SuspendThread
  4. Записати шлях до шкідливої DLL всередині процесу жертви: VirtualAllocEx, WriteProcessMemory
  5. Відновити потік, що завантажує бібліотеку: ResumeThread

Ін'єкція PE

Ін'єкція Portable Execution: Виконуваний файл буде записаний у пам'яті процесу жертви та буде виконаний звідти.

Порожнє процесу

Шкідливе ПЗ видалить легітимний код з пам'яті процесу та завантажить шкідливий бінарний файл

  1. Створити новий процес: CreateProcess
  2. Зняти відображення пам'яті: ZwUnmapViewOfSection, NtUnmapViewOfSection
  3. Записати шкідливий бінарний файл у пам'ять процесу: VirtualAllocEc, WriteProcessMemory
  4. Встановити точку входу та виконати: SetThreadContext, ResumeThread

Хукінг

  • SSDT (System Service Descriptor Table) вказує на функції ядра (ntoskrnl.exe) або драйвера GUI (win32k.sys), щоб користувацькі процеси могли викликати ці функції.
  • Руткіт може змінити ці вказівники на адреси, які він контролює.
  • IRP (I/O Request Packets) передають частини даних з одного компонента в інший. Практично все в ядрі використовує IRP, і кожен об'єкт пристрою має свою власну таблицю функцій, яку можна підключити: DKOM (Direct Kernel Object Manipulation).
  • IAT (Import Address Table) корисна для вирішення залежностей. Можливо підключити цю таблицю, щоб перехопити код, який буде викликано.
  • EAT (Export Address Table) Хуки. Ці хуки можуть бути зроблені з userland. Мета - підключити експортовані функції DLL.
  • Inline Hooks: Цей тип важко досягти. Це передбачає модифікацію коду самих функцій. Можливо, шляхом вставлення стрибка на початку цього.

{% hint style="success" %} Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримати HackTricks
{% endhint %}