Те, чого services.msc ніколи не робив

Знімки й дрейф

Кожен інший інструмент каже, як машина виглядає зараз. Запитання, яке насправді має адміністратор, - що відрізняється від того, коли все працювало - і ніщо в стандартній Windows на нього не відповідає.

Що містить знімок

Вся машина в один момент: кожна служба й драйвер із типом запуску, обліковим записом, шляхом запуску й аргументами, хешем і підписантом файлу, який він запускає, його залежностями та тим, що залежить від нього, його тригерами, потрібними привілеями, типом SID і дескриптором безпеки - плюс ім'я машини, обліковий запис, що його зробив, і чи був цей обліковий запис адміністратором.

bws snapshot create before.json --note "before the patch"

Це JSON з одним полем на рядок. Це зроблено навмисно: знімок потрапляє в репозиторій, і git diff його читає, тож власне порівняння інструмента - не єдиний спосіб на нього подивитися.

Зберігайте його так, як він того вартий. Знімок описує всю машину, до кожного шляху запуску й дескриптора безпеки. Він записується з тими правами, які вже має його каталог, і інструмент нічого не звужує - тож каталог, який можуть читати інші люди, дає їм змогу прочитати все це.

А потім спитайте, що відрізняється

$ bws snapshot diff before.json --live --exit-code
Changed (2):
  Spooler  Print Spooler
    startType: Manual -> Automatic
    status: Stopped -> Running  (running state, not configuration)
  wlidsvc  Microsoft Account Sign-in Assistant
    status: Stopped -> Running  (running state, not configuration)

Added 0, removed 0, changed 2. Fields differing: 1 in configuration, 2 in running state.
  • Конфігурація й стан виконання повідомляються окремо. Два знімки з різницею в день відрізняються тим, що випадково працює, і майже ніщо з цього не дрейф. Змішані разом, єдиний рядок, що має значення, - тип запуску, який хтось змінив, - тоне під сорока тими, що ні.
  • Те, що не вдалося порівняти, перелічено, а не приховано. Поле, якого один із двох знімків ніколи не читав, бо той сеанс не мав на нього прав, виходить як not compared під своїм записом, а підсумок рахує такі записи. Тож порівняння, що каже нічого не змінилося, означає, що нічого не змінилося в тому, що бачили обидві сторони.
  • Знімок з підвищеними правами проти знімка без них збрехав би, повідомляючи про видалення записів, яких ніхто не видаляв. Кожен файл записує, чи був обліковий запис, що його зробив, адміністратором, і порівняння про це каже.
  • Два файли, а не лише файл і ця машина. Зробіть один на тестовому середовищі й один на робочому та порівняйте їх будь-де - відповідь на чому тестове середовище відрізняється не потребує присутності жодної з машин.

Вікно робить те саме в розділі Audit.... Take snapshot... записує той самий файл, із нотаткою, якщо ви її введете, а Compare with this machine... або Compare two snapshots... показує, що змінилося, замість списку, по одному рядку на поле, з усім, що робить порівняння менш ніж точним, сказаним над таблицею. Show звужує його до відмінностей або до одного поля, а Export... записує його у файл CSV.

Код завершення - це суть

--exit-code завершується кодом 5, коли конфігурація відрізняється: запис додано чи видалено, або один налаштовано інакше. Служба, що просто сама зупинилася чи запустилася, повідомляється й не враховується, так само як і копії для кожного користувача, які Windows робить для кожного сеансу ввійшовшого користувача, - їх пропущено й пораховано. Це не збій: дрейф - це те, що цей інструмент створено знаходити, а його знаходження не є збоєм, - тому в нього власне число, а не позичене в того, що означає, що щось пішло не так.

# день, коли машина вводиться в експлуатацію
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, хтось дізнається про це першої ж ночі, а не вранці, коли щось зламається.

Використання для аудиту