miércoles, 5 de abril de 2017

COMO DETECTAR UN ESCANEO DE PUERTOS | PSAD


Descripción:

Ser capaz de detectar la actividad de red que puede indicar un intento de intrusión puede ayudarle a tomar las acciones apropiadas antes de que ocurra un evento. Los sistemas de detección de intrusos están disponibles por esta razón específica.

Los sistemas de detección de intrusos se utilizan para registrar conexiones sospechosas e informar cuando se ve que se está produciendo una actividad inusual. Algunos programas se utilizan puramente como un sistema de notificación, mientras que otros pueden intentar activamente bloquear el tráfico que parecen ser la intención de causar daño.

La herramienta psad, que representa la detección de ataques de exploración de puertos, es una pieza de software que supervisa activamente los registros de firewall para determinar si se está realizando un evento de análisis o ataque. A continuación, puede alertar a los administradores, o tomar medidas activas para disuadir la amenaza.

Tutorial:

Instalamos PSAD, la herramienta está disponible en los repositorios oficiales de Ubuntu, por lo tanto la instalación es tan sencilla como introducir el siguiente comando:

$ sudo apt-get install psad

Una vez empezada la instalación nos preguntará por el email del administrador, podemos seleccionar un correo en Postfix, o usar uno de internet, como gmail.

La forma en que PSAD detecta la actividad en los puertos de tu servidor es mediante la supervisión de los registros producidos por una aplicación de firewall. Ubuntu trae el firewall iptables de forma predeterminada, pero está completamente desconfigurado y no supervisa ni bloquea nada por defecto.

Aunque podríamos introducir los siguientes comandos para simplemente habilitar el registro, haremos una configuración más robusta:

$ sudo iptables -A INPUT -j LOG
$ sudo iptables -A FORWARD -j LOG

Si agregaste las reglas anteriores, limpia las reglas antes de configurarlas para que podamos empezar desde cero.

$ sudo iptables -F

Puedes ver las reglas actuales con:

$ sudo iptables -S

Salida del comando:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

IPTABLES

Ahora podemos comenzar a añadir nuestras reglas, principalmente a la cadena INPUT. Queremos decir a iptables que descarguen conexiones que no necesitamos o deseamos. Necesitamos agregar las reglas para permitir explícitamente nuestras conexiones autorizadas antes de agregar restricciones.

La primera regla permitirá que todo el tráfico generado por nuestro servidor, dirigido a nuestro servidor. Este tipo de conexión se utiliza generalmente para que los servicios se comuniquen entre sí y transmitan información fácilmente:
$ sudo iptables -A INPUT -i lo -j ACCEPT

A continuación, queremos agregar una regla para permitir explícitamente todo el tráfico relacionado con una conexión existente. Esto permitirá que nuestras sesiones actuales continúen ininterrumpidamente:
$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

A continuación, podemos agregar los servicios que deseamos mantener abiertos al público. Para SSH, podemos agregar una línea como esta:
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Si tenemos un servidor web en ejecución en el puerto predeterminado 80, podemos agregar una regla como esta:
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Añade otros puertos para los servicios legítimos y accesibles al público que desea dejar abiertos con la misma sintaxis:
$ sudo iptables -A INPUT -p protocol --dport port_num -j ACCEPT

Cuando hayas terminado de agregar los servicios legítimos, eliminaremos todas las conexiones restantes. Cualquier cosa que toque esta regla no coincide con nuestras reglas que eran para el tráfico legítimo.

Antes de hacerlo, sin embargo, es necesario agregar la regla que indica a iptables que comience a registrar tráfico. Esto hará que iptables registre el tráfico que todavía no se ha manejado.
$ sudo iptables -A INPUT -j LOG

También debemos agregar esta regla a la cadena forward en caso de que terminemos por reenviar el tráfico a otra parte
$ sudo iptables -A FORWARD -j LOG

Finalmente, dejemos caer todo el tráfico extraño que no ha coincidido todavía. Podemos hacerlo agregando una regla que coincida con todo en la cadena al final como esto:
$ sudo iptables -A INPUT -j DROP

