GOLPEOS DE PUERTOS EN KALI LINUX PORT KNOCKING Raspberry Pi

El otro día estaba conversando con una persona de la EKOSPACE que le comente que estaba jugando con mi raspberry usando kali linux con servidores SSH y me recomendó proteger mis puertos en el cual me dio una linda explicación para conocerlo para un futuro poder romperlo.

Al ejecutarlo me muestra que el puerto esta cerrado pero con un comando adecuado puedes ingresar al servidor.

EJEMPLO CON UN SERVIDOR NO PROTEGIDO.

Screenshot from 2016-05-25 13-42-43

COMO SE VE UN SERVIDOR PROTEGIDO?

Screenshot from 2016-05-25 13-46-05

Simplemente tenemos dos grandes diferencia en el primer ejemplo podemos acceder muy fácilmente con un método pero con protección porque al acceder en ambos te pueden reconocer el ingreso. Recuerda un servidor basado en SSH puede ser bueno la seguridad pero en este caso vamos a ponerle mas seguridad que son los puertos.

Screenshot from 2016-05-25 17-03-29

Introducción


Existen servidores de seguridad y deben ser utilizados para bloquear el acceso a los puertos que no se están utilizando por un servicio, pero todavía queda la cuestión de qué hacer con los servicios que desee acceder a, pero no quiere exponer a todo el mundo. Desea acceder cuando lo necesite, pero que él quiere bloqueada de otra manera.

Golpeo de puertos es un método para oscurecer los servicios que se estén ejecutando en el equipo. Permite que el servidor de seguridad proteja sus servicios hasta que usted pida que puerto se abrió a través de una secuencia específica de tráfico de la red.

En esta guía, vamos a discutir cómo implementar golpeo de puertos como un método de ocultar su demonio SSH en un KALI LINUX VPS utilizando el paquete de knockd.

SEGUN WIKIPEDIA

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 del golpeo de puertos es prevenir un escanéo de puertos por parte de un atacante que busca posibles servicios vulnerables. Como los mismos solo se abren ante un golpeo de puertos correcto. Normalmente los puertos donde se brindan los servicios se muestran aparentemente cerrados.

Por lo general este mecanismo se implementa configurando un servicio para que revise la bitácora o log del firewall para detectar esta secuencia de intentos de conexión. Otra forma es tener un proceso examinando paquetes con alguna interfaz de captura de paquetes, pero esto tiene que hacerse en puertos TCP que se encuentren “abiertos”.

El mayor uso del golpeo de puertos, es para determinar acceso al puerto 22, el puerto del Secure Shell (SSH). El golpeo en cuestión es similar a un handshake secreto. La complejidad del mismo puede variar desde una simple lista ordenada de intentos de conexión a puertos TCP, UDP, ICMP u otro protocolo; hasta un hash basado en la dirección origen, tiempo y otros factores, el cual determinará cuáles serán los puertos a golpear.

Para la implementación, la idea es que el cliente tenga una aplicación que ejecute el golpeo antes de acceder al servidor de manera normal. Un servicio se encuentra escuchando en la máquina donde está el firewall los paquetes que llegan a la misma. El utilitario del cliente, responsable de realizar el golpeo de los puertos puede ser desde un sencillo programa que ejecute comandos de ping, hasta un complejo programa generador de un hash.

Generalmente no hay ninguna indicación cuando un usuario ejecuta una secuencia errónea de PK. Simplemente el puerto que se esperaba estuviese abierto al final de la secuencia, no lo está. Ningún paquete es enviado al usuario en ningún momento.

INSTALACION:

Primeramente yo tengo un Raspberry Pi en el cual instale Kali Linux y como saben la conexión SSH es por medio de puerto 22, aparte de esto también podemos proteger otros puertos.

  • Sistema Actualizado:
     apt-get update
  • Instalar Knockd:
     sudo apt-get install knockd
  • Instalar ssh:
    sudo apt-get install ssh
  • Instalar iptables:
     sudo apt-get install iptables-persistent

CONFIGURACIÓN :

sudo service iptables-persistent start
 sudo nano /etc/knockd.conf

Debería ver un archivo que tiene el siguiente aspecto:

 
[options]
        UseSyslog

[openSSH]
        sequence    = 7000,8000,9000
        seq_timeout = 5
        command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn

[closeSSH]
        sequence    = 9000,8000,7000
        seq_timeout = 5
        command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn 

En la sección “Opciones”, vemos una directiva llamada UseSyslog. Esto le dice a knockd que debería registrar su información, utilizando los métodos de registro del sistema normales. Esto insertará se registra en /var/log/messages.
Ahora el parámetro que fija el patrón de golpeteo es aquí:

 sequence    = 7000,8000,9000

Esto significa que este conjunto de reglas coincidirá si la misma IP solicita una conexión en el puerto 7000, seguido directamente por el puerto 8000, seguido finalmente por el puerto 9000.
Otros dos parámetros en esta serie también controlan si la actividad coincide:

 seq_timeout = 5
tcpflags = syn

La primera opción especifica una cantidad de tiempo que la secuencia.

El segundo especifica una bandera que debe estar presente en los paquetes TCP a fin de que sean considerados válidos. El valor de syn que vemos aquí se utiliza comúnmente para distinguir los paquetes que queremos de los creados en un segundo plano por programas como SSH.

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

Usted debe reconocer esto como una regla de iptables. Como la sección de la etiqueta “openSSH” señala, en esta sección se abrirá un puerto para conexiones SSH cuando se golpea la secuencia correcta.

Sin embargo, si estaban prestando atención durante la configuración de iptables, se verá que esta nueva norma se utilice la opción -A para añadir esta regla al final de la cadena INPUT. Esto colocará esta regla después de la regla para dejar todas las conexiones restantes.

Para solucionar esta situación, tenemos que modificar este comando. Reemplazar el comando con una regla para insertar la nueva regla en la parte superior de la lista. Hacemos esto mediante el uso de la opción -I y hacer referencia a la ubicación como la regla 1:

 command = /sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -j ACCEPT

Screenshot from 2016-05-25 17-44-33
Implementar el Servicio Knockd

Ahora que hemos configurado knockd tener un conjunto de reglas válidas, podemos probarlo mediante la implementación de nuestro demonio. Tenga en cuenta, aunque la configuración es válida, en este punto, no es seguro a menos que cambiara las secuencias de puerto para cada sección golpeando.

Tenemos que activar el servicio mediante la edición de otro archivo. Abrir este archivo con privilegios de root:
 sudo nano /etc/default/knockd

Tenemos que cambiar el START_KNOCKD opción de ser “1” con el fin de iniciar el servicio y cambiar eth1 a eth0.

 START_KNOCKD=1
 #KNOCKD_OPTS="-i eth0"

GUARDAMOS CON CONTROL + X
Ahora, podemos iniciar el servicio escribiendo:

 sudo service knockd start

Ahora ejecutamos esto para comience el proceso de seguridad

sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j REJECT

Ahora perderá la conexión y para ingresar usted tiene que instalar

 sudo apt-get install knockd

Y para iniciar el sistema colocamos

  knock 192.168.1.2 7000 8000 9000
  knock -v 192.168.1.2 7000 8000 9000

Para cerrar es

 knock 192.168.1.2 9000 8000 7000
 knock -v 192.168.1.2 9000 8000 7000

PARA VER LOS CONECTADOS.

 iptables -L -n
 sudo lsof -i

LISTO, recuerda que 7000 8000 9000 puedes cambiar y cambiar a tu beneficio de seguridad.
No te olvides de compartirlo para seguir vivo en esto. Gracias. Para controlarlo para Windows