Infrastructure agent

Windows Security Collector

Сбор событий безопасности Windows Server, построение метрик и доставка отчётов в платформу в реальном времени.

  • PowerShell 5.1+
  • Без модулей
  • Легкий агент
  • HTTPS ingest

Загрузка агента сбора

Один файл SecurityEventReport.ps1 — отправка журналов Security, System и PowerShell Operational на ваш ingest endpoint.

Скачать PowerShell collector

Endpoint приёма

Метод POST, заголовок Authorization: Bearer <api_key>.

HTTPS URL
https://logsentinel.ru/api/v1/reports/ingest

Быстрая установка

ШАГ 1

Скачайте сборщик

Сохраните скрипт, при необходимости выполните Unblock-File (разблокировка скачанного файла).

ШАГ 2

Создайте API key

В админ-панели создайте организацию и сохраните выданный ключ — он используется только в заголовке Authorization.

ШАГ 3

Запланируйте задачу

Периодический запуск с правами чтения Security log и флагами -SendReport, -HoursBack.

ШАГ 4

Проверьте доставку

Убедитесь, что в разделе «Отчёты» появляются новые записи с корректной организацией и статусом риска.

Unblock-File

Если браузер пометил скрипт как «из интернета»

Что это. Командлет Unblock-File снимает с файла маркер блокировки, который ОС добавляет для скачанных из браузера или почты файлов («зона Интернет»).

Важно. Это не заменяет политику выполнения скриптов (ExecutionPolicy) и не даёт прав администратора. Нужен в основном, когда PowerShell жалуется или считает файл «ненадёжным» из‑за скачивания.

Как выполнить

  1. 1 Откройте PowerShell. Если дальше нужен доступ к журналу Security, используйте запуск от имени администратора.
  2. 2 Выполните команду для вашего полного пути к SecurityEventReport.ps1:
Команда
Unblock-File -Path 'C:\Scripts\SecurityEventReport.ps1'

Подставьте свой каталог вместо C:\Scripts, если файлы лежат в другом месте.

Если вы уже находитесь в папке со скриптом:

Команды
cd C:\Scripts
Unblock-File -Path '.\SecurityEventReport.ps1'

Пример запуска

PowerShell
cd C:\Scripts
.\SecurityEventReport.ps1 `
  -OrganizationName 'Имя организации' `
  -ServerUrl 'https://logsentinel.ru/api/v1/reports/ingest' `
  -ApiKey 'YOUR_API_KEY' `
  -HoursBack 48 `
  -SendReport `
  -OutputPath 'C:\Reports\Security'

Запускать из сеанса с правами администратора, из каталога со скриптом — используйте .\SecurityEventReport.ps1.

Полное руководство по скрипту

SecurityEventReport.ps1 — краткая инструкция

Файлы в проекте: каталог windows_collector/ (SecurityEventReport.ps1, эта инструкция).

Продакшен-сайт: https://logsentinel.ru

PowerShell 5.1+, только встроенные средства, без модулей.

URL приёма отчётов на сервер

Метод POST, заголовок Authorization: Bearer <api_key> (ключ выдаётся в админке для организации).

https://logsentinel.ru/api/v1/reports/ingest

Указывайте этот адрес в параметре -ServerUrl, если используете -SendReport.

Назначение

Собирает события из журналов Security, System (7045) и при доступности Microsoft-Windows-PowerShell/Operational (4104) за последние HoursBack часов, считает метрики и риск. В JSON включаются алерты с русскими заголовками и описаниями (ключ title/description), сохраняет JSON локально и опционально отправляет его POST на наш сервер.

Параметры

Параметр Описание
OrganizationName Название организации (в отчёт JSON).
ServerUrl URL для POST; для отправки на logsentinel.ru — см. выше.
ApiKey Токен для заголовка Authorization: Bearer … (в лог не пишется).
HoursBack Глубина выборки в часах (по умолчанию 48).
SendReport Если указан — отправить отчёт на ServerUrl.
OutputPath Каталог для JSON и технического лога (по умолчанию — папка скрипта).
HostGroup Необязательно: группа хоста в интерфейсе (филиал, площадка) — в JSON как hostGroup.

Скрипт добавляет в JSON обязательное поле machineGuid: значение из реестра HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid (уникально для установки Windows, не требует домена). Сервер принимает отчёт только с корректным UUID в этом поле.

