Як увімкнути і експортувати журнали блоків скриптів PowerShell

Як увімкнути і експортувати журнали блоків скриптів PowerShell

SOC Prime Team
SOC Prime Team linkedin icon Стежити

Логи блоків скриптів PowerShell зберігаються в Програми та Службові Журнали → Microsoft → Windows → PowerShell → Оперативний, як подія 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).

Спробуйте LogTotal безкоштовно

Перед початком

Чи увімкнено логування блоків скриптів?

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 нижче.

Експортуйте журнали

У Переглядачі подій, клацніть правою кнопкою Оперативний під PowerShell та оберіть Зберегти Всі Події Як… З командного рядка:

:: лише блоки скриптів

wevtutil epl “Microsoft-Windows-PowerShell/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 фіксує кожен запуск енджина, включаючи версію енджина. Якщо EngineVersion 2.0 на сучасній системі, це зазвичай означає, що хтось навмисно знизив версію, аби уникнути логування блоків скриптів.

Завантажте і перегляньте в LogTotal

LogTotal читає EVTX нативно. Одна річ, яку потрібно знати наперед: LogTotal ще не очищає файли EVTX. [PROOF: confirm which formats the sanitize step covers today.] With PowerShell logs, that matters more than usual, because of the secrets mentioned above. Use EVTX uploads freely for test machines. For production hosts, get a yes from whoever owns data handling first.

  1. Завантажити. Відкрийте logtotal.com і залиште файл. [ДОКАЗ: екран завантаження, обмеження розміру]
  2. Перегляд. [PROOF: what the results screen shows for PowerShell data]

Як це виглядає на реальних даних. Ми використовували [ДОКАЗ: джерело зразка, наприклад тестову ВМ з увімкненим логуванням блоків скриптів, після запуску закодованої колиски завантаження та безпечного рядка тесту втручання AMSI]. LogTotal виявив [ДОКАЗ: фактичні знахідки]. [ДОКАЗ: посилання на файл зразка]

Що робити, коли це не спрацьовує

СимптомЙмовірна причинаFix
Взагалі немає подій 4104Логування блоків скриптів вимкнено, і нічого не виглядало підозрілимУвімкніть його на майбутнє; перевірте журнал Windows PowerShell для отримання того, що ще можна отримати
Лише кілька подій 4104, всі ПопередженняЛогування вимкнено; ви бачите автоматичне логування підозрілих блоківТак само, як вище
PowerShellCore/Operational не знайденоPowerShell 7 не встановлено, або його маніфест не зареєстрованоЗапустіть RegisterManifest.ps1 з $PSHOME
Текст 4104 є нерозбірливим шифротекстомУвімкнено Захищене Логування ПодійВам потрібен сертифікат для розшифровки
Лог охоплює лише кілька годинСтандартний розмір, великий обсягПідвищте максимальний розмір каналу

FAQ

Чи фіксує логування блоків скриптів обфусцирований код?

Здебільшого, так. Воно записує блоки скриптів, коли вони компілюються. Коли обфусцирований код створює та запускає наступну стадію, ця стадія фіксується як власний блок, часто у читабельній формі.

У чому різниця від транскрипції?

Транскрипція записує текстові файли вхідних та вихідних даних сеансу у папку. Логування блоків скриптів фіксує сам код у журналі подій. Вони доповнюють один одного, і обидва варто мати.

Приєднуйтесь до платформи Detection as Code від SOC Prime щоб покращити видимість загроз, найбільш актуальних для вашого бізнесу. Щоб допомогти вам розпочати та отримати негайну цінність, забронюйте зустріч зараз з експертами SOC Prime.