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

Получаем историю запуска программ в 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 - запуск процесса

Обратите внимание, что при включении рассмотренной выше политики 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%AppCompatProgramsAmcache.hve. Файл заблокирован Windows и прочитать его можно только, загрузившись с LiveCD или загрузочного/установочного диска. В файле есть метки запуска, установки/удаления программы, контрольные суммы исполняемого файла (SHA1). Для преобразования этого бинарного файла в текстовый формат нужно использовать сторонние утилиты (например, regripper).

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