Узнаем кто удалил или установил программу в Windows

удалить

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов в рунете Pyatilistnik.org. В прошлый раз я вас научил определять кто именно перезагрузил сервер, это полезный навык при расследовании инцидентов. Бывают ситуации, что на сервер используют большое количество пользователей с одинаковыми правами, и вдруг куда-то пропадает одна из программ, вы видите что ее нет, логично, что нужно выяснить кто именно удалил программу. Вот этим мы и займемся, я вас научу получать информацию, кто установил или удалил программу в Windows.

Как узнать кто установил программу и когда

И так у меня есть тестовый сервер с операционной системой Windows Server 2019 и я на него в качестве демонстрации буду устанавливать Microdoft Edge ChromiumFireFox Mozilla, а так же LogParser. Все события, что генерируются в операционной системе Windows появляются в просмотре событий, это лог файлы разбитые по журналам.

Открываем логи Windows, журнал "Приложение (Application)" или "Система (System)", все зависит от инсталлятора которым собран пакет, так как есть те, что используют метод MsiInstaller , но есть и другие. Теперь запускаем инсталлятор LogParser. После установки я открываю журнал "Приложение", где я вижу ряд событий,

кто установил программу в Windows, событие 1040

первое это событие с ID 1040 покажет вам начало установки программы:

Событие ID 1040: Начало транзакции установщика Windows: C:\Users\Администратор.ROOT\Desktop\LogParser.msi. ИД клиентского процесса: 3076.

Событие ID 1040: Начало транзакции установщика Windows

Далее идет сообщение с кодом ID 10000.

Запуск сеанса 0 - ‎2020‎-‎04‎-‎09T14:38:53.211497000Z. 

кто установил программу в Windows, событие 10000

Далее вы увидите событие, где заканчивается установка программы ID 1042

 Окончание транзакции установщика Windows: C:\Users\Администратор.ROOT\Desktop\LogParser.msi. ИД клиентского процесса: 3076.

кто установил программу в Windows, событие 1042

Завершается сеанс событием с кодом ID 10001

 Завершение сеанса 0, запущенного ‎2020‎-‎04‎-‎09T14:38:53.211497000Z.

кто установил программу в Windows, событие 10001

И заканчивается установка программы событием с кодом ID 11707

заканчивается установка программы событием с кодом ID 11707

Иногда вы можете увидеть событие с ID 1033.

Установщик Windows выполнил установку продукта. Продукт: Log Parser 2.2. Версия: 2.2.10. Язык: 1033. Изготовитель: Microsoft Corporation. Установка завершена с состоянием: 0. 

событие с ID 1033

Если вы внимательны, то можете обратить внимание, что источником событий тут выступает MsiInstaller. Зная это вы легко можете произвести фильтрацию. Для этого в правой части найдите пункт "Фильтр текущего журнала"

Фильтрация журнала приложение в Windows

В источниках событий выберите из выпадающего списка пункт MsiInstaller.

Как определить событие установки программы в Windows

В итоге у меня получилось вот так.

Как вычислить кто инсталлировал программу на компьютере

Теперь когда события отфильтрованы по источнику MsiInstaller, вам будет еще легче найти кто установил, что установил и когда. В моем примере это сделал ROOT\Администратор.

Так, что в журнале "Приложение (Application)" советую искать ID 1033 и ID 11707

Причина, по которой мой пользователь показывает SYSTEM, заключается в том, что я являюсь единственным пользователем системы и не создал независимых учетных записей пользователей при установке Windows 10.

Так же событие ID 11707 с пользователем "SYSTEM (СИСТЕМА)" вы можете обнаружить, когда люди используют "Software Store" в SCCM

Список событий из источника MsiInstaller

Если вы любите веб интерфейс, то должны уже использовать Windows Admin Center, в котором вы легко можете с любого устройства подключиться к просмотру событий нужного сервера и посмотреть необходимые события.

ID 11707 в Windows Admin Center

Автоматизация оповещения по событиям 11707

Теперь когда вы знаете, как находить события по установке программ в системах семейства Windows, вам нужно автоматизировать данный процесс. Например, получать по почте, кто установил, где и что. В этом нам поможет конечно же PowerSell. Смысл автоматизации состоит в том, что вы на нужном сервере создаете задание в планировщике Windows, где будет запускаться скрипт PowerShell. Я вам приведу два скрипта, первый тот, что гуляет на просторах интернета.

Тут главное заполнить:

  • Адрес вашего SMTP сервера
  • От кого будет письмо
  • Кому отправлять письмо
  • Пароль от ящика отправителя

$Subject = "Установлено новое ПО" # Тема сообщения
$Server = "smtp.pyatilistnik.org" # Тут пишем ваш SMTP Server
$From = “install@pyatilistnik.org” # От кого будет отослано письмо
$To = "ivan@pyatilistnik.org" # Кому отправляется письмо
$Pwd = ConvertTo-SecureString "123456" -AsPlainText -Force #Пароль учетной записи отправителя
# (Внимание! Используйте очень ограниченную учетную запись для отправителя, поскольку пароль, сохраненный в скрипте, не будет зашифрован)
$Cred = New-Object System.Management.Automation.PSCredential("From@domain.com" , $Pwd) #Sender account credentials
$encoding = [System.Text.Encoding]::UTF8 #Установка кодировки в UTF8 для корректного отображения сообщения
#Команда Powershell для фильтрации журнала безопасности об установленном программном событии
$Body=Get-WinEvent -FilterHashtable @{LogName="Application";ID=11707;ProviderName='MsiInstaller'} | Select TimeCreated, Message, UserID | select-object -first 1
#Отправка электронной почты.
Send-MailMessage -From $From -To $To -SmtpServer $Server -Body “$Body” -Subject $Subject -Credential $Cred -Encoding $encoding

