técnicas de cdn para la mitigación de ataques distribuídos
Post on 08-Jul-2015
1.169 Views
Preview:
DESCRIPTION
TRANSCRIPT
Derechos reservados © 2012-2013 Sandino Araico Sánchez <sandino@1101.mx>
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
DDoS =
Distributed
Denial
of
Service
Ataque de negación de servicio distribuído
2Friday, February 15, 2013
Ataque de una botnet
3Friday, February 15, 2013
Ataque de Anonymous
4Friday, February 15, 2013
Ancho de banda de bajada
fuente: ddos.arbornetworks.com
5Friday, February 15, 2013
Ancho de banda de subida
6Friday, February 15, 2013
Uso de memoria
fuente: tumblr.com
7Friday, February 15, 2013
Efecto del ataque
fuente: Netcraft
8Friday, February 15, 2013
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
Uso de la nube
10Friday, February 15, 2013
Caché estático
11Friday, February 15, 2013
Imposición de límites
12Friday, February 15, 2013
Bloqueo de atacantes
13Friday, February 15, 2013
Integración
14Friday, February 15, 2013
Integración
15Friday, February 15, 2013
Integración
16Friday, February 15, 2013
Modelo experimentalXen / KVM, 1 CPU, 1 GiB RAM, 25 GB HD
CentOS 6 64 bits
nginx
nagios
bash
iptables
bind
17Friday, February 15, 2013
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Agradecimiento
nahual <nahual@security-dojo.com>
gozner <mago@gozner.com>
puilli <dan@microbit.com>
A las personas que han aportado sus ideas
pajarito <gnu.yair@gmail.com>
A las personas que han participado en el desarrollo
39Friday, February 15, 2013
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
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 <sandino@1101.mx>@KBrown
#mendozaaaa
41Friday, February 15, 2013
top related