Adivina quién viene a CDNear esta noche

Post on 12-May-2015

370 views 3 download

Tags:

description

Talk about how to identify and map CDN topology and technologies being used as well as several potential attack vectors against this kind of networks. Also, I explained how to process different information collected about a CDN network to infer routers information like role, vendor, peers and so on to create a graph database and apply some graph theory to spot critical assets. Everything was shown with a tool programmed for that, "CDN Mapper&Analyzer" (CDNMA). Finally few vulnerabilities (both reported and undisclosed) from CDN providers were shown.

transcript

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&lt;\/&gt; 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

@z0mbiehunt3rblog.alejandronolla.comalejandro.nolla@gmail.com

Rondita de preguntas