Usar el filtrado de solicitudes

por el equipo de IIS

Introducción

UrlScan, una herramienta de seguridad, se proporcionó como complemento a versiones anteriores de Internet Information Services (IIS) para que los administradores pudieran aplicar directivas de seguridad más estrictas en sus servidores web. Dentro de IIS 7 y versiones posteriores, todas las características principales de URLScan se han incorporado en un módulo denominado Filtrado de solicitudes y se ha agregado una característica de segmentos ocultos. En este artículo se describe cada característica del filtrado de solicitudes y se proporcionan ejemplos de cómo se pueden aplicar las características en su entorno.

Tenga en cuenta que IIS también incluye un módulo para la reescritura de direcciones URL. Hay diferencias entre estos dos módulos: el filtrado de solicitudes está diseñado y optimizado para escenarios de seguridad, mientras que la reescritura de direcciones URL se puede aplicar para un amplio conjunto de escenarios (los escenarios de seguridad son solo un subconjunto de estos). Para más información sobre las diferencias, consulte IIS 7.0 y versiones posteriores del filtrado de solicitudes y reescritura de direcciones URL.

Filtrado de solicitudes con codificación doble

Esta característica evita ataques que se basan en solicitudes con codificación doble y se aplica si un atacante envía una solicitud con codificación doble cuidadosamente a IIS. Cuando el filtro de solicitudes con codificación doble está habilitado, IIS normaliza la dirección URL dos veces; si la primera normalización es diferente de la segunda, se rechaza la solicitud y el código de error registrado es 404.11. El filtro de solicitudes con codificación doble era la opción VerifyNormalization en UrlScan.

Si no desea que IIS permita que se atienden las solicitudes codificadas duplicadas, use lo siguiente:

<configuration>
 <system.webServer> 
  <security>
   <requestFiltering
                  allowDoubleEscaping="false">
   </requestFiltering> 
  </security>
 </system.webServer>
</configuration>

Filtrado de caracteres de bit más significativo

Esta característica permite o rechaza todas las solicitudes a IIS que contienen caracteres no ASCII y registra el código de error 404.12. El equivalente de UrlScan es AllowHighBitCharacters.

Por ejemplo, supongamos que desea permitir caracteres de bit más significativo para una aplicación, pero no para todo el servidor. Establezca allowHighBitCharacters="false" en el archivo ApplicationHost.config; pero dentro de la raíz de la aplicación, cree un archivo Web.config que permita que esa aplicación única acepte caracteres que no sean ASCII. En el archivo Web.config, utilice:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering
                  allowHighBitCharacters="true"
            >
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Filtro basado en extensiones de archivo

Esta característica define un conjunto de extensiones de archivo permitidas que IIS sirve. Cuando IIS rechaza una solicitud de acuerdo con esta característica, el código de error registrado es 404.7. Las opciones AllowExtensions y DenyExtensions son equivalentes de UrlScan.

Por ejemplo, supongamos que quiere permitir cada tipo de archivo excepto los archivos ASP. Establezca la opción allowUnlisted para fileExtensions en "true" y, a continuación, defina una entrada de extensión de archivo para denegar explícitamente ASP:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <fileExtensions allowUnlisted="true" >
     <add fileExtension=".asp" allowed="false"/>
    </fileExtensions>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Filtrado basado en los límites de solicitud

Este filtro combina tres características (que tenían los mismos nombres en UrlScan):

  • maxAllowedContentLength: límite superior en el tamaño de contenido
  • maxUrl: límite superior en una longitud de dirección URL
  • maxQueryString: límite superior en la longitud de una cadena de consulta

Cuando IIS rechaza una solicitud de acuerdo con esta característica, el código de error registrado es 404.6.

  • 413.1 si el contenido es demasiado largo.
  • 404.14 si la dirección URL es demasiado larga.
  • 404.15 si la cadena de consulta es demasiado larga.

Por ejemplo, es muy común que las empresas compren software al que no tienen acceso al código fuente. Con el tiempo, pueden encontrar vulnerabilidades en ese código. La obtención de actualizaciones para el código afectado a menudo no es fácil. Los problemas suelen deberse a una dirección URL o una cadena de consulta que es demasiado larga o por un exceso de contenido enviado a una aplicación. Cuando determine un límite superior seguro, puede aplicar límites mediante la configuración siguiente, sin tener que aplicar revisiones a los archivos binarios de la aplicación:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <requestLimits
       maxAllowedContentLength="30000000"
       maxUrl="260"
       maxQueryString="25" 
                  />
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Filtrado por verbos

Esta característica define una lista de verbos que IIS acepta como parte de una solicitud. Cuando IIS rechaza una solicitud de acuerdo con esta característica, el código de error registrado es 404.6. Esto corresponde a las opciones UseAllowVerbs, AllowVerbs y DenyVerbs de UrlScan.

Por ejemplo, supongamos que solo desea permitir el verbo GET. Para establecer esto, primero debe bloquear la configuración para que no se permita ningún verbo estableciendo la opción allowUnlisted="false". A continuación, enumere los verbos que desea permitir explícitamente, en este caso, GET.

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <verbs
       allowUnlisted="false"
                  >
     <add verb="GET" allowed="true" />
    </verbs>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Filtrado basado en secuencias de direcciones URL

Esta característica define una lista de secuencias que IIS rechaza cuando forma parte de una solicitud. Cuando IIS rechaza una solicitud para esta característica, el código de error registrado es 404.5. Esto corresponde a la característica DenyUrlSequences en UrlScan.

Esta es una característica muy potente. Con el código siguiente, puede impedir que IIS sirva una secuencia de caracteres determinada:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <denyUrlSequences>
     <add sequence=".."/>
    </denyUrlSequences>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

En el ejemplo anterior, se rechaza la secuencia '..' . Supongamos que adquirió una aplicación de un proveedor que salió del negocio y descubrió que la aplicación era vulnerable cuando se le envió una secuencia de caracteres determinada. Con esta característica, puede proteger esa aplicación simplemente agregando esa secuencia de direcciones URL a la lista denegada sin tener que aplicar revisiones al código de la aplicación.

Filtrado de segmentos ocultos

Esta característica le permite definir qué segmentos se pueden proporcionar. Cuando IIS rechaza una solicitud de acuerdo con esta característica, el código de error registrado es 404.8. Esta característica es nueva en IIS 7 y versiones posteriores; no formaba parte de UrlScan.

Considere el ejemplo siguiente en el que hay dos direcciones URL en un servidor:

http://site.com/bin

http://site.com/binary

Supongamos que desea permitir el contenido en el directorio binario, pero no el contenido del directorio bin. Si usa secuencias de direcciones URL y rechaza la secuencia "bin", deniega el acceso a ambas direcciones URL. Con la configuración que se muestra a continuación, puede denegar el acceso a bin, pero seguir teniendo el contenido en binario servido:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <hiddenSegments>
     <add segment="BIN"/>
    </hiddenSegments>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

Códigos de error de IIS 7 y versiones posteriores

En versiones anteriores, podría usar UrlScan en un nivel global para definir directivas de seguridad que quería aplicar en los sistemas. Con IIS 7 y versiones posteriores, todavía puede implementar esas directivas a nivel global, pero también por dirección URL. Por lo tanto, puede aprovechar todas las ventajas que proporciona el nuevo modelo de delegación enriquecida.

En la tabla siguiente se muestra un resumen de los códigos de error registros de IIS:

Error Códigos de estado
Sitio no encontrado 404,1
Denegado por directiva 404,2
Denegado por mapa mime 404,3
Sin controlador 404,4
Filtrado de solicitudes: secuencia de direcciones URL denegada 404,5
Filtrado de solicitudes: verbo denegado 404,6
Filtrado de solicitudes: extensión de archivo denegada 404,7
Filtrado de solicitudes: denegado por segmento oculto 404,8
Denegado desde que se ha establecido el atributo de archivo oculto 404,9
Filtrado de solicitudes: denegado porque la dirección URL duplicaba el escape 404,11
Filtrado de solicitudes: denegado porque hay caracteres de bit más significativo 404,12
Filtrado de solicitudes: denegado porque la dirección URL es demasiado larga 404,14
Filtrado de solicitudes: denegado porque la cadena de consulta es demasiado larga 404,15
Filtrado de solicitudes: denegado porque el contenido es demasiado grande 413.1
Filtrado de solicitudes: denegado porque el encabezado de solicitud es demasiado largo 431