Elenco di controllo: Protezione di ASP.NET

In questa pagina
Utilizzo dell'elenco di controllo
Utilizzo dell'elenco di controllo
Considerazioni sulla progettazione
Considerazioni sulla progettazione
Considerazioni sulle categorie dell'applicazioneConsiderazioni sulle categorie dell'applicazione
Impostazioni del file di configurazioneImpostazioni del file di configurazione

Utilizzo dell'elenco di controllo

Questo elenco di controllo è correlato al modulo 10 "Creazione di pagine e controlli di ASP.NET protetti", al modulo 19 "Protezione dell'applicazione ASP.NET e dei servizi Web" e al modulo 20 "Hosting di più applicazioni Web". Utilizzarlo quale riferimento per proteggere un'applicazione ASP.NET e come istantanea dei moduli corrispondenti.

Inizio paginaInizio pagina

Considerazioni sulla progettazione

ControlloDescrizione

Le decisioni sulla protezione non devono basarsi su convalide dal lato client; vengono prese sul lato server.

Il sito Web è suddiviso in aree ad accesso pubblico e aree con restrizioni, che richiedono l'autenticazione. Nella navigazione fra tali aree le informazioni riservate delle credenziali non devono essere trasmesse.

Le identità utilizzate per accedere a risorse remote da applicazioni Web ASP.NET vengono riconosciute chiaramente.

Sono stati identificati metodi per proteggere credenziali, ticket di autenticazione e altre informazioni sensibili sulla rete e negli archivi permanenti.

È stato identificato un approccio protetto alla gestione delle eccezioni. In caso di eccezioni, l'applicazione si disattiva in modo protetto.

Il sito dispone di controlli dettagliati delle autorizzazioni per pagine e directory.

I controlli Web, i controlli utente e il codice di accesso alle risorse sono tutti suddivisi nei propri assembly per una protezione granulare.

Inizio paginaInizio pagina

Considerazioni sulle categorie dell'applicazione

Convalida dell'input

ControlloDescrizione

L'input dell'utente viene convalidato per tipo, lunghezza, formato e intervallo. L'input viene controllato prima per i dati noti, validi e sicuri, quindi per quelli dannosi o pericolosi.

Le stringhe di input dei campi dei moduli vengono convalidate mediante espressioni regolari (ad esempio, tramite il controllo RegularExpressionValidator).

I normali controlli HTML, le stringhe di query, i cookie e altre forme di input vengono convalidate utilizzando la classe Regex e/o il codice di convalida personalizzato.

Il controllo RequiredFieldValidator viene utilizzato dove occorre immettere dati.

Le verifiche degli intervalli nei controlli server vengono effettuate dai controlli RangeValidator.

L'input in formato libero viene sterilizzato per eliminare dati dannosi.

I nomi dei file di input sono in formato corretto e la loro validità è verificabile nel contesto dell'applicazione.

L'output che contiene l'input viene codificato mediante HtmlEncode e UrltEncode.

MapPath limita la mappatura tra applicazioni, dove appropriato.

La codifica dei caratteri è impostata dal server (si consiglia ISO-8859-1).

L'opzione validateRequest di ASP.NET versione 1.1 è abilitata.

URLScan è installato sul server Web.

L'opzione cookie HttpOnly consente la protezione su più livelli per contribuire a evitare lo scripting fra siti (in Internet Explorer 6.1 o versioni successive).

I parametri SQL vengono utilizzati nel codice di accesso ai dati per convalidare la lunghezza e il tipo di dati e contribuire a evitare l'inserimento SQL.

Autenticazione

ControlloDescrizione

Il sito è suddiviso in aree ad accesso con restrizioni e pubbliche.

Gli URL assoluti vengono utilizzati per navigare nelle aree dove il sito è suddiviso in cartelle protette e non protette.

SSL viene utilizzato per proteggere credenziali e cookie di autenticazione.

L'attributo slidingExpiration è impostato su "false" e se i cookie non sono protetti mediante SSL si utilizzano time-out limitati per i cookie di autenticazione.

Il cookie di autenticazione moduli è limitato alle connessioni HTTPS utilizzando l'attributo requireSSL o la proprietà cookie Secure.

Il cookie di autenticazione è crittografato e verificato per l'integrità (protezione="All").

I cookie di autenticazione non sono permanenti.

I cookie dell'applicazione hanno combinazioni nome/percorso univoche.

