"Después del juego es antes del juego"
Sepp Herberger

domingo, 13 de julio de 2014

Cazando al servidor DHCP intruso

De repente a veces nos encontramos con que los equipos de nuestra red empiezan a recibir direcciones IP que no son de nuestro rango. La causa es que tenemos algún dispositivo en la red que está sirviendo IPs en concurrencia con nuestro servicio DHCP "oficial". Los rangos típicos son 192.168.X.X o 10.0.X.X. Vamos a ver como localizarlo y neutralizarlo.

Lo primero que debemos hacer es parar el servicio DHCP de nuestra red, para estar seguros de que hay otro servicio DHCP en marcha en otro punto del mismo. Para ello, en el servidor que contiene el servicio haremos:

 /etc/init.d/dhcp3-server stop

Ahora nos vamos a un equipo cualquiera con Linux que vamos a usar como cebo para capturar al intruso. Antes de nada instalamos los siguientes paquetes en él:

 nmap
 samba
 samba-common
 samba-common-bin
 rdesktop

y desde consola, forzamos una nueva petición  de IP manualmente:

 dhclient -v eth0

El parámetro -v es para que nos de toda la información que pueda sobre el proceso. Entre otras cosas, nos mostrará algo parecido a ésto:

 Internet Systems Consortium DHCP Client 4.1.1-P1
 Copyright 2004-2010 Internet Systems Consortium.
 All rights reserved.
 For info, please visit https://www.isc.org/software/dhcp/
 Listening on LPF/eth0/00:30:05:44:52:08
 Sending on  LPF/eth0/00:30:05:44:52:08
 Sending on  Socket/fallback
 DHCPREQUEST on eth0 to 255.255.255.255 port 67
 DHCPACK from 192.168.0.1
 bound to 192.168.0.114 -- renewal in 235288 seconds.

Con esto nos encontramos que teniendo nuestro servidor DHCP parado alguien nos ha dado la dirección 192.168.0.114, ¿quién ha sido?, pues un servicio DHCP que está en la dirección 192.168.0.1. Bien, ya sabemos la IP del intruso. Antes de proseguir, arrancamos de nuevo nuestro servicio DHCP para  que siga funcionando en nuestra red y dando IP correctas en la medida de lo posible.

Vamos a estudiar que hay en la IP del intruso (en nuestro ejemplo 192.168.0.1):

1) Primero haremos un ping a dicho servicio a ver si responde:

 ping 192.168.0.1

Si responde podemos hacer un:

 arp -a

para sacar su MAC, ya que nos puede ser muy útil mas adelante.

Si no responde no pasa nada, puede ser que tenga desactivado el eco del ping.

2) Husmear en la IP. En segundo lugar vamos a mirar qué hay tras esa IP, usando el comando nmap. Este comando también nos muestra la MAC si es capaz de averiguarla. Puede haber varios escenarios:

  • Que sea un servidor secundario que sirva IP dentro de la red de un aula/red privada, que esté mal cableado y esté dando al exterior direcciones IP que solo debería dar hacia la red interna.
  • Que sea un equipo con Linux (por ejemplo un workstation) que tenga activado el servicio DHCP vete tu a saber por que razón.
  • Que sea un equipo con Windows que tenga activado su servicio DHCP desde la conexión compartida a Internet.
  • Que un punto de acceso inalámbrico, router o cualquier otro dispositivo de red tenga activado su servicio DHCP.

Veamos varios ejemplos de salidas de nmap, usando el parámetro -O para que intente averiguar el sistema operativo que corre el intruso:

 # nmap -O 192.168.0.1

 Starting Nmap 5.00 ( http://nmap.org ) at 2012-05-07 09:33 CEST
 Interesting ports on 192.168.0.1:
 Not shown: 996 closed ports
 PORT   STATE SERVICE
 22/tcp  open ssh
 111/tcp open rpcbind
 113/tcp open auth
 2000/tcp open callbook
 MAC Address: 00:22:15:63:D8:44 (Asustek Computer)
 Device type: general purpose
 Running: Linux 2.6.X
 OS details: Linux 2.6.13 - 2.6.27
 Network Distance: 1 hop

Según podemos ver en el recuadro anterior el equipo tiene un kernel Linux y su puerto 22 (ssh) está abierto. Seguramente sea un workstation Linux o un servidor secundario para un aula/red privada.

 root@A52-PRO:~# nmap -O 192.168.0.1
 Starting Nmap 5.00 ( http://nmap.org ) at 2012-05-07 09:37 CEST
 Interesting ports on 192.168.0.1:
 Not shown: 997 filtered ports
 PORT   STATE SERVICE
 139/tcp open netbios-ssn
 445/tcp open microsoft-ds
 3389/tcp open ms-term-serv
 MAC Address: 00:16:E6:88:0D:21 (Giga-byte Technology Co.)
 Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
 Device type: general purpose
 Running: Microsoft Windows XP
 OS details: Microsoft Windows XP SP2 or SP3
 Network Distance: 1 hop
 OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
 Nmap done: 1 IP address (1 host up) scanned in 14.19 seconds

En el caso del recuadro anterior es un Windows XP con SP2 o SP3. El hecho de que tenga abiertos los puertos 139 y 445 (los de compartición de carpetas de Windows) viene a  reforzar esta hipótesis.

 # nmap -O 192.168.0.1
 Starting Nmap 5.00 ( http://nmap.org ) at 2012-05-07 09:49 CEST
 Interesting ports on 192.168.0.1
 Not shown: 999 closed ports
 PORT  STATE SERVICE
 80/tcp open http
 MAC Address: 84:C9:B2:66:FA:C0 (Unknown)
 Device type: general purpose
 Running: Linux 2.6.X
 OS details: Linux 2.6.9 - 2.6.28
 Network Distance: 1 hop
 OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
 Nmap done: 1 IP address (1 host up) scanned in 3.66 seconds

En este caso el sistema operativo parece un Linux (tiene kernel Linux), pero el hecho de que tenga solo abierto el puerto 80 y no el 22 nos hace pensar que es un punto de acceso/router. La mayoría de los dispositivos de este tipo funcionan con Linux y tienen abierto el puerto 80 para configurarlos via web.

 # nmap -O 192.168.0.1
 Starting Nmap 5.00 ( http://nmap.org ) at 2012-05-07 09:48 CEST
 Interesting ports on 192.168.0.1:
 Not shown: 996 closed ports
 PORT   STATE SERVICE
 23/tcp  open telnet
 80/tcp  open http
 443/tcp open https
 3517/tcp open unknown
 MAC Address: 1C:AF:F7:6E:10:26 (Unknown)
 OS details: WAP (Cisco Aironet 1010, D-Link DWL-2100AP, Linksys WAP51AB or WAP55AG, Netgear WPN824, or Proxim ORiNOCO AP-4000M), Lights-Out remote server management, or ReplayTV 5500 DVR
 Network Distance: 1 hop
 OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
 Nmap done: 1 IP address (1 host up) scanned in 3.52 seconds

En este caso el sistema operativo es un poco raro (seguramente sea un Linux), pero parece ser que lo está detectando también como un dispositivo de red (punto de acceso o router). El hecho de que tenga abiertos los puertos 80 (web) y 23 (telnet) nos refuerza esta hipótesis.

En el caso de que nmap no muestre nada, la cosa se complica y mucho, ya que tenemos un dispositivo con todos los puertos TCP cerrados que está sirviendo IP. Podemos hacer un escaneo de los puertos UDP con (ojo, tarda bastante rato):

 nmap -sU -p U:0-1024 192.168.0.1
 Starting Nmap 5.00 ( http://nmap.org ) at 2012-05-07 10:13 CEST
 Interesting ports on 192.168.0.1:
 Not shown: 1020 closed ports
 PORT  STATE     SERVICE
 67/udp open|filtered dhcps
 111/udp open|filtered rpcbind
 123/udp open|filtered ntp
 940/udp open|filtered unknown
 950/udp open|filtered unknown
 MAC Address: 00:30:05:2F:53:38 (Fujitsu Siemens Computers)
 Nmap done: 1 IP add

y ver que puertos tiene abiertos por ahí. Al menos debe estar el 67 (que es el que sirve dhcp). Quizá alguno de los otros que aparecen nos de una pista de a que nos enfrentamos. En el ejemplo está abierto el 111 (SunRPC, usado por NFS) y 123 (servicio NTP de hora) y dos más. Habría que indagar en Internet a ver que puede ser eso.

3. Entrar en el sistema que hay tras la IP. Bueno, con esto nos hemos hecho una idea de que hay detrás de la IP 192.168.0.1. Entonces ahora debemos actuar en función de la información sacada con nmap:

  • Si tiene abierto el puerto 22 (ssh), intentaremos hacer un ssh root@192.168.0.1. Cuando nos pida probamos con las contraseñas de root que usemos en el centro hasta que alguna nos deje entrar. Una vez dentro podemos probar cosas cómo:

cat /etc/hostname: buscando un nombre de equipo
cat /etc/cpuinfo: información sobre la CPU
ifconfig: para ver las tarjetas de red que tiene
facter: por si tiene instalado puppet hacer un informe completo.

Con un poco de suerte identificaremos el equipo díscolo y  además podremos desactivar su servicio DHCP manualmente.

  • Si tiene abierto el puerto 80 (web), abriremos un navegador y cargaremos la página http://192.168.0.1. Seguramente nos mostrará una página web con una marca y modelo de punto de acceso/router y nos pedirá usuario y contraseña. Podemos probar con varias de las que tengamos en el centro o bien con la contraseñas por defecto (admin/admin, admin/<blanco>, admin/1234)  a ver si podemos entrar.

En cualquier caso, la información sobre la marca y modelo del router ya nos da pistas sobre que dispositivo es el que está causando problemas. Solo habría que acceder a él fisicamente, restaurar la configuración por defecto con el interruptor que ssuelen tener a tal efecto, conectarse a él y desactivar el servicio DHCP.

  • Si tiene abierto el puerto 23 (telnet), casi seguro que es como el caso anterior, solo que habría que acceder mediante telnet 192.168.0.1
  • Si tiene abiertos solamente los puertos 139 y 445 es casi seguro que sea un Windows o bien un equipo Linux que solamente está compartiendo carpetas por samba. Tenemos que indagar mas sobre el equipo en cuestión:
 nmblookup -A 192.168.0.1

nos dará información sobre el nombre del equipo Windows y el grupo de trabajo al que pertenece.

Desde el entorno gráfico:

 rdesktop 192.168.0.1

intentará conectarse al equipo por escritorio remoto y nos pedirá usuario y contraseña. Si conseguimos entrar como administrador podremos desactivar el DHCP.

Con smbclient:

 smbclient -L 192.168.0.1 -U <usuario>

nos pedirá una contraseña y si es válida nos listará las carpetas y recursos compartidos del equipo. Podemos conectarnos a alguno de esos recursos

 smbclient -U <usuario> \\\\192.168.0.1\<carpeta>

Y en un entorno de comandos parecido al ftp podemos mirar el contenido de las carpetas, descarganos ficheros, etc,  todo lo que resulte útil para saber que equipo es.

Otra opción que puede funcionar es mandarle mensajes al Windows que saldrán como ventanas emergentes en su escritorio, siempre que ese Windows tenga abierta esa posibilidad :

 echo “Contacte con el administrador informático urgentemente” | smbclient -M 192.168.0.1

Si esto último lo metemos en un bucle podemos marear lo suficiente al usuario del Windows como para hacer que se ponga en contacto con nosotros o apaque su equipo intruso.

  • Si nada de esto ha funcionado o no podemos contactar con la IP de ninguna manera, queda una última esperanza: la MAC que recogimos en un principio. Puede que esté en nuestro arbol ldap (si usamos dhcp-ldap) o en dhcpd.leases de el servidor que corre el servicio dhcp.

En el servidor ldap:

 /etc/init.d/slapd stop
 slapcat > copia.ldif
 /etc/init.d/slapd start
 grep -i <mac> copia.ldif

Si aparece la MAC podemos buscar en el ldif con less o nano a ver si en el campo "cn" o similar del registro donde esté aparece su nombre.

En el servidor DHCP:

 grep -i <mac> /var/lib/dhcp3/dhcpd.leases

Con la MAC y la información de dhcpd.leases  podremos tener información sobre cuál puede ser el equipo o las horas de conexión.

Otro dato de interés que podemos sacar con la MAC es el fabricante de la tarjeta de red. Eso puede darnos pistas sobre el tipo de dispositivo usado. En esta página podremos obtener dicha información.

 4. No todo está perdido. Si ni aún así encontramos nada, estamos en un serio aprieto, pero todavía podemos localizar físicamente la ubicación del dispositivo o PC:

  • Usar herramientas especializadas de mapeo y escaneo de red (por ejemplo, D-Link D-View), que nos puedan dar una pista de a que switch está conectado el equipo en cuestión.
  • Hacer el mapeo manualmente: si tenemos todos los switch de la red  accesibles, podemos irnos conectando a ellos empezando por el troncal. Dentro de la página de configuración del switch suele haber alguna opción para buscar una MAC.

Por ejemplo, en el Switch DLink DES-3226S está en la opción de menú Basic Setup->Network Monitoring-> Adresses Tables -> MAC Adresses Tables. Este formulario nos permite introducir una MAC y busca a que puerto del switch está conectado el dispositivo que tiene esa MAC. Si ese puerto está a su vez tiene a su vez  conectado otro switch, nos vamos a el y repetimos la operación hasta hacernos una idea de la ubicación física del dispositivo.

  • Si aún así no hemos logrado averiguar la MAC del intruso y sigue fastidiando en la red, hay que arremangarse y proceder con la fuerza bruta para evitar males mayores:

1) Nos hacemos de un portátil y un latiguillo.
2) Paramos el DHCP de la red.
3) Vamos al switch troncal y conectamos el portátil a una boca libre.
4) Hacemos en el portátil:

 dhclient -v eth0

5) Deberiamos recibir la IP.
6) Ahora quitamos el cable de una boca de switch, lo dejamos desconectado (y con ello, incomunicada una parte de nuestra red) y repetimos el dhclient. Si recibimos de nuevo IP, esa boca no es, la volvemos a pinchar y elegimos otra. Esto lo vamos repitiendo hasta que en un momento dado no recibimos IP. El intruso está por esa boca. Habría que ver que hay detrás de ella. Si es otro switch, nos moveríamos con el portátil hacía alli y vuelta a empezar. Si es un punto de red, ya tenemos localizado físicamente al intruso.

Que sea una cacería rápida y fructífera.

No hay comentarios:

Publicar un comentario