Содержание статьи
Главная проблема при работе с Sysmon в том, что в случае ошибки ты получаешь текст с атрибутами XML-файла, как на картинке ниже.
Ошибки могут быть связаны с опечатками, некорректными параметрами, новыми типами событий — все они способны привести к нарушению процесса мониторинга. Для автоматической проверки мы могли бы воспользоваться схемой XSD, которая не поставляется вместе с Sysmon.
www
На GitHub был похожий проект, автор описывал XSD-схему для разных версий Sysmon и разработал модули PowerShell. В настоящее время проект не поддерживается.
Для решения проблемы мы можем воспользоваться подходом Detection-as-Code (DaC). Для его реализации я воспользовался возможностями GitLab CI/CD.
info
Практики DevOps набирают обороты во всех сферах ИТ. Detection engineering не исключение — коллаборация получила название Detection-as-Code.
Краткое введение в Detection-as-Code
Detection-as-Code — это подход включения практик DevOps в деятельность аналитиков SOC и CERT, а также инженеров по внедрению СЗИ и средств мониторинга. DaC позволяет структурировать управление правилами обнаружения, конфигурационными файлами, провести тестирование до их использования в конечном продукте.
В большинстве случаев для создания нового правила или редактирования существующего аналитику необходимо открыть встроенный редактор используемого продукта. Изменения, вносимые в пользовательском интерфейсе, трудно и неудобно отслеживать. Подход DaC позволяет быть уверенным, что мы ничего не сломаем. В процессе CI/CD создаваемый контент тестируется до того, как он будет доставлен в целевую систему.
Пайплайн
Этапы
Мой пайплайн включает пять этапов:
-
".
— сборка Docker-контейнера.pre" -
build
— сборка конфига из модулей для нужной Sysmon версии схемы. -
test-schema
— тестирование полученных конфигов на соответствие схеме Sysmon. -
test-on-windows
— тестирование конфигов на хостах (при необходимости можно использовать Windows 10 и Windows 7, если нужен конфиг для легаси). -
deploy
— доставка конфига до пользователей.
Так выглядит начало файла .
:
stages:
- ".pre" - build
- test-schema
- test-on-windows
- deploy
workflow:
rules:
- changes:
- templates/*.xml
Ключевое слово stages
определяет этапы в пайплайне, а workflow
— правило, описывающее, когда он будет запускаться. Мой пайплайн запускается только при изменении модулей конфига.
Нулевой этап. Сборка образа Docker
Для сборки образа Docker я использую подход Docker-in-Docker. Docker-файл также находится в репозитории. На этом этапе мы устанавливаем Ansible, pywinrm и коллекцию Ansible Community.Windows в собираемый образ.
FROM python:3.12-bookwormLABEL maintainer="d3f0x0"RUN apt-get update && apt-get upgrade -y && pip install --upgrade pip && apt-get install ansible -y && pip3 install pywinrm && ansible-galaxy collection install community.windows && apt-get clean
VOLUME [ "/data" ]WORKDIR /dataCMD ["ansible-playbook", "--version"]
Job для GitLab выглядит вот так:
build-docker: stage: ".pre" image: docker:dind tags: - docker services: - name: docker:dind script: - echo -n "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER $CI_REGISTRY --password-stdin - docker pull "$CI_REGISTRY_IMAGE:latest" || true - > docker build --pull --cache-from $CI_REGISTRY_IMAGE:latest --label "org.opencontainers.image.title=$CI_PROJECT_TITLE" --label "org.opencontainers.image.url=$CI_PROJECT_URL" --label "org.opencontainers.image.created=$CI_JOB_STARTED_AT" --label "org.opencontainers.image.revision=$CI_COMMIT_SHA" --label "org.opencontainers.image.version=$CI_COMMIT_REF_NAME" --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
В результате образ будет добавлен в реестр Docker соответствующего проекта GitLab. Его мы будем использовать на остальных этапах.
Первый этап. Билд конфига
Первый шаг в обеспечении надежности конфига Sysmon — это проверка структуры XML-файла. XML должен быть валидным, чтобы Sysmon корректно интерпретировал конфиг.
Я решил разделить свой конфиг по модулям, которые может регистрировать драйвер Sysmon (ProcessCreate, NetworkConnection и так далее). Этот способ используется в репозитории sysmon-modular.
Чтобы можно было работать с разными версиями Sysmon, я предусмотрел вариант, когда итоговый конфиг собирается на основе схем, поставляемых вместе с Sysmon.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»