Руководство

Аудит служб Windows

Аудит - это не список того, что есть на машине. Это разница между тем, что есть на машине, и тем, что должно было быть, - а вторую половину на обычной Windows не записывает ничто.

Три вопроса и то, что на них отвечает

Что изменилось с тех пор, как эту машину построили?

Снимок, сделанный при развёртывании, и сравнение с машиной сегодня вечером. Конфигурация сообщается отдельно от того, что просто запустилось или остановилось, поэтому единственный тип запуска, который кто-то изменил, не тонет под сорока службами, которые случайно работают.

bws snapshot diff baseline.json --live

Почему тестовая среда отличается от рабочей?

Сделайте снимок на каждой и сравните два файла - где угодно, без присутствия обеих машин. Файлы несут имя машины и учётную запись, которая их сделала.

bws snapshot diff staging.json production.json

Что здесь есть такого, чего быть не должно?

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

file:missing, signed:no, mismatch:running

Ночная форма

# день, когда машина вводится в эксплуатацию
bws snapshot create C:\baselines\web01.json --note "after the build"

# каждую ночь, из запланированной задачи
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
#   0 - дрейфа конфигурации нет
#   5 - конфигурация ушла в дрейф, и drift.json говорит в чём
#   3 - выполнилось и не смогло прочитать всё, поэтому ответ частичный

Код завершения 5 - это то, что превращает это в аудит, а не в отчёт, который никто не читает: задача молчит, пока машина не уйдёт в дрейф, а в ночь, когда это случится, кого-то зовут.

Снимайте эталонное состояние из сеанса с повышенными правами. Без прав администратора диспетчер перечисляет меньше записей и отказывает в большем числе из перечисленных. Снимок записывает, был ли администратором сделавший его аккаунт, чтобы сравнение могло сказать об этом, а не сообщать как удалённые записи, которых никто не удалял, - но эталонное состояние, в котором не хватает половины машины, остаётся эталонным состоянием, в котором не хватает половины машины.

Чего стоит снимок как доказательство

  • Это JSON с одним полем на строку, поэтому он помещается в репозиторий, и git diff его читает. Аудитор, у которого нет этого инструмента, всё равно может прочитать файл, а система контроля версий уже отвечает на вопрос когда.
  • Он содержит то, чего оснастка никогда не показывала: путь запуска и аргументы, хеш и подписанта файла, зависимости в обе стороны, триггеры, требуемые привилегии, тип SID и дескриптор безопасности.
  • Он говорит, чего не смог прочитать. Поле, на которое у этого сеанса не было прав, записывается как непрочитанное - никогда как пустое, - чтобы позднее сравнение могло сказать not compared, а не молча называть его неизменным.
  • Это описание всей машины. Храните его соответственно: он записывается с теми правами, что уже есть у его каталога, и инструмент ничего не сужает.
Как работают снимки и сравнения