Texto que nos explica como podemos disminuir la propagacion de gusanos usando el modulo de tarpits que podemos incluir en iptables.
Texto Completo:
Disminuir la propagacion de gusanos con Tarpits
***********************************************
¡Los gusanos, los gusanos están por todas partes! La extensión reciente y
prolífica de los gusanos de Internet ha demostrado otra vez la
vulnerabilidad de los ordenadores de la red, y está claro que las nuevas
aproximaciones a la contención de gusanos necesitan ser investigadas. En este
artículo, discutiremos una nueva formula utilizada: el tarpit.
The Worms
*********
En una nutshell, la tecnología del gusano funciona infectando un ordenador
y después usándo este para escanear otros ordenadores. El daño causado por los
brotes recientes de gusanos no afecta tanto a la computadora de la víctima sino
mas bien a las redes en las que opera dicho gusano. El efecto secundario de la
propagación es la cantidad masiva de ancho de banda consumido por los
ordenadores infectados que realizan escaneos en busca de nuevas victimas. La
velocidad a la cual pueden comprometer nuevos ordenadores crece
exponencialmente, causando eventualmente una caida de la red (network meltdown).
En el futuro, los gusanos podrían llevar payloads mas peligrosos, haciendo
cosas como eliminar archivos, instalar sniffers de red, o robar archivos
confidenciales. Sin embargo, hay un fino equilibrio entre los efectos
destructivos y su rápida propagacion, porque al igual que en la naturaleza, un
gusano o virus que mata a su victima no puede extenderse con tanta eficacia.
Solucion?
**********
Las medidas preventivas proporcionan la protección más eficaz, en este caso,
parcheando los sistemas vulnerables antes de que se lance el gusano. En el caso
del gusano Blaster, el parche estaba disponible mucho antes de que apareciese
el gusano, y hubo bastante tiempo para los expertos de seguridad para realizar
informes de actuacion antes de que aparecería el gusano realmente. Sin embargo,
en compañías y organizaciones grandes con usuarios que viajan, la aplicación y
el soporte del parche a los sistemas puede convertirse en una pesadilla táctica.
Así pues, dado que el mantenimiento preventivo no funcionaria correctamente,
puede ser necesario comenzar a examinar otras posibilidades para retardar la
propagacion de gusanos, una vez que ocurran los brotes.
Una posible solución, y el foco de este artículo, es el TARPIT, que está
disponible como parche relativamente nuevo para el cortafuego Netfilter
(IPtables) para Linux, además de estar disponible para plataformas Windows,
Solaris, y OpenBSD, gracias a LaBrea tarpit project:
http://labrea.sourceforge.net/labrea-info.html
de Hackbusters (ahora hospedado en Sorceforge). Por simplicidad, este artículo
se centrará en la versión de IPtables.
Lo que el proyecto tarpit ofrece a los usuarios de IPtables, es que ahora, en
vez de que los paquetes simplemente se desechen y se guarden en un log, se
puedan enviar tambien a TARPIT.
El concepto de tarpit es bastante simple. Las conexiones entran, pero no
consiguen salir. IPtables consigue esto permitiendo a los puertos usar tarpit
para aceptar cualquier conexión entrante del TCP. Cuando la transferencia de
datos comienza a ocurrir, el tamaño de la ventana del TCP se fija a cero, así
que ningun dato se puede transferir dentro de la sesión. La conexión entonces
se mantiene abierta, y cualquier petición por el ordenador remoto de cerrar la
sesión es ignorada. Esto significa que el atacante debe esperar al time out de
la conexion para ser desconectado. Esta clase de comportamiento es malo para
las herramientas de escaneo automatizadas (como gusanos) porque confían en una
respuesta rápida de sus víctimas potenciales.
Algunas advertencias antes de comenzar
**************************************
Antes de comenzar con los tarpits en un ambiente de producción, hay un par de
puntos a considerar. Primero, el concepto de "no dejar ir" una sesion TCP
podria ser puteante ya que ciertas pilas TCP y sistemas operativos - es
incluso posible que cascaran.
Otra precaución a tener en cuenta es que el codigo de tarpit dentro de IPtables
es bastante nuevo, por lo tanto no es lo bastante maduro como para ser
considerado totalmente estable. Mientras que los tarpits pueden ofrecer gran
funcionalidad en retardar y tracear gusanos, la tecnología debe ser evaluada a
fondo antes de desplegarla en un ambiente de producción.
Poner esto a trabajar
*********************
Para utilizar el tarpit de IPtables, usted necesitará el ultimo patch-o-matic
de la web de Netfilter. Algunas distribuciones de Linux, tales como Gentoo,
ofrecen este patch en las fuentes del nucleo por defecto. Si usted necesita
aplicar el patch, existe excelente documentacion de como usar los parches
patch-o-matic para IPtables en su sitio.
Una vez que usted haya parcheado las fuentes de su núcleo, necesitará activar
la opción de TARPIT y recompilar el núcleo. Las nuevas opciones estarán bajo
"Networking Options -> IP: Netfilter Configuration". Usted necesitará activar
la opción de "Packet Filtering" para disponer de la opción TARPIT. Una vez que
usted haya activado con éxito el módulo de TARPIT, recompile el núcleo y/o los
módulos, y reinicie en caso de necesidad.
Usar tarpit es simple. Trabaja igual que cualquier otra regla de IPtables. Para
usar tarpit sobre el puerto 135 TCP, usted necesitaría esta regla:
iptables -A INPUT -p tcp -m tcp --dport 135 -j TARPIT
Así pues, con esta regla en funcionamiento, cualquier tentativa de conectar con
el puerto 135 sería aceptada, y no se dejaría desconectar. Un tcpdump de esta
sesión sería como sigue:
14:22:12.039166 10.0.0.1.4439 > 10.0.0.2.135: S 333636191:333636191(0) win 16384 (DF)
14:22:12.039253 10.0.0.2.135 > 10.0.0.1.4439: S 1551562378:1551562378(0) ack 333636192 win 5 (DF)
14:22:12.041942 10.0.0.1.4439 > 10.10.0.2.135: . ack 1 win 16616 (DF)
14:22:12.042022 10.10.0.2.135 > 10.10.0.1.4439: . ack 1 win 0 (DF)
La sesion ha sido establecida sin problemas, pero tal y como podemos ver, el
tamaño de la ventana TCP ha sido estalecido a zero. Cuando intentamos enviar
datos al puerto que esta con tarpit, no veremos cambios:
14:27:25.584968 10.0.0.1.4439 > 10.0.0.2.135: P 1:2(1) ack 1 win 16616 (DF)
14:27:25.585050 10.0.0.2.135 > 10.0.0.1.4439: . ack 1 win 0 (DF)
Incluso cuando vamos mas alla, e intentamos forzar un cierre de la conexión
(matando la aplicacion q inicio la conexión), la sesión seguirá estando abierta
hasta que finalmente se cierre por time out. Cualquier tipo de herramienta de
exploración automatizada será forzada a esperar durante mucho tiempo antes de
poder proceder.
Usted puede utilizar TARPIT estratégicamente. Si pone su maquina Linux
respondiendo en puertos que no son normalmente puertos de Linux puede confundir
a atacantes potenciales, y les hace perder tiempo mientras que enumera su
sistema. Por ejemplo, si usted quisiera que su máquina Linux pareciera una
máquina de Windows, usted podria utilizar estas reglas:
iptables -A INPUT -p tcp -m tcp --dport 135 -j TARPIT
iptables -A INPUT -p tcp -m tcp --dport 139 -j TARPIT
iptables -A INPUT -p tcp -m tcp --dport 1025 -j TARPIT
De este modo, cuando sea usted escaneado su ordenador aparecera de la siguiente
manera:
host# scanrand 10.10.0.156
UP: 10.10.0.156:1025 [01] 3.022s
UP: 10.10.0.156:135 [01] 3.024s
UP: 10.10.0.156:139 [01] 8.980s
Por supuesto, si unicamente se spoofea la configuración de puertos de un
servidor de Windows no se engañará necesariamente un atacante resuelto, pero
puede ser bastante para retardarlo en su labor.
Otra manera mañosa e inusual de retrasar supuestos atacantes está en usar
tarpit en todos los puertos de su máquina. La manera más fácil de hacer esto
es agregar una regla TARPIT justo antes de la regla final DROP en su cortafuego
actual de IPTables. Por ejemplo, la mayoría de los sistemas tendrían esta clase
de reglas:
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
.
.
iptables -A INPUT -p tcp -j DROP
Si quiere usted tener tarpit en todos sus puertos sin usar, la siguiente regla
debera ser añadida antes de la regla DROP:
iptables -A INPUT -p tcp -j TARPIT
Este tipo de configuracion devolveria el siguiente resultado haciendo un scan
con nmap:
Starting nmap 3.30 ( http://www.insecure.org/nmap/ ) at 2003-08-16 16:21 Local
time zone must be set--see zic manual page
Interesting ports on adsl-64-168-69-66.dsl.snfc21.pacbell.net (64.168.69.66):
Port State Service
1/tcp open tcpmux
2/tcp open compressnet
3/tcp open compressnet
4/tcp open unknown
5/tcp open rje
6/tcp open unknown
7/tcp open echo
8/tcp open unknown
9/tcp open discard
10/tcp open unknown
11/tcp open systat
12/tcp open unknown
13/tcp open daytime
14/tcp open unknown
15/tcp open netstat
16/tcp open unknown
17/tcp open qotd
18/tcp open msp
.
.
32787/tcp open sometimes-rpc27
43188/tcp open reachout
44334/tcp open tinyfw
44442/tcp open coldfusion-auth
44443/tcp open coldfusion-auth
47557/tcp open dbbrowse
49400/tcp open compaqdiag
54320/tcp open bo2k
61439/tcp open netprowler-manager
61440/tcp open netprowler-manager2
61441/tcp open netprowler-sensor
65301/tcp open pcanywhere
No OS matches for host (test conditions non-ideal).
TCP/IP fingerprint:
(None)
Nmap run completed -- 1 IP address (1 host up) scanned in 2.883 seconds
Esencialmente todos, los 65,000+ puertos seran mostrados como open. Un
veneficio adicional es que la deteccion de SO fallará debido a la cantidad
inesperada de respuestas. Esto hace la enumeración del ordenadores mucho más
difícil para los atacantes potenciales, asi como encontrar los servicios
válidos que buscan.
Pero recuerde, al igual que el resto de sistemas de seguridad, nada es a prueba
de atacantes. Una mente resuelta puede todavía encontrar los servicios dentro
de un tarpit.
Instalado el tarpit, puede ser combinado provechosamente con otra
característica práctica de IPtables, string matching. Esta característica fue
diseñada para permitir que los usuarios bloqueen los paquetes basados en
secuencias dentro de su payload. La idea de bloquear o hacer tarpit con el
tráfico en puertos que puedan ser atacados por gusanos, tales como HTTP no es
práctica. Por lo tanto, el poder distinguir tráfico del gusano de peticiones
válidas del HTTP es crítico. Con el string matching, los datos de la firma se
pueden utilizar para separar el tráfico del gusano del tráfico válido y para
enviar los gusanos al tarpit. Considere las siguientes reglas:
iptables -I INPUT -j TARPIT -p tcp -s 0.0.0.0/0 --dport 80 -m string --string "default.ida"
iptables -I INPUT -j TARPIT -p tcp -s 0.0.0.0/0 --dport 80 -m string --string "cmd.exe"
Tomarán cualquier tráfico que contenga "cmd.exe" o "default.ida" en el puerto
80 y los enviarán al tarpit. Así pues, cualquier tráfico de CodeRed o de Nimda
recibido en este ordenador, se quedaría pegado en el tarpit.
¿Lo que funciona para un ordenador debe funcionar para muchos, cierto?
Es también posible tener una maquina Linux dando respuesta a todas las
peticiones a puertos y direcciones IP que no esten en uso. Al hacer esto,
podemos retardar con eficacia el progreso de un gusano con en subred entera,
dando tiempo adicional para responder al incidente. Por ejemplo, vamos digamos
que ZZZ inc. no utilizaba el bloque interno de la red 10,10,0,0/24. Podían
convertir este espacio inutilizado en una red del tarpit dirigiendo tráfico
destinado a esta red a una máquina de Linux que funcione con tarpit. Entonces,
usando dos reglas de IPtables:
iptables -A FORWARD -p tcp -j TARPIT
iptables -A FORWARD -j DROP
Cualquier tráfico dirigido a ese subred sería impedido perceptiblemente. Usar
la opcion TARPIT de esta manera es muy similar a la manera en que la us el
proyecto LaBrea. Desafortunadamente, el futuro de LaBrea es confuso, debido
a la legislación pendiente de Illinois que podría hacer que ese trabajo llegase
a ser ilegal.
Así pues, por el tiempo que es, si quisiera tener usted una funcionalidad
similar a la de LaBrea-como, tarpit de IPTables le sera de agrado.
Conclusión
**********
La expansión de gusanos en Internet continúa siendo una falla importante,
afectando centenares de miles o incluso millones de ordenadores de la red
alrededor del mundo. Aunque los parches estan a menudo disponibles por
adelantado al lanzamiento de un gusano, es obvio que no se establecen las
medidas preventivas apropiadas. Los nuevos acercamientos a retardar la
extensión de gusanos necesitan ser investigados, y la opción de TARPIT para
los cortafuegos de IPtables es una de las posibilidades. Gracias a Nicolas
Lidzborski por su ayuda con esta investigación.
by Tony Bautts (bauttst at berkeleywireless dot net)
Traducido por SeSoX (sesox at govannom dot org)
|