Condividi tramite


Cenni preliminari sui rischi di sicurezza a cui sono esposte le applicazioni Web

Se un'applicazione Web può essere raggiunta da utenti sconosciuti, è molto probabile che utenti malintenzionati tentino di ottenere un acceso non autorizzato all'applicazione. In genere, i server accessibili al pubblico tramite Internet subiscono tentativi di violazione quotidianamente. Tuttavia, è opportuno adottare delle precauzioni e provvedere alla sicurezza di tutte le applicazioni Web.

Per informazioni più dettagliate sulle procedure consigliate per scrivere codice protetto e proteggere le applicazioni, consultare il testo "Writing Secure Code" di Michael Howard e David LeBlanc e leggere le istruzioni disponibili sul sito Web Microsoft Patterns and Practices.

La tecnologia di sicurezza rappresenta solo una parte della soluzione

L'implementazione della sicurezza non basta a risolvere il problema. Un ruolo fondamentale viene svolto dall'attività di sorveglianza. Anche se il sistema dispone di numerose misure di sicurezza, sarà necessario sorvegliarlo come indicato di seguito.

  • Tenere sotto controllo il log eventi del sistema. Vigilare su tentativi ripetuti di accesso al sistema o sulle eccessive richieste pervenute al server Web.

  • Mantenere costantemente aggiornato il server applicazioni installando i più recenti aggiornamenti per la sicurezza di Microsoft Windows e Internet Information Services (IIS), nonché tutti gli aggiornamenti di Microsoft SQL Server o altre origini dati utilizzabili dall'applicazione.

Classificazione dei rischi

Una parte importante dello sviluppo di un'applicazione più protetta consiste nella comprensione dei rischi a cui è esposta. Microsoft ha individuato sei categorie fondamentali di violazione, ovvero: Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, Elevation of privilege (STRIDE). Nella sezione che segue vengono descritte brevemente tali violazioni e le insidie che possono rappresentare per le applicazioni Web.

Spoofing (Sedicenza)

Effettuare lo spoofing significa impersonare un utente o un processo senza autorizzazione. Nella sua forma più semplice lo spoofing consiste nel fornire le credenziali di un altro utente. Un utente malintenzionato potrebbe anche modificare il contenuto di un cookie per vantare un'identità diversa o perché risulti che il cookie proviene da un altro server.

In generale è possibile supportare la prevenzione dello spoofing adottando sistemi di autenticazione rigorosi. Ogni volta che un utente chiede di accedere a informazioni non pubbliche, occorre verificarne l'identità. Le misure contro lo spoofing investono anche il campo della corretta conservazione delle informazioni associate alle credenziali. È ad esempio necessario non conservare una password o altre informazioni riservate in un cookie, dove un utente malintenzionato potrà facilmente leggerle o modificarle.

Tampering (Manomissione)

Manomissione consiste nella modifica o nell'eliminazione non autorizzata di una risorsa. Un esempio di tampering è dato dalla deturpazione di una pagina Web, ottenuta mediante l'intromissione nel sito e la modifica dei file. Un modo indiretto di operare una manomissione consiste nell'utilizzare un attacco tramite script. Un utente malintenzionato prepara codice script che verrà fatto eseguire mascherandolo da input utente tramite un form o un collegamento.

Una prima difesa contro il tampering consiste nell'utilizzare la sicurezza di Windows per bloccare file, directory e altre risorse di Windows. Inoltre, l'applicazione deve essere eseguita con i minori privilegi possibili. La vigilanza contro gli attacchi tramite script si attua utilizzando la massima cautela verso ogni tipo di informazione proveniente da utenti o anche da database. Se si ricevono informazioni da una fonte non attendibile, elaborarle verificando che non contengano nessun codice eseguibile.

Repudiation (Ripudio)

Una minaccia di ripudio implica l'esecuzione di una transazione in modo che, al termine di tale operazione, non vi sia alcuna prova dei principi coinvolti nella transazione. In un'applicazione Web, tale obiettivo può essere raggiunto utilizzando le credenziali di un utente inconsapevole. Anche il ripudio va combattuto tramite l'adozione di un rigido sistema di autenticazione. Utilizzare inoltre le funzionalità di log di Windows per tenere traccia di ogni attività svolta sul server. Per informazioni dettagliate, vedere Registrazione di eventi di applicazioni, server e protezione.

Information Disclosure (Rivelazione di informazioni)

L'information disclosure consiste nel furto o nella divulgazione di informazioni riservate. Un esempio classico di tale violazione è costituito dal furto delle password, ma è considerato information disclosure anche l'accesso a file o risorse presenti sul server.

La miglior difesa contro l'information disclosure consiste nel non avere informazioni da rivelare. Se ad esempio si evita di memorizzare le password, gli utenti malintenzionati non potranno impossessarsene. Un alternativa alla memorizzazione delle password consiste nel memorizzare solo un hash della password. Quando un utente presenta le proprie credenziali, si potrà generare l'hash della password utente e confrontare così solo i due hash.

Se si memorizzano informazioni riservate, affidarle alla sicurezza di Windows. Anche in questo caso, una corretta autenticazione assicurerà che solo gli utenti autorizzati accedano alle informazioni riservate. In caso di esposizione di informazioni riservate, è opportuno crittografare le informazioni che vengono memorizzate e utilizzare il protocollo SSL (Secure Sockets Layer) per crittografare le informazioni quando vengono inviate al e dal browser.

Denial of Service (Negazione del servizio)

Un attacco denial of service è volto a rendere deliberatamente un'applicazione meno disponibile di quanto non sia normalmente. Un esempio tipico consiste nel sovraccarico di un'applicazione Web affinché non possa servire gli utenti ordinari. In alternativa, utenti malintenzionati potrebbero semplicemente tentare di provocare un arresto anomalo del server.

IIS consente di rallentare le applicazioni, ovvero di limitare il numero di richieste servite. È possibile negare l'accesso a utenti o a indirizzi IP notoriamente malintenzionati. Il mantenimento delle applicazioni in linea si attua eseguendo solo codice solido. È importante testare approfonditamente la propria applicazione e, se possibile, rispondere in modo appropriato alle condizioni di errore.

Elevation of Privilege (Elevazione del privilegio)

Un attacco di elevazione del privilegio consiste nell'utilizzare metodi non autorizzati per ottenere più autorizzazioni di quelle normalmente riconosciute. Ad esempio, un attacco di elevazione del privilegio con esito positivo consente a un utente malintenzionato i ottenere privilegi amministrativi del server Web con cui accedere ai dati contenuti nel server e controllarne le relative funzionalità.

La protezione contro l'elevazione del privilegio si attua, se possibile, eseguendo l'applicazione in un contesto di privilegi minimi. È ad esempio consigliato non eseguire le applicazioni ASP.NET come utente SYSTEM (amministratore).

Vedere anche

Concetti

Sicurezza nel codice nativo e nel codice .NET Framework

Suggerimenti di base sulla sicurezza delle applicazioni Web ASP.NET

Protezione delle applicazioni Web ASP.NET

Bibliografia sulla protezione