В этой статье мы рассмотрим, как отследить событие запуска определённой программы (процесса) в Windows и выполнить какое-то действие (запустить скрипт, отправить email и т.д.). В качестве примера мы будем отслеживать запуск процесса notepad.exe
, когда пользователь открывает эту программу, Windows автоматически запускает определенный PowerShell скрипт.
Прежде всего в Windows нужно настроить политику аудита процессов. На отдельном компьютере можно настроить политику аудита через редактор локальной GPO ( gpedit.msc
), если нужно настроить политику на компьютерах/серверах домена, воспользуйтесь доменным редактором gpmc.msc
.
gpupdate /force
Теперь при запуске любого процесса в Windows в журнале Event Viewer -> Windows Logs -> Security будет появляться событие с EventID 4688 (A new process has been created). В событии указано, кто запустил процесс ( Account name
), имя процесса ( New Process Name
) и имя родительского процесса ( Creator Process Name
).
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*”}
В результате мы получили таблицу с указанием пользователей, которые запускали определённую программу.
Теперь нужно создать задание планировщика, которое должно запускаться при появлении события 4688.
taskschd.msc
) и создайте новое задание -> Create Task ; %LogonDomain%%LogonUser%
; powershell.exe
с атрибутами -ExecutionPolicy Bypass -file "C:PSProcessRun.ps1
» Security
4688
Audit Success
and *[EventData[Data[@Name='NewProcessName'] and (Data='C:WindowsSystem32notepad.exe')]]
<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:WindowsSystem32notepad.exe')]]
</Select>
</Query>
</QueryList>
Попробуйте теперь запустить процесс notepad.exe. Теперь каждый раз, когда пользователь запускает блокнот, выполняется ваш PowerShell скрипт.
В этом примере я через PowerShell вывожу всплывающее уведомление Windows . Вы можете использовать любой другой PowerShell скрипт — например отправку письма , что угодно.
Ранее мы рассматривали PowerShell скрипт для автоматического перезапуска процесса в случае его остановки. Решение с отслеживанием события запуска/остановки процессов более элегантное и не требует наличия запущенного скрипта PowerShell для мониторинга работающих процессов .
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…