Ciò che services.msc non ha mai fatto

Snapshot e deriva

Ogni altro strumento le dice com'è una macchina adesso. La domanda che un amministratore ha davvero è cosa è diverso da quando funzionava - e nessun Windows di serie vi risponde.

Cosa contiene uno snapshot

L'intera macchina in un istante: ogni servizio e ogni driver, con il suo tipo di avvio, account, percorso di avvio e argomenti, l'hash e il firmatario del file che esegue, le sue dipendenze e ciò che ne dipende, i suoi trigger, i privilegi richiesti, il tipo di SID e il descrittore di sicurezza - più il nome della macchina, l'account che lo ha preso e se quell'account era un amministratore.

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

È JSON con un campo per riga. È voluto: significa che uno snapshot entra in un repository e git diff lo legge, così il confronto dello strumento stesso non è l'unico modo di guardarne uno.

Lo archivi per ciò che è. Uno snapshot descrive l'intera macchina, fino a ogni percorso di avvio e ogni descrittore di sicurezza. Viene scritto con i permessi che la sua cartella ha già, e lo strumento non restringe nulla - quindi una cartella che altre persone possono leggere è una in cui possono leggere tutto questo.

Poi chiedere cosa è diverso

$ 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.
  • Configurazione e stato di esecuzione sono segnalati separatamente. Due snapshot presi a un giorno di distanza differiscono per ciò che capita di essere in esecuzione, e quasi nulla di questo è deriva. Mescolata, l'unica riga che conta - un tipo di avvio che qualcuno ha cambiato - è sepolta sotto quaranta che non contano.
  • Ciò che non si è potuto confrontare è elencato, non nascosto. Un campo che uno dei due snapshot non ha mai letto, perché quella sessione non aveva diritti su di esso, esce come not compared sotto la sua voce, e il riepilogo conta quelle voci. Quindi un confronto che dice nulla è cambiato significa che nulla è cambiato in ciò che entrambi i lati potevano vedere.
  • Uno snapshot con privilegi elevati contro uno senza mentirebbe, segnalando come rimosse voci che nessuno ha rimosso. Ogni file registra se l'account che lo ha preso era un amministratore, e il confronto lo dice.
  • Due file, non solo un file e questa macchina. Ne prenda uno in staging e uno in produzione e li confronti ovunque - la risposta a perché lo staging differisce non ha bisogno di nessuna delle due macchine presenti.

La finestra fa lo stesso in Audit.... Take snapshot... scrive lo stesso file, con una nota se ne digita una, e Compare with this machine... o Compare two snapshots... mostra cosa è cambiato al posto dell'elenco, una riga per campo, con tutto ciò che rende il confronto meno che esatto detto sopra la tabella. Show lo restringe alle differenze o a un campo, e Export... lo scrive in un file CSV.

Il codice di uscita è il punto

--exit-code termina con 5 quando la configurazione differisce - una voce aggiunta o rimossa, o una impostata diversamente. Un servizio che si è solo fermato o avviato da solo viene segnalato e non conta, e nemmeno le copie per utente che Windows fa per ogni sessione aperta, che vengono escluse e contate. Non è un fallimento - trovare la deriva è ciò per cui serve questo strumento, e trovarla non è un fallimento - ed è per questo che ha un numero suo invece di prendere in prestito quello che significa che qualcosa è andato storto.

# il giorno in cui la macchina entra in servizio
bws snapshot create C:\baselines\web01.json --note "after the build"

# ogni notte, da un'attività pianificata
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
#   0 - nessuna deriva di configurazione
#   5 - la configurazione è andata alla deriva, e drift.json dice come
#   3 - è girato e non ha potuto leggere tutto, quindi la risposta è parziale

Questo è tutto il meccanismo: una base di riferimento presa quando la macchina era nota come buona, e una domanda posta ogni notte. Se la prima notte risponde 5, qualcuno lo scopre la prima notte e non la mattina in cui qualcosa si rompe.

Usarlo per un audit