Коди подій Windows: як визначити, хто встановив або видалив програму
Вступ
У корпоративному середовищі контроль змін на робочих станціях є одним із ключових елементів інформаційної безпеки та ефективного адміністрування. Одним із найпоширеніших запитань, які виникають у системних адміністраторів, фахівців служби підтримки та спеціалістів з інформаційної безпеки, є: хто встановив або видалив програму на комп'ютері під керуванням Windows?
На перший погляд відповідь здається простою, однак операційна система Windows не веде єдиний журнал інсталяції програм. Залежно від способу встановлення застосунку інформація може зберігатися у різних журналах подій, реєстрі, системі аудиту або засобах централізованого керування, таких як Microsoft Intune, Microsoft Configuration Manager (SCCM) чи Group Policy.
У цій статті детально розглянемо, які журнали подій необхідно аналізувати, які Event ID використовуються для різних сценаріїв встановлення та видалення програм, а також як автоматизувати пошук необхідної інформації за допомогою PowerShell.
Чому Windows не має єдиного журналу встановлення програм
Причина полягає у великій кількості технологій встановлення програмного забезпечення.
Програми можуть бути встановлені:
- через Windows Installer (MSI);
- за допомогою EXE-інсталяторів;
- через Microsoft Store;
- через Intune;
- через Group Policy;
- через SCCM або Microsoft Configuration Manager;
- за допомогою PowerShell;
- пакетними менеджерами (Winget, Chocolatey, Scoop);
- вручну шляхом копіювання файлів.
Кожен із цих механізмів залишає власний набір артефактів.
Саме тому під час розслідування необхідно аналізувати кілька журналів одночасно.
Які журнали подій необхідно перевіряти
Найважливішими є такі журнали:
- Application
- Security
- Setup
- Microsoft-Windows-AppXDeploymentServer/Operational
- Microsoft-Windows-MSIInstaller
- Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider
- Windows PowerShell
- Sysmon (якщо використовується)
Саме вони дозволяють відновити повну картину змін у системі.
Події Windows Installer (MSI)
Найбільше інформації міститься у журналі Application.
Джерело подій:
MsiInstallerEvent ID 1033
Повідомляє про успішне встановлення MSI-пакета.
Приклад:
Product: 7-Zip 24.09
Installation completed successfully.Можна отримати:
- назву програми;
- версію;
- дату встановлення;
- користувача, від імені якого виконувалася інсталяція.
Event ID 1034
Відображає завершення операції видалення.
Приклад:
Removal completed successfully.Event ID 11707
Одне з найважливіших повідомлень.
Воно означає успішне завершення встановлення MSI.
Приклад:
Product: Microsoft Visual C++ Redistributable
Installation operation completed successfully.Event ID 11724
Фіксує успішне видалення програмного забезпечення.
Як знайти всі встановлення MSI
PowerShell:
Get-WinEvent `
-FilterHashtable @{
LogName='Application'
ProviderName='MsiInstaller'
} |
Where-Object {
$_.Id -in 1033,1034,11707,11724
}Журнал Security
Якщо аудит налаштований правильно, саме журнал Security дозволяє визначити користувача.
Event ID 4688
Створення нового процесу.
Приклад:
msiexec.exe
setup.exe
winget.exe
powershell.exeСаме ця подія дозволяє побачити:
- хто запускав інсталятор;
- під яким обліковим записом;
- командний рядок;
- PID процесу;
- батьківський процес.
Приклад команди:
Get-WinEvent `
-FilterHashtable @{
LogName='Security'
Id=4688
}Якщо ввімкнено аудит командного рядка, можна отримати повний шлях до інсталятора:
C:\Users\Admin\Downloads\setup.exeабо
msiexec.exe /i Office.msiEvent ID 4689
Завершення процесу.
Допомагає визначити час закінчення встановлення.
Event ID 4663
Якщо налаштовано аудит файлової системи, можна побачити:
- створення файлів;
- видалення;
- зміну каталогів Program Files;
- запис у ProgramData.
Це особливо корисно при аналізі EXE-інсталяторів.
Журнал Setup
Багато компонентів Windows використовують журнал Setup.
Особливо це стосується:
- драйверів;
- ролей;
- компонентів Windows;
- оновлень.
Microsoft Store
Для програм Microsoft Store використовується окремий журнал:
Applications and Services Logs
Microsoft
Windows
AppXDeploymentServer
OperationalНайважливіші Event ID:
| Event ID | Опис |
|---|---|
| 400 | Початок встановлення |
| 401 | Завершення встановлення |
| 404 | Видалення застосунку |
Ці події дозволяють простежити історію встановлення програм із Microsoft Store.
Device Management (Intune)
Якщо програми встановлюються через Microsoft Intune, слід аналізувати журнал:
Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider/AdminТут можна знайти:
- успішне встановлення;
- помилки інсталяції;
- політики;
- синхронізацію;
- ідентифікатор застосунку.
Це один із найважливіших журналів для сучасних корпоративних середовищ.
SCCM (Configuration Manager)
Під час використання SCCM основна інформація міститься не лише у журналах Windows.
Найважливіші журнали клієнта:
AppEnforce.log
AppDiscovery.log
ExecMgr.log
CAS.log
ContentTransferManager.logВони знаходяться:
C:\Windows\CCM\LogsСаме вони містять:
- ім'я застосунку;
- команду встановлення;
- результат;
- код помилки;
- користувача;
- час виконання.
PowerShell як джерело встановлення
Якщо програма встановлювалася через PowerShell:
Start-Process
Invoke-Expression
winget
Chocolateyможна перевірити журнал:
Applications and Services Logs
Windows PowerShellабо
Microsoft-Windows-PowerShell/OperationalКорисні події:
| Event ID | Призначення |
|---|---|
| 400 | Початок сесії |
| 403 | Завершення |
| 4103 | Виконання команд |
| 4104 | Script Block Logging |
Якщо ввімкнено Script Block Logging, можна побачити навіть повний сценарій PowerShell.
Приклад:
winget install 7zip.7zipабо
Start-Process setup.exe -ArgumentList "/silent"Sysmon
Якщо використовується Sysmon, можливості аналізу значно розширюються.
Основні події:
| Event ID | Опис |
|---|---|
| 1 | Створення процесу |
| 11 | Створення файлу |
| 13 | Запис у реєстр |
| 23 | Видалення файлу |
Завдяки цьому можна відстежити повний ланцюжок встановлення програмного забезпечення.
Як визначити, хто встановив програму
Розглянемо типовий сценарій.
Користувач повідомляє:
Учора на комп'ютері з'явився новий PDF-редактор.
Алгоритм розслідування:
- Перевірити журнал Application.
- Знайти події MsiInstaller.
- Визначити час встановлення.
- Перевірити Event ID 4688.
- Встановити користувача.
- Проаналізувати командний рядок.
- Перевірити AppX або Intune за потреби.
Наприклад:
4688
User:
DOMAIN\ivan.petrenko
Process:
C:\Users\ivan.petrenko\Downloads\setup.exeПісля цього можна впевнено визначити, хто саме виконав інсталяцію.
Як визначити, хто видалив програму
Принцип аналогічний.
Необхідно знайти:
- Event ID 1034;
- Event ID 11724;
- Event ID 4688;
- процес
msiexec.exe /xабо
uninstall.exeПісля цього встановлюється користувач, який виконав видалення.
Автоматизація пошуку
Приклад PowerShell, який знаходить усі події Windows Installer.
$events = Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='MsiInstaller'
}
$events |
Where-Object {
$_.Id -in 1033,1034,11707,11724
} |
Select-Object TimeCreated,Id,MessageАвтоматичний пошук запусків інсталяторів
Get-WinEvent `
-FilterHashtable @{
LogName='Security'
Id=4688
} |
Where-Object {
$_.Message -match 'setup.exe|msiexec.exe|winget.exe'
}Типові проблеми
Журнал очищений
У цьому випадку допоможуть:
- резервні копії журналів;
- Microsoft Defender for Endpoint;
- Microsoft Sentinel;
- SIEM;
- Sysmon.
Події відсутні
Причини можуть бути такими:
- аудит вимкнений;
- програма була портативною;
- журнал переповнений;
- інсталяція виконувалася від імені системи.
EXE-інсталятор не залишив записів
Не всі EXE-інсталятори використовують Windows Installer.
Тоді доведеться аналізувати:
- Event ID 4688;
- Prefetch;
- Amcache.hve;
- ShimCache;
- реєстр;
- Sysmon.
Рекомендації для корпоративного середовища
Для забезпечення повного аудиту встановлення та видалення програм доцільно впровадити такі практики:
- увімкнути аудит створення процесів (Event ID 4688) із записом командного рядка;
- активувати Script Block Logging для PowerShell;
- використовувати Sysmon із грамотно налаштованою конфігурацією;
- централізовано збирати журнали через Windows Event Forwarding (WEF), Microsoft Sentinel, SIEM або інші системи моніторингу;
- регулярно архівувати журнали подій для запобігання втраті інформації;
- контролювати встановлення програм через Intune, SCCM або Group Policy, щоб мінімізувати несанкціоновані зміни.
Комплексний підхід дозволяє не лише визначити факт встановлення чи видалення програмного забезпечення, а й встановити точний час, користувача, джерело інсталяції та команду, яка була виконана.
Висновки
Windows не має єдиного журналу, який фіксує всі випадки встановлення або видалення програм. Ефективне розслідування базується на аналізі кількох джерел даних: журналів Application, Security, Setup, журналів Microsoft Store, PowerShell, Intune та, за наявності, Sysmon.
Найбільш інформативними подіями є MsiInstaller (1033, 1034, 11707, 11724) для операцій із пакетами MSI та Security 4688 для визначення користувача і процесу, який ініціював встановлення. У сучасних корпоративних середовищах додаткову цінність забезпечують централізовані системи збору журналів і рішення класу SIEM, що дозволяють швидко проводити аудит, реагувати на інциденти та підтримувати відповідність вимогам інформаційної безпеки.