Test delle funzionalità di sicurezza di Windows
Testa l'app per verificare che utilizzi le funzionalità di sicurezza di Windows e ACL avanzati.
Informazioni
La modifica delle protezioni di sicurezza di Windows predefinite può comportare maggiori rischi per gli utenti.
Dettagli del test
Testa la sicurezza dell'app tramite l'esecuzione degli strumenti BinScope Binary Analyzer e Attack Surface Analyzer.
Azioni correttive
Individua e risolvi il problema rilevato dai test. Ricompila ed esegui un nuovo test dell'app.
Test di BinScope Binary Analyzer
I test di BinScope Binary Analyzer esaminano i file binari dell'app per verificare alcune procedure relative a codifica e compilazione in modo da limitare la vulnerabilità dell'app agli attacchi o la possibilità che venga usata per un attacco.
I test di BinScope Binary Analyzer verificano il corretto uso delle funzionalità correlate alla sicurezza:
- AllowPartiallyTrustedCallersAttribute
- Protezione per la gestione delle eccezioni /SafeSEH
- Protezione esecuzione programmi
- Address Space Layout Randomization
- Sezione PE condivisa di lettura/scrittura
- AppContainerCheck
- ExecutableImportsCheck
- WXCheck
AllowPartiallyTrustedCallersAttribute
Messaggio di errore del Kit di certificazione app Windows: APTCACheck Test failed
L'attributo AllowPartiallyTrustedCallersAttribute (APTCA) consente l'accesso a codice completamente attendibile da codice parzialmente attendibile in assembly firmati. Quando applichi a un assembly l'attributo APTCA, l'assembly è accessibile per tutta la relativa durata da chiamanti parzialmente attendibili, con un potenziale rischio per la sicurezza.
Cosa fare se l'app non supera questo test
Non usare l'attributo APTCA per assembly con nome sicuro a meno che non sia indispensabile per il tuo progetto e che tu abbia ben chiaro quali rischi comporta. Se devi proprio usarlo, assicurati che tutte le API siano protette con richieste di sicurezza appropriate per l'accesso al codice. APTCA non ha effetto se l'assembly fa parte di un'app Windows Store.
Osservazioni
Questo test viene eseguito solo su codice gestito (C#, .NET e così via).
Protezione per la gestione delle eccezioni /SafeSEH
Messaggio di errore del Kit di certificazione app Windows: SafeSEHCheck Test failed
Quando l'app incontra una condizione anomala, ad esempio un errore di divisione per zero, viene eseguito un gestore di eccezioni. Poiché l'indirizzo del gestore di eccezioni viene archiviato nello stack durante la chiamata di una funzione, può essere esposto a un attacco di sovraccarico del buffer in caso di sovrascrittura dello stack da parte di malware.
Cosa fare se l'app non supera questo test
Abilita l'opzione /SAFESEH nel comando del linker durante la compilazione dell'app. Questa opzione è abilitata per impostazione predefinita nelle configurazioni per il rilascio di Visual Studio. Verifica che questa opzione sia abilitata nelle istruzioni di compilazione di tutti i moduli eseguibili dell'app.
Osservazioni
Questo test non viene eseguito sui file binari a 64 bit o sui file binari del chipset ARM, perché non archiviano nello stack indirizzi del gestore di eccezioni.
Protezione esecuzione programmi
Messaggio di errore del Kit di certificazione app Windows: NXCheck Test failed
Questo test verifica che un'app non esegua codice archiviato in un segmento di dati.
Cosa fare se l'app non supera questo test
Abilita l'opzione /NXCOMPAT nel comando del linker durante la compilazione dell'app. Questa opzione è abilitata per impostazione predefinita nelle versioni del linker che supportano Protezione esecuzione programmi.
Osservazioni
Ti consigliamo di testare le app in una CPU che supporta Protezione esecuzione programmi e di correggere gli eventuali errori rilevati.
Address Space Layout Randomization
Messaggio di errore del Kit di certificazione app Windows: DBCheck Test failed
Address Space Layout Randomization (ASLR) carica immagini eseguibili in posizioni imprevedibili della memoria. Questo ostacola l'esecuzione di malware che fa affidamento sul caricamento di un programma in un determinato indirizzo virtuale. ASLR deve essere supportato dall'app e da tutti i componenti da essa usati.
Cosa fare se l'app non supera questo test
Abilita l'opzione /DYNAMICBASE nel comando del linker durante la compilazione dell'app. Verifica che questa opzione del linker sia impostata in tutti i moduli usati dall'app.
Osservazioni
In genere, ASLR non ha effetto sulle prestazioni. In alcuni scenari, tuttavia, si verifica un leggero miglioramento delle prestazioni su sistemi a 32 bit. In un sistema con un'alta congestione, in cui vengono caricate molte immagini in svariate posizioni della memoria, le prestazioni possono peggiorare.
Questo test viene eseguito solo su app scritte in codice gestito, ad esempio usando C# o .NET Framework.
Sezione PE condivisa di lettura/scrittura
Messaggio di errore del Kit di certificazione app Windows: SharedSectionsCheck Test failed
I file binari con sezioni scrivibili contrassegnate come condivise rappresentano un rischio per la sicurezza. Non compilare app con sezioni scrivibili condivise se non è strettamente necessario. Usa CreateFileMapping o MapViewOfFile per creare un oggetto memoria condivisa adeguatamente protetto.
Cosa fare se l'app non supera questo test
Rimuovi tutte le sezioni condivise dall'app e crea oggetti memoria condivisa chiamando la funzione CreateFileMapping o MapViewOfFile con attributi di sicurezza appropriati e quindi compila di nuovo l'app.
Osservazioni
Questo test viene eseguito solo su app scritte in lingue non gestite, ad esempio con C o C++.
AppContainerCheck
Messaggio di errore del Kit di certificazione app Windows: AppContainerCheck Test failed.
AppContainerCheck verifica che sia impostato il bit appcontainer nell'intestazione PE (Portable Executable) di un file binario eseguibile. Per eseguire correttamente app Windows Store, il bit appcontainer deve essere impostato in tutti i file exe e in tutte le DLL non gestite.
Cosa fare se l'app non supera questo test
Se un file eseguibile nativo non supera il test, verifica di aver usato la versione più recente del compilatore e del linker per compilare il file e di aver usato il flag /appcontainer nel linker.
Se un file eseguibile gestito non supera il test, verifica di aver usato la versione più recente del compilatore e del linker, ad esempio Microsoft Visual Studio, per compilare l'app di Windows Store.
Osservazioni
Questo test viene eseguito su tutti i file exe e su tutte le DLL non gestite.
ExecutableImportsCheck
Messaggio di errore del Kit di certificazione app Windows: ExecutableImportsCheck Test failed.
Un'immagine PE non supera questo test se la relativa tabella di importazione è stata inserita in una sezione del codice eseguibile. Questa situazione può verificarsi se hai abilitato l'unione della sezione .rdata per l'immagine PE impostando il flag /merge del linker Visual C++ come /merge:.rdata=.text.
Cosa fare se l'app non supera questo test
Non unire la tabella di importazione in una sezione del codice eseguibile. Verifica che il flag /merge del linker Visual C++ non sia impostato in modo da unire la sezione ".rdata" in una sezione del codice.
Osservazioni
Questo test viene eseguito su tutto il codice eccetto gli assembly gestiti in senso stretto.
WXCheck
Messaggio di errore del Kit di certificazione app Windows: WXCheck Test failed.
Il controllo consente di assicurare che un file binario non disponga di pagine mappate come scrivibili ed eseguibili. Questo può verificarsi se il file binario dispone di una sezione scrivibile o eseguibile o se il valore SectionAlignment del file binario è minore di PAGE_SIZE.
Cosa fare se l'app non supera questo test
Verifica che il file binario non disponga di una sezione scrivibile o eseguibile e che il valore SectionAlignment del file binario sia almeno uguale al relativo valore PAGE_SIZE.
Osservazioni
Questo test viene eseguito su tutti i file exe e su tutte le DLL native non gestite.
Un eseguibile potrebbe disporre di una sezione scrivibile ed eseguibile se è stato generato con l'opzione Modifica e continuazione abilitata (/ZI). Disabilitando Modifica e continuazione, la sezione non valida risulterà non presente.
Per gli eseguibili PAGE_SIZE è il valore predefinito di SectionAlignment.
File esclusi in Windows Store
Messaggio di errore del Kit di certificazione app Windows: Banned File Check test failed.
Le app di Windows Store non devono contenere determinati file. Per tali file è disponibile una versione più recente che fornisce miglioramenti importanti per la sicurezza, l'affidabilità o altri aspetti. Microsoft blocca questi file nel Kit di certificazione app Windows per assicurarsi che tutti gli sviluppatori usino la versione aggiornata.
Il controllo dei file esclusi nel Kit di certificazione app Windows verifica attualmente i file seguenti:
Bing.Maps.JavaScript\js\veapicore.js
In genere, questo controllo non viene superato se l'app usa una versione "Release Preview" del file anziché l'ultima versione ufficiale rilasciata. Per risolvere il problema, usa l'ultima versione di Bing Maps SDK per le app di Windows Store.
Attack Surface Analyzer
I test Attack Surface Analyzer esaminano le modifiche relative allo stato del sistema, ai parametri di runtime e agli oggetti a protezione diretta riscontrabili dopo l'installazione e l'esecuzione di un'app per cercare punti deboli specifici nella sicurezza. La correzione di questi punti deboli non influisce negativamente sulle prestazioni. Non possiamo certificare la tua app per Windows Store se contiene punti deboli nella sicurezza.
I test Attack Surface Analyzer sono validi per tutti i linguaggi di programmazione e consentono di cercare i punti deboli nella sicurezza di un'app.
- File eseguibili protetti con ACL deboli
- Directory protette che contengono oggetti e includono ACL deboli
- Chiavi del Registro di sistema protette con ACL deboli
- Servizi che consentono l'accesso ad account non amministrativi e sono vulnerabili alla manomissione
- Servizi con riavvii rapidi o che possono essere riavviati più di due volte ogni 24 ore
File eseguibili protetti con ACL deboli
Questo test cerca i file eseguibili che contengono ACL deboli esaminando gli ACL di ogni file eseguibile nuovo o modificato di proprietà di un amministratore. Gli ACL di questi file devono impedire ai non amministratori di apportare modifiche. Attack Surface Analyzer testa i file eseguibili (exe) e i file con contenuto eseguibile, ad esempio script e file della Guida.
Cosa fare se l'app non supera questo test
Se nella tua app viene rilevato questo punto debole, individua e rimuovi questi diritti per tutti gli account non amministrativi: GENERIC_ALL, GENERIC_WRITE, WRITE_OWNER, WRITE_DAC, FILE_WRITE_ATTRIBUTES, FILE_WRITE_EA, FILE_APPEND_DATA o FILE_WRITE_DATA, DELETE.
Osservazioni
Gli ACL deboli consentono ai non amministratori di modificare un file eseguibile. Un file eseguibile modificato potrebbe non funzionare come previsto. Se i diritti di accesso non sono configurati correttamente, un utente malintenzionato potrebbe sostituire o modificare il contenuto del file e causarne un comportamento fraudolento.
Directory protette che contengono oggetti e includono ACL deboli
Questo test cerca le directory protette che contengono oggetti e includono ACL deboli verificando gli ACL nelle gerarchie di cartelle nuove o modificate. Gli ACL gerarchici (o ACL ereditati) controllano l'accesso a tutti i file e a tutte le cartelle in una cartella. Gli ACL di queste cartelle devono impedire ai non amministratori di modificare queste cartelle o il relativo contenuto.
Invece di contrassegnare ogni file eseguibile e sottocartella non adeguatamente protetti, questo test identifica la cartella di primo livello in una gerarchia con ACL deboli.
Cosa fare se l'app non supera questo test
Se nella tua app viene rilevato questo punto debole, individua e rimuovi questi diritti per tutti gli account non amministrativi nella directory identificata dal test in modo che non possano essere ereditati: GENERIC_ALL, GENERIC_WRITE, WRITE_OWNER, WRITE_DAC, FILE_ADD_FILE, FILE_ADD_SUBDIRECTORY, FILE_WRITE_ATTRIBUTES, FILE_WRITE_EA, FILE_APPEND_DATA, FILE_WRITE_DATA, FILE_DELETE_CHILD e DELETE. Per questa operazione potrebbe essere necessario modificare il flag Inherited impostato sull'ACL della directory radice.
Dopo aver corretto i diritti per la directory radice, potrebbe essere necessario correggere anche quelli dei singoli file eseguibili come descritto in File eseguibili protetti con ACL deboli.
Osservazioni
Questo test identifica una gerarchia di directory e i relativi file con ACL deboli, che concedono diritti inadeguati a utenti non amministratori. Questa gerarchia può essere causata da diritti ereditati errati. Ti consigliamo quindi di esaminare i diritti ereditati prima di modificare quelli nelle directory e nei file discendenti.
Chiavi del Registro di sistema protette con ACL deboli
Questo test cerca le chiavi del Registro di sistema con ACL deboli verificando gli ACL delle chiavi nuove o modificate nell'hive del Registro di sistema Local Machine (HKLM). Solo gli amministratori devono disporre di accesso in scrittura all'hive del Registro di sistema Local Machine.
Cosa fare se l'app non supera questo test
Rimuovere questi diritti nell'oggetto identificati dal test per tutti gli account non amministrativi: GENERIC_ALL, GENERIC_WRITE, WRITE_OWNER, WRITE_DAC, KEY_SET_VALUE, KEY_CREATE_SUBKEY e DELETE.
Osservazioni
I valori del Registro di sistema in questa sezione possono determinare la posizione dei file eseguibili, quali exe e dll. Le app usano inoltre le chiavi del Registro di sistema nell'hive Local Machine per archiviare o leggere il percorso di un file eseguibile. Se un utente malintenzionato modifica questa chiave, ad esempio impostandone il valore sul percorso di un file eseguibile non attendibile, un'app potrebbe eseguire il file errato.
Se una chiave del Registro di sistema sembra fare riferimento a un file eseguibile, questo test esaminerà gli ACL della chiave per verificare se concedono diritti inadeguati a un account non amministrativo.
Servizi che consentono l'accesso ad account non amministrativi e sono vulnerabili alla manomissione
Questo test cerca i servizi nuovi o modificati che consentono l'accesso ad account non amministrativi verificando gli ACL in questi servizi. I nuovi servizi non devono includere ACL deboli nel percorso dei file binari, nella DLL host, nelle chiavi del Registro di sistema o nel servizio stesso, perché potrebbero consentire a un utente non amministratore di cambiare la modalità di esecuzione del servizio.
Cosa fare se l'app non supera questo test
Correggi i singoli file come descritto in File eseguibili protetti con ACL deboli.
Osservazioni
Ai servizi sono associati diritti generici e specifici. Questo test cerca i diritti inadeguati concessi agli account non amministrativi. Se i diritti non sono protetti, un utente malintenzionato potrebbe reindirizzare il servizio in modo da eseguire un file non attendibile all'avvio.
Un utente malintenzionato potrebbe ad esempio chiamare ChangeServiceConfig per cambiare il percorso del file eseguibile del servizio.
Servizi con riavvii rapidi o che possono essere riavviati più di due volte ogni 24 ore
Questo test cerca i servizi che possono essere riavviati frequentemente verificando la configurazione del servizio. I servizi non devono essere riavviati più di due volte nell'arco di 24 ore.
Cosa fare se l'app non supera questo test
Modifica il valore di Reset Period per il servizio per impedire che venga riavviato più di due volte in 24 ore.
Osservazioni
Questo test cerca una vulnerabilità correlata a ASLR (Address Space Layout Randomization). ASLR è una funzionalità che carica codice eseguibile in posizioni casuali in memoria, rendendo di fatto più difficile la creazione di exploit affidabili delle vulnerabilità della sicurezza. Un utente malintenzionato che imposta un servizio in modo che venga riavviato ripetutamente può forzare il caricamento di codice eseguibile in tutti i possibili percorsi e ostacolare ASLR.
Questo test esamina gli elementi lpsaActions della struttura Service Failure Actions per i valori SC_ACTION_REBOOT e SC_ACTION_RESTART. Per configurare questi valori, è possibile chiamare ChangeServiceConfig2.
Il test determina se sono presenti più di due azioni, se i valori di ritardo sono inferiori alle 24 ore e se il periodo di ripristino del server è inferiore alle 24 ore.