Condividi tramite


Procedure di sicurezza consigliate per C++

Questo articolo contiene informazioni su strumenti e procedure di sicurezza. Il loro uso non rende le applicazioni immuni da attacchi, ma riduce le probabilità che un attacco abbia successo.

Funzionalità di sicurezza di Visual C++

Queste funzionalità di sicurezza sono integrate nel compilatore e nel linker Microsoft C++:

/guard (Abilitare La protezione del flusso di controllo)
Fa in modo che il compilatore analizzi il flusso di controllo per le destinazioni di chiamata indirette in fase di compilazione e quindi inserisca il codice per verificare le destinazioni in fase di esecuzione.

/GS (Controllo sicurezza buffer)
Indica al compilatore di inserire il codice di rilevamento di sovraccarico nelle funzioni esposte al rischio di exploit. Quando viene rilevato un sovraccarico, l'esecuzione viene interrotta. Per impostazione predefinita, questa opzione è attivata.

/SAFESEH (Immagine con gestori eccezioni sicuri)
Indica al linker di includere nell'immagine di output una tabella contenente l'indirizzo di ogni gestore di eccezioni. In fase di esecuzione, il sistema operativo usa la tabella per verificare che vengano eseguiti solo i gestori di eccezione legittimi. Questo consente di evitare l'esecuzione di gestori di eccezione introdotti da un attacco dannoso in fase di esecuzione. Per impostazione predefinita, questa opzione è impostata su OFF.

/NXCOMPAT, /NXCOMPAT (compatibile con La prevenzione dell'esecuzione dei dati) Queste opzioni del compilatore e del linker abilitano la compatibilità di Prevenzione esecuzione dati (DEP). Protezione esecuzione programmi protegge la CPU dall'esecuzione di pagine non di codice.

/analyze (Analisi del codice)
Questa opzione del compilatore attiva l'analisi codice che segnala i potenziali problemi di sicurezza, ad esempio sovraccarico del buffer, memoria non inizializzata, dereferenziazione puntatore Null e perdite di memoria. Per impostazione predefinita, questa opzione è impostata su OFF. Per altre informazioni, vedere Cenni preliminari sull'analisi del codice per C/C++.

/DYNAMICBASE (Usare la casualità del layout dello spazio degli indirizzi)
Questa opzione del linker consente la compilazione di un'immagine eseguibile che può essere caricata in posizioni diverse in memoria all'inizio dell'esecuzione. Questa opzione rende inoltre il percorso dello stack in memoria molto meno prevedibile.

CRT con sicurezza avanzata

La libreria di runtime C (CRT) è stata ampliata per poter includere le versioni sicure delle funzioni che comportano rischi per la sicurezza, ad esempio la funzione di copia stringa strcpy non controllata. Le versioni precedenti non sicure di queste funzioni, essendo deprecate, generano avvisi in fase di compilazione. Si consiglia di usare le versioni sicure di queste funzioni CRT invece di eliminare gli avvisi di compilazione. Per altre informazioni, vedere Security Features in the CRT (Funzionalità di sicurezza in CRT).

Libreria SafeInt

La libreria SafeInt consente di evitare overflow interi e altri errori sfruttabili che possono verificarsi quando l'applicazione esegue operazioni matematiche. La SafeInt libreria include la classe SafeInt, la classe SafeIntException e diverse funzioni SafeInt.

La classe SafeInt protegge da exploit basati sugli overflow di Integer e sulle divisioni per zero. È possibile usarla per gestire i confronti tra valori di tipi diversi. Fornisce due criteri di gestione degli errori. Il criterio predefinito è per la classe SafeInt che genera un'eccezione della classe SafeIntException che segnala perché un'operazione matematica non può essere completata. Il secondo criterio è per la classe SafeInt che interrompe l'esecuzione del programma. È inoltre possibile definire un criterio personalizzato.

Ogni funzione SafeInt protegge un'operazione matematica da un errore sfruttabile. È possibile usare due diversi generi di parametri senza convertirli nello stesso tipo. Per proteggere più operazioni matematiche, usare la classe SafeInt.

Checked Iterators

Un iteratore verificato applica i limiti del contenitore. Per impostazione predefinita, quando un iteratore verificato è fuori limite, genera un'eccezione e termina l'esecuzione del programma. Un iteratore controllato fornisce altri livelli di risposta che dipendono dai valori assegnati al preprocessore definisce come _SECURE_SCL_THROWS e _ITERATOR_DEBUG_LEVEL. Ad esempio, in _ITERATOR_DEBUG_LEVEL=2, un iteratore controllato fornisce controlli completi di correttezza in modalità di debug, resi disponibili tramite asserzioni. Per altre informazioni, vedere Iteratori verificati e _ITERATOR_DEBUG_LEVEL.

Analisi del codice gestito

L'analisi del codice gestito, nota anche come FxCop, controlla la conformità degli assembly alle linee guida di progettazione di .NET Framework. FxCop analizza il codice e i metadati in ogni assembly per verificare la presenza di difetti nelle aree seguenti:

  • Progettazione di librerie

  • Localizzazione

  • Convenzioni di denominazione

  • Prestazioni

  • Sicurezza

Windows Application Verifier

Application Verifier (AppVerifier) consente di identificare potenziali problemi di compatibilità, stabilità e sicurezza delle applicazioni.

AppVerifier monitora come un'applicazione usa il sistema operativo. Controlla il file system, il Registro di sistema, la memoria e le API mentre l'applicazione è in esecuzione e suggerisce le correzioni del codice sorgente per i problemi rilevati.

È possibile usare AppVerifier per:

  • Testare i potenziali errori di compatibilità delle applicazioni causati da comuni sbagli commessi durante la programmazione.

  • Cercare in un'applicazione problemi relativi alla memoria.

  • Identificare potenziali problemi di sicurezza in un'applicazione.

Account utente di Windows

L'uso di account utente di Windows appartenenti al gruppo Administrators espone gli sviluppatori e, per estensione, i clienti a rischi per la sicurezza. Per altre informazioni, vedere Esecuzione come membro del gruppo Utenti e Impatto del controllo dell'account utente (UAC) sull'applicazione.

Linee guida per i canali lato esecuzione speculativa

Per informazioni su come indentificare e attenuare le vulnerabilità hardware del canale laterale dell'esecuzione speculativa nel software C++, vedere C++ Developer Guidance for Speculative Execution Side Channels (Linee guida per sviluppatori C++ per canali lato esecuzione speculativa).

Vedi anche

System.Security
Sicurezza
Effetti del Controllo dell'account utente sull'applicazione