martes, 16 de abril de 2013

DEFENSA OFENSIVA POR OSCURIDAD -PORT KNOCKING I




Para la definición de Port knocking prefiero la de Wikipedia por sencilla y según nuestra amiga ..

El golpeo de puertos (del inglés port knocking) es un mecanismo para abrir puertos externamente en un firewall mediante una secuencia preestablecida de intentos de conexión a puertos que se encuentran cerrados. Una vez que el firewall recibe una secuencia de conexión correcta, sus reglas son modificadas para permitir al host que realizó los intentos conectarse a un puerto específico.

El propósito principal? 

Evitar el scaneo por parte “usuarios” malintenciotenados ..
Para que?  Buscar vulnerabilidades? Of course ¡!

 “Normalmente” ( así debería ser siempre, pero veremos que no) los puertos donde se dan los servicios se muestran cerrados como una técnica típica de defensa perimetral ya que los mismos servicios expuestos solo se abrirán ante un Port Knocking correcto.. y esto ocurrirá gracias a la implementación en este servicio para que revise el log del firewall … Si claro!! para que detecte, como es lógico, esta secuencia de intentos de conexión.

Voy a hacer hincapié en lo que yo, diariamente, tengo junto a mis compañeros ..  y supongo que muchos de los que me estén leyendo sabrán a que me refiero..

El mayor uso del Port-Knocking  ?? No adivináis por donde los “malos” o lo bueno, según se mire, nos intentan entrar ..?

Venga ya… ¡!  Puerto 22 ? Suena bien verdad? ;), Pues Secure Shell (SSH) es quien se lleva la palma .. y aquí tenemos algo muy parecido a  un handshake secreto

Existen tantas maneras … podemos es tener un proceso examinando paquetes con alguna interfaz sniffando paquetes pero TCP  siempre Open, of course ¡!

Realmente la idea es que el cliente tenga una aplicación que ejecute el Knocking  antes de acceder al server de manera normal. 

Un servicio se encuentra escuchando en la máquina donde está el firewall .. con programa que ejecute comandos de ping o te creas un generador de hash.

Si un usuario ejecuta una secuencia errónea de PK pues el puerto simplemente estará cerrado .. y es el que debería estar abierto .. es sencillo realmente .. 

Pero, como ya explicaré, esto no es tan “efectivo” como pueda parecer … ;)
Pero…Como funciona ?

Port knocking 4 Pasos



1 El cliente no puede conectarse a una aplicación que se encuentra escuchando en el puerto n.





2 | (1,2,3,4) -El cliente intenta conectarse a un conjunto predefinido de puertos en secuencia, enviando ciertos paquetes. El cliente tiene conocimiento previo del servicio de golpeo de puertos y su configuración, pero no recibe ninguna respuesta durante esta fase ya que las reglas del firewall no lo permiten.





3 El servicio de port knocking intercepta los intentos de conexión y los decodifica para verificar un golpeo auténtico. El servidor realiza tareas específicas basadas en el golpeo de puertos, como abrir

                                      

               4 El cliente se conecta al puerto n recientemente abierto.


Por ejemplo no es necesario que el Knocking venga de intentos de conexión o el Knocking puede ser encapsulado en un payload y que este se envíe al puerto cerrado .. Existen diferentes maneras, pero lo importante es la comprensión del  “Golpeo de puertos”.Quiero comentar que esto es la idea general pero que este comportamiento puede ser cambiado “al gusto”..


HERRAMIENTAS

knockd es una herramienta de port-knocking de primera generación, que funciona enviando una secuencia ordenada de intentos de conexión a puertos TCP o UDP pero tenemos  posibilidad de que la secuencia de puertos sea interceptada por un atacante, siendo por tanto superado este primer filtro con facilidad.. poco seguro ..  

Por lo tanto fwknop, que implementa Single Packet Authorization (SPA), conocido como técnica de port-knocking de paquete único(se ampliará,,,)

En este caso, toda la secuencia -o contraseña- se encuentra dentro de un único paquete cifrado, evitando así la captura de los datos y no teniendo el problema de pérdida parcial de paquetes.

Otras funcionalidades de fwknop aumentan la seguridad, como la inclusión de la IP de origen dentro del paquete cifrado, lo que dificulta un ataque Man in the Middle, así como el soporte para usar criptografía de clave pública.
Se puede encontrar muy buena información sobre fwknop y el funcionamiento de SPA en la página oficial de fwknop.

Asi que, creo que se impone implementarlo no? Vamos allá

Implementando (SPA)con “fwknop”..Al lío

 FireWall KNock OPerator a.k.a fwknop es una herramienta más avanzada que knockd, y  utiliza la técnica de port-knocking de paquete único (SPA) frente al envío de secuencias de paquetes que ya hemos visto. En este caso el cliente y el servidor de port-knocking van en paquetes separados.

$ aptitude install fwknop-server fwknop-client

Durante la instalación del servidor nos pide una serie de datos de configuración, como la interfaz de red donde debe escuchar fknopd en modo promiscuo y la clave para cifrado y descifrado del paquete SPA recibido. Además nos consulta por defecto si queremos proteger el puerto ssh, realizando la configuración necesaria. A través de los ficheros de configuración también podemos establecer estos parámetros, como veremos a continuación.

