В этой статье мы рассмотрим, как с помощью политик аудита Windows можно узнать какие программы запускались на компьютере. Довольно часто от администратора требуют предоставить информацию о том, какие приложения запускает пользователь, когда он запускал приложение в последний раз и т.д. Эту информацию можно собрать из журнала событий Windows и преобразовать в удобный отчет с помощью PowerShell.
Сначала нужно включить политику аудита запуска/остановки процессов в Windows.
- Откройте редактор локальной групповой политики gpedit.msc ;Если вы хотите включить политику аудита процессов на компьютерах в домене Active Directory, нужно использовать редактор доменных GPO –
gpmc.msc
. - Перейдите в раздел GPO Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Audit Policy;
- Включите политику Audit process tracking и тип событий Success ;Мы показывали, как использовать эти события аудита для поиска источника блокировки учетной записи на компьютере .
- Сохраните изменения и обновите локальные политики на клиенте командой:
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
).
Обратите внимание, что при включении рассмотренной выше политики Audit process tracking в журнал Security начинают сохранятся все события, связанные с процессами. Если вы хотите уменьшить число событий в Event Viewer и сохранять только информацию о событиях запуска, можно отключить данную политику и включить только расширенную политику аудита Audit Process Creation (Windows Settings -> Security Settings -> Advanced Audit Policy Configurations -> System Audit Policy -> Detailed Tracking).
Чтобы в события аудита записывалась информация о параметрах запуска процессов (аргументы, с которыми запускаются программы), включите также параметр GPO Include command line in process creation events в Computer Configuration -> Administrative Templates -> System -> Audit Process Creation.
После включения этой политики в аргументе Process Command Line видно, с каким аргументом запускался тот или иной процесс.
Для анализа программ, запущенных пользователем можно использовать фильтры 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 .
Полученный массив объектов можно использовать для выполнения различных запросов.
Например,
- Найти всех пользователей, которые запускали определённое приложение:
$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).