• Saltar al contenido principal
  • Saltar a la barra lateral principal
  • Saltar al pie de página

Una al Día

Boletín de noticias de Seguridad Informática ofrecido por Hispasec

Usted está aquí: Inicio / Vulnerabilidades / Vulnerabilidad "SynCookie" y cortafuegos, bajo Linux

Vulnerabilidad "SynCookie" y cortafuegos, bajo Linux

7 noviembre, 2001 Por Hispasec Deja un comentario

Linux, con la opción de «SynCookie» activada, es susceptible a un ataque
que permite a un atacante remoto el conectarse a un puerto TCP/IP
protegido con los cortafuengos Linux nativos, si se dan una serie de
circunstancias y el atacante invierte los suficientes recursos.
«SynCookie» es un mecanismo que inmuniza una máquina Linux ante ataques
de denegación de servicio del tipo «Syn Flood» que, básicamente,
consiste en solicitar conexiones TCP/IP desde remitentes espúreos,
falseando la dirección IP de origen («IP Spoof»). Dado que el protocolo
TCP/IP requiere un establecimiento de conexión negociado en tres pasos,
si la IP origen no responde, la conexión no llega a completarse del
todo.

En un sistema operativo no protegido, el número de sesiones a medio
abrir es un valor muy bajo (por ejemplo 10-30), y cualquier intento de
conexión legítima subsiguiente será ignorado. Las sesiones a medio abrir
acaban por expirar, pero su número es tan bajo y su expiración tan alta
(minutos) que basta con que un atacante envíe unos pocos datagramas por
minuto para bloquear un servicio por completo, constituyendo un ataque
DoS (denegación de servicio) muy efectivo.

Ante este tipo de ataques, populares hace unos años y cuya fuente es muy
difícil de localizar, los sistemas operativos modernos han desarrollado
dos tipos de estrategia:

a. Algunos no imponen otros límites al número de sesiones semiabiertas
más que la cantidad de memoria del sistema (lo que de por sí ya puede
constituir un DoS en sí mismo). Si, por ejemplo, una conexión nos ocupa
512 bytes y tenemos 128 Megabytes de RAM para gastar en la tarea,
tendremos capacidad para 262144 sesiones simultaneas. Si expiramos las
sesiones no abiertas en dos minutos (valor típico), nos tienen que
llegar al menos casi 2200 peticiones de conexión nuevas por segundo para
bloquear el servicio. 2200 peticiones de conexión por segundo ocupan al
menos 700Kbps de ancho de banda, recurso no disponible para la mayoría
de los atacantes y que puede contrarrestarse reduciendo el tiempo de
vida de las sesiones a medio abrir o aumentando la cantidad de memoria
libre para gastar en esta protección.

b. Otros sistemas operativos, además del punto anterior, siguen la
filosofía de no reservar memoria para una sesión hasta que se ha
completado la conexión al 100%. Para ello utilizan técnicas
criptográficas reto-respuesta que aseguran que un atacante malicioso no
pueda utilizar IPs remitentes falsificadas.

En Linux, el reto criptográfico emplea 24 bits, lo que supone que, de
media, un atacante debe enviar unos ocho millones de datagramas para
poder conseguir que uno solo de ellos se considere creador de una
conexión válida. El resto se ignoran.

Aunque ocho millones de datagramas es muy poco en términos de
resistencia criptográfica, si pensamos que el ataque debe realizarse a
través de una red de datos, lo convierte en poco probable en la
práctica.

En el caso de Linux un atacante con suficiente recursos sólo conseguirá
que el Kernel acepte una conexión de cada ocho millones (en media) que
esté intentando.

Aunque tan minúscula proporción no sea muy atractiva como ataque DoS, sí
supone un grave riesgo de seguridad si estamos utilizando reglas de
cortafuegos que verifiquen el flag «Syn», ya que la conexión atravesaría
la regla del cortafuegos y se establecería. Una vez establecida, un
atacante podría enviar o recibir datos a través de la misma sin
interferencia del cortafuegos.

Una posible solución es deshabilitar el uso de «SynCookies» mediante el
comando «echo 0 > /proc/sys/net/ipv4/tcp_syncookies», aunque ello
limitaría la resistencia del sistema ante un ataque DoS del tipo «Syn
Flood».

Otra solución es parchear el kernel de forma que sólo se active la
protección «SynCookie» para los puertos que estén siendo atacados, no de
forma global para toda la máquina. Dado que el atacante debe tener
acceso al puerto para poder atacarlo, si tenemos el puerto filtrado por
«Syn» en el cortafuegos, éste no será accesible al atacante y no podrá,
por tanto, desarrollar el ataque.

El ataque en sí requiere que:

a) El kernel tenga activada la opción de «SynCookie».
b) Tengamos activado el cortafuegos, y deben existir reglas «Syn».
c) El atacante tenga acceso a, al menos, un puerto «abierto»: servidor
web, servidor de IRC, SMTP, etc.

