Defiende tu sitio web con ¡bombas zip!

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

download file now