Condividi tramite


Considerazioni sulla sicurezza: Microsoft Windows Shell

In questo argomento vengono fornite informazioni sulle considerazioni sulla sicurezza correlate alla shell di Windows. Questo documento non può fornire tutte le informazioni necessarie per conoscere i problemi di sicurezza, ma usarlo come punto di partenza e riferimento per questa specifica area tecnologica.

Shell controlla diversi aspetti importanti del sistema, tra cui diversi che presentano potenziali rischi per la sicurezza se non vengono gestiti correttamente. Questo argomento illustra alcuni dei problemi più comuni e come risolverli nelle applicazioni. Tenere presente che la sicurezza non è limitata agli exploit basati su Internet. Nei sistemi condivisi, inclusi i sistemi accessibili tramite Servizi terminal, è anche necessario assicurarsi che gli utenti non possano eseguire operazioni che potrebbero danneggiare altri utenti che condividono il sistema.

Installazione corretta dell'applicazione

La maggior parte dei potenziali problemi di sicurezza della shell può essere mitigata installando correttamente l'applicazione.

  • Installare l'applicazione nella cartella Programmi.

    Sistema operativo Ubicazione
    Windows XP, Windows Server 2003 e versioni precedenti CSIDL_PROGRAM_FILES
    Windows Vista e versioni successive FOLDERID_ProgramFiles, FOLDERID_ProgramFilesX86, FOLDERID_ProgramFilesX64, FOLDERID_ProgramFilesCommon, FOLDERID_ProgramFilesCommonX86 o FOLDERID_ProgramFilesCommonX64. Per informazioni specifiche, vedere KNOWNFOLDERID.

     

  • Non archiviare i dati utente nella cartella Programmi.

    Usare la cartella dati appropriata per i dati comuni a tutti gli utenti.

    Sistema operativo Ubicazione
    Windows XP, Windows Server 2003 e versioni precedenti CSIDL_COMMON_APPDATA
    Windows Vista e versioni successive FOLDERID_ProgramData

     

    Usare la cartella dati utente appropriata per i dati appartenenti a un determinato utente.

    Sistema operativo Ubicazione
    Windows XP, Windows Server 2003 e versioni precedenti CSIDL_APPDATA, CSIDL_PERSONAL e altri.
    Windows Vista e versioni successive FOLDERID_RoamingAppData, FOLDERID_Documents e altri.

     

  • Se è necessario eseguire l'installazione in un percorso diverso dalla cartella Programmi, assicurarsi di impostare correttamente gli elenchi di controllo di accesso (ACL) in modo che gli utenti non abbiano accesso a parti non appropriate del file system. Tutti i dati specifici di un determinato utente devono avere un ACL che impedisce a qualsiasi altro utente di accedervi.

  • Quando si configurano le associazioni di file, assicurarsi di specificare correttamente la riga di comando. Usare un percorso completo ed eseguire il wrapping di tutti gli elementi che contengono spazi vuoti tra virgolette. Eseguire il wrapping dei parametri dei comandi tra virgolette separate. In caso contrario, la stringa potrebbe essere analizzata in modo non corretto e l'applicazione non verrà avviata correttamente. Di seguito sono riportati due esempi di righe di comando correttamente formate.

    "C:\Program Files\MyApp\MyApp.exe" "%1" "%2"
    C:\MyAppDir\MyApp\MyApp.exe "%1"
    

Nota

Il percorso delle cartelle di installazione standard può variare da sistema a sistema. Per ottenere il percorso di una cartella standard in un particolare sistema Windows Vista o versione successiva, chiamare SHGetKnownFolderPath con il valore KNOWNFOLDERID appropriato. In Windows XP, Windows Server 2003 o sistemi precedenti chiamare SHGetFolderLocation o SHGetFolderPath con il valoreCSIDLappropriato.

 

Shlwapi

L'API Shell Lightweight (Shlwapi) include diverse funzioni di manipolazione delle stringhe. L'uso di queste funzioni in modo errato può causare stringhe troncate in modo imprevisto senza alcuna notifica del troncamento restituito. Nei casi seguenti, le funzioni Shlwapi non devono essere usate. Le funzioni alternative elencate, che comportano un minor numero di rischi, devono essere usate al loro posto.

Funzione Shlwapi Funzione alternativa
StrCat,StrNCat StringCchCat, StringCbCat e funzioni correlate
StrCpy, StrCpyN StringCchCopy, StringCbCopy e funzioni correlate
wnsprintf, wvnsprintf StringCchPrintf, StringCbPrintf e funzioni correlate

 

Con funzioni come PathRelativePathTo che restituiscono un percorso di file, impostare sempre le dimensioni del buffer su MAX_PATH caratteri. In questo modo si garantisce che il buffer sia sufficientemente grande da contenere il percorso di file più grande possibile, oltre a un carattere Null di terminazione.

Per altre informazioni sulle funzioni di stringa alternative, vedere Informazioni su Strsafe.h.

Completamento automatico

Non usare la funzionalità completamento automatico per le password.

