Jump to content

Prevención y Mitigación de ataques DDoS Parte 1 (Layer 7 en Cloudflare) por Playhost - Intermedio/Avanzado


Recommended Posts

Posted

Hola, buenas tardes o noches.

Saluditos a iMixxx, y a Break.

Esta es para Break:

QnJlYWssIGRlc2luc3RhbGEgZWwgbG9sIGFtaWdvLiA=

 

(Y al script-kiddie que lleva atacando Playhost y a mis clientes que se que lee mis post)

Vamos al grano, estaré haciendo una serie de publicaciones las cuales espero que les sirva. una vez terminado con el tutorial sobre manejo de Cloudflare y proxys reversos. iremos a la parte de backend (Layer 3 y 4) para protección y hardening del VPS o Dedicado que posean. hoy tocará Cloudflare, luego BlazingFast, y de últimas L4 (VPS) con pf/iptables para UNIX (FreeBSD) y Linux (Debian) con openstack, y snort. entenderemos un poco el funcionamiento de ambos, y para que sirve cada recurso.

 

INTRODUCCIÓN: 

¿Qué es un proxy reverso y para que sirve Cloudflare?

Un proxy reverso es un servidor intermedio entre cliente y servidor el cual nos permite proteger la dirección IP de nuestro servicio web, ¿por qué usar Cloudflare?, es una herramienta multiproposito CDN para poder administrar nuestro sitio, escalable, y personalizable en cuanto a seguridad se respecta. junto con conjuntos de servidores de frontera.

 

Dejo la tabla comparativa visual (que es más extenso que eso, pero tengo memoria de pollo y escribirlo acá en el foro es medio complicado o no me he acostumbrado)

Captura.PNG

¿Cómo iniciar?:

En principio si estás en un hosting web debes apuntar los DNS de Cloudflare desde tu cuenta de Cloudflare reemplazando los que tienes inicialmente (debes tener en cuenta que si tienes activado el DNSSec de tu proveedor de hosting, tendrás que desactivarlo ya que no te permitirá conectarlo), una vez apuntado los DNS, tendrás que esperar un poco a que se actualice. normalmente tarda entre 30 minutos a 24 horas en la dispersación de DNS así que prepara café.

 

4.PNG

Ve a la sección de la izquierda, y activa DNSSec (esto nos sirve para evitar ataques de Spoofing DNS o "envenenamiento de caché", ataques de Man in the Middle (MITM) o BGP Spoofing pot parte de un atacante)

https://developers.cloudflare.com/dns/dnssec/

 

Una vez conectado, tendrás una zona de despliegue el cual lo que nos interesa son la sección la cual será "Analytics" -> "Security" - > "WAF & Events", estas secciones son importantes ya que es lo que emplearás

Dentro de WAF tienes otras secciones las cuales son

"Reglas personalizadas" <- Esta será la que usaremos en este tutorial, el resto lo iremos viendo por partes ya que se hará muy extenso.
 

 en este tutorial aprenderemos a usar los campos y operadores, además de pensar de manera lógica.

 

Tenemos los operadores

1. Si está en (is in)

Explicación: Verifica si el valor se encuentra dentro de un conjunto de valores especificados. Este operador es útil cuando quieres aplicar una regla a varios elementos de una vez, como países o tipos de navegador.

  • Ejemplo (Países):
    Si quieres permitir el acceso solo desde ciertos países, como USA y España:

    • Condición: País está en USA, España
    • Esto permitirá el acceso solo a usuarios que se encuentren en USA o España, y bloqueará a los de otros países.
  • Ejemplo (User-Agent):
    Si quieres permitir solo ciertos navegadores, como Chrome y Firefox:

    • Condición: User-Agent está en Chrome, Firefox
    • Esto permite solo solicitudes de Google Chrome o Mozilla Firefox, bloqueando a otros navegadores.
  • Ejemplo (IP):
    Si quieres permitir el acceso solo desde un rango de IPs:

    • Condición: IP está en 192.168.1.0/24, 203.0.113.0/24

 Si no está en (is not in)

Explicación: Verifica si el valor no está dentro de un conjunto de valores. Este operador es útil cuando deseas bloquear ciertos valores o excepcionar todo lo que no pertenezca a un grupo determinado.

  • Ejemplo (Países):
    Si quieres bloquear el acceso desde ciertos países, como Rusia y China:

    • Condición: País no está en Rusia, China
    • Esto bloquea el acceso a usuarios de Rusia y China, permitiendo acceso a otros países.
  • Ejemplo (User-Agent):
    Si deseas bloquear ciertos bots maliciosos o versiones específicas de navegadores, como Internet Explorer 6:

    • Condición: User-Agent no está en BadBot/1.0, Internet Explorer/6.0
    • Esto bloquea el acceso de BadBot y de usuarios que usen Internet Explorer 6, permitiendo a otros agentes de usuario.
  • Ejemplo (IP):
    Si quieres bloquear un rango específico de direcciones IP:

    • Condición: IP no está en 203.0.113.0/24

 Si es igual a (equals)

Explicación: Verifica si el valor es exactamente igual al valor que has definido. Este operador se usa cuando necesitas que la regla se aplique solo a un valor específico y único.

  • Ejemplo (Países):
    Si quieres permitir el acceso solo desde Brasil:

    • Condición: País es igual a Brasil
    • Esto permitirá el acceso solo a usuarios que se encuentren en Brasil.
  • Ejemplo (User-Agent):
    Si deseas bloquear a los usuarios que usan Internet Explorer 6 específicamente:

    • Condición: User-Agent es igual a Internet Explorer/6.0
    • Esto bloquearía solo a los usuarios que usan Internet Explorer 6, permitiendo a otros navegadores.
  • Ejemplo (IP):
    Si quieres permitir el acceso solo desde una IP específica:

    • Condición: IP es igual a 192.168.1.100
    • Esto permite el acceso solo a la IP 192.168.1.100.

4. Si no es igual a (not equals)

