Получаем историю запуска программ в Windows с помощью политик аудита

В этой статье мы рассмотрим, как с помощью политик аудита Windows можно узнать какие программы запускались на компьютере. Довольно часто от администратора требуют предоставить информацию о том, какие приложения запускает пользователь, когда он запускал приложение в последний раз и т.д. Эту информацию можно собрать из журнала событий Windows и преобразовать в удобный отчет с помощью PowerShell.

Сначала нужно включить политику аудита запуска/остановки процессов в Windows.

  1. Откройте редактор локальной групповой политики gpedit.msc ;
    Если вы хотите включить политику аудита процессов на компьютерах в домене Active Directory, нужно использовать редактор доменных GPO gpmc.msc .
  2. Перейдите в раздел GPO Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Audit Policy;
  3. Включите политику Audit process tracking и тип событий Success ;
    Мы показывали, как использовать эти события аудита для поиска источника блокировки учетной записи на компьютере .

    Включить аудит процессов в Windows

  4. Сохраните изменения и обновите локальные политики на клиенте командой: gpupdate /force

Откройте Event Viewer ( eventvwr.msc ) и разверните раздел Windows Logs -> Security. Теперь при запуске любой программы (процесса) в этом журнале событий появляется событие Process Creation с EventID 4688 .

A new process has been created.

В информации о событии указан пользователь, запустивший программу ( Creator Subject ), имя исполняемого файла процесса ( New Process Name ) и родительский процесс, из которого было запущено приложение ( Creator Process Name ).

событие event id 4688 - запуск процесса

Событие завершения процесса (A process has exited) имеет EventID 4689. Ранее мы показывали как с помощью этих события и триггера планировщика можно выполнить скрипт (действие) при запуске/завершении определённой программы в Windows .

Обратите внимание, что при включении рассмотренной выше политики Audit process tracking в журнал Security начинают сохранятся все события, связанные с процессами. Если вы хотите уменьшить число событий в Event Viewer и сохранять только информацию о событиях запуска, можно отключить данную политику и включить только расширенную политику аудита Audit Process Creation (Windows Settings -> Security Settings -> Advanced Audit Policy Configurations -> System Audit Policy -> Detailed Tracking).

Политика аудита запуска процессов в Windows - Audit Process Creation

Чтобы в события аудита записывалась информация о параметрах запуска процессов (аргументы, с которыми запускаются программы), включите также параметр GPO Include command line in process creation events в Computer Configuration -> Administrative Templates -> System -> Audit Process Creation.

параметр GPO Include command line in process creation events

После включения этой политики в аргументе Process Command Line видно, с каким аргументом запускался тот или иной процесс.

аргумент, с котороым запускалась программа/процесс в Windows

Не забудьте увеличить размер журнала Security со стандартных 20 Мб. Это позволит хранить история запуска приложения за более длительный период. Для этого откройте свойства журнала Security и увеличьте значение параметра Maximum log size .
увеличить размер журнала security

Для анализа программ, запущенных пользователем можно использовать фильтры Event Viewer. Но это не очень удобно. Ниже я покажу несколько PowerShell скриптов который позволят вам получить удобные списки событий с историей запуска приложений пользователями. Для получения событий из журнала Event Viewer мы будем использовать команду Get-WinEvent :

$processhistory = @()
$today = get-date -DisplayHint date -UFormat %Y-%m-%d
$events=Get-WinEvent -FilterHashtable @{
LogName = 'Security'
starttime="$today"
ID = 4688
}
foreach ($event in $events){
$proc = New-Object PSObject -Property @{
ProcessName=$event.Properties[5].Value
Time=$event.TimeCreated
CommandLine=$event.Properties[8].Value
User=$event.Properties[1].Value
ParentProcess=$event.Properties[13].Value
}
$processhistory += $proc
}
$processhistory| Out-GridView

Данный PowerShell скрипт выберет все события запуска программ за сегодняшний день и выведет список процессов, времени запуска и пользователях в графическую таблицу Out-GridView .

powershell скрипт выбора события запуска приложения в event viewer

Полученный массив объектов можно использовать для выполнения различных запросов.

Например,

  • Найти всех пользователей, которые запускали определённое приложение: $proc_name=”notepad++.exe”
    $processhistory | where-object {$_.ProcessName –like “*$proc_name*”}|out-gridview
    вывести кто запускал программу на компьютере
  • Вывести список программ, которые запускал сегодня определенный пользователь:
    $username="aivanov"
    $processhistory | where-object {$_.User –like “*$username*”}|out-gridview

Такие скрипты часто используем для анализа запуска программ пользователей на серверах RDS фермы .

Также история запуска программ в Windows ведется в файле %SystemRoot%AppCompatPrograms Amcache.hve . Файл заблокирован Windows и прочитать его можно только, загрузившись с LiveCD или загрузочного/установочного диска. В файле есть метки запуска, установки/удаления программы, контрольные суммы исполняемого файла (SHA1). Для преобразования этого бинарного файла в текстовый формат нужно использовать сторонние утилиты (например, regripper).

Также напоминаю, что PowerShell также ведет собственную историю запущенных команд.
EnglishRussianUkrainian