Defiende tu sitio web con ¡bombas zip!

Hoy en el blog de Christian Haschek leía una curiosa contramedida contra escáneres de vulnerabilidades web automáticos. Se trata de servir una bomba zip (en formato gzip para que lo "entiendan" los navegadores web) para que, cuando el servidor detecte actividad de una estas herramientas automáticas, envíe el archivo para que sea procesado y agote los recursos (memoria y disco) de la máquina del atacante.

Para crear una bomba sencilla, un fichero lleno de ceros, podemos ejecutar el siguiente comando desde la consola:

$ dd if=/dev/zero bs=1M count=10240 | gzip > 10G.gzip
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 67,6557 s, 159 MB/s

$ du -sh 10G.gzip
10M    10G.gzip


Como veis, hemos creado un fichero de 10M que se convertirá en 10GB al descomprimirse. Ahora, para construir una simple defensa simplemente usa un pequeño script que, dependiendo del User-Agent, enviará la "bomba" creada:

<?php
$agent = lower($_SERVER['HTTP_USER_AGENT']);

//check for nikto, sql map or "bad" subfolders which only exist on wordpress
if (strpos($agent, 'nikto') !== false || strpos($agent, 'sqlmap') !== false || startswith($url,'wp-') || startswith($url,'wordpress') || startswith($url,'wp/'))
{
      sendBomb();
      exit();
}

function sendBomb(){
        //prepare the client to recieve GZIP data. This will not be suspicious
        //since most web servers use GZIP by default
        header("Content-Encoding: gzip");
        header("Content-Length: ".filesize('10G.gzip'));
        //Turn off output buffering
        if (ob_get_level()) ob_end_clean();
        //send the gzipped file to the client
        readfile('10G.gzip');
}

function startsWith($haystack,$needle){
    return (substr($haystack,0,strlen($needle)) === $needle);
}


Como dice su autor, no es la "panacea" puesto que todos sabemos que cambiar el User-Agent es trivial, pero ya supondría una molestia para script kiddies y podrían implementarse otros triggers (por número de peticiones, IPs o países, payloads, etc.).

El resultado dependiendo del navegador o herramienta utilizada sería el siguiente:

- IE 11: se incrementa la memoria, IE se bloquea
- Chrome: se incrementa la memoria, se muestra un error
- Edge: se incrementa la memoria, luego drippea y carga en bucle
- Nikto: parece escanear bien pero no reporta nada (ninguna salida)
- SQLmap: alto uso de memoria hasta que se bloquea

Fuente: How to defend your website with ZIP bombs

Via: www.hackplayers.com
Defiende tu sitio web con ¡bombas zip! Defiende tu sitio web con ¡bombas zip! Reviewed by Zion3R on 11:12 Rating: 5