
В этой статье мы покажем, как отследить событие запуска определенной программы (процесса) в Windows и выполнить действие (запустить скрипт, команду, программу, отправить письмо и т. д.). В качестве примера мы будем отслеживать запуск процесса Notepad.exe. И когда пользователь откроет блокнот, Windows автоматически запустит определенный сценарий PowerShell.
Прежде всего, настройте политику аудита процессов в Windows. Вы можете настроить политику аудита на отдельном компьютере с помощью редактора локальной групповой политики (gpedit.msc
). Если вы хотите настроить политику на компьютерах и серверах в домене AD, используйте консоль управления групповой политикой (gpmc.msc
).
- Перейти к Конфигурация компьютера -> Настройки Windows -> Настройки безопасности -> Местная политика -> Политика аудита;
- Открыть Отслеживание процесса аудита свойства и включите его для Успех события;
- Примените параметры групповой политики, выполнив команду:
gpupdate /force
Теперь при запуске любого процесса в Windows будет появляться событие с именем EventID 4688 (A new process has been created
) появится в окне просмотра событий -> Журналы Windows -> Безопасность. Событие показывает, кто запустил процесс (Имя учетной записи), имя процесса (Имя нового процесса), а также имя родительского процесса (Имя процесса-создателя).
Get-WinEvent -FilterHashtable @{
LogName="Security"
ID = 4688
} | Select-Object TimeCreated,@{name="NewProcessName";expression={ $_.Properties[5].Value }}, @{name="User";expression={ $_.Properties[1].Value }}|where-object {$_.NewProcessName –like “*notepad.exe*”}
В результате мы получили историю запуска программы пользователями на этом компьютере.
Затем создайте новую задачу в планировщике задач, которая будет запускаться при появлении события с EventID 4688.
- Откройте планировщик задач (
taskschd.msc
) и создайте новую задачу -> Создать задачу; - Укажите имя задачи и укажите, что она должна выполняться для всех пользователей (При выполнении задачи используйте следующую учетную запись пользователя -> BUILTIN\Users). Если вы создаете задачу с помощью GPO, используйте этот формат:
%LogonDomain%\%LogonUser%
; - На Действия На вкладке «Действия» задайте действие, которое вы хотите выполнить. В этом примере я запущу сценарий PowerShell (вызов
powershell.exe
с атрибутами:-ExecutionPolicy Bypass -file "C:\PS\ProcessRunEvent.ps1
); - Затем привяжите задачу к событию Windows. Перейдите к Триггеры вкладка, выберите Новый -> О событии -> Пользовательский -> Новый фильтр событий;
- В следующем окне укажите следующие параметры фильтра событий:
Журналы событий:Security
Идентификатор события:4688
Ключевые слова:Audit Success
- Затем перейдите к XML , включите вкладку Редактирование запроса вручную вариант. Отредактируйте запрос, добавив в фильтр следующую строку:
and *[EventData[Data[@Name="NewProcessName"] and (Data="C:\Windows\System32\notepad.exe")]]
- Вы получите следующий XML-запрос:
<QueryList> <Query Id="0" Path="Security"> <Select Path="Security"> *[System[Provider[@Name="Microsoft-Windows-Security-Auditing"] and Task = 13312 and (band(Keywords,9007199254740992)) and (EventID=4688)]] and *[EventData[Data[@Name="NewProcessName"] and (Data="C:\Windows\System32\notepad.exe")]] </Select> </Query> </QueryList>
- Сохраните задание.
Попробуйте запустить файл notepad.exe. Каждый раз, когда пользователь открывает блокнот, ваш сценарий PowerShell будет автоматически запускаться.
A process has exited
.