El fichero /etc/fwknop/fwknop.conf contiene una extensa relación de parámetros sobre el funcionamiento de fwknop, principalmente relacionados con el cortafuegos. De este fichero editamos el interfaz de red donde escucha fwknopd (en nuestro caso lo) y si nos parece oportuno el puerto hacia el que se envía el paquete SPA (por defecto UDP 62201).









Los parámetros susceptibles de modificar son los siguientes:

OPEN_PORTS, que define el puerto y el tipo de conexión a proteger a través de port-knocking.

FW_ACCESS_TIMEOUT, que define el tiempo máximo establecido desde la recepción del paquete correcto hasta que se produce la conexión ssh.
KEY, que define la contraseña de cifrado y descifrado del paquete SPA recibido (por defecto fwknop usa el algoritmo Rijndael).

En este ejemplo vamos a utilizar cifrado simétrico, pero es interesante mencionar que fwknop soporta el uso de criptografía de clave pública (de hecho es la opción recomendada por la documentación oficial) de forma similar a SSH. Una vez generado el par de claves con gpg, especificamos los datos necesarios en el fichero anterior, de acuerdo con los parámetros GPG_HOME_DIR, GPG_DECRYPT_ID, GPG_DECRYPT_PW y GPG_REMOTE_ID. Por otra parte, el cliente fwknop (cuyo uso veremos más adelante) debería ejecutarse añadiendo las opciones --gpg-recip y --gpg-sign.

Reiniciamos el servidor fwknopd y comprobamos qué procesos están ejecutándose:














Además del servidor fwknopd, vemos los procesos correspondientes a knoptm (daemon responsable de eliminar reglas de iptables) y a kfnopwatchd (daemon que monitoriza el buen funcionamiento de fwknop).

Para monitorizar el servidor fwknop y ver los envíos de paquetes SPA se puede consultar el syslog del sistema.
# tail -f /var/log/syslog | grep fwknop

Una vez en funcionamiento el servidor fwknopd, acudimos al cliente (fwknop) para enviar un paquete SPA a localhost y comprobar su funcionamiento.







Como podemos ver, hemos enviado desde nuestra ip de origen (-a localhost) un paquete SPA al puerto udp/62201 de la ip donde escucha el servidor fwknopd (-D 127.0.0.1).

 Este paquete tiene un tamaño de 182 bytes y ha sido cifrado previamente a su envío con una clave simétrica que nos ha sido solicitada (Encryption Key: 12345678) y que debe coincidir con la definida en el fichero /etc/fwknop/access.conf.
Ahora comprobamos qué ha recibido el servidor, consultando el fichero de log.





fwknopd ha recibido correctamente el paquete SPA, lo ha descifrado y lo ha reconocido como válido, añadiendo a iptables una nueva regla que permite conexiones al puerto tcp/22 durante 30 segundos. Al transcurrir este tiempo, la regla es eliminada a través de fnoptm y regresamos a la situación inicial.

Por último, para el que quiera profundizar en los aspectos más criptográficos de la herramienta, solamente decir que fwknop construye el paquete SPA concatenando los datos que muestra el cliente (Packet fields), codificando en Base64 y cifrando con el algoritmo Rijndael, dando lugar a los 182 bytes finales.

Para más información consultar el código fuente de fwknop y fwknopd (scripts en perl), los módulos MIME::Base64, Crypt::CBC y Crypt::Rijndael (también disponibles vía comando perldoc), y la documentación oficial sobre SPA que describe con detalle la estructura del paquete envíado.


Pero no he terminado Mi Opinión

1-Si  descubro la forma de acceder a la puerta se acabó el juego señores .. esta capa desaparece y el servicio queda protegido exclusivamente con la seguridad que existiese debajo del Port-Knocking ..

 2- Ataques MitM.

* En el caso de knockd : Capturar su secuencia de puertos es rápida, de hecho es INMEDITA.
fwknopd  va cifrada, solucionada .., el uso de este único paquete SPA elimina los errores en la     recepción de la secuencia de puertos

 Que a nadie se le ocurra tener Port-Knocking como única defensa  porque no es viable...

Pero yo me pregunto .. Incluir en una Tool “malvada” el Knocking? Puede ser curioso verdad?

Lo veremos en la siguiente .. Si es que vosotros quereis. No seais muy malos, que se que esto es un examen ;)

Live Free or Die Hacking

5 0verl0ad Labs: DEFENSA OFENSIVA POR OSCURIDAD -PORT KNOCKING I Para la definición de Port knocking prefiero la de Wikipedia por sencilla y según nuestra amiga .. El golpeo de puertos (del inglé...

5 comentarios:

Rock Neurotiko dijo...

Muy buen artículo :-)

Como crítica constructiva, simplemente debes mejorar un poco la escritura, hay algunos momentos que cuesta seguir el hilo de la frase :-P

Un saludo!

secnight dijo...

Muchas gracias, me alegro que te guste y espero que puedas llevarlo a la práctica .. ;) En cuanto a la escritura tienes razón !! .. iba rápido, decidí publicar antes de tiempo y sabía que se estaba esperando.. Nervios también..sobran palabras .. Gracias por tu comentario Best Regards

Anónimo dijo...

:D broh te pasaste excelente post Saludos

Luix Diaz dijo...

tema entretenedor hoy aprendí algo nuevo hay que ponerlo en practica solo el mismo detalle la escritura pero vale muy interesante.

Black Plague dijo...

superado hace tiempo, no sirve para nada.

< >