Explicación: Verifica si el valor no es igual al valor que has especificado. Este operador es útil para excluir un valor específico de las reglas.

  • Ejemplo (Países):
    Si quieres bloquear el acceso desde Argentina pero permitirlo desde otros países:

    • Condición: País no es igual a Argentina
    • Esto bloquearía a los usuarios que están en Argentina, pero permitiría el acceso desde cualquier otro país.
  • Ejemplo (User-Agent):
    Si deseas bloquear un navegador específico, como Safari 13.0:

    • Condición: User-Agent no es igual a Safari/13.0
    • Esto bloquearía a los usuarios que usan Safari 13.0, pero permitiría otros navegadores como Chrome o Firefox.
  • Ejemplo (IP):
    Si quieres bloquear una IP específica:

    • Condición: IP no es igual a 192.168.1.100
    • Esto bloquearía el acceso de la IP 192.168.1.100, pero permitiría a cualquier otra IP.

 

  • "Si está en" (is in😞 Verifica si un valor está en una lista de valores. Ej. Permitir acceso desde varios países (USA, España).
  • "Si no está en" (is not in😞 Verifica si un valor no está en una lista. Ej. Bloquear países específicos (Rusia, China).
  • "Si es igual a" (equals😞 Verifica si un valor es exactamente igual al que defines. Ej. Permitir solo una IP o bloquear un navegador específico.
  • "Si no es igual a" (not equals😞 Verifica si un valor no es igual al que defines. Ej. Bloquear una IP específica o un navegador.

 

Y tenemos la sección de "Campos" dónde tenemos:

 

1. Campos de Dirección IP

Estos campos te permiten aplicar reglas basadas en las direcciones IP de los visitantes.

  • IP de origen (Client IP): La dirección IP del visitante.
  • IP de destino (Destination IP): La dirección IP del servidor que recibe la solicitud.
  • Rango de IPs (IP Range): Permite aplicar reglas para rangos específicos de direcciones IP.
  • Dirección IP de la red de origen (Source IP Network): La red o rango de IPs de la que proviene la solicitud.

2. Campos de User-Agent (Agente de Usuario)

El User-Agent es la cadena de texto que los navegadores o bots envían para identificarse.

  • User-Agent: La cadena completa del navegador o bot que realiza la solicitud (por ejemplo, Mozilla/5.0).
  • User-Agent que contiene (contains): Permite aplicar reglas basadas en una parte de la cadena del User-Agent (ejemplo, Chrome).
  • User-Agent igual a (equals): Verifica si el User-Agent es exactamente igual a un valor especificado (ejemplo, Googlebot).

3. Campos de País (Geolocalización)

Estos campos te permiten filtrar el tráfico según el país de origen.

  • País (Country): El país desde el cual se realiza la solicitud.
  • Si está en (is in): Verifica si el tráfico proviene de un conjunto de países (ejemplo, USA, México).
  • Si no está en (is not in): Verifica si el tráfico no proviene de los países especificados.

4. Campos de Cabecera HTTP

Las cabeceras HTTP contienen información adicional sobre la solicitud y la respuesta entre el cliente y el servidor.

  • Host: El nombre de dominio del servidor al que se dirige la solicitud (ejemplo, www.ejemplo.com).
  • Referer: La URL de la página que está enviando la solicitud al servidor (ejemplo, https://www.google.com).
  • User-Agent: El encabezado que identifica al cliente que realiza la solicitud.
  • Accept-Language: El idioma preferido por el cliente (ejemplo, en-US, es-ES).
  • Cookie: Puedes filtrar el tráfico según el valor de las cookies.

5. Campos de URI y Métodos HTTP

Estos campos te permiten crear reglas basadas en las URLs, rutas y métodos de las solicitudes.

  • URI de la solicitud (URI Path): La ruta de la URL solicitada (ejemplo, metin2zone.net/BreakInCocaine).
  • Método HTTP (HTTP Method): El tipo de solicitud HTTP (GET, POST, PUT, DELETE).
  • Consulta de URI (URI Query): La cadena de consulta en la URL (ejemplo, ?id=1234).
  • Cuerpo de la solicitud (Request Body): Puedes verificar el cuerpo de una solicitud POST o PUT.

Captura3.PNG

Esto es un poco de lo que veremos de momento en campos, ya que tiene muchisimas otras secciones que por obvias razones lo haré por partes ya que es muy extenso, tu y yo sabemos que no te leerás esto completo 🙂 

 

¿Qué lógica podemos aplicar?

Iniciando con sentido común, si nuestra web solo quieren personas hispanohablantes ya que no requieren a un Chino o un Turco dentro de su web, o alguien usando VPN's entonces podemos hacer el filtrado.

a un chino NO LE INTERESA ACCEDER A TU WEB, entonces vamos a bloquear los paises, seleccionamos lo siguiente entendiendo que debes saber un poco sobre subnetting y como funciona un CIDR:

 

Acá tienes una lista de CIDR's (igual hay mil mas, solo buscalas) 

https://www.ipdeny.com/ipblocks/

 

Supongamos que deseas permitir el acceso solo a usuarios de Estados Unidos y Canadá. Puedes crear una regla que permita el tráfico solo desde esos dos países, y bloquear el resto. La configuración sería algo como esto:

Condición: País está en Estados Unidos, Canadá

Esto significa que solo los usuarios que se encuentren en esos países podrán acceder a tu sitio, y todo el tráfico de otros países será bloqueado.

Ejemplo para bloquear países:

Si prefieres bloquear el acceso a usuarios de ciertos países, como Rusia y China, puedes configurar la regla de la siguiente manera:

  • Condición: País no está en Rusia, China
  • Esto bloquea todo el tráfico proveniente de Rusia y China, mientras que permite el acceso desde el resto de los países.

Estos ejemplos muestran cómo se pueden usar las reglas de geolocalización para permitir o bloquear el acceso a tu sitio web según el país de origen del tráfico.

Si deseas permitir el acceso solo desde ciertas direcciones IP, por ejemplo, un rango específico de IPs de Estados Unidos, podrías configurar una regla como la siguiente:

  • Condición: IP de origen está en 192.168.1.0/24, 203.0.113.0/24
  • Esto permite el acceso solo a las direcciones IP dentro de esos rangos, bloqueando el resto.

Ejemplo para bloquear países con IPs:

Si quieres bloquear el acceso de ciertos países basándote en direcciones IP específicas asociadas a esos países (por ejemplo, un bloque de IPs de Rusia), la configuración sería:

  • Condición: IP de origen no está en 185.0.0.0/8 (IP rango de Rusia)
  • Esto bloquea todas las direcciones IP dentro del rango de IPs asignado a Rusia.

Si solo quieres permitir solicitudes HTTP de tipo GET, puedes hacer lo siguiente:

  • Condición: Método HTTP es igual a GET
  • Esto permite solo solicitudes GET, bloqueando los demás métodos como POST, PUT, etc.

Ejemplo para bloquear ciertos métodos HTTP:

Si deseas bloquear las solicitudes POST (usualmente usadas para envíos de formularios), la regla sería:

  • Condición: Método HTTP es igual a POST
  • Esto bloquea todas las solicitudes POST, permitiendo solo otros tipos de solicitudes como GET.

Si deseas permitir solo a navegadores específicos, por ejemplo, Google Chrome y Mozilla Firefox, la regla sería:

  • Condición: User-Agent está en Chrome, Firefox
  • Esto permite el acceso solo a los usuarios que usan esos navegadores y bloquea otros navegadores o bots.

Ejemplo para bloquear ciertos User-Agents:

Si quieres bloquear el acceso a un bot específico, como BadBot/1.0, la regla sería:

  • Condición: User-Agent es igual a BadBot/1.0
  • Esto bloquea todas las solicitudes provenientes de BadBot/1.0, permitiendo a otros usuarios o bots.

 

¿Qué suelen hacer los atacantes, y por qué funcionan los ataques DDoS?

 

Normalmente los stressers y las botnets están manejadas por gente inescrupulosa o APT's que se dedican a realizar este tipo de ataques y lo que pueden hacer es lo siguiente:

 

Intentar atacar por direcciones IP, User Agent (Identificador del Navegador), Version HTTP (HTTP 1.0, HTTP 2.0, HTTP 3), Encabezado de Request (GET, POST), Pathing (Rutas de la web que por lo general es al directorio raíz del dominio (/), etc, etc.

 

Entonces agregando lógica, vamos a bloquear el tráfico por continente, o por país. en este caso, he banneado Paises que no correspondan a zonas hispanohablantes, y que bannease todo tráfico que no proveniese de proveedores ISP reales, y los que realmente quiero que accedan o estoy en duda si son benignas o no. entonces hago una lista de paises permitidos, y otra con JS challenge para validar y si es maliciosa la request vaya directamente al endpoint de Cloudflare haciendo que tengan que validar dentro del captcha.

Captura1.PNG

 

 

Implementamos, y pueden ver si funcionó conectandose a algun VPN que no esté dentro del rango de paises o IP's habilitadas.

 

Iremos por 4 partes del tutorial en cloudflare.

 

Un besito.

 

Daniel Aristizabal "Lyk0s"

https://facebook.com/Lyk0s.FoxShell

[Cybersecurity, Data Analyst & Sysadmin Senior]

CEO de Playhost & Arkadian Entertainment

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

This site uses cookies to enhance your browsing experience and provide relevant content. By continuing to browse, you agree to our We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. and Terms of Use. For more information on how we protect your data, please check our Privacy Policy.