El ataque se produce de la siguiente manera:

a) El atacante realiza un «Syn Flood» sobre el puerto «público» del
servidor, para desencadenar la respuesta «SynCookie» de la máquina.

b) El atacante envía datagramas al puerto que desea «conectar»,
intentando forzar el «hash» criptográfico. En media se necesitan unos
ocho millones de datagramas, lo que hace el ataque poco práctico, si
bien puede tener suerte y conseguir entrar al primer intento…

c) Una vez vulnerado el cortafuegos, puede enviar y recibir datos a
través de la conexión abierta, de forma libre.

Todos los kernel Linux con soporte «Syncookie» (a partir de la serie
2.0.*, inclusive) son vulnerables al ataque. Se recomienda actualizar a
los últimos kernel, 2.2.20 o 2.4.14, versiones *NO* vulnerables.

Gracias a los beneficios del código «Open Source», los administradores
que no puedan actualizar el kernel, pueden aplicar directamente el
siguiente parche o uno similar:



diff -urN linux.orig/include/net/sock.h linux/include/net/sock.h
- --- linux.orig/include/net/sock.h Wed Aug 15 22:21:32 2001
+++ linux/include/net/sock.h Wed Nov 7 14:24:36 2001
@@ -416,6 +416,8 @@
unsigned int keepalive_time; /* time before keep alive takes place */
unsigned int keepalive_intvl; /* time interval between keep alive probes */
int linger2;
+
+ unsigned long last_synq_overflow;
};


diff -urN linux.orig/net/ipv4/syncookies.c linux/net/ipv4/syncookies.c
- --- linux.orig/net/ipv4/syncookies.c Wed May 16 18:31:27 2001
+++ linux/net/ipv4/syncookies.c Wed Nov 7 14:23:54 2001
@@ -9,7 +9,7 @@
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
- - * $Id: syncookies.c,v 1.14 2001/05/05 01:01:55 davem Exp $
+ * $Id: syncookies.c,v 1.17 2001/10/26 14:55:41 davem Exp $
*
* Missing: IPv6 support.
*/
@@ -23,8 +23,6 @@

extern int sysctl_tcp_syncookies;

