hacktricks/reversing-and-exploiting/common-api-used-in-malware.md
2024-04-06 19:41:21 +00:00

12 KiB
Raw Blame History

Загальні API, які використовуються в шкідливому програмному забезпеченні

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Група з безпеки Try Hard

{% embed url="https://discord.gg/tryhardsecurity" %}


Загальне

Мережа

Raw Sockets WinAPI Sockets
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()

Анти-аналіз/ВМ

Назва функції Інструкції збірки
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), щоб користувацькі процеси могли викликати ці функції.
  • Rootkit може змінювати ці вказівники на адреси, якими він керує
  • IRP (I/O Request Packets) передають шматки даних від одного компонента до іншого. Майже все в ядрі використовує IRP, і кожен об'єкт пристрою має свою власну таблицю функцій, яку можна перехопити: DKOM (Direct Kernel Object Manipulation)
  • IAT (Import Address Table) корисна для вирішення залежностей. Можливо перехопити цю таблицю, щоб перехопити код, який буде викликаний.
  • EAT (Export Address Table) Перехоплення. Ці перехоплення можна виконати з userland. Мета - перехопити експортовані функції DLL.
  • Inline Hooks: Цей тип важко досягти. Це включає модифікацію коду функцій самого себе. Можливо, вставивши стрибок на початку цього.

Група з безпеки Try Hard

{% embed url="https://discord.gg/tryhardsecurity" %}

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks: