Técnicas de CDN para la mitigación de ataques distribuídos

41
Derechos reservados © 2012-2013 Sandino Araico Sánchez <[email protected] > Se permite ilimitadamente el uso, copia, redistribución con o sin modificaciones siempre y cuando se mantenga el aviso de derecho de autor y se anoten al final de la presentación todas las modificaciones que se llevan a cabo conservando la historia de las modificaciones que hagan las demás personas e indicando la fecha de cada modificación y el nombre de la persona que la llevó a cabo. 2013-02-15 Técnicas para contención de ataques distribuídos 1 Friday, February 15, 2013

description

Este es el material de la presentación que hicimos el 13 de Febrero en Bugcon. Existen en el mercado muchos servicios con distintas técnicas para contener ataques distribuídos (todos ellos muy caros), pero ésta técnica es la única 100% Open Source y es la misma técnica que utilizamos en 1101 para nuestro servicio de protección contra ataques distribuídos. Hemos tenido muy buenos resultados pero los ataques evolucionan contínuamente por lo que tenemos que seguir agregando mejoras de donde esperamos poder presentar los nuevos nuevos avances con nuevos resultados para el Bugcon de 2014.

Transcript of Técnicas de CDN para la mitigación de ataques distribuídos

Page 1: Técnicas de CDN para la mitigación de ataques distribuídos

Derechos reservados © 2012-2013 Sandino Araico Sánchez <[email protected]>

Se permite ilimitadamente el uso, copia, redistribución con o sin modificaciones siempre y cuando se mantenga el aviso de derecho de autor y se anoten al final de la presentación todas las modificaciones que se llevan a cabo conservando la historia de las modificaciones que hagan las demás personas e indicando la fecha de cada modificación y el nombre de la persona que la llevó a cabo.

2013-02-15Técnicas para contención

de ataques distribuídos

1Friday, February 15, 2013

Page 2: Técnicas de CDN para la mitigación de ataques distribuídos

DDoS =

Distributed

Denial

of

Service

Ataque de negación de servicio distribuído

2Friday, February 15, 2013

Page 3: Técnicas de CDN para la mitigación de ataques distribuídos

Ataque de una botnet

3Friday, February 15, 2013

Page 4: Técnicas de CDN para la mitigación de ataques distribuídos

Ataque de Anonymous

4Friday, February 15, 2013

Page 5: Técnicas de CDN para la mitigación de ataques distribuídos

Ancho de banda de bajada

fuente: ddos.arbornetworks.com

5Friday, February 15, 2013

Page 6: Técnicas de CDN para la mitigación de ataques distribuídos

Ancho de banda de subida

6Friday, February 15, 2013

Page 7: Técnicas de CDN para la mitigación de ataques distribuídos

Uso de memoria

fuente: tumblr.com

7Friday, February 15, 2013

Page 8: Técnicas de CDN para la mitigación de ataques distribuídos

Efecto del ataque

fuente: Netcraft

8Friday, February 15, 2013

Page 9: Técnicas de CDN para la mitigación de ataques distribuídos

Hipótesis

Dilución del ataque en la nube

Uso de caché estático

Uso de límites de conexiones

Uso de límites de peticiones

Bloqueador de direcciones IP

9Friday, February 15, 2013

Page 10: Técnicas de CDN para la mitigación de ataques distribuídos

Uso de la nube

10Friday, February 15, 2013

Page 11: Técnicas de CDN para la mitigación de ataques distribuídos

Caché estático

11Friday, February 15, 2013

Page 12: Técnicas de CDN para la mitigación de ataques distribuídos

Imposición de límites

12Friday, February 15, 2013

Page 13: Técnicas de CDN para la mitigación de ataques distribuídos

Bloqueo de atacantes

13Friday, February 15, 2013

Page 14: Técnicas de CDN para la mitigación de ataques distribuídos

Integración

14Friday, February 15, 2013

Page 15: Técnicas de CDN para la mitigación de ataques distribuídos

Integración

15Friday, February 15, 2013

Page 16: Técnicas de CDN para la mitigación de ataques distribuídos

Integración

16Friday, February 15, 2013

Page 17: Técnicas de CDN para la mitigación de ataques distribuídos

Modelo experimentalXen / KVM, 1 CPU, 1 GiB RAM, 25 GB HD

CentOS 6 64 bits

nginx

nagios

bash

iptables

bind

17Friday, February 15, 2013

Page 18: Técnicas de CDN para la mitigación de ataques distribuídos

Instalador de nodos en “La Nube”

for i in `cat hosts | sed “s/#.*$//” ` ; dossh $i < scripts/install-key./scripts/install-node $i

done

./sync-nginx-all

18Friday, February 15, 2013

Page 19: Técnicas de CDN para la mitigación de ataques distribuídos

Propagador de configuración hacia “La Nube”

#sync-nginx-all RSYNC_PARAMS='-vacH --progress '

for i in `cat ./hosts | sed 's/#.*$//'` ; do! echo "===> rsync to: $i"! rsync $RSYNC_PARAMS ./etc/nginx/*conf root@$i:/etc/nginx/! rsync $RSYNC_PARAMS --delete ./etc/nginx/vhosts/ root@$i:/etc/nginx/vhosts/! ssh root@$i service nginx reloaddone

19Friday, February 15, 2013

Page 20: Técnicas de CDN para la mitigación de ataques distribuídos

Adaptación de una zona para ”La Nube”

;$TTL 86400!; 1 day$TTL 3600! ; 1 hour$ORIGIN enli.org.mx.

;@!! A! 75.126.210.124! ; hosting;www!CNAME! @! ! ;@! ! A! 50.30.46.179 ; raicillawww! ! ! CNAME! a.cdn.1-1-0-1.net.origen!! CNAME! b.w.h.srvr.mx.

20Friday, February 15, 2013

Page 21: Técnicas de CDN para la mitigación de ataques distribuídos

CDN por DNS Round Robin

;$TTL 3600! ; 1 hour$TTL 300!; 5 min$ORIGIN cdn.1-1-0-1.net.; A;a! ! A! 67.202.53.77 ; Nodo A;a! ! A! 23.22.63.20 ; Nodo Ba! ! A! 50.97.145.147 ; Nodo Ha! ! A! 50.97.65.34 ; Nodo I a! ! A! 50.19.77.249 ; Nodo Ja! ! A! 23.22.168.71 ; Nodo K

21Friday, February 15, 2013

Page 22: Técnicas de CDN para la mitigación de ataques distribuídos

Configuración del caché estático

user nginx;worker_processes 1;worker_rlimit_nofile 250000;events { worker_connections 65536;}! proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:16m inactive=24h max_size=15g;! proxy_temp_path ! /data/nginx/tmp ;! !! open_file_cache max=10000 inactive=200s; ! open_file_cache_valid 300s; ! open_file_cache_min_uses 5;! open_file_cache_errors on;

22Friday, February 15, 2013

Page 23: Técnicas de CDN para la mitigación de ataques distribuídos

Origen del caché estático

upstream local ! ! { server 127.0.0.1:8080; }

upstream mendozaaaa !{ server 50.22.23.151:80; server 74.86.82.177:80; } #c.w.h

upstream mozillamexico ! { server 50.22.23.151:80; server 74.86.82.177:80; } #c.w.h

upstream enli! ! ! { server 50.22.23.151:80; server 74.86.82.177:80; } #c.w.h

23Friday, February 15, 2013

Page 24: Técnicas de CDN para la mitigación de ataques distribuídos

accounting.log

log_format accounting '$msec $time_local ' '| $remote_addr ' '| $status ' '| $bytes_sent ' '| $request_time ' '| $pipe ' '| $upstream_cache_status ' '| $upstream_status ' '| $upstream_response_time ' '| $host ' '| $uri ' '| $query_string ' ;

24Friday, February 15, 2013

Page 25: Técnicas de CDN para la mitigación de ataques distribuídos

tail -f /var/log/accounting.log

1351169751.490 25/Oct/2012:07:55:51 -0500 | 174.129.84.42 | 301 | 410 | 0.000 | . | - | - | - | mendozaaaa.net | / | - 1351169803.465 25/Oct/2012:07:56:43 -0500 | 123.125.71.31 | 200 | 17787 | 6.436 | . | EXPIRED | 200 | 1.611 | mozilla-mexico.org | / | - 1351169803.990 25/Oct/2012:07:56:43 -0500 | 100.43.83.140 | 302 | 665 | 0.858 | . | MISS | 302 | 0.858 | mozilla-mexico.org | /activity/p/968/ | - 1351169807.008 25/Oct/2012:07:56:47 -0500 | 100.43.83.140 | 200 | 4910 | 0.721 | . | MISS | 200 | 0.721 | mozilla-mexico.org | /members/lu15g3orge/activity/968/ | - 1351169807.667 25/Oct/2012:07:56:47 -0500 | 180.76.5.169 | 302 | 631 | 1.655 | . | MISS | 302 | 1.439 | mozilla-mexico.org | /activity/p/865/ | - 1351169811.958 25/Oct/2012:07:56:51 -0500 | 180.76.5.143 | 200 | 5074 | 4.069 | . | MISS | 200 | 3.635 | mozilla-mexico.org | /members/jusai/activity/865/ | -

25Friday, February 15, 2013

Page 26: Técnicas de CDN para la mitigación de ataques distribuídos

Configuración de un sitio en el caché

server {!listen 80; server_name !enli.org.mx ; access_log /var/log/nginx/accounting.log accounting; include /etc/nginx/common-attack.conf; location / { rewrite ^/(.*)$ http://www.$server_name/$1 permanent; } }

server {listen 80; server_name !www.enli.org.mx ;access_log /var/log/nginx/accounting.log accounting;error_log /var/log/nginx/error.log;include /etc/nginx/common-attack.conf; location / {

! ! include /etc/nginx/proxy-common.conf ;! ! proxy_pass http://enli; break; ! }

26Friday, February 15, 2013

Page 27: Técnicas de CDN para la mitigación de ataques distribuídos

Limitador de conexiones

# HTTP port 80-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent \

--set --name DEFAULT --rsource -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent \

--update --seconds 1 --hitcount 20 --name DEFAULT --rsource -j DROP -A INPUT -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN

-m connlimit --connlimit-above 255 --connlimit-mask 24 -j DROP -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited

27Friday, February 15, 2013

Page 28: Técnicas de CDN para la mitigación de ataques distribuídos

Límite de peticiones - proxy-common

! ! proxy_set_header X-Real-IP $remote_addr;! ! proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;! ! proxy_set_header Host $http_host;! ! proxy_redirect off; proxy_cache STATIC; proxy_cache_valid 1d; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;! ! proxy_buffering on;! ! proxy_buffer_size 8k;! ! proxy_buffers 8 8k;! ! proxy_busy_buffers_size 16k;

28Friday, February 15, 2013

Page 29: Técnicas de CDN para la mitigación de ataques distribuídos

Límite de peticiones - proxy-micro

! ! proxy_set_header X-Real-IP $remote_addr;! ! proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;! ! proxy_set_header Host $http_host;! ! proxy_redirect off;

proxy_cache STATIC; proxy_cache_valid 15; proxy_cache_valid 200 5; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;! ! proxy_buffering on;! ! proxy_buffer_size 8k;! ! proxy_buffers 8 8k;! ! proxy_busy_buffers_size 16k;

29Friday, February 15, 2013

Page 30: Técnicas de CDN para la mitigación de ataques distribuídos

Reglas personalizadas por sitio

! location = /programa.html {! ! include /etc/nginx/proxy-micro.conf ;! ! proxy_pass http://enli; break; ! }

location ~ \.php {! ! include /etc/nginx/proxy-micro.conf ;! ! proxy_pass http://enli; break; ! }! location ~* \.(jpg|jpeg|gif|png|ico|css|js|ico)$ {! ! include /etc/nginx/proxy-common.conf ;! ! proxy_ignore_headers "Expires" "Cache-Control" "Set-Cookie" ;! ! proxy_pass http://enli; break; ! }}

30Friday, February 15, 2013

Page 31: Técnicas de CDN para la mitigación de ataques distribuídos

Bloqueador de patrones conocidos common-attack.conf

#Apache .htaccesslocation ~ /\.ht {! deny all;}## Only allow these request methods #### Do not accept DELETE, SEARCH and other methods ## if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; }#Directory trasversal ../../../../../! if ($query_string ~ \.\.\/\.\.\/\.\.\/\.\.\/\.\.\/ ) {! ! return 404;! }location ~ url\(data:image\/png\;base64, {! return 404;}

31Friday, February 15, 2013

Page 32: Técnicas de CDN para la mitigación de ataques distribuídos

Bloqueador de patrones conocidos

# Bloqueo de cadenas muy largaslocation ~ "(.{105})" {! return 414 "Request-URI Too Long";!}if ($query_string ~ "(.{105})" ) {! return 414 "Request-URI Too Long";}# Un abuso conocidolocation = /wp-login.php {! return 464 "Acknowledged Brute Force attack";}

32Friday, February 15, 2013

Page 33: Técnicas de CDN para la mitigación de ataques distribuídos

Bloqueador de patrones conocidos

if ($query_string ~ Anonymous ) {! return 454 "Acknowledged DDoS attack";}#if ($query_string ~ Esperanos ) {#! return 454 "Acknowledged DDoS attack";#}if ($query_string ~ "Nunca%20bajaremos%20los%20brazos!%20Anonymous%20apoyando" ) {! return 454 "Acknowledged DDoS attack";}if ($query_string ~ "Somos%20El%20pueblo" ) {! return 454 "Acknowledged DDoS attack";}

33Friday, February 15, 2013

Page 34: Técnicas de CDN para la mitigación de ataques distribuídos

Blocker cronjob

# ...# Known strings used in brute force attacks 454 464 # Too long strings used in brute force attacks 414 for ERR in '414' '454' '464' ; do! for IP in `tac /var/log/nginx/accounting.log | head -25000 | grep "$LAST_999_SEC" | cut -d '|' -f 2,3 | grep " $ERR " | cut -d '|' -f 1 | sort | uniq -c | sort -nr | grep '[0-9][0-9][0-9] \+[0-9]' | cut -b 8-99` ; do! echo -n "Blocking IP | $IP | 100+ $ERR | " >> $LOG_FILE! $IPTABLES -I INPUT -s $IP -j DROP ; ! date >> $LOG_FILEdone# ...

34Friday, February 15, 2013

Page 35: Técnicas de CDN para la mitigación de ataques distribuídos

Replicación en la nube: Complejidad y costo

Caché estático: Evadible y abusable

Límite de conexiones: Puede afectar la respuesta hacia los visitantes auténticos

Límite de peticiones: El uso de CPU se dispara con ab, siege y fhttp

Bloqueador: Rissgo de falsos positivos

Resultados del uso individual de las técnicas propuestas

35Friday, February 15, 2013

Page 36: Técnicas de CDN para la mitigación de ataques distribuídos

300 peticiones por segundo antes de fallar

Uso de CPU entre 10% y 15% en nodos de caché

Uso de caché entre 6 y 10 GiB

El tamaño de los logs aumenta muy rápido

800 Mbps de bajada antes del null route del centro de datos

Resultados del uso combinado de las técnicas propuestas

36Friday, February 15, 2013

Page 37: Técnicas de CDN para la mitigación de ataques distribuídos

Picos de subida entre 25 y 80 Mbps

El blocker reduce efectivamente el uso de CPU y de ancho de banda de subida

El uso de CPU de los nodos de DNS es menor al 1%

Patrones de ataque no previstos han logrado evadir el caché

Resultados del uso combinado de las técnicas propuestas

37Friday, February 15, 2013

Page 38: Técnicas de CDN para la mitigación de ataques distribuídos

Provisionamiento de nuevos nodos de caché en menos de 15 min.

Efectos secundarios benéficos como uso menor de recursos de la base de datos

Cambio del origen a una red distinta entre 5 y 10 min.

Tolerancia a interrupciones del origen

Resultados del uso combinado de las técnicas propuestas

38Friday, February 15, 2013

Page 39: Técnicas de CDN para la mitigación de ataques distribuídos

Agradecimiento

nahual <[email protected]>

gozner <[email protected]>

puilli <[email protected]>

A las personas que han aportado sus ideas

pajarito <[email protected]>

A las personas que han participado en el desarrollo

39Friday, February 15, 2013

Page 40: Técnicas de CDN para la mitigación de ataques distribuídos

ConclusionesConforme aumenta la intensidad del ataque distribuído mejora la capacidad de aislarlo y contenerlo

Siempre existen nuevas técnicas para evadir las técnicas de contención de ataques

El software libre y “la nube” han puesto la contención de ataques distribuídos al alcance de la población

40Friday, February 15, 2013

Page 41: Técnicas de CDN para la mitigación de ataques distribuídos

Referencias

http://en.wikipedia.org/wiki/Ddos#Distributed_attack

http://netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.htmlhttp://www.tldp.org/HOWTO/DNS-HOWTO-5.html

http://wiki.nginx.org/HttpCoreModulehttp://wiki.nginx.org/HttpProxyModule

Sandino Araico Sánchez <[email protected]>@KBrown

#mendozaaaa

41Friday, February 15, 2013