04 agosto 2009

Mantente a salvo de las direcciones IP amenazantes

El Internet Storm Center del portal SANS.org guarda una relación de direcciones IP a modo de TOP que clasifica aquellas que están suponiendo una amenaza para nuestras máquinas. En dicha tabla, que se puede encontrar en esta dirección, se incluye el número de ataques reportados, así como las fechas de cuando se reportó por primera y última vez.

En este portal de seguridad también podemos encontrar otros tops y clasificaciones actualizadas diariamente en base a diversos factores (puertos con mayor actividad, países orígen con más ataques reportados...). Vienen bien, sobretodo para saber si "algo se avecina"...

Volviendo a la primera lista comentada, veo en commandlinefu.com, la página de tips para línea de comandos por excelencia y que debería estar en vuestros favoritos, un comando que gracias a unas cucharadas de curl, un poco de grep, una dósis de awk y otra de perl, es capaz de obtener esas direcciones IP que están suponiendo una amenaza para muchos sistemas:

curl -s http://isc.sans.org/ipsascii.html|grep -v '#'|awk '{print $1}'|perl -pi -e 's/(?:^0{1,})|(?:(?<=\.)0{1,}(?!\.))//g'|egrep -v '^192\.|^10\.|^172\.|^224\.'

Ya con esta lista, lo más normal sería por ejemplo aprovecharse de esta valiosa información y meterla en nuestra output chain del iptables. El comando completo sería el siguiente:

curl -s http://isc.sans.org/ipsascii.html|grep -v '#'|awk '{print $1}'|perl -pi -e 's/(?:^0{1,})|(?:(?<=\.)0{1,}(?!\.))//g'|egrep -v '^192\.|^10\.|^172\.|^224\.'|xargs -n1 sudo iptables -A OUTPUT -j DROP -d > 2&>1

La versión inicial tomaba como fuente la primera lista en html, pero en los comentarios se habla de la versión ASCII más fácilmente parseable que se encuentra en ipascii.html. Este script directamente elimina los ceros incluídos en las direcciones IP para el padding y demás, por lo que no hay que tener más consideraciones en cuenta.

He dejado primero el comando que saca la lista de direcciones IP para que hagáis lo que queráis con ella, ¡apartir de ahí no me responsabilizo de lo que commandlineeis!

Y vosotros, ¿tenéis algún comando que queráis compartir con todos nosotros?


ACTUALIZACIÓN : Modificado el script (egrep añadido al final) para evitar que en la lista se cuelen direcciones IP que puedan utilizarse en direccionamiento interno (la primera dirección IP que está en el TOP es una 10.X.X.X...) Desde SecurityByDefault recomendamos la monitorización de este sistema por lo menos los primeros días en caso de que se vaya a utilizar para evitar posibles fallos en esta automatización.

7 comments :

José A. Guasch dijo...

He añadido al final un egrep (egrep -v '^192\.|^10\.|^172\.|^224\.') para sacar de la lista posibles direcciones IP que puedan corresponder con direccionamiento interno. En la lista que suelta hoy, la primera dirección 10.50.50.50 es un poco sospechosa, y aunque os haya dicho que no me hago responsable con lo que hagáis con la lista, tampoco es plan de que se líe parda. Aún así, repito que cuidado con estas cosas automáticas

RuBiCK dijo...

No dice en la cabecera que no se use como "blocklist" ? :P

José A. Guasch dijo...

@RuBiCK si, ¡y creo que lo dice en casi todas las listas que ofrecen!

De ahí que repita tantísimas veces en el post que hay que tener cuidado con lo que se hace en la lista. Para un sistema de un usuario creo que es una lista adecuada, pero en otros escenarios, cuidado.

Una lista si recomendada por ellos como blocklist, es esta -> Block List

También fácilmente parseable

Siempre que se habla de listas, a mi se me viene a la cabeza el gran FAIL de Google de aquel día (Google puede dañar tu equipo)

eduardo abril dijo...

Hola a todos,

Merece la pena echarle un ojo a http://emergingthreats.net/fwrules/

Se actualiza diariamente, y los scripts para meterlas en iptables no te destrozan las reglas que tengas corriendo.

Nosotros las tenemos, y funcionan muy bien. Aparte, es bastante trivial añadirlas con un script a las tuyas (un wget y ejecutarlo, punto).

De ellas, me encantan las que bannean nodos de TOR.

Y, aparte, tiene las reglas de snort actualizadas diariamente, pero no estamos hablando de eso ...
Saludos,
Eduardo.

Román Ramírez dijo...

La regla además, parece que se añade al chain "OUTPUT"... que sería interesante en caso de que todas esas direcciones IP albergaran algún tipo de Malware.

Pero, ¿no tendría más sentido en el chain INPUT para impedir las conexiones desde esas IP?

José A. Guasch dijo...

@Román Ramírez, sí, realmente debería ir en el chain de INPUT en caso de que se traten de direcciones IP que ataquen (que seguramente será el caso) y no alberguen por ejemplo contenido malicioso.

Aquí lo importante es saber que el ISC de SANS nos ofrece varias listas de ips, rangos y puertos a tener en cuenta para nuestros sistemas de detección, y que además son fácilmente parseables para que sirvan de fuente en firewalls o en cualquier elemento que nosotros queramos.

Joel dijo...

En el supuesto de que la IP sea atacante, debería estar en el chain INPUT y la IP sería introducida con el parámetro -s, no? De la siguiente forma:
blablabla | xargs -n1 sudo iptables -A INPUT -j DROP -s > 2&>1