Debug e risoluzione dei problemi di Controllo app
Nota
Alcune funzionalità di Controllo app per le aziende sono disponibili solo in versioni specifiche di Windows. Altre informazioni sulla disponibilità delle funzionalità di Controllo app.
Questo articolo descrive come eseguire il debug e risolvere gli errori di app e script quando si usa Controllo app per le aziende.
1 - Raccogliere i dati di diagnostica del controllo app
Prima di eseguire il debug e risolvere i problemi di Controllo app, è necessario raccogliere informazioni da un dispositivo che presenta il comportamento del problema.
Eseguire i comandi seguenti da una finestra di PowerShell con privilegi elevati per raccogliere le informazioni di diagnostica necessarie:
Raccogliere i dati di diagnostica generali del controllo app e copiarli in %userprofile%\AppData\Local\Temp\DiagOutputDir\CiDiag:
cidiag.exe /stop
Se CiDiag.exe non è presente nella versione di Windows, raccogliere queste informazioni manualmente:
- File binari dei criteri di controllo delle app dalle partizioni di sistema Windows ed EFI
- Registri eventi di Controllo app
- Log eventi di AppLocker
- Altri log eventi che possono contenere informazioni utili da altre app e servizi di Windows
Salvare le informazioni di sistema del dispositivo nella cartella CiDiag:
msinfo32.exe /report $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\SystemInformation.txt
Usare CiTool.exe per inventariare l'elenco dei criteri di Controllo app nel dispositivo. Ignorare questo passaggio se CiTool.exe non è presente nella versione di Windows.
citool.exe -lp -json > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\CiToolOutput.json
Esportare i dati della chiave del Registro di sistema di AppLocker nella cartella CiDiag:
reg.exe query HKLM\Software\Policies\Microsoft\Windows\SrpV2 /s > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerRegistry.txt; reg.exe query HKLM\Software\Policies\Microsoft\Windows\AppidPlugins /s >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerRegistry.txt; reg.exe query HKLM\System\CurrentControlSet\Control\Srp\ /s >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerRegistry.txt
Nota
È possibile che venga visualizzato un errore che indica che il sistema non è riuscito a trovare la chiave o il valore del Registro di sistema specificato. Questo errore non indica un problema e può essere ignorato.
Copiare tutti i file dei criteri di AppLocker da %windir%System32\AppLocker alla cartella CiDiag:
Copy-Item -Path $env:windir\System32\AppLocker -Destination $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\ -Recurse -Force -ErrorAction Ignore
Raccogliere informazioni sui file per i file dei criteri di AppLocker raccolti nel passaggio precedente:
Get-ChildItem -Path $env:windir\System32\AppLocker\ -Recurse | select Mode,LastWriteTime,CreationTime,Length,Name >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerPolicyFiles.txt
Esportare i criteri di AppLocker effettivi:
Get-AppLockerPolicy -xml -Effective > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLocker.xml
Raccogliere informazioni sulla configurazione e sullo stato dei servizi AppLocker:
sc.exe query appid > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt; sc.exe query appidsvc >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt; sc.exe query applockerfltr >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt
Log eventi di Controllo app di base
Gli eventi di Controllo app vengono generati in due posizioni:
- Log di applicazioni e servizi - Microsoft - Windows - CodeIntegrity - Operational
- Log di applicazioni e servizi - Microsoft - Windows - AppLocker - MSI e script
Nella directory di output di CiDiag questi log eventi sono denominati rispettivamente CIOperational.evtx e ALMsiAndScript.evtx.
Altri log eventi di Windows che potrebbero essere utili
In alcuni casi, è possibile integrare le informazioni contenute nei log eventi principali di Controllo app con le informazioni disponibili in questi altri log eventi. CIDiag.exe non raccoglie quelli visualizzati in corsivo.
- Log di applicazioni e servizi - Microsoft - Windows - CodeIntegrity - Verbose
- Log di applicazioni e servizi - Microsoft - Windows - AppLocker - EXE e DLL
- Log di applicazioni e servizi - Microsoft - Windows - AppLocker - Distribuzione di app in pacchetto
- Log di applicazioni e servizi - Microsoft - Windows - AppLocker - Esecuzione di app in pacchetto
- Log di applicazioni e servizi - Microsoft - Windows - AppID - Operativo
- Log di applicazioni e servizi - Microsoft - Windows - CAPI2 - Operativo
- Log di applicazioni e servizi - Microsoft - Windows - DeviceGuard - Operational
- Log di applicazioni e servizi - Microsoft - Windows - PowerShell - *
- Windows - Applicazione
- Windows - Sistema
2 - Usare i dati di diagnostica e di log per identificare i problemi
Dopo aver raccolto le informazioni di diagnostica necessarie da un dispositivo, è possibile iniziare l'analisi dei dati di diagnostica raccolti nella sezione precedente.
Verificare il set di criteri di Controllo app attivi e applicati. Verificare che solo i criteri che si prevede siano attivi siano attualmente attivi. Tenere presente i criteri di Posta in arrivo di Windows che possono essere attivi. È possibile usare uno di questi metodi:
- Esaminare l'output da CiTool.exe -lp, se applicabile, salvato nella directory di output CIDiag come CiToolOutput.json. Vedere Usare Microsoft Edge per visualizzare il file json formattato.
- Esaminare tutti gli eventi di attivazione dei criteri dal log eventi principale di Controllo app disponibile nei log applicazioni e servizi - Microsoft - Windows - CodeIntegrity - Operational. All'interno della directory di output CIDiag, questo registro eventi è denominato CIOperational.evtx.
Esaminare eventuali eventi di blocco per eseguibili, DLL e driver dal log eventi di Controllo app principale disponibile nei log di Applicazioni e servizi - Microsoft - Windows - CodeIntegrity - Operational. All'interno della directory di output CIDiag, questo registro eventi è denominato CIOperational.evtx. Usare le informazioni degli eventi di blocco e i relativi eventi di dettagli della firma 3089 correlati per analizzare eventuali blocchi non inspiegabili o imprevisti. Per informazioni di riferimento, vedere l'esempio di eseguibile bloccato descritto più avanti in questo articolo.
Esaminare eventuali eventi di blocco per le app in pacchetto, i programmi di installazione MSI, gli script e gli oggetti COM dal log eventi di applicazione degli script principali disponibile nei log di Applicazioni e servizi - Microsoft - Windows - AppLocker - MSI e Script. All'interno della directory di output CIDiag, questo registro eventi è denominato ALMsiAndScript.evtx. Usare le informazioni degli eventi di blocco e i relativi eventi di dettagli della firma 8038 correlati per analizzare eventuali blocchi non inspiegabili o imprevisti.
La maggior parte dei problemi relativi a Controllo app, inclusi gli errori di app e script, può essere diagnosticata usando i passaggi precedenti.
Analisi degli eventi per un file eseguibile bloccato di esempio
Ecco un esempio di EventData dettagliato da un tipico evento di blocco della modalità di imposizione del controllo app 3077 e uno dei relativi eventi di informazioni sulla firma 3089 correlati.Here's an example of detailed EventData from a typical App Control enforcement mode block event 3077, and one of its correlated 3089 signature information events. Le tabelle che seguono ogni screenshot dell'evento descrivono alcuni degli elementi contenuti negli eventi. Seguendo le descrizioni degli eventi è disponibile una procedura dettagliata che illustra come usare gli eventi per comprendere il motivo per cui si è verificato il blocco.
Evento 3077 - Evento blocco di imposizione del controllo app
Nome elemento | Descrizione |
---|---|
Sistema - Correlazione - [ActivityID] |
Non visualizzato nello screenshot Usare l'ActivityID di correlazione per trovare una corrispondenza tra un evento di blocco di Controllo app e uno o più eventi di firma 3089. |
Nome file | Percorso e nome del file sul disco a cui è stato impedito l'esecuzione. Poiché il nome sul disco è modificabile, questo valore non è quello usato durante la creazione di regole file di Controllo app con -Level FileName . Vedere invece l'elemento OriginalFileName più avanti in questa tabella. |
Nome processo | Percorso e nome del file che ha tentato di eseguire il file bloccato. Chiamato anche processo padre. |
Livello di firma richiesto | Livello di autorizzazione per la firma di Windows che deve essere passato per l'esecuzione. Vedere Livello di firma richiesto e convalidato. |
Livello di firma convalidato | Livello di autorizzazione per la firma di Windows assegnato al codice. Vedere Livello di firma richiesto e convalidato. |
Stato | Codice di stato di Windows NT. È possibile usare certutil.exe -error <status> per cercare il significato del codice di stato. |
SHA1 Hash | Hash SHA1 Authenticode per il file bloccato. |
SHA256 Hash | Hash SHA256 Authenticode per il file bloccato. |
SHA1 Flat Hash | Hash del file flat SHA1 per il file bloccato. |
SHA256 Flat Hash | Hash del file flat SHA256 per il file bloccato. |
PolicyName | Nome descrittivo dei criteri di Controllo app che hanno causato l'evento di blocco. Per ogni criterio che blocca l'esecuzione del file viene visualizzato un evento di blocco separato 3077 (o evento di blocco di controllo 3076). |
PolicyId | Valore id descrittivo dei criteri di Controllo app che hanno causato l'evento di blocco. |
PolicyHash | Hash SHA256 Authenticode del file binario dei criteri di Controllo app che ha causato l'evento di blocco. |
OriginalFileName | Nome file non modificabile impostato dallo sviluppatore nell'intestazione della risorsa del file bloccato. Questo valore è quello usato durante la creazione di regole file di Controllo app con -Level FileName . |
InternalName | Un altro valore non modificabile impostato dallo sviluppatore nell'intestazione della risorsa del file bloccato. È possibile sostituire questo valore con OriginalFileName nelle regole di file con -Level FileName -SpecificFileNameLevel InternalName . |
FileDescription | Un altro valore non modificabile impostato dallo sviluppatore nell'intestazione della risorsa del file bloccato. È possibile sostituire questo valore con OriginalFileName nelle regole di file con -Level FileName -SpecificFileNameLevel FileDescription . |
ProductName | Un altro valore non modificabile impostato dallo sviluppatore nell'intestazione della risorsa del file bloccato. È possibile sostituire questo valore con OriginalFileName nelle regole di file con -Level FileName -SpecificFileNameLevel ProductName . |
FileVersion | Valore VersionEx del criterio usato per applicare il controllo della versione sui criteri firmati. |
PolicyGUID | PolicyId dei criteri di Controllo app che hanno causato l'evento di blocco. |
UserWriteable | Valore booleano che indica se il file si trovava in un percorso scrivibile dall'utente. Queste informazioni sono utili per diagnosticare i problemi quando sono consentiti dalle regole filepath. |
PackageFamilyName | Nome della famiglia di pacchetti per l'app in pacchetto (MSIX) che include il file bloccato. |
Evento 3089 - Evento delle informazioni sulla firma del controllo app
Nome elemento | Descrizione |
---|---|
Sistema - Correlazione - [ActivityID] | Usare l'ActivityID di correlazione per trovare una corrispondenza tra un evento di firma del controllo app e il relativo evento di blocco. |
TotalSignatureCount | Numero totale di firme rilevate per il file bloccato. |
Firma | Numero di indici, a partire da 0, della firma corrente mostrata in questo evento 3089. Se il file contiene più firme, sono disponibili altri 3089 eventi per le altre firme. |
Hash | Valore hash usato da Controllo app per trovare la corrispondenza con il file. Questo valore deve corrispondere a uno dei quattro hash visualizzati nell'evento di blocco 3077 o 3076. Se non sono state trovate firme per il file (TotalSignatureCount = 0), viene visualizzato solo il valore hash. |
SignatureType | Tipo di firma. |
ValidatedSigningLevel | Livello di autorizzazione per la firma di Windows soddisfatto dalla firma. Vedere Livello di firma richiesto e convalidato. |
VerificationError | Il motivo per cui questa firma specifica non è riuscita a passare i criteri di Controllo app. Vedere VerificationError. |
PublisherName | Valore del nome comune (CN) dal certificato foglia. |
IssuerName | Valore CN del certificato più alto disponibile nella catena di certificati. Questo livello è in genere un certificato sotto la radice. |
PublisherTBSHash | Hash TBS del certificato foglia. |
IssuerTBSHash | Hash TBS del certificato più alto disponibile nella catena di certificati. Questo livello è in genere un certificato sotto la radice. |
Procedura dettagliata degli eventi di esempio 3077 e 3089
Verrà ora illustrato come usare i dati degli eventi negli eventi di esempio 3077 e 3089 per comprendere il motivo per cui i criteri di controllo delle app hanno bloccato questo file.
Informazioni sul file bloccato e sul contesto del blocco
Facendo riferimento all'evento 3077, individuare le informazioni che identificano i criteri, il file bloccato e il processo padre che ha tentato di eseguirlo. Prendere in considerazione queste informazioni di contesto per determinare se il blocco è previsto e desiderato.
Nell'esempio, il file bloccato è PowerShell.exe, che fa parte di Windows e che in genere dovrebbe essere eseguito. In questo caso, tuttavia, i criteri sono basati sul modello di criteri Windows in modalità S, che non consente l'esecuzione degli host script come modo per limitare la superficie di attacco. Per la modalità S, questo evento di blocco ha esito positivo. Si supponga tuttavia che l'autore dei criteri non fosse a conoscenza di tale vincolo quando ha scelto il modello e consideri questo blocco come imprevisto.
Determinare il motivo per cui Controllo app ha rifiutato il file
Anche in questo caso, facendo riferimento all'evento 3077, viene visualizzato il livello di firma richiesto 2 che indica che il codice deve passare i criteri di Controllo app. Tuttavia, il livello di firma convalidato pari a 1 indica che il codice è stato considerato come senza firma. "Unsigned" può indicare che il file è stato effettivamente non firmato, firmato ma con un certificato non valido o firmato, ma senza certificati consentiti dai criteri di Controllo app.
A questo punto, esaminare gli eventi 3089 correlati per il file bloccato. Nell'esempio viene esaminata solo la prima firma (indice di firma 0) trovata in un file con più firme. Per questa firma, ValidatedSigningLevel è 12, ovvero ha una firma del prodotto Microsoft Windows. VerificationError di 21 indica che la firma non ha superato i criteri di Controllo app.
È importante esaminare le informazioni per ogni evento 3089 correlato, in quanto ogni firma può avere un valore ValidateSigningLevel e VerificationError diverso.
Importante
Si noti che il livello di firma convalidato per l'evento 3077 viene interpretato in modo molto diverso da ValidatedSigningLevel nell'evento 3089.
Nel caso dell'evento 3077, livello di firma convalidato indica come il file binario è stato effettivamente trattato da Windows.
Nel caso dell'evento 3089, invece, ValidatedSigningLevel indica il livello massimo potenziale che la firma potrebbe ricevere. È necessario usare VerificationError per comprendere il motivo per cui la firma è stata rifiutata.
3 - Risolvere i problemi comuni
Dopo aver analizzato i dati di diagnostica di Controllo app, è possibile eseguire i passaggi necessari per risolvere il problema o eseguire altri passaggi di debug. Di seguito sono riportati alcuni problemi e passaggi comuni che è possibile provare a risolvere o isolare ulteriormente il problema radice:
Problema: un file è stato bloccato che si vuole consentire
- Usare i dati dei log eventi principali di Controllo app per aggiungere regole per consentire il file bloccato.
- Ridistribuire il file o l'app usando un programma di installazione gestito se il criterio considera attendibili i programmi di installazione gestiti.
Problema: è attivo un criterio imprevisto
Questa condizione può esistere se:
- È stato rimosso un criterio, ma il sistema non è stato riavviato.
- Un criterio è stato parzialmente rimosso, ma una copia dei criteri esiste ancora nella partizione System o EFI.
- Un criterio con PolicyId {A244370E-44C9-4C06-B551-F6016E563076} (formato a criteri singoli) è stato copiato nel percorso dei criteri con formato multi-criterio prima dell'attivazione, generando un binario di criteri duplicati sul disco. Controllare sia i file SiPolicy.p7b che {A244370E-44C9-4C06-B551-F6016E563076}.cip nelle partizioni System ed EFI.
- Un criterio è stato distribuito in modo non corretto nel dispositivo.
- Un utente malintenzionato con accesso amministratore ha applicato un criterio per causare attacchi Denial of Service per alcuni processi critici.
Per risolvere un problema di questo tipo, seguire le istruzioni per rimuovere i criteri di controllo delle app per i criteri identificati.
Problema: si verifica un errore dell'app non gestita e non vengono osservati eventi di controllo delle app
Alcune app modificano il comportamento quando sono attivi criteri di controllo delle app in modalità utente, il che può causare errori imprevisti. Può anche essere un effetto collaterale dell'imposizione degli script per le app che non gestiscono correttamente i comportamenti di imposizione implementati dagli host di script.
Provare a isolare la causa radice eseguendo le azioni seguenti:
- Controllare gli altri log eventi elencati nella sezione 1 di questo articolo per individuare gli eventi corrispondenti agli errori imprevisti dell'app.
- Sostituire temporaneamente i criteri di Controllo app con un altro criterio che disabilita l'imposizione e la rivisitazione degli script .
- Sostituire temporaneamente i criteri di Controllo app con un altro criterio che consente tutti gli oggetti COM e il nuovo test.
- Sostituire temporaneamente i criteri di Controllo app con altri criteri che rilassino le altre regole dei criteri e ne rivisitino l'applicazione.
Problema: un'app distribuita da un programma di installazione gestito non funziona
Per eseguire il debug dei problemi usando il programma di installazione gestito, provare a seguire questa procedura:
- Verificare che i criteri di Controllo app che bloccano l'app includano l'opzione per abilitare il programma di installazione gestito.
- Verificare che il criterio di AppLocker effettivo $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLocker.xml sia corretto come descritto in Consentire automaticamente le app distribuite da un programma di installazione gestito.
- Verificare che i servizi AppLocker siano in esecuzione. Queste informazioni sono disponibili in $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt creato nella sezione 1 di questo articolo.
- Verificare che esista un file AppLocker denominato MANAGEDINSTALLER. APPLOCKER esiste nella cartella CiDiag creata in precedenza. In caso contrario, ripetere i passaggi per distribuire e abilitare la configurazione di AppLocker del programma di installazione gestito.
- Riavviare il processo del programma di installazione gestito e verificare che venga osservato un evento 8002 nel registro eventi AppLocker - EXE e DLL per il processo del programma di installazione gestito con PolicyName = MANAGEDINSTALLER. Se invece viene visualizzato un evento con 8003 o 8004 con PolicyName = MANAGEDINSTALLER, controllare le regole ManagedInstaller nel codice XML del criterio AppLocker e verificare che una regola corrisponda al processo del programma di installazione gestito.
- Usare fsutil.exe per verificare che i file scritti dal processo del programma di installazione gestito abbiano l'attributo di origine del programma di installazione gestito esteso. In caso contrario, ridistribuire i file con il programma di installazione gestito e riprovare.
- Testare l'installazione di un'app diversa usando il programma di installazione gestito.
- Aggiungere un altro programma di installazione gestito ai criteri di AppLocker e testare l'installazione usando l'altro programma di installazione gestito.
- Controllare se l'app riscontra una limitazione nota con il programma di installazione gestito. In tal caso, è necessario autorizzare l'app usando altri mezzi.
Problema: un'app che si aspettava che l'ISG (Intelligent Security Graph) consentisse non funziona
Per eseguire il debug dei problemi tramite ISG, provare a eseguire la procedura seguente:
- Verificare che i criteri di Controllo app che bloccano l'app includano l'opzione per abilitare il grafico di sicurezza intelligente.
- Verificare che i servizi AppLocker siano in esecuzione. Queste informazioni sono disponibili in $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt creato nella sezione 1 di questo articolo.
- Usare fsutil.exe per verificare che i file abbiano l'attributo di origine ISG esteso. In caso contrario, ridistribuire i file con il programma di installazione gestito e riprovare.
- Controllare se l'app riscontra una limitazione nota con ISG.
4 - Segnalare i problemi a Microsoft, se appropriato
Se dopo aver seguito le linee guida descritte in questo articolo si ritiene di aver identificato un problema del prodotto, segnalare il problema a Microsoft.
- I clienti con supporto Microsoft Premier devono registrare una richiesta di servizio tramite i normali canali.
- Tutti gli altri clienti possono segnalare i problemi direttamente al team del prodotto controllo app tramite l'hub di feedback di Windows. Selezionare la categoria Sicurezza & Privacy - Controllo applicazioni per assicurarsi che il problema venga indirizzato correttamente al team del prodotto Controllo app.
Quando si segnalano problemi, assicurarsi di fornire le informazioni seguenti:
- Tutti i dati di diagnostica di Controllo app descritti in precedenza.
- Se possibile, i file bloccati.
- Cancellare le istruzioni per riprodurre il problema.