¿Protegido con Cloudfare? Pues claro que sí, chati!

Publicado: abril 18, 2017 en Seguridad, Server
Etiquetas:, ,

Cuando desplegamos una aplicación, es imprescindible aplicar medidas de seguridad. Una de ellas puede ser utilizar una plataforma como Cloudfare. Por un lado, oculta la IP real del servidor. Por otro, frena ataques DDOS, que, probablemente, desde nuestra infraestructura no podríamos parar. Además, añade una protección adicional a los accesos desde redes anónimas, como puede ser Tor.

Utilizar esta plataforma es muy útil pero no es suficiente. Os voy a contar un caso real, para ilustrar el por qué.

Hace un tiempo, me fijé en el sistema de votación de un concurso. Éste era online y permitía realizar múltiples votos, pero no el mismo día. En la web indicaban que tenían un sistema para prevenir votos automatizados, así que me puse manos a la obra para hacer justo eso: automatizados.

Primero realicé un voto real, para ver qué cabeceras y cómo validaban el voto. De entrada, la web estaba detrás de Cloudfare lo que, a priori, no me iba a dejar hacerlos a través de Tor. Por otra parte, usaban dos checks, vía cookies, que van cambiando según la IP. La primera duda es si también tendrían en cuenta la MAC. Tan sólo cambiar la IP pública del router para verificar que, si bien, vía cookies, identificaban en navegador, la MAC no se tenía en cuenta. Cuestión de votar con una sesión de incógnito y listo.

A partir de aquí ya sabía que podía automatizar el proceso. Ahora sólo faltaba ver cómo evitar Cloudfare.

Esto, en realidad, es bastante trivial. Si hacemos una búsqueda en Google, veremos diferentes métodos. Por mi parte, me bastó utilizar un servicio online para ello, http://www.crimeflare.com/cfs.html. Simplemente introducir el dominio y nos devuelve la IP.

Pues ya tenemos la IP real. Ahora, editamos el /etc/hosts y mapeamos la IP con el nombre el dominio, para forzar que el dominio resuelva a esa IP.

Y llega el momento de hacer un pequeño script. De entrada, pensé en python, en mechanize. Sin embargo, la aplicación generaba un formulario dinámicamente a través de JavaScript. Eso me impedía hacer  la última petición. Así que me decidí por selenium. Con este módulo, podemos automatizar tests, controlando un navegador. Además, cada instancia que abre del navegador, la hace con un perfil temporal, con lo que queda resuelto el problema de las cookies. Al ser un navegador real, chromium en mi caso, se acabó el problema del JavaScript.

Ya estaba casi todo hecho, sólo faltaba cambiar la IP. Para ello, utilicé un contenedor torificado. Así no tenía que preocuparme de configurar proxys. En el /etc/torrc/ añadí lo siguiente para usar el control port:

HashedControlPassword 16:14AAF2035D48BB1B60FA4E62D39FAD9A5A0
ControlPort 9051

Para obtener el hash:

tor --hash-password ClaveSuperSecreta

Ahora, el script sólo necesitaba de un bucle infinito que:

  • Cambie la identidad de Tor.
  • Si la identidad se ha utilizado y no han pasado dos horas (es el tiempo real en el que se permite reutilar la IP), se cambia otra vez.
  • Si no, se abre un navegador y se vota.

Os dejo el script, por supuesto, mejorable:


from urllib import request

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import os

ips={}
while 1:

  # Cambiamos la identidad de Tor
  os.system('(echo authenticate \'"ClaveSuperSecreta"\'; echo signal newnym; echo quit) | nc localhost 9051 > /dev/null')
  try:
    # Obtenemos la IP pública
    ip = request.urlopen('http://ident.me').read().decode('utf8')

    if (ip not in ips) or (ips[ip] + 2*60*60 - time.time() <= 0):
      ips[ip] = time.time()

      # Abrimos el navegador
      browser = webdriver.Chrome()
      browser.get('https://DominioProtegidoPorCloudFare/')

      # Buscamos el elemento, en este caso, por ID
      elem = browser.find_element_by_id('ElementoEnElQueQueremosHacerClick')

      # Hacemos click en él
      elem.click()

      browser.quit()
  except:
    pass

Conclusión

Aunque utilices una plataforma como Cloudfare, debes asegurarte que el acceso a tu servidor se hace a través de ella. Si no, te encontrarás desde pequeños troleos como el anterior, hasta ataques reales. Hay que tener en cuenta que, si has puesto la web detrás de Cloudfare, todo lo que llegue al servidor sin pasar por él, es un ataque.

¡Espero que os sea útil y os haya gustado!¡Hasta la próxima!

comentarios
  1. dark02 dice:

    Muito bom o artigo como sempre.
    Muitas gargalhas no início quando falas » así que me puse manos a la obra para hacer justo eso: automatizados.», lembrei de mim se não pode fazer eu faço risossss

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.