jueves, agosto 24, 2017

Enredando con el cliente de Cisco Umbrella en OS X

Hace unos días me instalaron en la máquina Cisco Umbrella. Esta es una plataforma de seguridad en la nube que básicamente hace dos cosaS:

  • Modifica la configuración DNS de la máquina para que cualquier petición sea redirigida hacia los servidores de Cisco Umbrella y analizada si se permite o no.
  • Un tunel IPSEC - al menos en el caso del Mac - que manda por el mismo todo el tráfico hacia direcciones que considera problemáticas.

Puesto que me ha picado un poco la curiosidad, me he puesto a mirar un poco como está implementado. Empecemos por lo fácil. Si se tiene permisos de administrador, parar el Cisco Umbrella es tan fácil como esto:

launchctl unload "/Library/LaunchDaemons/com.opendns.osx.RoamingClientConfigUpdater.plist"

Aunque claro, tb me podéis decir - con razón que lo podéis desinstlar -, pero vamos, se trata de poder pararlo en un momento dado.

El mecanismo que utiliza es bastante pedreste para comprobar los nombres: Simplemente modifica el resolv.conf para que apunte a localhost donde estará escuchando el proceso dnscrypt-proxy que se encargará de rutar las peticiones DNS a la nube - Cisco recopilando información :) - y devolver la IP correcta o dirigirnos a una página donde se nos dice que no estamos autorizados a ir a esa dirección. Un ejemplo con lo más fácil de probar y que no está autorizado: Una de como Porn Hub:

$nslookup 
> www.pornhub.com
Server:     127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
Name:   www.pornhub.com
Address: 146.112.61.106
> 146.112.61.106
Server:     127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
106.61.112.146.in-addr.arpa name = hit-adult.opendns.com.

Authoritative answers can be found from:

Podéis ver de la salida anterior del nslookup, la respuesta que nos devuelve cuando se busca la dirección IP de un sitio de vídeos lúdico-festivoses una IP que apunta a una página de opendns (Cisco Umbrella) diciéndonos que no está permitido.

Pero, ¿Qué ocurre si cambiamos el servidor de DNS al que hacemos la consulta?. Por ejemplo, vamos a usar uno de los servidores de Google, 8.8.8.8

$ nslookup 
> server 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
> www.pornhub.com
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
www.pornhub.com canonical name = pornhub.com.
Name:   pornhub.com
Address: 31.192.120.36

Pues nos está devolviendo el valor correcto de la IP del sitio prohibido :)

Este tipo de artimiñas pueden hacerse por el sencillo motivo que Umbrella no intercepta las librerías encargadas de resolver nombres en el sistema, al menos en Mac OS X. Lo único que hace es cambiar los servidores DNS que utiliza el resolver por defecto, que como veis en este ejemplo es fácil de saltar. Hay infinidad de maneras de saltarse esta restricción como un usuario normal en una máquina Unix, ya que la mayaría de personas tienes accesso a un ssh y a un proxy socks. Por ejemplo, un servidor ssh al que se tenga acceso y usar la opción -D para SOCKS.

Cambiando de tema, lo que me ha llevado a mirar un poco como funciona Cisco Umbrella fue llevarme la sorpresa que de buenas a primeras, tenía una tabla de rutas con 54000 entradas que se enrutaban a través de un tunel IPSec que crea el propio Cisco Umbrella. Por ejemplo, en mi máquina ese tunel es utun0 y al ejecutar un netstat -rn me di cuenta que existían miles de entradas que iban a través de dicho túnel. Esto forma parte del mecanismo de protección de IP y es una manera bastante sencilla de saber cual es la base de datos de IP sospechosas que tiene Cisco: Todas las que están en la tabla de rutas redirigidas al túnel. Con un simple netstat -rn|grep utun0|awk '{print $1}' y voilà.

Se puede obtener los nombres de aquellas IP que tengan resolución inversa con un script similar a este, aunque estaríamos bombardeando el server de Google, así que casi mejor usar uno propio :)

netstat -rn |grep utun0|awk '{print $1;}'| while read ip;do nslookup "$ip" 8.8.4.4;sleep 1;done|grep "name = "

No hay comentarios: