Utilizar Psad para Detectar Intentos de Intrusión de Red en un servidor Ubuntu

Actualizado el . Posteado en Tutoriales/VideoTutoriales. Visitado 3198 veces.

                                  Psad Intentos de Intrusión de Red Ubuntu

Introducción


Detectar la actividad de la 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 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.

En esta guía, exploraremos cómo instalar y configurar psad en un servidor Ubuntu. Los procedimientos deben ser bastante similares en otras distribuciones.

Instalar Psad


El sistema de detección de intrusiones de psad está disponible en los repositorios predeterminados de Ubuntu, por lo que se puede adquirir fácilmente a través de apt:

sudo apt-get update
sudo apt-get install psad

Para configurar la entrega de correo para alertar al administrador, se le pedirá que configure el servidor de correo postfijo.

En la mayoría de los casos, puede seleccionar "Sitio Internet" y, a continuación, introducir el nombre de dominio asociado con su servidor. Esta será la parte del dominio del nombre utilizado en el campo "De" en los mensajes de correo electrónico generados por psad.

Configurar Reglas de IPTables


La forma en que psad detecta la actividad en los puertos de su servidor es mediante la supervisión de los registros producidos por una aplicación de Firewall. Ubuntu se entrega con el Firewall iptables de forma predeterminada, pero está completamente desconfigurado y no supervisa ni bloquea nada por defecto.

Aunque podría salir corriendo escribiendo 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 ingresó las reglas anteriores, limpie las reglas antes de configurarlas para que podamos empezar desde cero.

sudo iptables -F

Puede ver las reglas actuales (que sólo deberían incluir las políticas predeterminadas en este momento) escribiendo:

sudo iptables -S

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

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ñada 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 haya 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 de 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 necesita limpiar su iptables y configurar una política DROP (en lugar de agregarla como una regla en la parte inferior de la cadena), debe invertir la política antes de limpiar:

sudo iptables -P INPUT ACCEPT
sudo iptables -F

Si no lo hace, 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 su conexión SSH.

De forma predeterminada, iptables no mantiene sus reglas entre los reinicios, así que después de haber probado su 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

Configurar Psad para Detectar Exploraciones


Ahora que tenemos un conjunto de reglas de iptables configurado con lo que se llama una política de "drop default", podemos comenzar a configurar psad para comenzar a analizar los registros.

Abra el archivo de configuración principal de psad con privilegios de root:

sudo nano /etc/psad/psad.conf

Las primeras cosas que debe modificar están en la parte superior del archivo. Debe 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 su dominio para que haga referencia a la computadora correcta:

code>EMAIL_ADDRESSES     Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo., Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.;

HOSTNAME            your_domain.com;

Asegúrese de terminar cada una de sus líneas con un punto y coma (;) para que psad lea el archivo correctamente.

Una sección que probablemente querrá echar un vistazo es a las declaraciones de "danger levels". Estos niveles son una forma de psad clasificar los niveles de amenaza.

Ellos son automáticamente determinados por el número de paquetes involucrados en un evento, pero también puede 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;

Puede cambiar estos niveles dependiendo del nivel de sensibilidad que desea que psad utilice para las alertas.

También puede 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.

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

IPT_SYSLOG_FILE         /var/log/syslog;

Si utiliza puertos para cosas como el "port knocking", debería 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 puede 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 descubre que recibe alertas con demasiada frecuencia, puede 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 puede 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 Detección de Intrusiones


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. Así:

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. Tipo:

sudo service psad restart

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

sudo service psad status

[+] psadwatchd (pid: 3737)  %CPU: 0.0  %MEM: 0.0
    Running since: Fri Jan 10 15:36:04 2014

[+] psad (pid: 3735)  %CPU: 0.0  %MEM: 0.3
    Running since: Fri Jan 10 15:36:04 2014
    Command line arguments: [none specified]
    Alert email address(es): Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.

[+] Version: psad v2.1.7

[+] Top 50 signature matches:
        [NONE]

[+] Top 25 attackers:
        [NONE]

[+] Top 20 scanned ports:
        [NONE]

[+] iptables log prefix counters:
        [NONE]

    Total packet counters: tcp: 0, udp: 0, icmp: 0

[+] IP Status Detail:
        [NONE]

    Total scan sources: 0
    Total scan destinations: 0

[+] These results are available in: /var/log/psad/status.out

Como se puede ver, todavía no se ha encontrado nada. También podemos ver que los eventos detectados se registran en archivos ubicados en /var/log/psad/ .

Realizar una Exploración de Puerto de Prueba


Desde otra computadora, debemos tratar de escanear los puertos de nuestro servidor para generar algunos impactos en el Firewall. Podemos hacer esto con la utilidad nmap .

Haremos una exploración del puerto del tcp de SYN de otra computadora. Le diremos que asuma que nuestro anfitrión está pasando la opción -PN :