O bien, podemos usar la funcionalidad de política integrada para configurar lo que sucede cuando un paquete pasa por la cadena sin coincidir con ninguna regla:

$ sudo iptables -P INPUT DROP

Los resultados son funcionalmente exactamente iguales.

Una cosa a tener en cuenta es que si alguna vez necesitas limpiar tu iptables y configurar una política DROP (en lugar de agregarla como una regla en la parte inferior de la cadena), debes invertir la política antes de limpiar:

$ sudo iptables -P INPUT ACCEPT
$ sudo iptables -F

Si no lo haces, se eliminarán las reglas de iptables y solo se mantendrá la política predeterminada de descartar todos los paquetes entrantes. Esto eliminará todo el tráfico de red entrando en su servidor, incluyendo el tráfico de tu conexión SSH.

De forma predeterminada, iptables no mantiene sus reglas entre los reinicios, así que después de haber probado tú configuración y de estar seguro de que hace lo que desea, puede descargar y habilitar una herramienta que hace que estas reglas sean persistentes:
$ sudo apt-get install iptables-persistent
$ sudo service iptables-persistent start

Configuración PSAD

Lo siguiente que haremos será configurar PSAD, para ello editamos el archivo de configuración que se encuentra en:
/etc/psad/psad.conf

Las primeras cosas que debes modificar están en la parte superior del archivo. Debes cambiar el parámetro EMAIL_ADDRESSES para que coincida con las direcciones de correo electrónico que desea notificar cuando se genera un informe. También debe modificar el HOSTNAME para que coincida con tu dominio para que haga referencia a la máquina correcta:

Una sección que probablemente querrás echar un vistazo es el "DANGER_LEVEL". Estos niveles son una forma de psad para clasificar los niveles de amenaza.
Ellos son automáticamente determinados por el número de paquetes involucrados en un evento, pero también puedes asignar cierto tipo de tráfico a cierto nivel de peligro. Los umbrales predeterminados para cada nivel a ser alcanzado son:

DANGER_LEVEL1           5;
DANGER_LEVEL2           15;
DANGER_LEVEL3           150;
DANGER_LEVEL4           1500;
DANGER_LEVEL5           10000;

Puedes cambiar estos niveles dependiendo del nivel de sensibilidad que deseas que psad utilice para las alertas.

También puedes configurar la sensibilidad del psad a través del parámetro PORT_RANGE_SCAN_THRESHOLD. Esto determina el número de puertos en un rango que debe analizarse antes de que se genere una alerta. El valor predeterminado es que se genera una alerta después de escanear dos puertos.

PORT_RANGE_SCAN_THRESHOLD       1;

Una de las cosas más importantes a configurar es el parámetro IPT_SYSLOG_FILE, ya que actualmente no apunta a un archivo que syslog utiliza de forma predeterminada.

Modifica esto para apuntar al archivo syslog, donde psad realmente tendrá la oportunidad de ver los registros activos:

IPT_SYSLOG_FILE         /var/log/syslog;

Si utilizas ciertos puertos para cosas como el  port knocking, deberías indicarle a psad que ignore los intentos en estos puertos para que no active alertas a través de actividades de rutina:IGNORE_PORTS            ports_or_range_to_ignore;
También puedes ignorar los mensajes basados en otras cosas a través de los parámetros IGNORE_PROTOCOLS, IGNORE_INTERFACES e IGNORE_LOG_PREFIXES apropiadamente denominados.

Si descubres que recibes alertas con demasiada frecuencia, puedes establecer el umbral en los correos electrónicos ajustando el nivel que debe alcanzarse antes de enviar un correo electrónico:

MIN_DANGER_LEVEL           1;  # Controls psad logging and email alerts
EMAIL_ALERT_DANGER_LEVEL   1;  # Applies only for email alerts

También puedes limitar el número de correos electrónicos directamente estableciendo esto:

EMAIL_LIMIT                0;

Cero significa que no hay límite. Este límite es el número de correos electrónicos que pueden generar las amenazas desde una única dirección IP.

