Parando Ataques Ddos, en linux (usuario medio) |
![]() ![]() |
Parando Ataques Ddos, en linux (usuario medio) |
Jan 26 2007, 10:10 PM
Post
#1
|
|
|
in da flow ![]() ![]() Group: eA Level 5 (Super) Posts: 39 Joined: 9-May 05 From: santiago Member No.: 111,128 |
Bueno esta guia esta orientada a detectar y detener ataques de flood/syn ddos por lo cual dejare algunos consejos practicos.
Nota: Las opciones generalmente presentadas generalmente vienen activadas en los servidores dedicados que se arriendan en muchas compañias de hosts. 1) Usando el comando netstat QUOTE netstat -an | grep :80 | sort QUOTE netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}' QUOTE netstat -n -p|grep SYN_REC | wc -l QUOTE netstat -lpn|grep :80 |awk '{print $5}'|sort netstat -an | grep :80 | awk '{ print $5 }' | awk -F: '{ print $1 }' | sort | uniq -c | sort -n Ejemplo de ataque SYN_RECV o SYN Flooding al Apache (puerto 80). 192.168.0.3 es la ip del servidor apache y 192.168.0.105 es la ip del "atacante". QUOTE tcp 0 0 192.168.0.3:80 192.168.0.5:60808 SYN_RECV Claramente te estan atacando el apache con esto logras colgar la maquina y consumir todos los recursos de esta, en el caso de atacar el map_server es lo mismo pero al puerto 6121 (por defecto) tcp 0 0 192.168.0.3:80 192.168.0.5:60761 SYN_RECV tcp 0 0 192.168.0.3:80 192.168.0.5:60876 SYN_RECV tcp 0 0 192.168.0.3:80 192.168.0.5:60946 SYN_RECV tcp 0 0 192.168.0.3:80 192.168.0.5:60763 SYN_RECV tcp 0 0 192.168.0.3:80 192.168.0.5:60955 SYN_RECV tcp 0 0 192.168.0.3:80 192.168.0.5:60765 SYN_RECV tcp 0 0 192.168.0.3:80 192.168.0.5:60961 SYN_RECV tcp 0 0 192.168.0.3:80 192.168.0.5:60923 SYN_RECV tcp 0 0 192.168.0.3:80 192.168.0.5:61336 SYN_RECV tcp 0 0 192.168.0.3:80 192.168.0.5:61011 SYN_RECV ...hasta el infinito 2) Mirando los logs del syslog (del kernel) QUOTE May 17 13:39:43 lan kernel: NET: 6 messages suppressed. May 17 13:39:43 lan kernel: ip_conntrack: table full, dropping packet. May 17 13:39:48 lan kernel: NET: 4 messages suppressed. May 17 13:39:48 lan kernel: ip_conntrack: table full, dropping packet. May 17 13:39:52 lan kernel: NET: 9 messages suppressed. May 17 13:39:52 lan kernel: ip_conntrack: table full, dropping packet. May 17 13:39:57 lan kernel: NET: 15 messages suppressed. May 17 13:39:57 lan kernel: ip_conntrack: table full, dropping packet. May 17 13:40:01 lan kernel: possible SYN flooding on port 80. Sending cookies. Para evitar eso desabilitamos estas opcion: "Sending Cookies" si lo tenemos activado en el /etc/sysctl.conf # Enable TCP SYN Cookie Protection QUOTE net.ipv4.tcp_syncookies =1 A veces es mejor deshabilitarlo:QUOTE net.ipv4.tcp_syncookies =0 3) Mirando las gráficas del MRTG, RRDtool Si ves que el tráfico de salida es muy alto claramente te estan packeteando la maquina xD (IMG:http://ns2.elhacker.net/ddos.png) 4) Optimizando la red y protegiendonos de posibles ataques El usuario root del sistema tiene el privilegio de modificar el valor de estas variables: La forma de configurar los valores es utilizando la utilidad sysctl. Utilizando el ejemplo anterior, para determinar el valor debemos utilizar: $ sysctl net.ipv4.icmp_echo_ignore_all net.ipv4.icmp_echo_ignore_all = 0 y para establecer el valor: # sysctl -w net.ipv4.icmp_echo_ignore_all=1 net.ipv4.icmp_echo_ignore_all = 0 Ambas formas son equivalentes y podemos utilizar aquella con la que nos encontremos más cómodos. Una última forma de modificar los valores de los parámetros, de forma que estos se mantengan incluso después de reiniciar el sistema es a través del archivo /etc/sysctl.conf. Podemos obtener más detalles del formato de este archivo ejecutando man systcl.conf Si se modifica el archivo /etc/sysctl.conf, los parámetros sólo se activarán la próxima vez que se reinicie la máquina o bien después de reiniciar el soporte de red, ejectuando /etc/rc.d/init.d/network restart Continuamos con la descripción de los parámetros de seguridad de las máquinas que ejecutan Linux con el sistema de archivos virtual /proc. Los parámetros que vamos a ver a continuación muestran como podemos controlar la forma en que un sistema actúa en determinadas circunstancias. Estos parámetros nos van a ayudar a fortalecer la seguridad del sistema operativo. Estos parámetros son un complemento a las medidas de protección perimétricas, como pueden ser los cortafuegos. Mediante /proc no sólo podemos cambiar estos parámetros. Hay otras muchas cosas interesantes que podemos hacer, como por ejemplo mejorar el rendimiento del sistema de archivos, modificar la forma en que el sistema gestiona la memoria virtual, incrementar el número máximo de archivos abiertos de forma simultánea y otros cambios. Los lectores interesados pueden encontrar información al respecto en la documentación que acompaña al código fuente del núcleo de Linux. Todos los mandatos que indicamos a continuación deben ser ejecutados por el usuario root. 4.1) Control del protocolo ICMP -Ignorar las peticiones de repuesta a ping Dependiendo de la configuración de la red, puede ser interesante configurar el sistema para que éste no responda cuando recibe un ping (mensaje ECHO del protocolo ICMP). De esta forma, puede ser un poco más difícil que un atacante descubra si el sistema está conectado a la red. Para desactivar las respuesta de forma temporal: # sysctl -w net.ipv4.icmp_echo_ignore_all=1 y para desactivarla de forma permanente, editar el archivo /etc/sysctl.conf y añadir las líneas net.ipv4.icmp_echo_ignore_all =1 (Nota= En los siguientes parámetros, si se desea realizar el cambio de forma permanente deberá modificarse igualmente el archivo /etc/sysctl.conf, tal como hemos hecho para este parámetro). 4.2) No atender a las peticiones enviadas mediante broadcast Cuando una máquina envía un paquete a la dirección de broadcast (por ejemplo, 192.168.1.255), éste es entregado a todas las máquinas existentes en la red local. A continuación, todas las máquinas deben enviar un mensaje ECHO del protocolo ICMP. Esto puede provocar una congestión de la red, a la vez que permite determinar que sistemas están activos en la red. Para desactivar la recepción de paquetes enviados a la dirección de broadcast: # sysctl -w net.ipv4.icmp_echo_ignore_broadcasts =1 -Protección ante mensajes de error mal formateados Es posible que una red se transmitan mensajes de error mal formateados. Para evitar que éstos sean procesados por el sistema: # sysctl -w net.ipv4.icmp_ignore_bogus_error_responses =1 4.3) Deshabilitar la aceptación de redirecciones Cuando el ordenador utiliza una ruta extinta o no-óptima para enviar un paquete a un destino particular, los routers por donde circula el paquete envían al origen un mensaje de redirección del protocolo ICMP para informar de la ruta correcta a utilizar en el futuro. Si un atacante tiene la capacidad de enviar mensajes de redirección puede modificar las tablas de direccionamiento del ordenador, haciendo por ejemplo que todo el tráfico fluya a través de una vía concreta. Para evitar el proceso de estos mensajes en el sistema: # sysctl -w net.ipv4.conf.all.accept_redirects =0 # sysctl -w net.ipv4.conf.default.accept_redirects =0 4.3) Protección contra ataques DoS de inundación SYN El ataque de denegación de servicio (DoS) por inundación SYN ("SYN Flood") consigue consumir todos los recursos de la máquina, haciendo que sea necesario reiniciarla para volver a funcionar con normalidad. Cada vez que se realiza una conexión TCP/IP existe una negociación de tres pasos: 1. El cliente envía un paquete (paquete 1) al servidor con el bit SYN activado y permanece a la escucha. 2. El servidor responde al cliente con un paquete de confirmación (paquete 2) y permanece a la escucha. 3. El cliente envía un tercer paquete (paquete 3) que consolida la conexión. La información recibida en el paquete 1 se conserva dentro de una cola para que pueda ser comparada con los datos recibidos en el paquete 3 y dar por establecida la conexión. Esta cola es de un tamaño limitado y tiene un tiempo de latencia muy elevado. El ataque de inundación SYN consiste en llenar esa cola, mediante el envío de un gran número de paquetes 1 y nunca respondiendo con un paquete 3. En el momento en que se llena la cola, el sistema es incapaz de atender cualquier otra petición de conexión que reciba. La protección contra este ataque consiste en añadir información en el paquete 2, de forma que no sea necesaria conservar en el servidor ningún dato sobre el cliente. Para activar esta protección: # sysctl -w net.ipv4.tcp_syncookies =1 Con este valor, el sistema utilizará el método de incluir la información en el paquete 2 siempre que la cola de paquetes por procesar esté saturada. 4.4) Protección contra direcciones IP no válidas Esta protección permite que la máquina no pueda utilizarse para el envío de paquetes con direcciones IP no válidas. Este tipo de paquetes son habitualmente enviados cuando la máquina está intentando realizar una acción potencialmente ilegítima, como puede ser la suplantación de una conexión o el envío de paquetes en un ataque de denegación de servicio. Para activar esta protección: # sysctl -w net.ipv4.conf.all.rp_filter =2 # sysctl -w net.ipv4.conf.default.rp_filter =2 El valor de los parámetros puede ser 0 (valor por omisión, no realizar ninguna comprobación), 1 (rechazar únicamente las suplantaciones evidentes) y 2 (realizar una comprobación exhaustiva). Aconsejamos seleccionar la opción de comprobación exhaustiva. Esta opción no debe utilizarse en aquellos sistemas que actúen como cortafuegos o routers. 4.5) Redireccionamiento IP El redireccionamiento IP es que en un sistema con diversos interfaces activos, se acepten paquetes en un interfaz con destino al otro. Si la opción de rediccionamiento está activa, la máquina podrá actuar como un router para el tráfico entre las redes existentes en cada uno de los interfaces. Únicamente aquellos sistemas que actúan como cortafuegos o routers o bien en circunstancias muy especiales deberían tener esta opción activa. Para verificar que se encuentra desactivada: # sysctl -w net.ipv4.ip_forward =0 Tal como hemos indicado anteriormente, en caso de activar con el valor 1 esta opción, también deberemos modificar el valor de net.ip4.conf.all.rp_filter y net.ipv4.conf.default.rp_filter. 4.6) Control de rutas Habitualmente un sistema no tiene ningún control sobre la ruta utilizada por los paquetes en su camino hacia su destino. El protocolo TCP/IP permite establecer la ruta exacta a seguir. Excepto en circunstancias muy especiales, este soporte deberá ser desactivado para evitar que un atacante pueda utilizar un sistema concreto como paso para saltarse las protecciones establecidas en el tráfico. Para desactivar esta opción: # sysctl -w net.ipv4.conf.all.accept_source_route =0 # sysctl -w net.ipv4.conf.default.accept_source_route =0 4.7) Registro de actividades sospechosas Un último valor de interés nos permite registrar en los archivos de actividad del sistema aquellas situaciones potencialmente sospechosas: intento de envío de paquetes con dirección no válida, paquetes con cambio de rutas y otras situaciones similares. Se trata de una serie de situaciones que en un funcionamiento normal de la red no pueden producirse en ninguna circunstancia. Un ejemplo puede ser la recepción de un paquete a través de un interfaz Ethernet con dirección origen igual a 127.0.0.1 Para activar el registro de esta actividad: # sysctl -w net.ipv4.conf.all.log_martians =1 # sysctl -w net.ipv4.conf.default.log_martians =1 5) Referencias: - Opciones de seguridad en Linux http://foro.elhacker.net/ - Syctl.conf Hardening http://www.eth0.us/sysctl - Ipsysctl tutorial 1.0.4 http://ipsysctl-tutorial.frozentux.net/ips...l-tutorial.html - Hardening the TCP/IP stack to SYN attacks http://www.securityfocus.com/infocus/1729 - DDOS and SYN_Recv Attacks And some SOlutions http://www.vbulletin.com/forum/showthread.php?t=126699 - Distributed Reflection Denial of Service http://www.grc.com/dos/drdos.htm Nuestro trabajo esta protegido: (IMG:http://i.creativecommons.org/l/by-nc-nd/2.5/88x31.png) This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 2.5 License. Condición: - Para distribuir esta guía/f.a.q. se necesita previa autorización del autor. - El autor es el único que se reserva el derecho de copiar esta guía. This post has been edited by VanZ: Feb 7 2007, 05:37 AM |
|
|
|
![]() ![]() |
| Lo-Fi Version | Time is now: 3rd September 2010 - 06:21 PM |