11 KiB
Загальні API, що використовуються в шкідливому ПЗ
{% hint style="success" %}
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримати HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Загальні
Мережа
Сирі сокети | 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 всередині іншого процесу
- Знайти процес для ін'єкції шкідливої DLL: CreateToolhelp32Snapshot, Process32First, Process32Next
- Відкрити процес: GetModuleHandle, GetProcAddress, OpenProcess
- Записати шлях до DLL всередині процесу: VirtualAllocEx, WriteProcessMemory
- Створити потік у процесі, який завантажить шкідливу DLL: CreateRemoteThread, LoadLibrary
Інші функції для використання: NTCreateThreadEx, RtlCreateUserThread
Рефлексивна ін'єкція DLL
Завантажити шкідливу DLL без виклику звичайних API Windows.
DLL відображається всередині процесу, вона вирішить адреси імпорту, виправить переміщення та викличе функцію DllMain.
Захоплення потоку
Знайти потік з процесу та змусити його завантажити шкідливу DLL
- Знайти цільовий потік: CreateToolhelp32Snapshot, Thread32First, Thread32Next
- Відкрити потік: OpenThread
- Призупинити потік: SuspendThread
- Записати шлях до шкідливої DLL всередині процесу жертви: VirtualAllocEx, WriteProcessMemory
- Відновити потік, що завантажує бібліотеку: ResumeThread
Ін'єкція PE
Ін'єкція Portable Execution: Виконуваний файл буде записаний у пам'яті процесу жертви та буде виконаний звідти.
Порожнє процесу
Шкідливе ПЗ видалить легітимний код з пам'яті процесу та завантажить шкідливий бінарний файл
- Створити новий процес: CreateProcess
- Зняти відображення пам'яті: ZwUnmapViewOfSection, NtUnmapViewOfSection
- Записати шкідливий бінарний файл у пам'ять процесу: VirtualAllocEc, WriteProcessMemory
- Встановити точку входу та виконати: 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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.