Sicurezza e generazione di codice immediata

Alcune librerie funzionano tramite la generazione e l'esecuzione di codice per eseguire alcune operazioni per il chiamante. Il problema di fondo è costituito dalla generazione di codice per conto di codice meno attendibile e dalla relativa esecuzione con attendibilità superiore e diventa più grave quando il chiamante è in grado di influenzare la generazione di codice, per cui è necessario che venga generato solo codice sicuro.

È preferibile sapere esattamente quale tipo di codice si genera in ogni momento; in altre parole, è necessario avere un controllo totale sui valori ottenuti da un utente, che si tratti di stringhe racchiuse tra virgolette, che devono essere sottoposte a escape per evitare che includano elementi di codice non previsti, identificatori, di cui è necessario verificare la validità, o altri elementi. Gli identificatori possono rappresentare un pericolo in quanto la modifica di un assembly compilato può determinare la comparsa di caratteri insoliti negli identificatori, che ne possono provocare il blocco; questa condizione, tuttavia, costituisce raramente una vulnerabilità di sicurezza.

È preferibile generare codice tramite la reflection emit, che spesso consente di evitare gran parte di questi problemi.

Durante la compilazione del codice, stabilire se un programma dannoso è in grado di modificarlo. In un lasso di tempo molto breve, il codice dannoso può modificare il codice sorgente sul disco prima che il compilatore sia in grado di leggerlo o prima che sia possibile caricare nel codice il file DLL. In questo caso è necessario proteggere la directory che contiene file di questo tipo tramite la sicurezza per l'accesso al codice o un elenco di controllo di accesso (ACL), se necessario.

Se un chiamante è in grado di influenzare il codice generato in modo tale da provocare un errore di compilazione, può esistere una vulnerabilità di sicurezza.

Eseguire il codice generato con il livello di impostazioni delle autorizzazioni più basso possibile, tramite PermitOnly o Deny.

Vedere anche

Concetti

Linee guida per la generazione di codice sicuro