Usare il filtro delle richieste
di IIS Team
Introduzione
UrlScan, uno strumento di sicurezza, è stato fornito come componente aggiuntivo alle versioni precedenti di Internet Information Services (IIS) in modo che gli amministratori possano applicare criteri di sicurezza più rigorosi nei server Web. All'interno di IIS 7 e versioni successive, tutte le funzionalità principali di URLScan sono state incorporate in un modulo denominato Filtro richieste e è stata aggiunta una funzionalità Segmenti nascosti. Questo articolo descrive ogni funzionalità di Filtro richieste e fornisce esempi di come le funzionalità possono essere applicate nell'ambiente.
Si noti che IIS include anche un modulo per la riscrittura dell'URL. Esistono differenze tra questi due moduli: il filtro delle richieste è progettato e ottimizzato per gli scenari di sicurezza, mentre la riscrittura degli URL può essere applicata per un ampio set di scenari (gli scenari di sicurezza sono solo un subset di questi). Per altre informazioni sulle differenze, vedere IIS 7.0 e Versioni successive del filtro delle richieste e riscrivere URL.
Filtrare le richieste di Double-Encoded
Questa funzionalità impedisce attacchi che si basano su richieste con codifica doppia e si applica se un utente malintenzionato invia una richiesta con codifica doppia con attenzione a IIS. Quando il filtro delle richieste con codifica doppia è abilitato, IIS normalizza due volte l'URL; se la prima normalizzazione è diversa dalla seconda, la richiesta viene rifiutata e il codice di errore registrato è 404.11. Il filtro delle richieste con codifica doppia è l'opzione VerifyNormalization in UrlScan.
Se non si vuole che IIS consenta la gestione delle richieste con codifica doppia, usare quanto segue:
<configuration>
<system.webServer>
<security>
<requestFiltering
allowDoubleEscaping="false">
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filtra caratteri a bit elevato
Questa funzionalità consente o rifiuta tutte le richieste a IIS che contengono caratteri non ASCII e registra il codice di errore 404.12. L'equivalente urlScan è AllowHighBitCharacters.
Si supponga, ad esempio, di voler consentire caratteri a bit elevati per un'applicazione, ma non per l'intero server. Impostare allowHighBitCharacters="false" nel file ApplicationHost.config; ma all'interno della radice dell'applicazione creare un file Web.config che consente a tale singola applicazione di accettare caratteri non ASCII. Nel file Web.config usare:
<configuration>
<system.webServer>
<security>
<requestFiltering
allowHighBitCharacters="true"
>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filtro basato sulle estensioni di file
Questa funzionalità definisce un set di estensioni di file consentite che IIS serve. Quando IIS rifiuta una richiesta in base alle estensioni di file, il codice di errore registrato è 404.7. Le opzioni AllowExtensions e DenyExtensions sono gli equivalenti urlScan.
Si supponga, ad esempio, di voler consentire ogni tipo di file, ad eccezione dei file ASP. Impostare l'opzione allowUnlisted per fileExtensions su "true" e quindi definire una voce di estensione file per negare esplicitamente ASP:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<fileExtensions allowUnlisted="true" >
<add fileExtension=".asp" allowed="false"/>
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filtro in base ai limiti delle richieste
Questo filtro combina tre funzionalità (con gli stessi nomi in UrlScan):
- maxAllowedContentLength-upper limit sulla dimensione del contenuto
- maxUrl-upper bound su una lunghezza dell'URL
- maxQueryString-upper associato alla lunghezza di una stringa di query
Quando IIS rifiuta una richiesta in base ai limiti delle richieste, il codice di errore registrato è:
- 413.1 se il contenuto è troppo lungo.
- 404.14 se l'URL è troppo grande.
- 404.15 se la stringa di query è troppo lunga.
Ad esempio, è molto comune per le aziende acquistare software a cui non hanno accesso al codice sorgente. Nel corso del tempo, possono trovare vulnerabilità nel codice. Il recupero degli aggiornamenti per il codice interessato spesso non è facile. I problemi sono spesso causati da un URL o una stringa di query troppo lunga o da un eccesso di contenuto inviato a un'applicazione. Dopo aver determinato un limite superiore sicuro, è possibile applicare limiti usando la configurazione seguente, senza dover applicare patch ai file binari dell'applicazione:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<requestLimits
maxAllowedContentLength="30000000"
maxUrl="260"
maxQueryString="25"
/>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filtra per verbi
Questa funzionalità definisce un elenco di verbi accettati da IIS come parte di una richiesta. Quando IIS rifiuta una richiesta in base a questa funzionalità, il codice di errore registrato è 404.6. Corrisponde alle opzioni UseAllowVerbs, AllowVerbs e DenyVerbs in UrlScan.
Si supponga ad esempio di voler consentire solo il verbo GET. Per impostare questa operazione, è prima necessario bloccare la configurazione in modo che nessun verbo sia consentito impostando l'opzione allowUnlisted="false". Elencare quindi i verbi che si desidera consentire in modo esplicito, in questo caso GET.
<configuration>
<system.webServer>
<security>
<requestFiltering>
<verbs
allowUnlisted="false"
>
<add verb="GET" allowed="true" />
</verbs>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filtrare in base alle sequenze di URL
Questa funzionalità definisce un elenco di sequenze rifiutate da IIS quando fa parte di una richiesta. Quando IIS rifiuta una richiesta per questa funzionalità, il codice di errore registrato è 404.5.Questo corrisponde alla funzionalità DenyUrlSequences in UrlScan.
Questa è una funzionalità molto potente. Usando il codice seguente, è possibile impedire che una determinata sequenza di caratteri venga mai gestita da IIS:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<denyUrlSequences>
<add sequence=".."/>
</denyUrlSequences>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Nell'esempio precedente, '.' la sequenza viene rifiutata. Si supponga di aver acquistato un'applicazione da un fornitore che è uscito dall'azienda e si è scoperto che l'applicazione è stata vulnerabile quando è stata inviata una determinata sequenza di caratteri. Usando questa funzionalità, è possibile proteggere l'applicazione aggiungendo semplicemente tale sequenza DI URL all'elenco negato senza dover applicare patch al codice dell'applicazione.
Filtrare i segmenti nascosti
Questa funzionalità consente di definire quali segmenti sono "servabili". Quando IIS rifiuta una richiesta in base a questa funzionalità, il codice di errore registrato è 404.8. Questa funzionalità è nuova a IIS 7 e versioni successive; non faceva parte di UrlScan.
Si consideri l'esempio seguente in cui sono presenti due URL in un server:
http://site.com/bin
http://site.com/binary
Si supponga di voler consentire il contenuto nella directory binaria, ma non il contenuto nella directory bin. Se si usano sequenze di URL e si rifiuta la sequenza "bin", si nega l'accesso a entrambi gli URL. Usando la configurazione illustrata di seguito, è possibile negare l'accesso al bin, ma avere comunque il contenuto nel file binario servito:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="BIN"/>
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Codici di errore IIS 7 e versioni successive
Nelle versioni precedenti è possibile usare UrlScan a livello globale per definire i criteri di sicurezza da applicare ai sistemi. Con IIS 7 e versioni successive, è comunque possibile implementare tali criteri a livello globale, ma anche per URL. È quindi possibile sfruttare tutti i vantaggi offerti dal nuovo modello di delega avanzata.
La tabella seguente è un riepilogo dei log IIS dei codici di errore:
Errore | Codici di stato |
---|---|
Sito non trovato | 404.1 |
Negato dai criteri | 404.2 |
Negato dalla mappa mime | 404.3 |
Nessun gestore | 404.4 |
Filtro delle richieste: Sequenza di URL negata | 404.5 |
Filtro delle richieste: Verbo negato | 404.6 |
Filtro delle richieste: estensione file negata | 404.7 |
Filtro delle richieste: negato dal segmento nascosto | 404.8 |
Negato dal momento che è stato impostato l'attributo di file nascosto | 404.9 |
Filtro delle richieste: negato perché l'URL ha raddoppiato l'escaping | 404.11 |
Filtro delle richieste: negato a causa di caratteri a bit elevati | 404.12 |
Filtro delle richieste: negato perché l'URL è troppo lungo | 404.14 |
Filtro delle richieste: negato perché la stringa di query è troppo lunga | 404.15 |
Filtro delle richieste: negato perché la lunghezza del contenuto è troppo grande | 413.1 |
Filtro delle richieste: negato perché l'intestazione della richiesta è troppo lunga | 431 |