- -static unsigned long tcp_lastsynq_overflow;
- -
/*
* This table has to be sorted and terminated with (__u16)-1.
* XXX generate a better table.
@@ -53,7 +51,9 @@
int mssind;
const __u16 mss = *mssp;

- - tcp_lastsynq_overflow = jiffies;
+
+ sk->tp_pinfo.af_tcp.last_synq_overflow = jiffies;
+
/* XXX sort msstab[] by probability? Binary search? */
for (mssind = 0; mss > msstab[mssind + 1]; mssind++)
;
@@ -78,14 +78,11 @@
* Check if a ack sequence number is a valid syncookie.
* Return the decoded mss if it is, or 0 if not.
*/
- -static inline int cookie_check(struct sk_buff *skb, __u32 cookie)
+static inline int cookie_check(struct sk_buff *skb, __u32 cookie)
{
__u32 seq;
__u32 mssind;

- - if ((jiffies - tcp_lastsynq_overflow) > TCP_TIMEOUT_INIT)
- - return 0;
- -
seq = ntohl(skb->h.th->seq)-1;
mssind = check_tcp_syn_cookie(cookie,
skb->nh.iph->saddr, skb->nh.iph->daddr,
@@ -126,8 +123,8 @@
if (!sysctl_tcp_syncookies ¦¦ !skb->h.th->ack)
goto out;

- - mss = cookie_check(skb, cookie);
- - if (!mss) {
+ if (time_after(jiffies, sk->tp_pinfo.af_tcp.last_synq_overflow +
TCP_TIMEOUT_INIT) ¦¦
+ (mss = cookie_check(skb, cookie)) == 0) {
NET_INC_STATS_BH(SyncookiesFailed);
goto out;
}
@@ -178,7 +175,7 @@
opt &&
opt->srr ? opt->faddr : req->af.v4_req.rmt_addr,
req->af.v4_req.loc_addr,
- - sk->protinfo.af_inet.tos ¦ RTO_CONN,
+ RT_CONN_FLAGS(sk),
0)) {
tcp_openreq_free(req);
goto out;

Jesús Cea Avión
jcea@hispasec.com

Más información:

Linux Syn Filter Evasion Vulnerability
http://www.securityfocus.com/bid/3505

Ataques masivos. ¿Es tan fiero el león como lo pintan?
http://www.hispasec.com/unaaldia.asp?id=474

[suse-security-announce] SuSE Security Announcement: kernel (update)
(SuSE-SA:2001:039)
http://www.suse.com/de/support/security/2001_039_kernel2_txt.txt

Syncookie vulnerability
http://www.linuxsecurity.com/advisories/other_advisory-1683.html

Linux – syncookies firewall breaking problem
http://www.caldera.com/support/security/advisories/CSSA-2001-038.0.txt

kernel 2.2 and 2.4: syncookie vulnerability
http://www.redhat.com/support/errata/RHSA-2001-142.html

Acerca de Hispasec

Hispasec Ha escrito 6939 publicaciones.

  • View all posts by Hispasec →
  • Blog

Compártelo:

  • Twitter
  • Facebook
  • LinkedIn
  • Reddit
  • Telegram
  • WhatsApp

Publicaciones relacionadas

Publicado en: Vulnerabilidades

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Buscar

Síguenos

siguenos en twitter

UAD360 EDICIÓN 2022

https://www.youtube.com/watch?v=go_CSWK56yU

Populares de UAD

  • Campañas de phishing utilizan Flipper Zero como cebo
  • Evasión de CloudTrail en AWS a través de API no documentada
  • Tamagotchi para hackers: Flipper Zero
  • Hydra, el malware que afecta tanto a entidades bancarias como a exchange de criptomonedas
  • USB Killer, el enchufable que puede freir tu equipo

Entradas recientes

  • Evasión de CloudTrail en AWS a través de API no documentada
  • Parches de enero 2023: Microsoft corrige 98 vulnerabilidades
  • UAD se abre a la comunidad
  • Campañas de phishing utilizan Flipper Zero como cebo
  • Vulnerabilidades críticas en productos de Synology
  • Más de dos docenas de errores de WordPress explotados por un nuevo malware de Linux
  • Descubierta una nueva campaña de malware que se propagaba a través de los anuncios de Google
  • Correo electrónico
  • Facebook
  • LinkedIn
  • RSS
  • Twitter

Footer

UAD

UAD nació a raíz de un inocente comentario en un canal IRC hace 24 años. A través de los archivos, un lector curioso puede ver cómo ha cambiado (o no) la seguridad de la información desde entonces.

Aviso Legal

  • Aviso Legal
  • Términos y Condiciones
  • Política de Privacidad
  • Política de Cookies

Copyright © 2023 · Hispasec Sistemas, S.L. Todos los derechos reservados

Este sitio web utiliza cookies propias y de terceros para fines analíticos y para mostrarte publicidad (tanto general como personalizada) relacionada con tus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación (por ejemplo, páginas visitadas), para optimizar la web y para poder valorar las opiniones de los servicios consultados por los usuarios. Para administrar o deshabilitar estas cookies haz clic en: Configurar Cookies


Rechazar todo Aceptar Todo
Configurar Cookies

Resumen de privacidad

Este sitio web utiliza cookies para mejorar su experiencia mientras navega por el sitio web. De estas, las cookies que se clasifican como necesarias se almacenan en su navegador, ya que son esenciales para el funcionamiento de las funcionalidades básicas del sitio web. También utilizamos cookies de terceros que nos ayudan a analizar y comprender cómo utiliza este sitio web. Estas cookies se almacenarán en su navegador solo con su consentimiento. También tiene la opción de optar por no recibir estas cookies. Pero la exclusión voluntaria de algunas de estas cookies puede afectar su experiencia de navegación.
Necesaria
Siempre activado
Las cookies necesarias son absolutamente esenciales para que el sitio web funcione correctamente. Estas cookies garantizan funcionalidades básicas y características de seguridad del sitio web, de forma anónima.
CookieDuraciónDescripción
cookielawinfo-checkbox-analytics11 monthsEsta cookie está configurada por el complemento de consentimiento de cookies de GDPR. La cookie se utiliza para almacenar el consentimiento del usuario para las cookies en la categoría "Análisis".
cookielawinfo-checkbox-functional11 monthsLa cookie está configurada por el consentimiento de cookies de GDPR para registrar el consentimiento del usuario para las cookies en la categoría "Funcional".
cookielawinfo-checkbox-necessary11 monthsEsta cookie está configurada por el complemento de consentimiento de cookies de GDPR. Las cookies se utilizan para almacenar el consentimiento del usuario para las cookies en la categoría "Necesario".
cookielawinfo-checkbox-others11 monthsEsta cookie está configurada por el complemento de consentimiento de cookies de GDPR. La cookie se utiliza para almacenar el consentimiento del usuario para las cookies en la categoría "Otro.
cookielawinfo-checkbox-performance11 monthsEsta cookie está configurada por el complemento de consentimiento de cookies de GDPR. La cookie se utiliza para almacenar el consentimiento del usuario para las cookies en la categoría "Rendimiento".
viewed_cookie_policy11 monthsLa cookie está configurada por el complemento de consentimiento de cookies de GDPR y se utiliza para almacenar si el usuario ha dado su consentimiento o no para el uso de cookies. No almacena ningún dato personal.
Analítica
Las cookies analíticas se utilizan para comprender cómo interactúan los visitantes con el sitio web. Estas cookies ayudan a proporcionar información sobre métricas, el número de visitantes, la tasa de rebote, la fuente de tráfico, etc.
GUARDAR Y ACEPTAR