Man in the middle

Que tal comunidad, el tema a tratar es el resultado de mi hambre de conocimiento sobre técnicas hacking, este es un mundo amplio y diverso de acuerdo de cómo quieras verlo, comencemos entonces por técnicas tradicionales con herramientas (software) actual.

Antes de la acción

  • Clave asimétrica o pública: Para una explicación sencilla mostraré un ejemplo, Alice necesita enviar una carta privada a Bob, dada la situación la única forma segura es que Bob le envíe un cofre con un candado abierto a Alice, ella pone su carta privada en el cofre y cierra el candado. Alice envía el cofre segura que sólo el que tenga la llave podrá abrirlo. Bob recibe el cofre y lo abre con la llave.
    Ahora comprendamos que Alice y Bob son los usuarios de la internet, el candado del cofre viene a ser la clave pública y la llave de Bob es la clave privada.
  • Address Resolution Protocol (ARP por su siglas en inglés) es un protocolo de capa 2 en el modelo OSI de comunicaciones, que básicamente se encarga de resolver direcciones IP y MAC.
    Todos los datos asociados a las dirección tanto IP como MAC pueden verse en una tabla de ARP, y puede darse el caso de que una aplicación quiera enviar un paquete a una IP que no se encuentra en dicha tabla (al iniciar la PC, esa tabla se encuentra vacía, en window se accede a dicha tabla con el comando: arp -a). En ese caso es necesario preguntar quién tiene la IP deseada, y para ello también se usa el ARP. Para realizar dicha pregunta, la máquina enviará un paquete especial dirigido a la MAC ff:ff:ff:ff:ff:ff (broadcast), cuyo contenido será del estilo “¿quién tiene la ip x.x.x.x?”, por lo que cuando las máquinas de la red vean este paquete dirigido a esa dirección MAC especial, leerán el mensaje y únicamente la máquina que tenga la dirección IP por la que se pregunta responderá con otro paquete diciendo “Yo, x:x:x:x:x:x, tengo la dirección IP x.x.x.x”. Lo interesante, es que todas las máquinas de la red recibirán ese paquete, lo leerán y actualizarán sus tablas de IP y MAC con la nueva información, no solo la que hizo la pregunta.
  • ARP-Spoofing: El envenenamiento de las tablas ARP o ARPspoof consiste básicamente en inundar la red con paquetes ARP indicando que nuestra mac address es la asociada a la IP de nuestra víctima y que nuestra MAC está también asociada a la IP del router (puerta de enlace) de nuestra red. De esta forma, todas las máquinas actualizarán sus tablas con esta nueva información maliciosa. Así, cada vez que alguien quiera enviar un paquete a través del router, ese paquete no será recogido por el router, sino por la máquina atacante, ya que se dirige a su dirección MAC, y cada vez que el router u otro equipo envíen un paquete a la víctima sucederá lo mismo. Como la máquina atacante sabe que “está envenenando el protocolo ARP” sí conocerá las direcciones MAC reales de todas sus víctimas, por lo que la podremos configurar para que reenvíe esos paquetes a su verdadero destinatario.

Conociendo al enemigo
Man in the middle (español: Hombre en le medio), es una técnica hacking que consiste en posicionar la máquina del atacante entre la comunicación de usuario y servidor, el atacante en esta situación podrá hacer y deshacer a su antojo limitado sólo por su imaginación.

Wikipedia ofrece un ejemplo del ataque MITM sobre las claves públicas: link

Para poder nosotros aplicar el ejemplo utilizaré la técnica ARP-Spoofing con KaliLinux.

Hackeándome
Para que nadie piense que ha sido mi conejillo de india, diré que lo hice en mi laboratorio de pruebas (“es verdad”), step to step:

      1) Configurar KaliLinux para que permita el reenvío de paquetes:

      echo '1' > /proc/sys/net/ipv4/ip_forward
      
      2) Suplantar lista ARP en la red:
      arpspoof -i interface -t targetIP gatewayIP

      arpspoof -i eth0 -t 192.168.8.90 192.168.8.8
      
      3) Capturar paquetes del gateway route:
      arpspoof -i interface -t gatewayIP targetIP

      arpspoof -i eth0 -t 192.168.8.8 192.168.8.90
      
      A partir de aquí tu decidirías que hacer, te doy algunas pistas: ataque DoS, análisis de tráfico, interceptar comunicación, sustitución de identidad, y un largo etc.
      Ejemplo:

      driftnet -i eth0
      
      urlsnarf -i eth0
      

Prevenir antes que lamentar
Antes de aceptar la clave ssh del servidor, verifica que coincida con la que se te está ofreciendo aceptar o rechazar (En este enlace explico como crear una clave ssh y las formas de acceso).
Para estar seguro de cuál es la verdadera huella digital (fingerprint) de tu servidor, deberás verificarla en el directorio /etc/ssh/ del servidor:

$ cd /etc/ssh
$ ls -lh
total 164K
-rw-r--r-- 1 root root 123K Apr 2 2012 moduli
-rw-r--r-- 1 root root 1.7K Apr 2 2012 ssh_config
-rw-r--r-- 1 root root 2.6K Dec 10 19:47 sshd_config
-rw------- 1 root root 668 Dec 8 16:44 ssh_host_dsa_key
-rw-r--r-- 1 root root 604 Dec 8 16:44 ssh_host_dsa_key.pub
-rw------- 1 root root 227 Dec 8 16:44 ssh_host_ecdsa_key
-rw-r--r-- 1 root root 176 Dec 8 16:44 ssh_host_ecdsa_key.pub
-rw------- 1 root root 1.7K Dec 8 16:44 ssh_host_rsa_key
-rw-r--r-- 1 root root 396 Dec 8 16:44 ssh_host_rsa_key.pub
-rw-r--r-- 1 root root 302 Jan 10 2011 ssh_import_id

Los archivos .pub son las llaves públicas generadas por SSH para tu servidor. Los archivos ssh_host_formatoclave_key.pub son aquellos que contienen las huellas digitales públicas que nos interesan. Para saber cuál de los archivos .pub debes mirar, tendrás que verificar el formato de clave especificado en la huella digital que el servidor te está ofreciendo (ECDSA):

$ ssh usuariocomun@123.456.78.90
The authenticity of host '123.456.78.90 (123.456.78.90)' can't be established.
ECDSA key fingerprint is 91:bf:9d:7b:b9:9f:15:54:07:fb:d4:23:c6:fa:fd:b0.
Are you sure you want to continue connecting (yes/no)?

En el caso anterior deberás mirar la clave de tu archivo ssh_host_ecdsa_key.pub . Para
visualizarla en el mismo formato -hexadecimal legible- en el que te es ofrecida por el
servidor al intentar conectarte, puedes utilizar el comando ssh-keygen:

$ ssh-keygen -lf ssh_host_ecdsa_key.pub

El mismo, arrojará una salida similar a la sguiente:

2048 91:bf:9d:7b:b9:9f:15:54:07:fb:d4:23:c6:fa:fd:b0 root@localhost (ECDSA)

Para verificar que ambas claves son idénticas, puedes escribirlas en dos archivos y utilizar
el comando diff para que sean evaluadas con precisión. Si éste no arroja nada,
significará que no existen diferencias entre ambas claves (es decir, ambas claves son
idénticas). Ergo, puedes aceptar la huella con absoluta confianza:

$ echo "91:bf:9d:7b:b9:9f:15:54:07:fb:d4:23:c6:fa:fd:b0" > a
$ echo "91:bf:9d:7b:b9:9f:15:54:07:fb:d4:23:c6:fa:fd:b0" > b; diff a b

Claro que también podrías compararlas manualmente y confiar en tu buen ojo =)
(Fuente: Hackers & Developers Magazine #2, pag. 5-6)

Conclusiones

  • Buenas políticas de acceso, me refiero a la gestión de claves ssh y su distribución, permisos de usuarios y grupos, restringir root, este es un tema amplio y por quedarme corto en esta entrada le dedicaré un tema completo en próximas publicaciones.
  • No olvidar los backups, nos acordamos de ellos cuando en verdad los necesitamos, no esperemos eso.
  • No se queden con las enseñanzas de los teachers o lo que lean en un blog, sean autodidactas (self-paced), investiguen:
    http://www.sendaoscura.com/seguridad/ataques-man-in-the-middle-1%C2%BA-parte/
    http://es.wikipedia.org/wiki/Ataque_Man-in-the-middle
    http://www.elladodelmal.com/2011/10/ataque-man-in-middle-con-dhcp-ack.html
    http://hacking-etico.com/2014/10/08/ataque-badusb-mitm/
    http://www.hacking-etic.cat/?p=326&lang=es
    http://robospatula.blogspot.com/2013/12/man-in-the-middle-attack-arpspoof-sslstrip.html
    http://www.hacking-tutorial.com/hacking-tutorial/kali-linux-man-middle-attack/#sthash.ZDFtb2b2.IH8klB3W.dpbs
    http://www.welivesecurity.com/la-es/2014/02/11/como-funciona-arpspoof/
  • Anuncios

    Responder

    Introduce tus datos o haz clic en un icono para iniciar sesión:

    Logo de WordPress.com

    Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

    Imagen de Twitter

    Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

    Foto de Facebook

    Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

    Google+ photo

    Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

    Conectando a %s