Для разных филиалов с одинаковым именем компьютера задайте у каждого свой -HostGroup (например «Филиал СПб»), чтобы в веб-интерфейсе различать записи.

Локальный файл всегда: security_report_<ИМЯ_ХОСТА>_<yyyyMMdd_HHmmss>.json
Технический лог: security_report_<ИМЯ_ХОСТА>_script.log

Кодировка файла .ps1

В тексте скрипта есть русские строки (заголовки и описания алертов в JSON). Сохраняйте файл SecurityEventReport.ps1 в UTF-8 (на Windows удобно UTF-8 с BOM через «Сохранить как» в редакторе), иначе кириллица в отчёте может превратиться в «кракозябры».

Русские названия групп для событий по-прежнему собираются из UTF‑8 байтов в коде там, где это нужно. Название организации задавайте параметром -OrganizationName; кодировка консоли и параметров должна быть совместима с вашей локалью.

Поле type у алерта в JSON остаётся английским машинным кодом (failed_logon_volume и т.д.) — это удобно для фильтров и автоматизации; в веб‑интерфейсе платформы для известных типов показывается русская расшифровка.

Установка на сервер Windows

  1. Скачайте SecurityEventReport.ps1 с сайта (ссылка выше) или скопируйте из windows_collector/ репозитория (например в C:\Scripts\).
  2. При необходимости: Unblock-File -Path 'C:\Scripts\SecurityEventReport.ps1'.

Ручной запуск

Важно: в Windows PowerShell скрипт из текущей папки нужно вызывать с префиксом .\, иначе оболочка ищет «команду» в PATH и показывает подсказку «команда не найдена». Правильно: .\SecurityEventReport.ps1, неправильно: SecurityEventReport.ps1.

Альтернатива без смены каталога:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\SecurityEventReport.ps1" -OrganizationName "..." ...

Из PowerShell от имени администратора (нужен доступ к журналу Security):

cd C:\Scripts
.\SecurityEventReport.ps1 `
  -OrganizationName 'ООО Пример' `
  -ServerUrl 'https://logsentinel.ru/api/v1/reports/ingest' `
  -ApiKey 'ваш_ключ_из_админки' `
  -HoursBack 48 `
  -SendReport `
  -OutputPath 'C:\Reports\Security'

Только локальный отчёт (без HTTP):

.\SecurityEventReport.ps1 `
  -OrganizationName 'ООО Пример' `
  -ServerUrl 'https://logsentinel.ru/api/v1/reports/ingest' `
  -ApiKey 'x' `
  -OutputPath 'C:\Reports\Security'

Планировщик заданий (раз в сутки)

  1. taskschd.msc → создать задачу.
  2. Запуск от пользователя с правами чтения Security; включить «С наивысшими правами».
  3. Триггер: ежедневно.
  4. Действие: программа powershell.exe, пример аргументов:
-NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\SecurityEventReport.ps1" -OrganizationName "ООО Пример" -ServerUrl "https://logsentinel.ru/api/v1/reports/ingest" -ApiKey "..." -HoursBack 48 -SendReport -OutputPath "C:\Reports\Security"

Учётную запись задачи и ключ храните осознанно (ключ в аргументах виден тем, у кого есть доступ к задаче).

Права и аудит

  • Нужно чтение журнала Security (часто: локальный администратор, Event Log Readers / Audit Log Readers и политика доступа к Security на данной ОС).
  • Часть событий (очистка аудита, членство в группах и т.д.) появляется только при включённом расширенном аудите в GPO — это настраивается на стороне домена/сервера, не скриптом.

Если что-то пошло не так

  • Журнал недоступен — в техническом логе будет предупреждение, скрипт продолжит работу с остальными источниками.
  • Ошибка POST — запись в лог; JSON всё равно сохранён в OutputPath.
  • Сообщение вроде «Не удалось создать защищенный канал SSL/TLS» — скрипт перед отправкой выставляет TLS 1.2 (+ TLS 1.3, если доступен в вашей версии ОС). Убедитесь, что на сервере в SCHANNEL включён TLS 1.2 (обычно так по умолчанию на поддерживаемых ОС после обновлений); при необходимости временно выполните в той же сессии перед запуском:
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    Если ошибка сохраняется — проверьте прокси, антивирус с HTTPS-инспекцией и цепочку доверия к сертификату узла (logsentinel.ru).