¿Cómo encuentra la IP de origen detrás de una CDN que usa Akamai, Cloudflare y Fastly? Mucha gente diría que no puedes. Los propios CDN dirían que no hay forma de encontrar la IP de origen, y los otros CDN dirían que su CDN es diferente y ni siquiera puedes encontrar su IP de origen. No puede encontrar la IP de origen debido a las múltiples capas de CDN y al hecho de que todas usan las mismas direcciones IP. Esto es parcialmente cierto. Un proxy web no podrá encontrar la IP de origen detrás de una CDN, pero un proxy web no es la respuesta que estamos buscando. Esta publicación llega gracias a @HolyBugx.
¿Qué es una CDN?
Una CDN (Red de Distribución de Contenido) permite la transferencia rápida de activos necesarios para cargar contenido de Internet, incluidas páginas HTML, archivos JavaScript, Hojas de Estilo / CSS, imágenes y vídeos. La popularidad de los servicios CDN sigue creciendo y, en la actualidad, la mayor parte del tráfico web se realiza a través de CDN, incluido el tráfico de sitios importantes como Facebook, Netflix y Amazon.
¿Por qué los sitios web necesitan un CDN?
El rendimiento es importante. Si un sitio web no utiliza un CDN, todos sus usuarios deben enviar sus peticiones a un solo servidor, ya que esto pondrá muchas cargas en el servidor, el rendimiento del sitio web se reduce. Hoy en día la mayoría de los sitios web utilizan una CDN, ya que les ayudará a tener una mejor velocidad de carga, reduciendo los costes de ancho de banda, mejorando la seguridad, etc.
Las CDNs también ofrecen muchos beneficios específicos a diferentes tipos de negocios y organizaciones, tales como:
- Comercio electrónico
- Gobierno
- Finanzas
- Medios de comunicación/publicaciones
- Aplicaciones móviles
- Tecnología y SaaS
¿Cuáles son las ventajas de utilizar una CDN?
- Mejora de la velocidad del sitio web y los tiempos de carga.
- Reducción de los costos de ancho de banda.
- Mejora de la seguridad del sitio web.
- Ventajas SEO
- Picos de tráfico y escalabilidad
- Mejores tasas de conversión
- Fiabilidad
etc.
Por lo tanto, si deseas tener un sitio web confiable con un buen rendimiento, debes considerar el uso de una CDN.
Después de utilizar una CDN todos los usuarios que soliciten los contenidos del sitio web obtendrán una versión en caché del servidor CDN más cercano, por lo que los contenidos se cargarán mucho más rápido, y el rendimiento del sitio web mejora.
Proxy inverso CDN
Un proxy inverso es un servidor que toma una petición del cliente y la reenvía al servidor de origen. Es un servidor intermediario entre el cliente y el propio servidor de origen. Un proxy inverso de la CDN lleva este concepto un paso más allá al almacenar en caché las respuestas del servidor de origen que están en camino de vuelta al cliente. Así, los servidores de la CDN son capaces de entregar más rápidamente los activos a los visitantes cercanos. Este método también es deseable por razones como:
- Equilibrio de carga y escalabilidad
- Aumento de la seguridad del sitio web
Seguridad CDN y WAF
Las CDNs por sí mismas no pueden bloquear a los bots malos para que no infecten un sitio web, las CDNs son vulnerables por sí mismas, por lo que es necesario utilizar un WAF.
Un WAF o Web Application Firewall ayuda a proteger las aplicaciones web filtrando y monitorizando el tráfico HTTP entre una aplicación web e Internet.
Suele proteger las aplicaciones web de ataques como Cross-Site Scripting (XSS), inclusión de archivos y SQL Injection, entre otros.
IP de origen de sitios web
Muchos sitios web utilizan las protecciones mencionadas anteriormente para ocultar su IP de origen para evitar los ataques DDoS y otras cosas maliciosas que los atacantes pueden hacer.
Estos sitios web utilizan en su mayoría seguridad basada en la nube, proxy o servicios basados en DNS, lo que hace que sea un poco difícil encontrar la IP de origen.
¿Para qué necesitamos la IP de origen de un sitio web?
La respuesta es bastante fácil y breve; una vez que se tiene la IP de origen de un sitio web se pueden saltar todas las protecciones que proporciona una CDN.
Métodos para encontrar la IP de origen de un sitio web
Hay un par de maneras de tratar de encontrar la IP de origen detrás de un CDN/WAF. Vamos a discutir varios métodos que podemos utilizar como un atacante.
Ingeniería Inversa
Siempre que quieras evitar algo, ponte en el lugar de tu adversario y haz ingeniería inversa de su proceso de pensamiento, piensa como un miembro del equipo azul e intenta averiguar su implementación de seguridad.
Protecciones que proporcionan los Blue Teamers
Esta es la lista común de cosas que los proveedores de CDNs/equipos azules hacen para ocultar la IP de origen de su sitio web:
- Mantener todos sus subdominios en la misma CDN
Al usar otros subdominios en comparación con el dominio raíz, tienen una mayor probabilidad de éxito, ya que podrían entregar archivos que podrían conducir a vulnerabilidades de divulgación de información y, por lo tanto, filtrar la IP de origen.
- No iniciar una conexión saliente basada en la acción del usuario
Si podemos hacer que el servidor web se conecte a una dirección arbitraria, revelaremos la IP de origen. Las funciones como “cargar desde URL” que permiten al usuario cargar una foto desde una URL determinada deben configurarse de modo que el servidor que realiza la descarga no sea el servidor de origen del sitio web. Esto es importante porque si un atacante puede elegir la URL ingresada, puede configurar un sitio web específicamente para monitorear quién se conecta a él, o usar un servicio público que monitorea las IP que contactan URL únicas.
- Cambiar su IP de origen mientras configura CDN
Los registros DNS son muchos lugares donde se archivan los registros históricos. Estos registros DNS históricos contendrán la IP de origen del sitio web mediante CDN.
- Restricción del acceso directo al sitio web mediante la dirección IP
Otra opción interesante que tienen los defensores es restringir a los usuarios que intentan acceder al sitio web utilizando una dirección IP, por lo que el sitio web solo se carga cuando se proporciona el nombre de dominio. Exploremos cómo podemos hacer esto en Nginx
Para deshabilitar / bloquear el acceso directo a IP para el puerto 80 creamos una nueva configuración de servidor de la siguiente manera:
server {
listen 80 default_server;
server_name _;
return 404;
}
Para deshabilitar / bloquear el acceso directo a IP para el puerto 443 usamos lo siguiente en uno de nuestros bloques de configuración de servidor:
if ($host != "ejemplo.com") {
return 404;
}
Ejemplo:
server {
listen 443 ssl;
server_name esgeeks.com
ssl_certificate /etc/nginx/ssl/esgeeks.com.crt;
ssl_certificate_key /etc/nginx/ssl/esgeeks.com.key;
if ($host != "esgeeks.com") {
return 404;
}
}
esto bloqueará todo el tráfico a https: // TU_IP
Vamos a discutir cómo evitar esta limitación utilizando un método interesante.
- Lista blanca
Una posible solución para permitir solo solicitudes de la CDN es simplemente incluir la CDN en la lista blanca, ya que este método puede parecer prometedor y suficiente para que los defensores oculten su servidor de origen, esto es bastante desafiante en la práctica ya que solo tienen 3 métodos, y solo uno de ellos pueden funcionar:
Opción A: Listas blancas de direcciones IP
El problema con las direcciones IP de la lista blanca es que deben tener las direcciones IP de todos sus servidores de borde CDN que pueden acceder a su origen.
Esto es algo problemático. Muchas CDN no dan la lista de sus direcciones IP, e incluso si lo hacen, pueden agregar una dirección IP o incluso cambiarla y olvidarse de notificarles. Estas listas blancas deben actualizarse periódicamente para no dañar el sitio.
Opción B: Incluir en la lista blanca un identificador único en una solicitud
La idea es muy simple. La CDN enviará un identificador único en sus solicitudes al servidor de origen que pueden usar en el origen para identificar la CDN y permitir sus solicitudes. Sin embargo, este método no es del todo infalible. Los atacantes también pueden configurar libremente la solicitud. Eso es si conocemos el proveedor de CDN que utilizan y si también sabemos cómo se identifica el proveedor de CDN con el servidor de origen. Los atacantes pueden falsificar fácilmente la solicitud si tienen esta información.
Opción C: Nombre de host de origen imposible de adivinar
Esta es probablemente la solución más confiable para los defensores, ya que, si los atacantes intentan llegar al servidor web, no podrán localizarlo. Los defensores crean un conjunto largo y aleatorio de caracteres alfanuméricos y los utilizan como subdominio. Por ejemplo, si su nombre de dominio es “HolyBugx.com”, entonces establecen un nombre de subdominio como “2547d0jeid15ma.HolyBugx.com”.
Entonces, este nombre de host solo lo conocerán ellos y su proveedor de CDN, y pueden incluir en la lista blanca las solicitudes que tengan este nombre de host.
Volver al lado del atacante
Solo hemos obtenido una comprensión básica del punto de vista del defensor que intenta proteger su sitio web de origen, conociendo esta información, tenemos un mapa mental de lo que vamos a hacer, en nuestro proceso de pensamiento mientras intentamos eludir estas limitaciones y encontrar la IP de origen del servidor web.
Arriba hay un mapa mental simple sobre las cosas que deberíamos probar mientras probamos la fuga de IP de origen de un sitio web. Profundicemos en eso.
Reconnaissance
La parte más importante es hacer un reconocimiento básico para obtener la mayor cantidad de información posible. Nuestra idea es encontrar información útil como:
- Rangos de IP / CIDR
- Información relacionada con el host
- DNS Records
- Servidores web
- Vhosts
- Servidores alojados en el mismo servidor que el servidor web (por ejemplo, servidores de correo)
- Vulnerabilidades de divulgación de información
Todo sobre los registros DNS
Los registros DNS son muchos lugares donde se archivan los registros históricos. Es probable que estos registros DNS históricos contengan la IP de origen del sitio web mediante CDN.
Como mencioné antes, existe la posibilidad de que algunos sitios web tengan registros DNS mal configurados de los cuales podemos recopilar información útil.
1- SecurityTrails
SecurityTrails te permite explorar los datos actuales e históricos completos de cualquier activo de Internet. Historial de IP y DNS, dominio, SSL e inteligencia de puertos abiertos.
Vamos a hacer una simple consulta en nuestro objetivo para ver sus datos históricos, especialmente para los registros DNS, ya que le permite encontrar los datos actuales e históricos de los registros A, AAAA, MX, NS, SOA y TXT.
Esto puede ser útil para averiguar la IP real del servidor cuando el sitio web se ejecuta directamente en la IP del servidor y más tarde se trasladó a CDN.
Luego, haremos clic en “Historical Data” y veremos información útil sobre nuestro objetivo.
Ninguno de los registros DNS debe contener ninguna mención de la IP de origen. Observa de cerca los registros SPF y TXT para asegurarte de que contengan información sobre el origen.
Simplemente, un registro A, AAA, CNAME o MX apuntado al servidor de origen expondrá la IP de origen.
2- Dig
Puedes usar dig
para hacer algunas consultas simples por ti y también averiguar si el objetivo está usando proveedores famosos como Cloudflare.
Ese es el rango de IP de Cloudflare, para confirmar podemos usar Whois
en la dirección IP del registro A que encontramos:
Además, hay otro método para averiguar si el objetivo está detrás de Cloudflare o no, y es usando curl:
Todo sobre los registros MX
Los registros MX son uno de los métodos más favorecidos, por lo fácil que puede ser a veces encontrar la IP de origen. Si el servidor de correo está alojado en la misma IP que el servidor web, un atacante podría encontrar la dirección IP a partir de un correo electrónico saliente.
1- Cabeceras de correo y restablecimiento de la contraseña
Si el servidor de correo está alojado en la misma IP que el servidor web, otra opción interesante que tenemos es utilizar la funcionalidad de “Reset Password“, de manera que simplemente podemos crear una cuenta en el sitio web de destino, y utilizar el Reset Password, el correo recibido, probablemente revelará la IP del servidor de origen.
Ten en cuenta que debes reunir todas las direcciones IP que puedas ver en el correo electrónico recibido, y probarlas manualmente para ver si es la IP de origen del servidor. Por ejemplo, a veces el valor de Return-Path
puede ser útil.
2- Correo electrónico saliente
Hay otro método interesante que puede utilizar, enviar un correo electrónico a una dirección de correo electrónico inexistente a “no-existente@objetivo.com” provocará un rebote; como el usuario no existe, la entrega fallará, y debería recibir de vuelta una notificación que contenga la IP de origen del servidor que te envió ese correo.
Descubrimiento de hosts virtuales
Una vez que encuentres los Servidores Web, tienes una lista de Servidores Web y sus direcciones IP, debes averiguar si el dominio al que te diriges está configurado en esos servidores como un Host Virtual.
Para el descubrimiento de Vhosts sugiero Pentest-Tools si te gusta la GUI, y si te gustan las herramientas CLI como yo, sugiero estas herramientas:
Usando estas herramientas puedes encontrar Vhosts, y si tu objetivo está configurado como Vhost, entonces tienes la oportunidad de encontrar la IP de origen.
Configuraciones incorrectas de seguridad
Una mala configuración puede ser considerada fácil de explotar, por ejemplo, la URL de los contenidos a cargar está apuntando a una IP que no es parte de una CDN que pueda conectarse a usted, como la IP real del servidor.
- P: Pero uno podría montar un servidor sólo con un archivo CSS y nada más (por ejemplo), ¿Cómo puedes decir que esa IP es la IP real que estamos buscando?
- R: Bueno, en realidad no estamos buscando ninguna IP real del servidor detrás de la CDN. Estamos buscando información para validar, y sólo después de eso, haremos nuestras conclusiones.
Básicamente, estamos buscando IPs que no formen parte de CDNs.
Motores de búsqueda IoT
Los buscadores IoT son nuestros mejores amigos cuando queremos hacer un reconocimiento básico sobre nuestro objetivo y sus activos. Hay algunos motores de búsqueda IoT que podemos consultar para obtener información útil sobre nuestro objetivo.
1- Censys
Censys es una plataforma que ayuda a los profesionales de la seguridad de la información a descubrir, dispositivos accesibles desde Internet. Con la ayuda de Censys, se puede encontrar información valiosa como
- Dirección IP
- Puertos abiertos
- Certificados SSL
- Proveedores de alojamiento
- etc.
La consulta para el tema de nuestro artículo es bastante sencilla, simplemente podemos consultar el propio dominio y ver si hay alguna fuga de IP.
El otro método que se puede utilizar es la búsqueda por medio de Certificates, simplemente selecciona Certificates en la barra azul, y busca tu objetivo.
Ahora abra cada resultado para mostrar los detalles y, en el menú “Explore” de la derecha, elige “IPv4 Hosts“:
Simplemente analiza tu objetivo, para ver si hay alguna fuga de IP, e intenta llegar a tus objetivos usando su IP.
Para mostrarte como Censys puede a veces llevar a la fuga completa de IP del objetivo, ahora te mostraré un objetivo en el que estuve trabajando recientemente, y con la simple Consulta IPv4 me di cuenta de la IP detrás de CDN:
Como puedes ver arriba, hay una IP que exploré y me di cuenta de que es la IP de origen del sitio web.
2- Shodan
Shodan es otro motor de búsqueda de IoT, puede ser útil para los investigadores de seguridad para encontrar información útil sobre el objetivo al que se están acercando.
Hay mucho que buscar en Shodan, te recomiendo que consultes la Guía de Filtros de Shodan, Para el caso de este artículo, podemos simplemente consultar el dominio y buscar IPs.
Usando Shodan puedes consultar otros filtros interesantes:
- Organizaciones
- ASNs
- Hashes de Favicon
- Certificados SSL
- etc.
3- Zoomeye
ZoomEye es otro motor de búsqueda IoT y se puede utilizar para descubrir:
- Servidor web
- IP y Puertos
- Cabeceras y códigos de estado
- Vulnerabilidades
- etc.
Acceso directo al sitio web mediante la dirección IP
Como mencioné anteriormente sobre este método:
Otra opción interesante que tienen los defensores, es restringir a los usuarios que intentan llegar al sitio web usando una dirección IP, de esta manera el sitio web sólo se carga cuando se proporciona el nombre de dominio.
Vamos a hablar de cómo saltarse esta limitación utilizando un método interesante.
Pensemos fuera de la caja. ¿Qué pasa si escaneamos el rango de IP de nuestro proveedor de CDN objetivo, y luego hacemos algunas cosas mágicas de Curl?
Para encontrar el Rango de IP podemos hacer DNS Bruteforcing, por lo tanto, encontrar el Rango de IP, y luego podemos continuar usando el comando de abajo:
Como puedes ver, estamos escaneando el rango de IP de nuestro objetivo. Luego estamos encontrando las vivas usando Httpx. Luego estamos usando curl para proporcionar un encabezado de Host que contenga nuestro dominio de destino, por lo tanto saltándonos todas las limitaciones.
Es hora de ser creativo: Favicon Hashes
Los favicons son a veces bastante útiles para encontrar información interesante sobre ciertas tecnologías que el sitio web utiliza.
Shodan permite buscar el hash del favicon a través de http.favicon.hash
. El hash se refiere al MurmurHash3 del contenido del archivo de favicons en base64.
Script de Python3 para generar el hash (ver aquí):
import mmh3
import requests
import codecs
response = requests.get('https://<website>/<favicon path>')
favicon = codecs.encode(response.content, 'base64')
hash = mmh3.hash(favicon)
print(hash)
Consulta el siguiente Blogpost para profundizar en el tema: Asm0d3us — Favicon hashes
Otra herramienta útil que puedes utilizar es Fav-Up de pielco11. Usando esta herramienta puedes buscar una IP real a partir del icono del favicon y usando Shodan.
Pingback XML-RPC
El XML-RPC permite a los administradores gestionar su sitio web de WordPress de forma remota utilizando peticiones XML.
Un pingback es la respuesta de un ping. Un ping se realiza cuando el sitio A enlaza con el sitio B, entonces el sitio B notifica al sitio A que está al tanto de la mención. Esto es el pingback.
Puedes comprobar fácilmente si está activado llamando a
https://www.objetivo.com/xmlrpc.php
Deberías obtener lo siguiente:
XML-RPC server accepts POST requests only.
También puedes utilizar el Validador XML-RPC.
De acuerdo con la API de WordPress XML-RPC Pingback, las funciones toman 2 parámetros sourceUri
y targetUri
. Así es como se ve en Burp Suite:
Palabras finales
¡Ustedes se merecen Amor! He hecho todo lo posible para escribir un artículo que pueda ayudar a entender el proceso completo de cómo funciona la CDN, el punto de vista de los Blue Teamers, y las opciones de los atacantes para tratar de encontrar la IP de origen del servidor web.
Si tienes alguna pregunta o comentario relacionado, no dudes en enviarme un mensaje por Twitter.