В крупных корпоративных сетях с множеством администраторов иногда возникает необходимость выяснить, кто именно установил или удалил приложение на компьютере или сервере под управлением Windows. Эта информация может быть критически важной для расследования инцидентов или аудита действий пользователей. В данном руководстве мы рассмотрим, как извлечь данные о пользователе, выполнившем установку или удаление программы, используя Журнал событий Windows и команды PowerShell.
Анализ событий установки и удаления в Журнале событий
При установке или удалении классических приложений в Windows с использованием установщика MSI (Microsoft Installer) в Журнал событий записываются соответствующие записи от источника MsiInstaller. Эти события содержат информацию о программе и пользователе, выполнившем действие.
Основные коды событий:
1. 11707: Успешная установка приложения через MSI.
2. 11724: Успешное удаление приложения через MSI.
Чтобы найти эти события, выполните следующие шаги:
1. Откройте Просмотр событий:
– Введите в поиске eventvwr.msc и нажмите Enter.
– Перейдите в раздел Журналы Windows → Приложение.
2. Настройте фильтр:
– В правой панели выберите Фильтр текущего журнала.
– В поле Идентификаторы событий укажите 11707,11724.
– В поле Источники событий выберите MsiInstaller.
– Нажмите ОК.
3. Просмотрите результаты:
– В списке отобразятся события установки и удаления программ.
– В описании события указано название программы, например:
Product: Office 16 Click-to-Run Licensing Component — Removal completed successfully.
4. Определите пользователя:
– Откройте событие двойным щелчком.
– На вкладке Общие в поле Пользователь указано имя учетной записи, выполнившей действие.
Поиск событий с помощью PowerShell
Для автоматизации поиска событий установки или удаления программ и определения пользователей, выполнивших эти действия, используйте PowerShell. Этот метод особенно полезен, если нужно найти события, связанные с конкретным приложением, или проанализировать большой объем данных.
Скрипт для поиска событий MsiInstaller
Следующий PowerShell-скрипт извлекает события 11707 и 11724 из журнала Приложение, фильтрует их по названию программы (например, Zabbix) и преобразует SID пользователя в читаемое имя учетной записи:
Get-WinEvent -FilterHashtable @{LogName="Application"; ID=11707,11724; ProviderName='MsiInstaller'} | Where-Object { $_.Message -like '*Zabbix*' } | Select TimeCreated, @{Name='Username'; Expression={(New-Object System.Security.Principal.SecurityIdentifier($_.UserId)).Translate([System.Security.Principal.NTAccount]).Value}}, Message
Как работает скрипт
1. Get-WinEvent: Извлекает события из журнала Приложение с указанными параметрами:
– LogName: Журнал Приложение.
– ID: События 11707 (установка) и 11724 (удаление).
– ProviderName: Источник MsiInstaller.
2. Where-Object: Фильтрует события, содержащие в описании название программы (например, Zabbix).
3. Select: Выводит:
– TimeCreated: Время события.
– Username: Имя пользователя, преобразованное из SID (идентификатор безопасности), указанного в поле UserId.
– Message: Описание события, включая название программы и результат действия.
Пример вывода:
Дата/время: 2025-04-24 10:15:23
Пользователь: CORP\admin01
Сообщение: Продукт: Zabbix Agent 2 (64-bit) — Удаление успешно завершено.
Адаптация скрипта
Чтобы найти события для другой программы, измените строку фильтрации. Например, для поиска событий, связанных с 7-Zip:
Get-WinEvent -FilterHashtable @{LogName="Application"; ID=11707,11724; ProviderName='MsiInstaller'} | Where-Object { $_.Message -like '*7-Zip*' } | Select TimeCreated, @{Name='Username'; Expression={(New-Object System.Security.Principal.SecurityIdentifier($_.UserId)).Translate([System.Security.Principal.NTAccount]).Value}}, Message
Дополнительные рекомендации
Проверка журналов на удаленных компьютерах: Если нужно проанализировать события на удаленном сервере, добавьте параметр -ComputerName в команду Get-WinEvent:
Get-WinEvent -ComputerName Server01 -FilterHashtable @{LogName="Application"; ID=11707,11724; ProviderName='MsiInstaller'} | Where-Object { $_.Message -like '*Zabbix*' } | Select TimeCreated, @{Name='Username'; Expression={(New-Object System.Security.Principal.SecurityIdentifier($_.UserId)).Translate([System.Security.Principal.NTAccount]).Value}}, Message
Хранение журналов: Убедитесь, что журнал Приложение не очищается автоматически, чтобы сохранить историю событий. Настройте размер журнала в Просмотре событий:
– Щелкните правой кнопкой мыши на Приложение → Свойства.
– Увеличьте Максимальный размер журнала (например, до 100 МБ).
– Выберите Архивировать журнал при заполнении.
Ограничения метода:
– События 11707 и 11724 записываются только для программ, установленных через MSI. Для приложений, установленных другими способами (например, EXE-инсталляторы), события могут отсутствовать или записываться в других журналах.
– Если пользователь использует учетную запись с повышенными привилегиями (Run As Administrator), в событии будет указана учетная запись, под которой выполнен запуск, а не базовая учетная запись пользователя.
Чтобы фиксировать действия, связанные с установкой и удалением программ, настройте следующие параметры аудита:
1. Откройте Редактор управления групповыми политиками:
– Нажмите Win+R, введите gpedit.msc и нажмите Enter.
2. Перейдите в раздел:
Конфигурация компьютера → Конфигурация Windows → Параметры безопасности → Локальные политики → Политика аудита
3. Настройте следующие параметры:
Аудит доступа к объектам:
— Дважды щелкните по параметру.
— Включите аудит для Успех (опционально Отказ).
— Нажмите ОК.
— Это позволит фиксировать изменения файлов и реестра, связанные с установкой программ.
Аудит отслеживания процессов:
— Дважды щелкните по параметру.
— Включите аудит для Успех.
— Нажмите ОК.
— Это фиксирует запуск процессов, таких как msiexec.exe.
Аудит использования привилегий (дополнительно):
— Дважды щелкните по параметру.
— Включите аудит для Успех.
— Нажмите ОК.
— Это отслеживает действия, выполненные с административными правами.
4. Примените изменения:
– В Командной строке с правами администратора выполните:
gpupdate /force
Определение пользователя, установившего или удалившего приложение в Windows, возможно с помощью анализа событий MsiInstaller в Журнале событий. Использование Просмотра событий позволяет быстро найти нужные записи, а скрипты PowerShell автоматизируют процесс и делают его удобным для крупных сетей. Настройка хранения журналов и включение аудита повышают эффективность расследований. Эти методы помогут администраторам точно отслеживать действия, связанные с установкой и удалением программ, обеспечивая контроль и безопасность в корпоративной среде.