Анализ логов windows средствами PowerShell

Проникновение во внутреннюю сеть организации часто начинается с заражения рабочей станции сотрудника, например, с применением фишинговой рассылки. Анализ логов является одним из основных этапов проведения расследований инцидентов кибербезопасности.

В ОС существуют стандартные средства просмотра логов — Event Viewer, однако, при большом объёме информации требуется более масштабируемый и автоматизированный подход. Удобным решением является использование языка Powershell, что позволяет ощутимо упростить и увеличить скорость проведения анализа.

Основные команды Powershell для работы с логами: Get-EventLog (для работы с классическими журналами — Application, System, Security) и Get-WinEvent (для работы с любыми журналами). Список доступных журналов можно получить командой Get-WinEvent -ListLog. Вывести 10 последних записей журнала System позволяет команда Get-WinEvent –LogName ‘System’ –MaxEvents 10. Для более удобной фильтрации можно использовать хэш-таблицы, например, команда Get-WinEvent –FilterHashTable @{LogName=’Security’;ID=4740} выводит информацию о событиях журнала System с кодом 4740, генерация которых связана с блокировкой пользователя.

Для решения задачи получения удаленных входов на АРМ по RDP за последнюю неделю можно написать скрипт, сохранив его для удобства в отдельный файл.

$events = Get-WinEvent –FilterHashTable @{LogName='Security';StartTime=((get-date).Adddays(-7));ID=4624} $result = $events | Where {$_.Properties[8].Values – eq 10} | foreach { $event = $_ ''$($event.TimeGenerated)$($event. Properties [5]) $($event. Properties [11])$($event. Properties [18])'' } $result | out-file result.txt

В результате в файл выводится время события, имя пользователя, название рабочей станции и ip-адрес источника подключения.

Аналогичным образом можно выявлять в логах следы вредоносной активности, среди которых можно выделить:

  1. Перебор пользователей и групп (События 4798 и 4799)
  2. Создание локальной учётной записи и изменения в локальных группах (События 4720, 4722-4276, 4738, 4740, 4767, 4780, 4781,4794, 5376, 5377)
  3. Попытки входа с локальной учётной записью (События 4624)
  4. Подключение устройств Plug’n’Play (События 6416)

При необходимости сбора данных с нескольких АРМ целесообразно собирать логи удалённо. Используя опцию -ComputerName, можно получить логи с удалённого АРМ. Пример команд для сбора логов с нескольких компьютеров:

$comp_list = ''comp1'', ''comp2'', ''comp3'' ForEach ($comp in $comp_list) {$comp; Get-EventLog –LogName Security –ComputerName $comp –After 01/10/21 | Where-Object {$_.EventID –eq '''6416''}}

В результате выполнения скрипт выведет события подключения устройств Plug’n’Play после 01/10/21 с АРМ, заданных в $comp_list.

В случае сложной инфраструктуры и большого числа рабочих мест организации необходимо централизованно собирать и хранить логи на сервере. Задача может быть реализована путём распространения на все компьютеры организации скрипта powershell, загружающего логи на сервер, с помощью MS SCCM, либо службы Active Directory.

11
Начать дискуссию