В результате вы получите письмо вот такого содержания:

@{TimeCreated=04/10/2020 15:40:11; Message=Product: Log Parser 2.2 -- Installation completed successfully.; UserId=S-1-5-21-4284852150-1823218374-53464103-500}

Тут два недостатка, во первых вы не видите, где был установлен новый софт, понятно, что можно на каждом сервере, где выполняется скрипт писать свою тему, но это не так удобно. Во вторых у вас в место имени пользователя идет SID, который потом нужно конвертировать в понятное имя.

Оповещение по эл. почте об установке программы

Так же вам никто не запрещает просто открыть PowerShell и ввести не сложный код:

Get-WinEvent -FilterHashtable @{LogName="Application";ID=11707;ProviderName='MsiInstaller'} | Select TimeCreated, Message, UserID | select-object -first 1

Напоминаю, что select-object -first 1 выводит первое событие, можете увеличить на нужное вам.

Как узнать через PowerShell кто установил программу

Как найти события установки программ не методом MsiInstaller

Как я и писал выше не все инсталляторы программ используют метод MsiInstaller, например при установке Edge Chrome или Mozilla Firefox, вы в журнале "Приложение" не обнаружите события с кодом ID 11707. В таком случае вам нужно перейти в журнал "СИСТЕМА (SYSTEM)" и сразу отфильтровать события по номеру ID 7045.

Как найти события установки программ не методом MsiInstaller

Выглядит событие ID 7045 вот так:

В системе установлена служба.

Имя службы: Mozilla Maintenance Service
Имя файла службы: "C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe"
Тип службы: служба режима пользователя
Тип запуска службы: Вручную
Учетная запись службы: LocalSystem

Кто установил Mozilla событие ID 7045

Событие ID 7045: В системе установлена служба.

Имя службы: Microsoft Edge Elevation Service
Имя файла службы: "C:\Program Files (x86)\Microsoft\Edge\Application\80.0.361.111\elevation_service.exe"
Тип службы: служба режима пользователя
Тип запуска службы: Вручную
Учетная запись службы: LocalSystem

Кто установил Edge событие ID 7045

Событие ID 7045: В системе установлена служба. Имя службы: Служба "Обновление Microsoft Edge" (edgeupdatem)
Имя файла службы: "C:\Program Files (x86)\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe" /medsvc
Тип службы: служба режима пользователя
Тип запуска службы: Вручную
Учетная запись службы: LocalSystem

Как узнать кто установил программу на компьютере

Как узнать кто удалил программу с сервера или компьютера

По аналогии с установкой, процесс деинсталляции или как его еще называют удаление, генерирует свои события в журналах Windows. Если мы говорим, про источник MsiInstaller из журнала "Приложение (Application)", то нам нужно фильтровать события по ID 11724 и ID 1034.

Событие с кодом ID 11724: Product: Log Parser 2.2 -- Removal completed successfully.

Как узнать кто удалил программу с сервера. ID 11 724

Событие с кодом ID 1033: Установщик Windows выполнил удаление продукта. Продукт: Log Parser 2.2. Версия: 2.2.10. Язык: 1033. Изготовитель: Microsoft Corporation. Удаление завершено с состоянием: 0.

Как узнать кто удалил программу с компьютера. ID 1033

Так же вы можете спокойно использовать описанный выше скрипт и команду PowerShell, для автоматизации оповещения, о удалении программы.

Дополнительно

Хочу отметить, что существует ряд платных программ которые специализируются на аудите событий в Windows системах, например netwrix и им подобные, где вы так же легко сможете получать всю информацию, о том кто и когда установил программу, или кто и когда ее удалил.

  • https://social.technet.microsoft.com/wiki/contents/articles/32412.powershell-how-to-detect-who-installed-what-software-on-your-windows-server-in-real-time.aspx
  • https://www.netwrix.com/how_to_detect_software_installations.html

На этом у меня все, мы с вами подробно все рассмотрели по данной задаче. Если у вас остались вопросы, то пишите их в комментариях, а с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Оцените статью
Настройка серверов windows и linux
Добавить комментарий

  1. Руслан

    Send-MailMessage : Не удается проверить аргумент для параметра «Body». Аргумент пустой или имеет значение NULL. Укажите непустой аргумент, не имеющий значение NULL, после чего повторите выполнение команды.
    строка:1 знак:64
    + … Message -From $From -To $To -SmtpServer $Server -Body «$Body» -Subjec …
    + ~~~~~~~
    + CategoryInfo : InvalidData: (:) [Send-MailMessage], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SendMailMessage

  2. Николай Найдёнов

    У меня система сама запускает в фоновом режиме Adobe Reader, Фотографии и Office.
    Хотя в автозагрузке их нет и файлы я тоже не открываю. Что-то здесь нечисто.