Wednesday, 23 de July de 2008 por climens

Protección contra inyección SQL con URLScan 3.0

Últimamente muchos hemos sufrido algún tipo de ataque si nos dedicamos a la creación y mantenimiento de aplicaciones web. No importa la importancia o la visibilidad de estas aplicaciones, con que estén publicadas en Internet son un blanco susceptible de ser atacado por la multitud de bots que pululan por la red.

Lo ideal, como siempre, es que nuestras aplicaciones sean a prueba de bombas de modo que filtren los parámetros que recogen correctamente y no hagan caso de los datos que no tienen sentido, pero esto no siempre es posible ya que hay aplicaciones por el mundo de aquella época en la que los ataques no eran el pan de cada día y nadie se preocupaba por ellos.

Para esto, una buena opción es la protección de los ataques usando algún tipo de firewall o en su defecto algún tipo de filtro de queries, mucho mejor que protecciones a nivel de aplicación. Si trabajamos con IIS6, hasta hace poco había pocas opciones para protegernos ya que el clásico URLScan no permitía manejar Querystrings completas. Una opción gratuita es el IIS 6 SQL Injection ISAPI Wildcard, que filtra de forma básica todo lo que parece sospechoso y desde hace poco también está la opción de usar URLScan 3.0 en su versión beta, que permite añadir filtros a las Querystrings para proteger las páginas devolviendo un error 404 si se incumplen las condiciones.

Uno de los motivos del lanzamiento de esta herramienta ha sido el gran aumento de los ataques SQL en los últimos meses, como queda reflejado en el Security Advisory 954462, donde recomiendan usar este software así como otra interesante herramienta como es el Microsoft Source Code Analyzer for SQL Injection, del que hablaré en otro momento.

URLScan es muy sencillo de instalar, descargamos el instalador y ejecutamos y nos informará de dónde se ha instalado. Después hay que editar urlscan.ini para ajustarlo a nuestras necesidades (las configuraciones de la version 2.x son compatibles) y un buen punto de partida es la página de Common UrlScan Scenarios, donde explican configuraciones básicas para protección contra verbos extraños y contra ataques de inyección SQL.

Los he estado probando y recomiendo cierta prudencia ya que nos podemos encontrar con algunas sorpresas ya que si un parámetro se llama como una de las palabas prohibidas o su valor contiene una de las palabras tendremos un bonito error 404, por lo que convendría monitorizar los logs de URLScan durante los primeros días para evitar sorpresas. En mi caso he tenido que desactivar el filtro de una sola @ (aparecen mails en parámetros) y INSERT y SELECT porque aparece en el nombre de algunos parámetros.

Como opción interesante es que también se filtran los parámetros de las cookies, que muchas veces no se protegen adecuadamente y también se puede hacer inyección editando la información que contienen.

En resumen, URLScan 3.0 añade filtrado por Querystring que tanto había sido demandado y lo convierte en una herramienta potente a la hora de proteger un servidor con SQL Server y IIS 5, 6 o 7.

Compartir | meneame | fresqui | del.icio.us | digg | technorati
Tags: , , , , , , | 4 comentarios

4 comentarios en “Protección contra inyección SQL con URLScan 3.0”

  1. Cunyatman comentó el Wednesday, 23 de July de 2008 a las 21:33

    Interesante artículo, como siempre.

    Saludos!

  2. climens comentó el Wednesday, 23 de July de 2008 a las 23:18

    Mi fiel lector. He estado probando el source code analyzer y la verdad que no funciona mal, y teniendo en cuenta que para ASP clásico las herramientas son muy escasas, lo comentaré en algún post próximo.

  3. [z76] comentó el Thursday, 12 de February de 2009 a las 15:16

    Hola climens.

    Aqui una victima mas de tan bonito y sencillo invento.
    Mientras unos confiados, nos dedicamos a pasear por la playa tranquilos durante el fin de semanas, otros en sus casitas se dedican a buscar las cinco patas al gato jeje.
    Tengo una duda, me he instalado el urlsan como recomiendas.. pero no se si lo tendre bien configurado.
    Al UrlScan.ini le pego los tres trozos de codigo que recomiendan en Common UrlScan Scenarios, pero no se si esta correcto.
    He añadido las siguientes etiquetas al ini, pero no estoy seguro.
    Gracias. Un saludo.

    [Options]
    RuleList=Foo

    [Foo]
    AppliesTo=.htm
    DenyDataSection=Foo Strings
    ScanUrl=0
    ScanAllRaw=0
    ScanQueryString=0
    ScanHeaders=Foo-Header:
    DenyUnescapedPercent=1

    [Foo Strings]
    [SQL Injection]
    AppliesTo=.asp,.aspx
    DenyDataSection=SQL Injection Strings
    ScanUrl=0
    ScanAllRaw=0
    ScanQueryString=1
    ScanHeaders=
    DenyUnescapedPercent=1

    [SQL Injection Strings]

    %3b ; a semicolon
    /*
    @ ; also catches @@
    char ; also catches nchar and varchar
    alter
    begin
    cast
    convert
    create
    cursor
    declare
    delete
    drop
    end
    exec ; also catches execute
    fetch
    insert
    kill
    open
    select
    sys ; also catches sysobjects and syscolumns
    table
    update
    ansii

    [SQL Injection Headers]
    AppliesTo=.asp,.aspx
    DenyDataSection=SQL Injection Headers Strings
    ScanUrl=0
    ScanAllRaw=0
    ScanQueryString=0
    ScanHeaders=Cookie:

    [SQL Injection Headers Strings]

    @ ; also catches @@
    alter
    cast
    convert
    create
    declare
    delete
    drop
    exec ; also catches execute
    fetch
    insert
    kill
    select

  4. climens comentó el Thursday, 12 de February de 2009 a las 17:23

    @[z76] La mejor forma de saber si lo estás configurando bien es intentar replicar el ataque o poner algunos keywords prohibidos en la URL a ver si el UrlScan los bloquea o no. Ojo que solamente filtra si la extensión es .asp y .aspx a no ser que cambies la configuración.
    Un saludo.

Deja tu comentario