Hacking ético: enumeración de alcance y detección de IPs

Decía Sun Zu en El arte de la Guerra: “conócete a ti mismo y conoce a tu enemigo”. No hay mejor modo de defender una empresa de posibles ciberataques que conocer su nivel real de seguridad simulando un ataque a sus sistemas de información, para detectar las partes más débiles de sus defensas, los puntos de posibles accesos malintencionados y tomar las medidas adecuadas. Son los llamados test de intrusión. En esta ocasión, Javi Echeverría nos introduce con un caso práctico a uno de los escenarios más habituales, en el que el intruso no tiene conocimiento previo del sistema de información a revisar. Son los test de tipo Caja Negra (Black-Box).

El mundo del hacking ético, tests de intrusión, etc., es enorme e inabarcable con unos pocos posts en un blog. Por ello, pretendemos únicamente proporcionar unas pequeñas pinceladas a modo de resumen para el lector no familiarizado con la seguridad informática, que sirva de punto de partida para aquellos que quieran algo de información inicial.

Antes de nada sí queremos destacar que yo utilizo una máquina virtual de Kali, que incorpora un montón de herramientas útiles en seguridad informática. Si descubres algún comando que no reconoces, es por esto; antes que ponerte a compilar comandos, te recomiendo encarecidamente que te bajes una imagen de Kali de tu hypervisor favorito y la uses.

En primer lugar, debemos destacar que con un test de intrusión no buscamos hackear a nadie (en primer lugar, porque es ilegal), sino tratar de detectar potenciales vulnerabilidades que tenemos en nuestra empresa o en la de nuestro cliente, y el impacto que éstas pueden tener.

Vamos también a acotar mucho el alcance de este tipo de análisis, limitándonos a simular qué puede hacer un atacante desde internet a nuestra empresa.

¿Qué hará un atacante que quiera hackear nuestra empresa? En primer lugar, debería hacerse un inventario de máquinas que tenemos; tratar de obtener IPs, dominios, emails de contacto para intentar ataques sociales (en muchos casos más efectivos que a máquinas), los servicios que tenemos expuestos, puertos abiertos, versiones, tecnologías… tratando de ser lo más exhaustivo posible para poder localizar la vulnerabilidad que le permita atacarnos.

Esto es algo relativamente sencillo y, además, se puede hacer en muchos casos sin que el atacante sea detectable, dado que puede hacerse mediante consultas a servicios ajenos a nuestra compañía. Veamos algunos ejemplos.

Supongamos que el atacante quiere analizar los servicios de una web “aleatoria”, por ejemplo, Ford. Si partimos por ejemplo de ford.com, nuestro atacante en primer lugar obtendrá fácilmente una primera IP con un ping: 136.1.107.78 (que metemos ya nuestro inventario).

ping ford.com
PING ford.com (136.1.107.78)

Posteriormente tratará probablemente de ver si un whois le da algo de información. Con un whois podríamos dar con datos del registrante (y meterlo en nuestro inventario para hacer un posible ataque social), o, por ejemplo, datos de servidores DNS que podrían ser de la empresa, por lo que formarían parte del inventario. Por ejemplo, en un whois a ford.com aparecen varios servidores DNS de la empresa:

DNS005.FORD.COM – 136.8.33.21
DNS006.FORD.COM – 136.8.2.91
EXTDNS001.FORD.COM – 136.2.17.19
EXTDNS002.FORD.COM – 136.2.33.19
EXTDNS007.FORD.COM – no parece resolver
EXTDNS008.FORD.COM – no parece resolver
EXTDNS009.FORD.COM – 103.204.74.55
EXTDNS010.FORD.COM – 114.141.170.250

Haciendo pings, hemos ido obteniendo IPs que meter en nuestro inventario. Además, por ejemplo, Ford tiene su web en España, ford.es. Si usamos la herramienta de nic.es podemos también obtener información del dominio, y ver si podemos localizar más servidores de DNS. En este no es así, porque los servidores DNS (extdns002.ford.com, extdns001.ford.com, dns006.ford.com, dns005.ford.com) ya los habíamos obtenido de la lista anterior.

Si nos fijamos, hay IPs bastante parecidas, es decir, parece que Ford ha reservado rangos de IPs, que podrían añadirse a nuestro inventario.

También hay DNSs similares, por lo que si existe un dns005.ford.com, puede intentarse ver si existen otros servidores cambiando los números, de forma iterativa.

Teniendo estas primeras IPs, puede resultar interesante hacer búsquedas en la web de ripe (ripe.net), que nos podría proporcionar información sobre rangos de IPs reservados por la empresa, añadiendo las mismas a nuestro inventario, o netnames. Por ejemplo, buscando por “FORD”:

https://apps.db.ripe.net/db-web-ui/#/query?searchtext=FORD

Podemos obtener nuevos rangos de IPs que añadir a nuestro inventario, por ejemplo:

Rangos de IPs que añadir a nuestro inventario

Aparecen otros rangos de IPs reservados para la empresa, como podéis comprobar haciendo la búsqueda. Todo esto lo añadiríamos a nuestra “buchaca” de IPs que luego analizaremos escaneando puertos, etc.

Tenemos más herramientas para descubrir dominios y subdominios de una marca, que al final apunten a IPs distintas que podamos añadir a nuestra lista. Por ejemplo, una herramienta muy útil incluida en Kali es dnsrecon. Podéis encontrar muchos posts específicos de cómo hacer una enumeración usando dnsrecon. En nuestro caso:

dnsrecon -t tld -d ford

Nos da una enorme lista de dominios de Ford, muchos de los cuales son de IPs bastante reconocibles, para las cuales podremos comparar si las teníamos ya identificadas o debemos añadirlas. También es posible que haya dominios detectados que realmente no sean de la compañía (por ejemplo, ford.xxx) y debamos descartarlos.

IP hacking ético

Los propios servidores DNS también son una fuente importante de información, dado que nos pueden aportar nuevas IPs, por ejemplo, de servidores de correo que pueden ser vulnerables. Es fácil encontrar posts que os expliquen cómo obtener información de los distintos registros asociados.

Dnsrecon también nos permite detectar otros servicios utilizando los rangos detectados en RIPE, ejecutando: dnsrecon -r -t rvl

Por ejemplo, usando una de las IPs del principio, 136.8.2.91, incluyo un rango más amplio:

dnsrecon -r 136.8.2.0-136.8.2.255 -t rvl

Y localizo nuevos servicios:

Hacking ético: detección de IPs

Que podemos añadir a nuestra lista de IPs. Así, podemos ir ejecutando dnsrecon con distintos segmentos de IPs que vayamos localizando en el análisis para aumentar nuestra lista de IPs de la empresa.

Un siguiente paso puede ser tratar de detectar subdominios. Existen varias formas de detectar subdominios, y también podéis encontrar mucha documentación sobre ello.

Una muy útil es Sublist3r, un script Python (https://github.com/aboul3la/Sublist3r) que realiza queries a distintos sitios públicos como Google, DNSDumpster, VirusTotal, Netcraft… para localizar subdominios, ahorrándonos el trabajo manual de ir a estas distintas webs para localizar subdominios.

Por ejemplo, podríamos lanzar:

python sublist3r.py -d ford.com
python sublist3r.py -d ford.es

Para localizar subdominios registrados en esta herramienta de esos dominios. Lo recomendable en un test de intrusión completo sería ir haciendo eso con todos y cada uno de los dominios localizados al principio, e ir añadiendo las distintas IPs a nuestra lista de forma iterativa.

La lista de subdominios que encontramos es muy extensa; por ejemplo, de ford.es obtenemos 35 subdominios que se incorporan a nuestra lista, además dándonos opciones de seguir encontrando nuevos rangos de IPs y otros servidores asociados con dnsrecon, etc.:

Rangos de IPs y otros servidores asociados con dnsrecon

Esta misma búsqueda sobre ford.com nos da ¡637 nuevos subdominios! Entre los cuales es fácil detectar endpoints de conexiones VPN, servidores web ajenos a https://www.ford.com/, servidores de email, servicios de autenticación…

Otra forma adicional de encontrar subdominios es utilizar fuerza bruta, por ejemplo con la herramienta Fierce de Kali (utiliza un diccionario de palabras por defecto pero podemos añadirle diccionarios custom):

fierce -dns ford.es
fierce -dns ford.com

Si bien el primero solo localiza un servidor www1.ford.es, sobre ford.com aparecen muchos subdominios de los cuales sacar IPs nuevas a nuestra lista, además con IPs reconocibles dentro de los rangos que hemos ido viendo.

IPs reconocibles dentro de los rangos

Existen otras herramientas como Aquatone, Spiderfoot… con las que podemos ir iterando para localizar las distintas IPs de la empresa.

Os recomiendo que hagáis este proceso con vuestra propia empresa, y os sorprenderá (al menos a mí lo hizo) encontrar cosas que ni siquiera sabías o recordabas que estaban ahí.

Pues bien, pensad que una vez que tenemos las IPs, con herramientas más o menos automáticas es fácil encontrar primero los puertos que tenemos a la escucha en esas IPs y, por ejemplo, las vulnerabilidades asociadas a los servicios expuestos.

Nunca os fiéis de “nadie va a encontrar este subdominio” o “quién va a saber que hemos dejado este puerto abierto”. Una máquina puede encontrar todo eso en segundos, y hay ejércitos de bots dedicados a ello.

¡Seguiremos en otros posts!