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

Reading time: 3 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Загальні

Мережа

Сирі сокети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: Цей тип важко досягти. Це передбачає модифікацію коду самих функцій. Можливо, шляхом вставлення стрибка на початку цього.

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks