Журнали блоків скриптів PowerShell живуть у Журнали додатків та служб → Microsoft → Windows → PowerShell → Operational, як подія 4104. Вони повні лише, якщо ввімкнено журналювання блоків скриптів. Щоб експортувати їх:
wevtutil epl "Microsoft-Windows-PowerShell/Operational" C:logspowershell.evtx
PowerShell 7 є окремим продуктом з окремим каналом, PowerShellCore/Operational, і власним політичним налаштуванням.
Якщо зловмисник взаємодіяв з комп’ютером Windows, найімовірніше, PowerShell був залучений. Журналювання блоків скриптів записує код, який насправді виконувався, часто після зняття шарів обфускації. Prime Core має 663 правила виявлення для журналів PowerShell, які відображаються на 417 технік MITRE ATT&CK. Вони охоплюють зловмисне використання PowerShell (T1059.001), обфускацію (T1027) та завантаження, які залучають інструменти (T1105).
Перед тим як почати
Чи ввімкнено журналювання блоків скриптів?
reg query "HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging"
EnableScriptBlockLogging встановлено на 0x1 означає так. Якщо ключ не існує, він вимкнений. Навіть тоді Windows PowerShell 5.1 все ще записує блоки скриптів, які вважає підозрілими, як події 4104 на рівні попередження. Тож ви можете знайти деякі події. Просто не плутайте їх з повною картиною.
Увімкнення його допомагає з цього моменту, але не для того, що вже сталося. Використовуйте налаштування групової політики Адміністративні шаблони → Компоненти Windows → Windows PowerShell → Увімкнути журналювання блоків скриптів PowerShell, або встановіть значення реєстру безпосередньо:
reg add "HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging" /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f
PowerShell 7 читає свій політичний ключ під HKLMSOFTWAREPoliciesMicrosoftPowerShellCore. Якщо він був встановлений з zip, а не з MSI, його канал подій може не бути зареєстрованим, доки ви не запустите RegisterManifest.ps1 з $PSHOME.
Очікуйте обсяг. Кожен скрипт і модуль, що запускається, потрапляє в журнал. Збільште максимальний розмір каналу, або у вас залишиться лише кілька годин.
Очікуйте секрети. Адміністративні скрипти іноді містять паролі та API ключі у відкритому вигляді, і журналювання блоків скриптів записує їх точно. Майже перед тим, як цей файл кудись піде, і прочитайте розділ LogTotal нижче.
Експортувати журнали
У переглядачі подій натисніть правою кнопкою миші Operational під PowerShell і виберіть Зберегти всі події як… З командного рядка:
:: лише блоки скриптів
wevtutil epl "Microsoft-Windows-ПоверШелл/Operational" C:logsps_4104.evtx /q:"*[System[(EventID=4104)]]"
:: PowerShell 7
wevtutil epl "PowerShellCore/Operational" C:logspwsh.evtx
:: класичний журнал "Windows PowerShell": події запуску двигуна з командного рядка хоста
wevtutil epl "Windows PowerShell" C:logswindows_powershell.evtx
Цей останній легко забути, але його варто захопити. Подія 400 записує кожен запуск двигуна, включаючи версію двигуна. Версія двигуна 2.0 на сучасній системі зазвичай означає, що хтось свідомо понизив версію, щоб уникнути журналювання блоків скриптів.
Завантажте та перегляньте в LogTotal
LogTotal читає EVTX рідною мовою. Одна річ, яку слід знати спочатку: LogTotal ще не очищає файли EVTX. З логами PowerShell це важливіше, ніж зазвичай, через секрети, згадані вище. Використовуйте завантаження EVTX вільно для тестових машин. Для продукційних хостів отримайте дозвіл від тих, хто відповідає за обробку даних.
- Завантажте. Відкрийте logtotal.com і вставте файл.
- Перегляньте.
Коли це йде неправильно
| Симптом | Ймовірна причина | Fix |
|---|---|---|
| Жодних подій 4104 взагалі | Журналування блоків скриптів вимкнено, і нічого не виглядало підозріло | Увімкніть його на майбутнє; перевірте журнал Windows PowerShell, щоб побачити, що можна отримати |
| Лише кілька подій 4104, всі попередження | Журналювання вимкнено; ви бачите автоматичне журналювання підозрілих блоків | Те саме, що вище |
| PowerShellCore/Operational не знайдено | PowerShell 7 не встановлено, або його маніфест не зареєстровано | Запустіть RegisterManifest.ps1 з $PSHOME |
| Текст 4104 є нечитаємим шифротекстом | Увімкнено захищене журналювання подій | Вам потрібен сертифікат для розшифровки |
| Журнал охоплює лише кілька годин | Типовий розмір, великий обсяг | Збільште максимальний розмір каналу |
FAQ
Чи вловлює журналювання блоків скриптів обфускований код?
В основному, так. Воно записує блоки скриптів, коли вони компілюються. Коли обфускований код створює і запускає наступний етап, цей етап записується як власний блок, часто в читабельній формі.
У чому різниця з транскрипцією?
Транскрипція пише текстові файли з вхідними і вихідними даними сесії у папку. Журналювання блоків скриптів записує сам код у журнальний запис. Вони доповнюють один одного і обидва варті використання.