Share via


Cenni preliminari sui pericoli di protezione a cui sono esposte le applicazioni Web

Aggiornamento: novembre 2007

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

Per informazioni più dettagliate sulle procedure consigliate per scrivere codice protetto e proteggere le applicazioni, consultare il libro "Writing Secure Code" di Michael Howard e David LeBlanc oppure leggere le istruzioni disponibili nel sito Web Microsoft Patterns and Practices (informazioni in lingua inglese).

La tecnologia di protezione rappresenta solo una parte della soluzione

L'implementazione della protezione non basta a risolvere il problema. Un ruolo fondamentale viene svolto dall'attività di sorveglianza. Anche se il sistema dispone di numerose misure di protezione, 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 protezione 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 simulare un'identità diversa o per far sì che il cookie risulti proveniente 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, è necessario 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 riesce a procurarsi codice script da eseguire presentandolo come input dell'utente proveniente da una pagina o come un collegamento.

Una prima difesa contro il tampering consiste nell'utilizzare la protezione 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, verificare che non contenga 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.

Information Disclosure (Rivelazione di informazioni)

L'information disclosure (diffusione di informazioni) consiste nel furto o nella divulgazione di informazioni riservate. Un esempio tipico 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 credenziali, è possibile generare l'hash della password utente e confrontare così solo i due hash. Se si memorizzano informazioni riservate, affidarle alla protezione 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 di 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

Altre risorse

Sicurezza dei siti Web ASP.NET