I cookie di personalizzazione sono separati da quelli di autenticazione.

Le password non vengono memorizzate direttamente nell'archivio utente; al loro posto vengono salvati i digest delle password con salt.

Le credenziali di rappresentazione (se si utilizza un'identità fissa) vengono crittografate nel file di configurazione utilizzando Aspnet_setreg.exe.

Per l'autenticazione vengono implementati criteri per password complesse.

L'elemento <credentials> non viene utilizzato all'interno dell'elemento <forms> per l'autenticazione basata su form (ricorrervi solo per le verifiche).

Autorizzazione

ControlloDescrizione

L'autorizzazione URL viene utilizzata per il controllo dell'accesso di pagine e directory.

L'autorizzazione dei file viene utilizzata con l'autenticazione di Windows.

Le richieste di autorizzazione Priorità di protezione vengono utilizzate per proteggere l'accesso a classi e membri.

Se è richiesta un'autorizzazione molto specifica, si utilizzano i controlli espliciti dei ruoli.

Gestione della configurazione

ControlloDescrizione

Il recupero del file di configurazione viene bloccato utilizzando HttpForbiddenHandler.

Per eseguire ASP.NET viene utilizzato un account con minori privilegi.

Le credenziali dell'account personalizzato (se utilizzate) vengono crittografate nell'elemento <processModel> mediante Aspnet_setreg.exe.

Per applicare criteri a livello del computer, le impostazioni Web.config sono bloccate mediante allowOveride="false" in Machine.config.

Dati sensibili

ControlloDescrizione

SSL viene utilizzato per proteggere dati riservati in rete.

I dati sensibili non vengono trasmessi fra le pagine; vengono aggiornati utilizzando la gestione dello stato sul lato server.

I dati sensibili non vengono memorizzati nei cookie, nei campi nascosti dei moduli o nelle stringhe di query.

La memorizzazione nella cache di output per le pagine contenenti dati sensibili è disattivata.

Le password in testo normale vengono evitate nei file Web.config e Machine.config (per la crittografia delle credenziali si utilizza Aspnet_setreg.exe).

Gestione delle sessioni

ControlloDescrizione

Il cookie della sessione viene protetto mediante SSL su tutte le pagine che richiedono accesso autenticato.

Il servizio di stato sessione è disabilitato, se non viene utilizzato.

Il servizio di stato sessione (se utilizzato) viene eseguito tramite un account con minori privilegi.

L'autenticazione di Windows viene utilizzata per connettersi al database di stato di Microsoft® SQL Server™.

L'accesso ai dati di stato in SQL Server è limitato.

Le stringhe di connessione vengono crittografate mediante Aspnet_setreg.exe.

Il canale di comunicazione verso l'archivio dello stato è crittografato (IPSec o SSL).

Manipolazione dei parametri

ControlloDescrizione

Lo stato della visualizzazione viene protetto mediante codici di autenticazione dei messaggi (MAC).

Sulle stringhe di query con segreti del server viene eseguito l'hashing.

Tutti i parametri di input vengono convalidati.

Page.ViewStateUserKey viene utilizzata per contrastare gli attacchi "con un clic".

Gestione delle eccezioni

ControlloDescrizione

Viene utilizzata la gestione strutturata delle eccezioni.

I dettagli delle eccezioni vengono registrati sul server.

Pagine di errore generiche con messaggi innocui vengono restituite al client.

Sono implementati gestori di errore a livello dell'applicazione o delle pagine.

L'applicazione distingue fra errori e condizioni di eccezione.

Controllo e registrazione

ControlloDescrizione

Il processo ASP.NET è configurato per permettere di creare nuove origini di eventi in fase di esecuzione o generare origini di eventi dell'applicazione al momento dell'installazione.

Inizio paginaInizio pagina

Impostazioni del file di configurazione

ControlloDescrizione

<trace/>
La traccia non è abilitata sui server di produzione.

<trace enabled="false">

<globalization>
La codifica di richieste e risposte è configurata in modo appropriato.

<httpRuntime>
maxRequestLength è configurata per impedire agli utenti di caricare file
molto grandi (facoltativo).

<compilation>
Le compilazioni di debug non vengono abilitate sui server di produzione impostando
debug="false"

<compilation debug="false" . . ./>

<pages>
Se l'applicazione non utilizza lo stato della visualizzazione, enableViewState è impostata su "false".

<pages enableViewState="false" . . ./>

Se l'applicazione utilizza lo stato della visualizzazione, enableViewState e enableViewStateMac sono impostate su "true", per individuare la manomissione di tale stato.

<pages enableViewState="true" enableViewStateMac="true" />

<customErrors>
Al client vengono restituite pagine di errore personalizzate e si impedisce la restituzione delle informazioni delle eccezioni dettagliate impostando mode="On".

<customErrors mode="On" />

Una pagina di errore generica viene specificata dall'attributo defaultRedirect.

<customErrors mode="On" defaultRedirect="/apperrorpage.htm" />

<authentication>
La modalità di autenticazione è configurata in modo appropriato per supportare i requisiti dell'applicazione. Per imporre l'uso di un tipo specifico di autenticazione, si ricorre a un elemento <location> con allowOverride="false".

<location path="" allowOverride="false">  
  <system.web>    
    <authentication mode="Windows" />  
  </system.web></location>

<forms>
Il sito Web è suddiviso per l'accesso pubblico e con restrizioni.
La configurazione dell'autenticazione moduli è protetta:

<forms loginUrl="Restricted\login.aspx"       
  protection="All"       
  requireSSL="true"       
  timeout="10"       
  name="AppNameCookie"       
  path="/FormsAuth"       
  slidingExpiration="true" />

Il cookie di autenticazione è crittografato e verificato per l'integrità (protection).
SSL è necessario per il cookie di autenticazione (requireSSL).
La scadenza mobile è impostata su false se non si utilizza SSL (slidingExpiration).
La durata della sessione è limitata (timeout).
I nomi e i percorsi dei cookie sono univoci (name e path).
L'elemento <credentials> non viene utilizzato.

<identity>
Le identità di rappresentazione (se utilizzate) vengono crittografate nel Registro di sistema mediante Aspnet_setreg.exe:

<identity impersonate="true"          
   userName="registry:HKLM\SOFTWARE\YourApp\
identity\ASPNET_SETREG,userName"          
   password="registry:HKLM\SOFTWARE\YourApp\
identity\ASPNET_SETREG,password"/>

<authorization>
Il corretto formato dei nomi di ruolo viene verificato.

<machineKey>
Se più applicazioni Web ASP.NET vengono distribuite sullo stesso server Web, l'impostazione "IsolateApps" garantisce che venga generata una chiave separata per ciascuna applicazione Web.

<machineKey validationKey="AutoGenerate,IsolateApps"
   decryptionKey="AutoGenerate,IsolateApps"      
   validation="SHA1" />

Se l'applicazione Web ASP. NET è in esecuzione in una Web farm, si utilizzano chiavi computer specifiche, che vengono copiate in tutti i server della farm.
Se lo stato della visualizzazione è abilitato, l'attributo validation è impostato su "SHA1".
L'attributo validation è impostato su "3DES" se il cookie di autenticazione moduli deve essere crittografato per l'applicazione.

<sessionState>
Se mode="StateServer", le credenziali vengono memorizzate in un modulo crittografato nel Registro di sistema mediante Aspnet_setreg.exe.
Se mode="SQLServer", l'autenticazione di Windows permette di connettersi al database dell'archivio dello stato e le credenziali vengono memorizzate in formato crittografato nel Registro di sistema mediante Aspnet_setreg.exe.

<httpHandlers>
I tipi di file inutilizzati vengono mappati su HttpForbiddenHandler per impedire il recupero dei file via HTTP. Ad esempio:

<add verb="*" path="*.rem"            
   type="System.Web.HttpForbiddenHandler"/> 

<processModel>
Per eseguire il processo ASP.NET si utilizza un account con minori privilegi, come ASPNET.

<processModel userName="Machine" password="AutoGenerate"

L'account di sistema non viene utilizzato per eseguire il processo ASP.NET.
All'account di processo non viene assegnato il privilegio Agisci come parte del sistema operativo.

<processModel  
   userName="registry:HKLM\SOFTWARE\MY_SECURE_APP\  
   processmodel\ASPNET_SETREG,userName"  
   password="registry:HKLM\SOFTWARE\MY_SECURE_APP\  
   processmodel\ASPNET_SETREG,password" . . ./>

Se l'applicazione utilizza servizi Enterprise, comAuthenticationLevel e comImpersonationLevel sono configurate in modo appropriato.
L'autenticazione di livello Call è impostata al minimo per assicurare che tutte le chiamate al metodo vengano autenticate dall'applicazione remota.
PktPrivacy consente di crittografare i dati e proteggerli dalle manomissioni in rete, in mancanza di protezione dei canali dell'infrastruttura (IPSec).
PktIntegrityconsente di proteggere i dati dalle manomissioni senza crittografarli (gli intrusi con monitor di rete possono visualizzare i dati).

<webServices>
I protocolli inutilizzati vengono disattivati.
La generazione automatica del linguaggio WSDL (Web Services Description Language) è disattivata (facoltativo).

Considerazioni sulle Web farm

ControlloDescrizione

Stato sessione. Per evitare l'affinità con il server, lo stato della sessione ASP.NET viene gestito all'esterno al processo nel database dello stato di SQL Server ASP.NET o nel servizio di stato out-of-process eseguito su un computer remoto.

Crittografia e verifica. Le chiavi utilizzate per crittografare e verificare i cookie di autenticazione basata su form e il relativo stato di visualizzazione sono le stesse in tutti i server di una Web farm.

DPAPI. DPAPI non può essere utilizzato con la chiave computer per crittografare i dati comuni ai quali devono avere accesso tutti i server della farm. Per crittografare dati condivisi su un server remoto, utilizzare un'implementazione alternativa, come 3DES.

Hosting di più applicazioni

ControlloDescrizione

Le applicazioni dispongono di chiavi computer distinte.
Utilizzare IsolateApps in <machineKey> oppure elementi <machineKey> specifici per applicazione.

<machineKey validationKey="AutoGenerate,IsolateApps" 
    decryptionKey="AutoGenerate,IsolateApps" . . . />

Per ciascuna applicazione sono abilitate combinazioni nome/percorso univoche per i cookie di autenticazione moduli.

Per isolare l'applicazione in Microsoft Windows® Server 2003 si utilizzano vari processi (pool applicazione IIS 6.0).

Per isolare l'applicazione in Windows 2000 si utilizzano vari account utente anonimi (e rappresentazioni).

Chiavi computer comuni sono abilitate su tutti i server in una Web farm.

Per l'hosting di più applicazioni su un singolo server, si utilizzano chiavi computer separate per ciascuna applicazione.

I livelli di attendibilità della protezione dall'accesso di codice consentono di isolare i processo e limitare l'accesso alle risorse di sistema (richiede .NET Framework versione 1.1).

ACL e autorizzazioni

ControlloDescrizione

File ASP.NET temporanei

%windir%\Microsoft.NET\Framework\{version}Temporary ASP.NET Files

Account di processo e identità rappresentate ASP.NET: Controllo completo

Directory temporanea

(%temp%)

Account di processo ASP.NET: Controllo completo

Directory .NET Framework

%windir%\Microsoft.NET\Framework\{version}

Account di processo e identità rappresentate ASP.NET:
Lettura/Esecuzione
Visualizzazione contenuto cartella

Directory di configurazione .NET Framework

%windir%\Microsoft.NET\Framework\{version}\CONFIG

Account di processo e identità rappresentate ASP.NET:
Lettura/Esecuzione
Visualizzazione contenuto cartella
Lettura

Directory principale sito Web

C:\inetpub\wwwroot

o il percorso al quale è diretto il sito Web predefinito
Account di processo ASP.NET: Controllo completo

Directory principale del sistema

%windir%\system32

Account di processo ASP.NET: Lettura

Cache assembly globale

%windir%\assembly

Account di processo e identità rappresentate: Lettura

Directory contenuto

C:\inetpub\wwwroot\YourWebApp

Account di processo:
Lettura/Esecuzione
Visualizzazione contenuto cartella
Lettura
Nota: in .NET Framework versione 1.0, anche tutte le directory di livello superiore, da quella del contenuto alla directory principale del file system, richiedono le autorizzazioni di cui sopra. Le directory di livello superiore comprendono:

C:\
C:\inetpub\
C:\inetpub\wwwroot\

Directory del cestino dell'applicazione

ControlloDescrizione

Le autorizzazioni Web IIS sono configurate.
La directory del cestino non è dotata di autorizzazioni Lettura, Scrittura o Esplorazione directory.
Le autorizzazioni Esecuzione sono impostate su Nessuno.

Le impostazioni di autenticazione sono state rimosse (qualsiasi accesso è negato).


Inizio paginaInizio pagina