Port-knocking, una nueva táctica para la seguridad, por Andor

Hace tiempo se había hablado en Slashdot del port-knocking, una manera de elevar la seguridad aun más los servidores y hacer manejo remoto del firewall.

En que consiste? Muy sencillo, es como el santo y seña

Tu quedas con la novia, y para que sepa que eres tú, tocas en la puerta de du casa y…

-Pum … Pum… PumPumPum

(o eran 3 largos y dos cortos?)

(o eran 2 cortos, esperar, y 3 largos?)

El : Soy yo…

Ella : Qué vienes a buscar ?

El : A ti…

Ella : Y es tarde…

El : Por qué ?

Ella : Porque ahora soy yo la que quiere estar sin ti…

(OT: Quien diría que Pimpinela tiene 20 discos, eh? 😉 )

Y eso quiere decir que te has equivocado al golpear, o que llevas una mancha de huevo en la camisa.

Pues el Port-Knocking es algo parecido

Consiste en hacer intentos de conexión a una secuencia de puertos predefinida para que el sistema reconozca que eres tu, y, por ejemplo, te añada una tabla al iptables para darte acceso al ssh, o a la VPN o similar.

En una de las soluciones que implementan Port-Knocking, que es knockd hay un pequeño ejemplo para permitir el acceso al ssh:

[openSSH]

sequence = 7000,8000,9000

protocol = tcp

timeout = 15

command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp –dport 22 -j ACCEPT

Si haces una llamada (un intento de conexión cualquiera, por ejemplo con un telnet) al puerto 7000, duespés una al 8000 y acto seguido una al 9000, lanza un comando de iptables, y se abre el SSH para tu dirección IP.

Ya le vais viendo el intríngulis al tema? Pues luego podemos hacer a la inversa, añadiendo unas cuantas líneas más en el fichero de configuración:

[closeSSH]

sequence = 9000,8000,7000

protocol = tcp

timeout = 15

command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp –dport 22 -j ACCEPT

Una llamada al 9000, otra al 8000, otra al 7000, y «Pum, pum, adiós, me voy, así que echa el cerrojo», y el puerto vuelve a estar cerrado, cerrado como antes.

Pues así de sencillo es todo

Una de las ventajas es que los puertos ni siquiera tienen que estar abiertos, ya que la aplicación escucha a nivel de enlace, y por lo tanto, si te hacen un escaneo de puertos, no encontrarán los puertos que utilizas para hacer las combinaciones mágicas.

En principio el diseño conceptual del Port-Knocking tenía como objetivo abrir y cerrar accesos y puertos, pero si se piensa un poquito, se puede utilizar para cosas más divertidas.

Lanzar procesos, backups, alertas, aplicaciones, reiniciar el equipo… todo depende de la imaginación y el arte de cada uno.

Ojo!! Ni se os ocurra poner llamadas a puertos consecutivos, o cercanos cuando implementeis esto. Procurad que sean puertos distantes, y no comunes, y no programar la llamada para que los puertos sean llamados en orden de mayor a menor o viceversa, sino pensaros una secuencia un poco aleatoria, ya que si no un simple escaneo «rutinario» de puertos, te puede hacer «saltar las alarmas», los procesos, o las tablas del firewall, activando llamadas.

URLs:

knockd : http://www.zeroflux.org/knock/

knockd en slashdot : http://slashdot.org/article.pl?sid=04/04/14/1832222

Teoría del port-knocking [slashdot] : http://slashdot.org/article.pl?sid=04/02/05/1834228&tid=172

5 Comments

  1. Anónimo

    Una tarde me aburría y…

    Bueno, no se, a lop mejor al interés general queda este artículo un poco lejos, pero si me echais una manita y me pedís alguna otra cosa, en plan de un tutorial para shell en OsX, o un tutorial de permisos (creo que tengo uno a medias), pues podemos echar un ojo a ver que se puede hacer 😀

  2. Anónimo

    Asegúrate de que tienes libpcap (según sistemas libpcap-dev), porque es requerido por el software para que escuche las llamadas a puertos.

    De todas maneras yo no lo he probado a compilar en Mac OSX, así que no te se decir si aun instalando libpcap va a funcionar, anyway, si alguien se ofrece voluntario a prestar su OSX (una shell remota me bastaría) intentaría compilarlo 😀

    PD : libpcap son unas librerías de red que se utilizan para ‘esnifear’, o ‘escuchar’ las conexiones y los datos que se mueven a través de una conexión de red.

Deja una respuesta