martes, 23 de agosto de 2016

Vete al Infierno !!! DNS SINKHOLE 127.0.0.1 para Windows

Estimados amigos de Inseguros !!!

Como sabéis ando un poco enredado con el mundo del Threat Intelligence y su uso defensivo en las organizaciones.


Básicamente recopilo información de sensores propios y externos, y uso esta información en mis sistemas.

Para el caso de direcciones IP que están dando "guerra" en Internet, el proceso de uso es muy sencillo, incorporas esta inteligencia en tus sistemas perimetrales, firewalls, y cortas el tráfico.

También podemos hacer uso de la inteligencia cargando reglas en nuestros IDS/IPS sean de perímetro o internos.

Podemos usar la inteligencia de los hashes para sistemas de FIM (File Integrity Monitor) o mejor dicho HIDS (Host Ids).

Cualquier IOC (Indicators of Compromise) que nos caiga en las manos podremos usarlo de manera proactiva en nuestros sistemas.


En el episodio de hoy vamos a ver que podemos hacer con recursos IOC del tipo Dominio.

Vamos a usar un maravilloso Script del SANS en concreto editado por el señor Jason Fossen para manejar un servidor DNS Windows.

Lo primero que vamos a hacer es repasar una configuración básica de seguridad de un DNS en una infraestructura Active Directory típica.

Lo normal es tener uno o varios servidores DNS integrados en Active Directory para nuestra red local. Los nombres de los equipos, servidores, webs,etc. Como es normal, nuestro servidor DNS no conoce TODA la infraestructura de Internet, por ejemplo, www.elcorteingles.com por lo que por defecto el servidor se configura para realizar búsquedas autoritativas contra otro servidor DNS. Si no hemos cambiado nada, iremos a los reenviadores por defecto, los servidores ROOT de Internet. Si hemos prestado un poco de cuidado con esto, tendremos puestos nuestros favoritos, los del ISP, Google, o quien sabe !!!

La práctica del SinkHole (traducido es SUMIDERO) es simplemente cargar un fichero en una zona del DNS con registros DNS maliciosos, y hacer que apunten a una dirección IP inválida, por ejemplo 0.0.0.0 o 127.0.0.1 o un servidor con una advertencia.



Mis seguidores de Twitter de vez en cuando leen que publico una lista de dominios maliciosos en formato SNORT para implementar en los IDS.

Voy a crear una lista de dominios maliciosos que están dando la guerra en Internet en las últimas 24 horas, recopilados de mi sistema de Threat Intelligence.

Con este fichero, vamos a cargar los registros en un servidor DNS y de esta manera protegeremos a nuestros usuarios del acceso o mejor dicho la comunicación contra esos dominios.

Para tener una política segura de DNS deberíamos filtrar todo el tráfico DNS saliente de todos los equipos salvo los servidores DNS autorizados. De esta manera evitamos que una pieza de malware implemente su propio servidor DNS o una simple consulta hardcoreada contra un servidor dns concreto externo.

También sería interesante crear el servidor DNS que hará de SinkHole en una DMZ, sin transferencia de zona ni nada, y configurar los servidores DNS internos de Active Directory para que reenvíen al servidor SinkHole. Este resolvería "negativamente" las peticiones maliciosas, y reenviaría a su vez las peticiones DNS normales de navegación a los servidores públicos empleados. Es decir, estaríamos metiendo un salto más en nuestras consultas DNS.
Si no quieres realizar esta tarea, no pasa nada, pero recuerda que tus clientes suelen apuntar a dos servidores DNS internos, y que esta zona SinkHole no se va a replicar entre servidores, por lo que en escenarios en los que el DNS primario no está operativo y los clientes acceden al servidor secundario el sistema no ejecutaría el SinkHole, a no ser que realices el proceso de carga en los dos... Todo esto sin ideas o pistas que lanzo para que comprendas en profundidad como funciona el asunto.

Ahora vamos a las teclas. Hemos descargado el script desde la web del Sans. Ejecutamos una sentencia de prueba:

.\Sinkhole-DNS.ps1 -Domain "cacadevaca.com" -SinkHoleIP "127.0.0.1"

Ahora vamos a realizar lo mismo, pero ejecutamos un fichero concreto:


El resultado es el siguiente:


Como puedes acceder si vas a las propiedades del registro, el TTL del mismo es de 1 hora.

El proceso de creación y actualización del SinkHole debe ser constante, ya que la longevidad o duración de los dominios comprometidos suele ser baja, y mediante el TTL bajo obligamos a los clientes a no usar la posible Cache local del recurso.

Imagina un servidor importante público comprometido, y que durante 3 horas se ha dedicado a distribuir malware. Imagina que se ha detectado y se ha incorporado a una blacklist. Si el incidente ha durado 3 horas, no tiene sentido bloquear el acceso al recurso durante 24 horas, ya que estaríamos interfiriendo en el servicio.

Si por cualquier cosa quieres volver atrás a como tenías tu servidor DNS tranquilo, puedes ejecutar:
.\Sinkhole-DNS.ps1 -DeleteSinkHoleDomains y como todos los registros están en el mismo fichero de zona, se borrarán sin problemas ni interferencias con tus dominios ya configurados.

Podemos realizar un script que vaya a mi repositorio de dominios maliciosos, descargue el fichero, ejecute la actualización del SinkHole y actualice el servidor:

Invoke-WebRequest -Uri https://github.com/kinomakino/snort_rules/blob/master/agosto.csv -OutFile maleantes.txt  

.\Sinkhole-DNS.ps1 -DeleteSinkHoleDomains

.\Sinkhole-DNS.ps1 -InputFile .\maleantes.txt -IncludeWildCard -SinkHoleIP "10.1.1.1"

Si queremos darle más juego al SinkHole, podemos hacer que los dominios apunten a una ip válida en la red, un servidor linuxero que tengamos por ahí. Podemos presentar una web informando al usuario que se ha detectado un tráfico anómalo y se ha procedido a bloquear su conexión a red. Podemos enganchar un Fail2ban que acceda a log de ese server, y ejecutar un BAN en remoto en los sistemas firewalls internos para esa IP y un correo al sysadmin.


Como has podido comprobar, la potencia de usar un SinkHole es inmensa, y es muy sencillo de implementar en entorno Windows y más fácil aún en entornos BIND.

Solo tienes que decidir tu lista de fuentes de reputación favorita y empezar con el proceso.

Si tienes alguna duda, ya sabes !!!

Espero que te haya gustado, gracias por leerme !!!

PD: El fichero agosto.csv publicado está actualizado a fecha hoy.