Condividi tramite


Separazione stato

La separazione dello stato è un modello di manutenzione e sicurezza migliorato che usa limiti di sicurezza più chiari per:

  • Contribuire ad aumentare la sicurezza per le aree chiave del sistema
  • Abilitare aggiornamenti più veloci e puliti e reimpostazioni del sistema

Questo modello viene usato in tutte le immagini del sistema operativo factory. I limiti di sicurezza vengono classificati in base agli stati seguenti:

Stato Descrizione Esempi
Immutabile Questa area non può essere modificata in modo permanente, ad eccezione del sistema operativo stesso.
  • File binari del sistema operativo
  • Hives del Registro di sistema: HKLM\SYSTEM e HKLM\SOFTWARE
Modificabile, valore elevato È possibile apportare modifiche e aspettarsi che vengano mantenute dopo un riavvio o un aggiornamento, ma non dopo una reimpostazione del sistema
  • Impostazioni di sistema
  • File di registro
  • Dati del programma.
    Nota: usare LE API o le variabili di ambiente, %PROGRAMDATA% ad esempio per fare riferimento a queste cartelle. Se il codice include percorsi assoluti come C:\Program Data\ o scritture in altre aree di sistema, l'operazione di scrittura potrebbe non riuscire con una violazione di accesso.
Modificabile, valore basso È possibile apportare modifiche, ma spariranno dopo un riavvio o una reimpostazione del sistema. Alcuni componenti potrebbero dover scrivere in hive del Registro di sistema, HKLM\SYSTEM ad esempio e HKLM\SOFTWARE. Queste aree del Registro di sistema vengono caricate come volatili, in modo che i componenti possano comunque eseguire l'operazione di scrittura per un determinato runtime. Al successivo riavvio, le modifiche scompariranno.
Dati utente Può essere modificato. Ogni profilo dati utente viene crittografato nella propria partizione, quindi le modifiche influiscono solo sull'utente connesso
  • Profilo utente NT
  • Hive del Registro di sistema: HKCU

Per i test di fabbrica, è possibile archiviare i file di log e altri file di test nella partizione di dati o in %PROGRAMDATA%.

Violazioni di separazione dello stato

Le violazioni di separazione dello stato si verificano quando:

  • Un componente tenta di scrivere nel file system nel volume MainOS.
  • Un componente scrive negli hive del HKLM\SYSTEM Registro di sistema o HKLM\SOFTWARE .

Per facilitare lo sviluppo di componenti che soddisfano queste regole, Windows può registrare ogni volta che un componente tenta di scrivere in una di queste posizioni.

Nota, solo perché Windows tiene traccia di un'operazione di scrittura non significa necessariamente che si verifichi un problema: un componente può talvolta scrivere intenzionalmente negli hive del HKLM\SYSTEM Registro di sistema o HKLM\SOFTWARE prevedendo che la modifica sia volatile.

Strumentazione

Esistono alcuni metodi per raccogliere i log dell'attività del Registro di sistema e del file system. Determinare il metodo appropriato da usare dipende dal caso d'uso e quando nella sequenza di avvio il driver diventa attivo. Di seguito è riportata una tabella che riepiloga quando usare ogni metodo per trovare violazioni di separazione dello stato e isolamento del driver.

metodo Quando eseguire? Cosa trova?
Logger automatico di avvio anticipato Si desidera trovare violazioni di file che non possono essere trovate con Driver Verifier o si desidera visualizzare le violazioni del file e del Registro di sistema nella stessa traccia Tutte le violazioni dei file e la maggior parte delle violazioni del Registro di sistema
Logger on demand Si desidera trovare violazioni di file che non possono essere trovate con Driver Verifier o si desidera visualizzare le violazioni del file e del Registro di sistema nella stessa traccia Tutte le violazioni dei file e la maggior parte delle violazioni del Registro di sistema
Traccia di avvio Si vogliono avere informazioni dettagliate sullo stack che portano a una violazione Tutte le operazioni di file e registro, indipendentemente dal fatto che si tratti di una violazione o meno
Controlli di isolamento driver di verifica driver Si desidera trovare tutte le violazioni del Registro di sistema durante il test del dispositivo, i test generici dei driver e/o i test di certificazione Nessuna violazione di file e tutte le violazioni del Registro di sistema

Visualizzazione in tempo reale delle violazioni

Il metodo più semplice per tenere traccia delle violazioni di separazione dello stato consiste nell'esaminare le tracce degli eventi per Windows (ETW) in tempo reale tramite Il portale di dispositivi di Windows.

Nota

Il driver di filtro che fornisce questi dati di telemetria può essere caricato dopo il componente. Se il componente viene eseguito all'inizio del processo di avvio, è necessario esaminare la sezione successiva.

  1. Accedere al portale di dispositivi di Windows nel dispositivo sottoposto a test
  2. Passare alla scheda Registrazione ETW a sinistra.
  3. In Provider personalizzato abilitare il provider seguente: d6e1490c-c3a6-4533-8de2-18b16ce47517 .
  4. Riprovare lo scenario. Le violazioni verranno visualizzate nella tabella.
  5. Dopo aver raccolto dati sufficienti, fare clic su Salva nel file per ottenere un file di testo (.csv) contenente le violazioni acquisite. Spesso è più facile lavorare con i dati scaricati rispetto a un'analisi in tempo reale.

AutoLogger di avvio anticipato

Usare un autoLogger di avvio anticipato per acquisire tracce ETW per le operazioni eseguite all'inizio del percorso di avvio:

  1. Connettersi al dispositivo con TShell.

  2. Eseguire Tracelog per configurare l'autologger per l'ascolto del GUID del provider: d6e1490c-c3a6-4533-8de2-18b16ce47517.

    Impostare buffer su 128 kilobyte, con un minimo di 12 buffer e un massimo di 34 buffer (i valori inferiori possono causare l'eliminazione degli eventi).

    Per il GUID della sessione, è possibile generare un GUID usando uuidgen e quindi aggiungere un segno di numero (#) prima di esso oppure specificare un nome file che include un GUID.

    È possibile salvare il file di log ovunque, anche se è consigliabile usare un percorso nelle cartelle dati dell'utente o dell'app, ad esempio -f %ProgramData%\Fabrikam\log.etl.

    Tracelog.exe -addautologger StateSeparationViolationsAutologger -sessionguid #aabbccdd-1234-5678-90ab-a00bb00ccdd -f %ProgramData%\Fabrikam\log.etl -guid #d6e1490c-c3a6-4533-8de2-18b16ce47517 -b 128 -min 12 -max 34
    
  3. Riavviare il dispositivo per avviare la sessione di traccia autoLogger

  4. Connettersi al dispositivo con TShell.

  5. Arrestare l'autologger:

    Tracelog.exe -stop StateSeparationViolationsAutologger
    
  6. Ottenere il file ETL ed esaminare i dati:

    a. Acquisire il valore della directory ProgramData del dispositivo , ad esempio E:\ProgramData.

    cmd-device -InformationVariable echoInfo echo %ProgramData% $deviceProgramData = $echoInfo[0]
    

    b. Usa questo valore per copiare il file ETL dal dispositivo al PC locale. Esempio:

    PS C:\> getd E:\ProgramData\Fabrikam\log.etl C:\hostdir\log.etl
    
  7. Esaminare i dati dell'attività di registrazione delle tracce usando Windows Performance Analzyer (WPA) o altri strumenti.

Logger su richiesta

Usare un logger su richiesta per acquisire una traccia ETW su richiesta.

  1. Configurare una sessione di registrazione per l'ascolto del GUID del provider d6e1490c-c3a6-4533-8de2-18b16ce47517:

    Tracelog.exe -start StateSeparationViolations -f <path to save ETL> -guid #d6e1490c-c3a6-4533-8de2-18b16ce47517
    
  2. Riprovare lo scenario o eseguire il test (purché il dispositivo non si riavvii).

  3. Arrestare la sessione di registrazione.

    Tracelog.exe -stop StateSeparationViolations
    
  4. Copiare il file ETL dal dispositivo.

    PS C:\> getd C:\ProgramData\Fabrikam\log.etl C:\hostdir\log.etl
    
  5. Aprire il file di log ed esaminare i dati delle attività di registrazione traccia usando Windows analizzatore prestazioni.

Traccia di avvio

Con una traccia ETW di avvio anticipato configurata correttamente, tutte le operazioni del Registro di sistema e/o i file possono essere acquisite in una traccia e hanno stack acquisiti per ogni operazione che descrive in dettaglio il percorso del codice che porta a tale operazione del Registro di sistema.

  1. Connettersi al dispositivo con TShell

  2. Registrare la traccia di avvio (registro, fileio o entrambi)

    wpr -boottrace -addboot registry
    wpr -boottrace -addboot fileio
    
  3. Riavviare il dispositivo per avviare l'acquisizione della traccia.

  4. Connettersi di nuovo al dispositivo con TShell.

  5. Arrestare la traccia:

    wpr -boottrace -stopboot <path where to write ETL>
    
  6. Copiare il file ETL dal dispositivo.

    PS C:\> getd C:\<path on device to the>\log.etl C:\hostdir\log.etl
    
  7. Aprire il file di log e aprire i dati delle attività di registrazione traccia usando Windows analizzatore prestazioni.

  8. In WPA, indicare di caricare i simboli in modo che il file binario analizzato possa essere risolto nelle tracce dello stack e quindi aprire una tabella di riepilogo del Registro di sistema.

    È consigliabile filtrare la tabella in modo che mostri solo le operazioni agli hive SYSTEM e SOFTWARE. Se si visualizza la colonna "albero delle chiavi di base", espandere REGISTRY e quindi MACHINE. Selezionare sia SYSTEM che SOFTWARE, fare clic con il pulsante destro del mouse e scegliere Filtra in selezione.

    È consigliabile filtrare la tabella in modo che vengano filtrate solo le operazioni in cui lo stack comporta l'analisi del file binario. Questo filtro può essere eseguito sopra il filtro solo l'hive SYSTEM e SOFTWARE consigliato in precedenza. Fare clic nella colonna Stack e aprire la casella di ricerca. Immettere il nome del file binario analizzato e fare clic su Trova tutto. Fare clic con il pulsante destro del mouse su una delle righe evidenziate nello stack contenente il nome binario e scegliere Filtra in selezione.

Controlli di isolamento driver Di verifica driver

Driver Verifier (DV) è uno strumento fornito con Windows usato per monitorare i driver per chiamate di funzioni o azioni non corretti che potrebbero danneggiare il sistema. A partire dalla build del sistema operativo 19568, Driver Verifier ha nuove funzionalità per supportare gli sviluppatori di driver di Windows monitorando le violazioni dei requisiti di isolamento del pacchetto driver. L'isolamento dei pacchetti driver è il requisito chiave che i driver devono rispettare nei sistemi del sistema operativo factory per rispettare i requisiti di separazione dello stato.

Driver Verifier monitorerà le letture e le scritture del Registro di sistema non corretto non consentite nei sistemi del sistema operativo factory. Usare questo strumento nelle fasi iniziali dello sviluppo di driver per comprendere e correggere la situazione in cui il componente viola i requisiti di isolamento del driver.

Sintassi:

Nota

Se si abilita in un sistema operativo factory, vedere Connettersi tramite SSH per connettersi al sistema operativo factory in modalità remota tramite SSH

verifier /rc 33 36 /driver myDriver.sys

In questo modo verranno abilitati i controlli di isolamento del driver sul driver di destinazione (myDriver.sys). È anche possibile selezionare più driver separando l'elenco con uno spazio:

verifier /rc 33 36 /driver myDriver1.sys myDriver2.sys

Per abilitare le impostazioni di verifica, sarà necessario un riavvio. È possibile farlo specificando:

shutdown /r /t 0

Comportamento previsto - Modalità di telemetria:

Durante le fasi iniziali della visualizzazione del driver, il comportamento consigliato per questi controlli è la modalità di telemetria. Si tratta del comportamento predefinito e consente agli sviluppatori di visualizzare tutte le violazioni senza un controllo di bug che interrompe lo stato di avanzamento.

È consigliabile abilitare i controlli di isolamento del driver DV usando la sintassi specificata nella sezione precedente con un debugger del kernel collegato. Dopo che un riavvio ha abilitato le impostazioni DV, sarà possibile visualizzare le violazioni nell'output del debugger del kernel.

Di seguito sono riportati alcuni scenari di esempio di un driver che viola i requisiti di isolamento dei driver e l'aspetto tipico dell'output:

Scenario: ZwCreateKey usando il percorso assoluto completo:

"DRIVER_ISOLATION_VIOLATION: <nome> driver: le operazioni del Registro di sistema non devono usare percorsi assoluti. Rilevata creazione della chiave del Registro di sistema non isolata '\Registry\Machine\SYSTEM'"

Scenario: ZwCreateKey usando il percorso relativo a un handle che non proviene dall'API approvata:

"DRIVER_ISOLATION_VIOLATION: <nome> driver: le operazioni del Registro di sistema devono usare solo handle di chiave restituiti dalle API WDF o WDM. Rilevata creazione di una chiave del Registro di sistema non isolata '\REGISTRY\MACHINE\SYSTEM\SomeKeyThatShouldNotExist'"

Sfruttare la modalità di telemetria per stabilire una linea di base di tutte le violazioni per il componente e iniziare a correggerle una alla volta, testandole man mano che si procede.

Comportamento previsto - Modalità Bucheck:

Più avanti nel processo di sviluppo dei driver, può essere utile abilitare i controlli di isolamento del driver in una modalità che renderà evidente una violazione. Dv può essere configurato per indurreabugcheck quando si verifica una violazione.

Verrà generato un dump della memoria che fornisce dettagli precisi sulla posizione in cui si è verificata la violazione. Per abilitare DV in modalità controllo bug, usare la sintassi seguente:

verifier /onecheck /rc 33 36 /driver myDriver1.sys

Questa modalità è utile quando il driver sta per avvicinare l'idoneità alla produzione ed è sottoposto a fasi finali di convalida e test.

Ottimizzazione dei percorsi del codice:

Le regole di isolamento del driver DV possono essere abilitate durante l'esecuzione di un IHV dei framework di test esistenti. Ciò consentirà di ottimizzare i percorsi di codice esercitati dal driver sottoposto a test.

I test di Nozioni fondamentali sui dispositivi tramite la riga di comando sono una buona baseline di test per l'esercizio di percorsi di codice tipici per il driver. Gli sviluppatori possono abilitare questi test con controlli di isolamento driver DV per massimizzare il potenziale di intercettare le violazioni di isolamento del driver il prima possibile.

Modalità di sviluppo: disabilitare l'imposizione

A scopo di sviluppo, è possibile disattivare l'imposizione della separazione dello stato eseguendo in modalità sviluppo separazione stato. In questo modo è possibile sviluppare, testare ed eseguire app e driver (ad esempio app di test di fabbrica) che non soddisfano i requisiti.

In modalità di sviluppo:

  • La partizione MainOS è scrivibile.
  • Modifiche in HKLM\SYSTEMe HKLM\SOFTWARE persistenza tra i riavvii.
  • Windows continua a monitorare le attività che altrimenti interromperebbero le regole di separazione dello stato.

È possibile configurare la modalità di sviluppo in fase di creazione dell'immagine sostituendo la funzionalità: STATESEPARATION_ON con STATESEPARATION_DEVMODE.

La tabella seguente illustra in dettaglio le differenze tra ogni modalità.

Modalità di separazione dello stato Accesso non modificabile al file system Accesso non modificabile al Registro di sistema
Modalità applicata Scritture non consentite Le modifiche del Registro di sistema non vengono mantenute durante il riavvio
Avviso di violazione nell'output ETW e del debugger Avviso di violazione nell'output ETW e del debugger
Modalità sviluppo Lettura/scrittura consentita Le modifiche del Registro di sistema vengono mantenute durante il riavvio
Avviso di violazione nell'output ETW e del debugger Avviso di violazione nell'output ETW e del debugger