sudo nmap -PN -sS server_domain_or_ip 
Starting Nmap 5.51 ( http://nmap.org ) at 2014-01-10 15:54 EST
Nmap scan report for server_domain_or_ip
Host is up (0.013s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 6.84 seconds

Como puede ver, esta exploración indica lo que configuré para mi Firewall. Cada puerto está etiquetado como "filtrado", indicando que está protegido por un Firewall, excepto el puerto SSH, que está expuesto.

En su servidor, debe volver a ejecutar el comando status:

sudo service psad status

Debería ver una lista mucho mayor de alertas. Debido a que el evento fue sólo una exploración de 1000 puertos, provocó una coincidencia de firmas para una gran cantidad de amenazas diferentes. Para un ataque más señalado, que se centra en un puerto específico o punto de entrada, la firma sería mucho más útil.

Si configura alertas por correo electrónico, también debería haber recibido un correo electrónico o dos. Si tiene un dominio asociado con la computadora que ha escaneado, debería ver un informe "quién es" en el propietario asociado con la exploración.

Puede utilizar esto para intentar ponerse en contacto con el propietario de la IP o tal vez el ISP o proveedor de alojamiento.

Implementar la Prevención de Intrusiones


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 sondear nuestro sistema, podemos ponerlos al nivel de peligro 5 automáticamente:

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;

Guarde y cierre el archivo cuando haya terminado.

Abra de nuevo el archivo de configuración del psad:

sudo nano /etc/psad/psad.conf

Busque el parámetro ENABLE_AUTO_IDS . Esta es la regla que permite a psad modificar nuestro Firewall para bloquear ciertas direcciones. Si desea hacer esto automáticamente, puede 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.

Prueba de Prevención de Intrusiones


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

ENABLE_AUTOIDS              Y;
AUTO_IDS_DANGER_LEVEL       4;
AUTO_BLOCK_TIMEOUT          60;

Esto activará la configuración automática del Firewall, fijará el umbral al nivel 4 del peligro, que golpeamos con una exploración normal de SYN, y fijamos el tiempo del bloque por 60 segundos.

Guardar y cerrar el archivo.

Abra el archivo auto_dl si ha agregado su dirección IP doméstica y auto_dl temporalmente.

# local_computer_ip      0;

Ahora, reinicie psad para que vuelva a leer estos archivos:

sudo service psad restart

Desde su computadora de casa, puede volver a ejecutar la exploración que hizo la última vez:

sudo nmap -PN -sS server_domain_or_ip 

En este punto, después de unos segundos, si está conectado a su computadora psad a través de SSH, su conexión debe ser eliminada. No podrá volver a conectarse durante 60 segundos.

Esto es porque el psad tomó la acción cuando su exploración había golpeado bastantes puertos para golpear el nivel de peligro 4. Modificó las reglas de iptables para desviar el tráfico a otras cadenas que bloqueaban temporalmente tu IP.

Una vez que puedas iniciar sesión nuevamente, puedes ver los restos de este desvío comprobando tus reglas iptables:

sudo iptables -S

-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N PSAD_BLOCK_FORWARD
-N PSAD_BLOCK_INPUT
-N PSAD_BLOCK_OUTPUT
-A INPUT -j PSAD_BLOCK_INPUT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -j LOG
-A FORWARD -j PSAD_BLOCK_FORWARD
-A FORWARD -j LOG
-A OUTPUT -j PSAD_BLOCK_OUTPUT

Como puede ver, se crearon más cadenas y todos los insumos se dirigieron a una de estas cadenas. Durante la prohibición, esta cadena habría caído los intentos de conexión para la IP de su conexión de casa.

Ahora que ha probado esta funcionalidad, vuelva a volver a lo que desea utilizar. Probablemente debería aumentar la duración de la prohibición si está planeando realmente usar esta funcionalidad. Además, debe volver a agregar las direcciones IP que sabe que se conectará a:

local_computer_ip           0;
ENABLE_AUTOIDS              Y;
AUTO_IDS_DANGER_LEVEL       5;
AUTO_BLOCK_TIMEOUT          3600;

No olvide reiniciar psad cuando haya terminado de configurar su servicio para la aplicación del mundo real:

sudo service psad restart

Tenga en cuenta que existen ciertos tipos de ataques que pueden falsear la dirección IP de origen. Esto significa que un atacante que sospecha que tiene la funcionalidad de autobloqueo habilitada podría causar la prohibición accidental de sitios o servicios legítimos.

Conclusión


Al configurar correctamente una herramienta de detección de intrusiones de red como psad, aumenta sus probabilidades de obtener las advertencias necesarias sobre amenazas antes de que un problema realmente suceda. Herramientas como psad puede darle advertencia avanzada y puede hacer frente a algunas situaciones de forma automática.

La clave para usar psad eficazmente es configurar los niveles de peligro y alertas de correo electrónico de manera adecuada, y luego hacer un seguimiento de cualquier problema.

 

Fuente. Artículo traducido y con muy ligeras modificaciones de: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian

licencia creative common
Este trabajo está licenciado por Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Sobre el Autor
Pipe Peña
Author: Pipe Peña
Soy un loco enamorado de la vida. Licenciado en Ciencias Sociales y Humanas, amante de la informática y la astrofísica. Me gusta crear e investigar proyectos que enriquezcan la construcción y desarrollo del conocimiento individual y colectivo. Me encantan los videojuegos, el cine, la química, matemáticas, la física cuántica y la música, en donde actualmente soy compositor. Me baso en la idea que toma Baruch Spinoza sobre Dios.

Imprimir


Comentar este artículo en los foros (0 respuestas).