Esistono diverse funzioni shell che è possibile usare per avviare applicazioni: ShellExecute, ShellExecuteEx, WinExece SHCreateProcessAsUserW. Assicurarsi di fornire una definizione non ambigua dell'applicazione da eseguire.

  • Quando si specifica il percorso del file eseguibile, specificare il percorso completo. Non dipendere dalla shell per individuare il file.
  • Se si specifica una stringa della riga di comando contenente spazi vuoti, eseguire il wrapping della stringa tra virgolette. In caso contrario, il parser potrebbe interpretare un singolo elemento che contiene spazi come più elementi.

Spostamento e copia di file

Una chiave per la sicurezza del sistema è l'assegnazione corretta degli elenchi di controllo di accesso. È anche possibile usare file crittografati. Assicurarsi che quando si spostano o si copiano i file, a cui viene assegnato l'ACL corretto e che non siano stati accidentalmente decrittografati. Sono inclusi lo spostamento di file nel Cestino , nonché all'interno del file system. Usare IFileOperation (Windows Vista o versione successiva) o SHFileOperation (Windows XP e versioni precedenti). Non usare MoveFile, che potrebbe non impostare l'ACL previsto per il file di destinazione.

Scrittura di estensioni dello spazio dei nomi sicure

Le estensioni dello spazio dei nomi della shell sono un modo potente e flessibile per presentare i dati all'utente. Tuttavia, possono causare errori di sistema se non sono scritti correttamente. Alcuni punti chiave da tenere presenti:

  • Non presupporre che i dati come le immagini siano formattati correttamente.
  • Non presupporre che MAX_PATH sia equivalente al numero di byte in una stringa. È il numero di caratteri .

Avvisi di sicurezza

Nella tabella seguente sono elencate alcune funzionalità che, se usate in modo non corretto, comprometteno la sicurezza delle applicazioni.

Caratteristica Mitigazione
ShellExecute, ShellExecuteEx Le ricerche che dipendono dal controllo di una serie di percorsi predefiniti per trovare un file specifico possono essere usate in un attacco di spoofing. Usare un percorso completo per assicurarsi di accedere al file desiderato.
StrCat Il primo argomento, psz1, deve essere sufficientemente grande da contenere psz2 e la chiusura '\0'. In caso contrario, potrebbe verificarsi un sovraccarico del buffer. Usare invece una delle alternative seguenti. StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNo StringCchCatNEx.
StrCatBuff Non è garantito che la stringa finale sia con terminazione Null. Usare invece una delle alternative seguenti. StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNo StringCchCatNEx.
StrCatChainW Non è garantito che la stringa finale sia con terminazione Null. Usare invece una delle alternative seguenti. StringCbCatEx, StringCbCatNEx, StringCchCatExo StringCchCatNEx.
StrCpy Il primo argomento, psz1, deve essere sufficientemente grande da contenere psz2 e la chiusura '\0'. In caso contrario, potrebbe verificarsi un sovraccarico del buffer. Usare invece una delle alternative seguenti. StringCbCopy, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopy, StringCchCopyEx, StringCchCopyNo StringCchCopyNEx.
StrCpyN Non è garantito che la stringa copiata sia con terminazione Null. Usare invece una delle alternative seguenti. StringCbCopy, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopyEx, StringCchCopyEx, StringCchCopyN, StringCchCopyNEx.
StrDup StrDup presuppone che lpsz sia una stringa con terminazione Null. Inoltre, la stringa restituita non è garantita la terminazione null. Usare invece una delle alternative seguenti. StringCbCat, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopy, StringCchCopyEx, StringCchCopyNo StringCchCopyNEx.
StrNCat Il primo argomento, pszFront, deve essere sufficientemente grande da contenere pszBack e la chiusura '\0'. In caso contrario, potrebbe verificarsi un sovraccarico del buffer. Tenere presente che l'ultimo argomento, cchMax, è il numero di caratteri da copiare in pszFront, non necessariamente le dimensioni del pszFront in byte. Usare invece una delle alternative seguenti. StringCbCat, StringCbCatEx, StringCbCatN, StringCbCatNEx, StringCchCat, StringCchCatEx, StringCchCatNo StringCchCatNEx.
wnsprintf Non è garantito che la stringa copiata sia con terminazione Null. Usare invece una delle alternative seguenti. StringCbPrintf, StringCbPrintfEx, StringCbVPrintf, StringCbVPrintfEx, StringCchPrintf, StringCchPrintfEx, StringCchVPrintfo StringCchVPrintfEx.
wvnsprintf Non è garantito che la stringa copiata sia con terminazione Null. Usare invece una delle alternative seguenti. StringCbPrintf, StringCbPrintfEx, StringCbVPrintf, StringCbVPrintfEx, StringCchPrintf, StringCchPrintfEx, StringCchVPrintfo StringCchVPrintfEx.

 

Microsoft Security

centro per sviluppatori per la sicurezza di

gli acceleratori di soluzioni Microsoft

Security TechCenter

Informazioni su Strsafe.h