Por el momento, vamos a guardar y cerrar el archivo.

Implementar PSAD

Ahora que tenemos una configuración básica de psad en su lugar, completa con capacidades de alerta, podemos implementar nuestras políticas y activar nuestro sistema.

Antes de comenzar debemos actualizar las definiciones de las firmas de psad para que reconozcan correctamente los tipos de ataque conocidos.Podemos hacer esto con el comando:

$ sudo psad --sig-update

Esto buscará los archivos más recientes y actualizará la base de datos.

Ahora, necesitamos reiniciar el servicio para usar estas actualizaciones e implementar nuestros cambios de configuración.

$ sudo service psad restart

Esto implementará nuestro monitoreo de registros. Para ver el estado actual de eventos detectados por psad, escribe:

$ sudo service psad status

También podemos ver que los eventos detectados se registran en archivos ubicados en /var/log/psad/.
Por ejemplo con un TAILF.

Podemos ver los registros con el comando:

$ sudo psad -S

Banear una IP

Ahora que hemos verificado que podemos detectar actividad que intenta acceder a nuestro servidor, podemos implementar opcionalmente un mecanismo de prevención donde psad puede modificar automáticamente las reglas de iptables para prohibir los escáneres.
Antes de hacer esto, deberíamos echar un vistazo al archivo auto_dl:

$ sudo nano /etc/psad/auto_dl

Este archivo especifica qué nivel de peligro debemos configurar automáticamente ciertas direcciones IP. Por ejemplo, si tenemos un atacante que intenta continuamente escanear nuestro sistema, podemos configurarlos automáticamente al nivel de peligro 5:

attacker_ip          5;

Por otro lado, básicamente puede eximir ciertas direcciones IP de provocar una reacción de psad. Podríamos añadir el localhost aquí y ponerlo a "0" si no hubiéramos añadido una regla en nuestros iptables explícitamente.

Para nuestros propósitos, ya que vamos a configurar psad para bloquear automáticamente el tráfico de una IP de amenaza detectada, debemos agregar nuestro ordenador personal a esta lista para que no nos bloqueemos:

local_computer_ip        0;

Guarda y cierra el archivo cuando hayas terminado.
Abre de nuevo el archivo de configuración del psad:

$ sudo nano /etc/psad/psad.conf

Busca el parámetro ENABLE_AUTO_IDS. Esta es la regla que permite a psad modificar nuestro firewall para bloquear ciertas direcciones. Si deseas hacer esto automáticamente, puedes cambiarlo de esta manera:

ENABLE_AUTO_IDS         Y;

A continuación, queremos decidir qué constituye un nivel de amenaza lo suficientemente grande como para bloquear la IP ofensiva. Podemos hacerlo ajustando este parámetro:

AUTO_IDS_DANGER_LEVEL       5;

Otra opción importante es el tiempo total de bloqueo en segundos:

AUTO_BLOCK_TIMEOUT          3600;

Esto los bloqueará por una hora por defecto.

PoC:

Atacante -- 192.168.1.88/24
Servidor -- 192.168.1.6/24

$ sudo nano /etc/psad/auto_dl

192.168.1.88/24       5;

Podemos probar cómo funciona esto, prohibiéndonos temporalmente. En el mismo archivo de configuración, vamos a establecer estos parámetros:
$ sudo nano /etc/psad/psad.conf

ENABLE_AUTOIDS              Y;
AUTO_IDS_DANGER_LEVEL       4;
AUTO_BLOCK_TIMEOUT          60;

Esto activará la configuración automática del cortafuegos, fijará el umbral al nivel de peligro 4,  con una exploración normal de SYN, y fijamos el tiempo del bloqueo por 60 segundos.
Reiniciamos el servicio:

$ sudo service psad restart

Y lanzamos un nmap desde otra máquina:

$ sudo nmap -PN -sS 192.168.1.6

El servidor bloqueará esa IP por 60 segundos.


Comprobamos el IPTABLES con: $ sudo iptables -S


Previous Post
Next Post

post written by:

0 comentarios: