Guide

Auditer les services Windows

Un audit n'est pas une liste de ce qui se trouve sur la machine. C'est la différence entre ce qui s'y trouve et ce qui devait s'y trouver - et aucun Windows standard n'enregistre la seconde moitié.

Trois questions, et ce qui y répond

Qu'est-ce qui a changé depuis la construction de cette machine ?

Un instantané pris au déploiement, et une comparaison avec la machine cette nuit. La configuration est signalée à part de ce qui a simplement démarré ou s'est arrêté, de sorte que le seul type de démarrage que quelqu'un a changé n'est pas enterré sous quarante services qui se trouvent tourner.

bws snapshot diff baseline.json --live

Pourquoi la préproduction diffère-t-elle de la production ?

Prenez un instantané sur chacune et comparez les deux fichiers - n'importe où, sans qu'aucune des deux machines soit présente. Les fichiers portent le nom de la machine et le compte qui les a pris.

bws snapshot diff staging.json production.json

Qu'y a-t-il ici qui ne devrait pas y être ?

Des requêtes qui trouvent les formes qui valent un coup d'œil : un service dont l'exécutable a disparu, un service non signé, un service en marche bien que désactivé, un service qui demande des droits de débogage.

file:missing, signed:no, mismatch:running

La forme nocturne

# le jour où la machine entre en service
bws snapshot create C:\baselines\web01.json --note "after the build"

# chaque nuit, depuis une tâche planifiée
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
#   0 - aucune dérive de configuration
#   5 - la configuration a dérivé, et drift.json dit en quoi
#   3 - elle a tourné et n'a pas pu tout lire, la réponse est donc partielle

Le code de sortie 5 est ce qui fait de ceci un audit plutôt qu'un rapport que personne ne lit : la tâche est silencieuse jusqu'à ce que la machine dérive, et la nuit où cela arrive, quelqu'un est alerté.

Prenez la référence depuis une session avec élévation. Sans droits d'administrateur, le gestionnaire liste moins d'entrées et en refuse davantage parmi celles qu'il liste. L'instantané enregistre si le compte qui l'a pris était un administrateur, de sorte que la comparaison peut le dire au lieu de signaler comme supprimées des entrées que personne n'a supprimées - mais une référence à laquelle manque la moitié de la machine reste une référence à laquelle manque la moitié de la machine.

Ce que vaut un instantané comme preuve

  • C'est du JSON avec un champ par ligne, il entre donc dans un dépôt et git diff le lit. Un auditeur qui n'a pas cet outil peut quand même lire le fichier, et un système de gestion de versions répond déjà au quand.
  • Il contient ce que le composant enfichable n'a jamais montré : le chemin de lancement et les arguments, le hachage et le signataire du fichier, les dépendances dans les deux sens, les déclencheurs, les privilèges requis, le type de SID et le descripteur de sécurité.
  • Il dit ce qu'il n'a pas pu lire. Un champ auquel cette session n'avait pas droit est enregistré comme non lu - jamais comme vide - de sorte qu'une comparaison ultérieure peut dire not compared au lieu de le déclarer discrètement inchangé.
  • C'est une description de la machine entière. Rangez-le en conséquence : il est écrit avec les autorisations que son répertoire a déjà, et l'outil ne restreint rien.
Comment fonctionnent les instantanés et les comparaisons