Se trata de un decoder útil para protocolos FTP y Telnet, permitiendo a Snort inspeccionar flujos de datos de ambos protocolos de una forma unificada desde un solo preprocessor (ftp_telnet). Este preprocessor identifica comandos FTP y sus respuestas así como secuencias de escape de Telnet y normalización de campos, del mismo modo que el proprocessor HTTP Inspect, FTP/Telnet inspecciona tanto las peticiones enviadas por un cliente como la respuesta del servidor. Del mismo modo que otros preprocessors definidos en Snort, FTP/Telnet funciona en las bases de procesamiento sin estado (stateless), lo que significa que solamente inspecciona la información contenida en cada uno de los paquetes enviados y recibidos sin almacenar la secuencia completa en buffers y/o otros mecanismos similares, así como también funciona en las bases de procesamiento con estado (stateful) donde cada paquete es reconstruido para formar parte de los que se han enviado anteriormente con el fin de “remotar” los datos completos de los paquetes enviados de forma correcta. El procesamiento con estado es el valor por defecto en Snort.

Del mismo modo que ocurre con HTTP Inspect, es posible establecer diferentes preprocessors FTP/Telnet para configuraciones de varios servidores en el entorno de red, así como también diferentes configuraciones para usuarios.

Este preprocessor tiene 4 tópicos de configuración independientes con el fin de hacer que funcione correctamente, estos son: Global, Telnet, FTP Server y FTP Client

Configuración Global

Se trata de opciones de configuración que determinan la funcionalidad global del modulo ftp/telnet, solamente puede existir una única configuración de este tipo y debe ser declara justo antes de las otras 3 áreas de configuración anteriormente indicadas, a continuación se indican los atributos que soporta

inspection_type <stateful | stateless> Indica el tipo de inspección: Stateless o Stateful
encrypted_traffic <yes | no> Esta opción detecta y alerta sobre comandos FTP/Telnet ejecutados sobre canales encriptados.
check_encrypted Indica al preprocesador que continué verificando una sesión encriptada para los comandos ejecutados posteriormente a la finalización de la encriptación.

Configuración Telnet

Se trata de las opciones que se deben indicar para determinar el funcionamiento del preprocesador para el protocolo Telnet. Solamente debe existir una configuración de este tipo para este preprocesador, si existe alguna otra configuración definida posteriormente en el fichero de configuración de Snort, lo que hará será sobrescribir los valores de configuración.

ports {<puerto | puerto>} Se trata de los puertos que se declaran como “trafico telnet” y que serán decodificados por Snort, frecuente el puerto 23 es incluido.
normalize Con esta opción se le indica al preprocesador que debe normalizar el trafico Telnet eliminando las secuencias de escape de Telnet
ayt_attack_thresh < numero> Esta opción generará una alerta cuando un numero consecutivo de AYT (Are You There) alcanza el numero especificado. Solamente funciona cuando el preprocessor esta configurado en modo Stateful
detect_anomalies Detecta el comportamiento anómalo en algunas versiones de Telnet que omiten la correspondencia de un SB (subnegotation Begin) y un SE (Subnegotation End) lo que en algunos casos puede llevar a permitir que un atacante pueda evadir restricciones, Puesto que FTP utiliza el protocolo Telnet en el control de la conexión, también es susceptible a este comportamiento. Esta opción activa las alertas cuando un SB de telnet no corresponda con un SE. Es altamente recomendado utilizar esta opción

Configuración de FTP Server

Del mismo modo que HTTP Inspect, existen dos modos de configuración para servidor: Default y por dirección IP. Las opciones de configuración de este modulo son:

ports {<puerto> | <puerto> } Indica cuales puertos decodificar como trafico FTP, frecuentemente se especifica el puerto 21
print_cmds Opción que permite que durante la inicialización, se impriman cada una de las configuraciones de los comandos FTP para este servidor.
ftp_cmds {cmd[cmd]} Por defecto el preprocessor alerta cuando encuentra un comando FTP que no esta permitido por el servidor, esta opción solamente extiende el listado de comandos FTP permitidos de la lista por defecto
def_max_param_len <numero> Se trata de la longitud por defecto máxima de los parámetros de comandos FTP, empleado frecuentemente para evitar explotación de Buffer Overflow.
alt_max_param_len <numero> {cmd[cmd]} Se trata de la longitud máxima de los comandos FTP especificados, permitiendo limitar de una forma mas detallada los parámetros que podrán recibir determinados comandos.
chk_str_fmt {cmd[cmd]} Ejecuta el chequeo de ataques por formato de cadenas en los comandos FTP especificados.
cmd_validity cmd < fmt > Especifica el formato valido para los parámetros de un comando determinado, el formato debe estar entre “<” y “>”
telnet_cmds <yes | no> Activa la detección y generación de alertas cuando secuencias de escape de Telnet son detectadas en el canal de comandos FTP
ignore_telnet_erase_cmds <yes|no> Permite que Snort ignore secuencias de escape de Telnet para normalizar comandos FTP.

Configuración FTP Client

De forma similar a la configuración FTP Server, este tipo de configuración puede tener dos valores: Default y por dirección IP. A continuación se indican las opciones de configuración de este modulo.

max_resp_len <numero> Especifica la longitud máxima de respuesta permitida en un comando FTP aceptado por el cliente, se utiliza con el fin de evitar explotación de Buffer Overflow.
bounce <yes|no> Activa la detección y alarma de ataques FTP Bounce, este tipo de ataques ocurren cuando el comando PORT y el host especificado no coinciden con el host del cliente.
bounce_to < CIDR,[puerto|puerto_inferior,puerto_superior] > Funciona cuando la opción bounce se encuentra activada y permite que el comando PORT use una dirección IP determinada y el puerto indicado (puerto simple o rango de puertos) sin generar ningún tipo de alerta, esta opción es útil cuando se utilizan conexiones FTP a través de un proxy.
telnet_cmds <yes|no> Esta opción activa la detección y alerta cuando secuencias de escape telnet son detectadas en el canal de comandos FTP

Ahora se pueden indicar ejemplos de configuración de estos 4 módulos en orden de establecer las reglas de seguridad de Snort para protocolos FTP y TELNET.

CONFIGURACION GLOBAL

1. Tipo de inspección con estado y no detecta comandos sobre canales encriptados TLS/SSL

preprocessor ftp_telnet: global inspection_type stateful encrypted_traffic no

2. Tipo de inspección sin estado y detecta comandos sobre canales encriptados TLS/SSL

preprocessor ftp_telnet: global inspection_type stateless encrypted_traffic yes

CONFIGURACION TELNET

1. Especificación de AYT de 20 intentos consecutivos, normalización de secuencias de escape Telnet, decodificación de trafico telnet por el puerto 23 y detección de anomalías SB/SE

preprocessor ftp_telnet_protocol: telnet \

ayt_attack_thresh 20 \

normalize ports { 23 } \

detect_anomalies

CONFIGURACION FTP SERVER

1. Definición de Servidor FTP por dirección IP, definición de longitud máxima de parámetros de 100 (def_max_param_len), puertos para decodificación de trafico FTP en los puertos 21 y 2100 (ports { 21 2100 }), Activación de detección de secuencias de escape telnet (telnet_cmds yes \), Listado de comandos FTP aceptados (ftp_cmds), Definición de longitud máxima para los parámetros de los comandos FTP especificados (alt_max_param_len), Chequeo de ataques con formato de cadenas sobre los comandos especificados (chk_str_fmt), Especifica el formato valido para los comandos especificados (cmd_validity)

preprocessor ftp_telnet_protocol: ftp server 192.168.1.34 \

def_max_param_len 100 \

ports { 21 2100 } \

telnet_cmds yes \

ftp_cmds { ABOR ACCT ADAT ALLO APPE AUTH CCC CDUP } \

ftp_cmds { CEL CLNT CMD CONF CWD DELE ENC EPRT } \

ftp_cmds { EPSV ESTA ESTP FEAT HELP LANG LIST LPRT } \

ftp_cmds { LPSV MACB MAIL MDTM MIC MKD MLSD MLST } \

ftp_cmds { MODE NLST NOOP OPTS PASS PASV PBSZ PORT } \

ftp_cmds { PROT PWD QUIT REIN REST RETR RMD RNFR } \

ftp_cmds { RNTO SDUP SITE SIZE SMNT STAT STOR STOU } \

ftp_cmds { STRU SYST TEST TYPE USER XCUP XCRC XCWD } \

ftp_cmds { XMAS XMD5 XMKD XPWD XRCP XRMD XRSQ XSEM } \

ftp_cmds { XSEN XSHA1 XSHA256 } \

alt_max_param_len 0 { ABOR CCC CDUP ESTA FEAT LPSV NOOP PASV PWD QUIT REIN STOU SYST XCUP XPWD } \

alt_max_param_len 200 { ALLO APPE CMD HELP NLST RETR RNFR STOR STOU XMKD } \

alt_max_param_len 256 { CWD RNTO } \

alt_max_param_len 400 { PORT } \

alt_max_param_len 512 { SIZE } \

chk_str_fmt { ACCT ADAT ALLO APPE AUTH CEL CLNT CMD } \

chk_str_fmt { CONF CWD DELE ENC EPRT EPSV ESTP HELP } \

chk_str_fmt { LANG LIST LPRT MACB MAIL MDTM MIC MKD } \

chk_str_fmt { MLSD MLST MODE NLST OPTS PASS PBSZ PORT } \

chk_str_fmt { PROT REST RETR RMD RNFR RNTO SDUP SITE } \

chk_str_fmt { SIZE SMNT STAT STOR STRU TEST TYPE USER } \

chk_str_fmt { XCRC XCWD XMAS XMD5 XMKD XRCP XRMD XRSQ } \

cmd_validity ALLO < int [ char R int ] > \

cmd_validity EPSV < [ { char 12 | char A char L char L } ] > \

cmd_validity MACB < string > \

cmd_validity MDTM < [ date nnnnnnnnnnnnnn[.n[n[n]]] ] string > \

cmd_validity MODE < char ASBCZ > \

cmd_validity PORT < host_port > \

cmd_validity PROT < char CSEP > \

CONFIGURACION FTP CLIENT

1. Definición de Cliente FTP por defecto, especifica la longitud máxima de la respuesta (max_resp_len 256), activa la detección y alarma de ataques FTP Bounce (bounce yes), Detecta secuencias de escape Telnet (telnet_cmds yes )

preprocessor ftp_telnet_protocol: ftp client default \

max_resp_len 256 \

bounce yes \

telnet_cmds yes

2. Definición de Cliente FTP por dirección IP, especifica la longitud máxima de la respuesta (max_resp_len 512), activa la detección y alarma de ataques FTP Bounce (bounce yes)

preprocessor ftp_telnet_protocol: ftp client 192.168.1.33 \

max_resp_len 512 \

bounce yes

Como anotación final, la configuración de FTP Server, al igual que ocurría con la configuración de HTTP Inspect Server, necesita tener definido como mínimo un modulo con configuración Default, de otro modo Snort lanzará un error en el arranque. En este orden de ideas es muy frecuente encontrar varias configuraciones de servidores, algunas con direcciones IP y una con una configuración por defecto que contenga las opciones para los demás servidores que no cuentan con una configuración propia por dirección IP.

Una vez que Snort arranque, se producirán alarmas sobre eventos anormales con un nivel de prioridad y una descripción del evento, por ejemplo:

06/21-23:55:12.399997 [**] [125:2:1] (ftp_telnet) Invalid FTP Command [**] [Priority: 3] {TCP} 192.168.1.33:45528 -> 192.168.1.34:2106/22-00:00:41.484699 [**] [125:4:1] (ftp_telnet) FTP command parameters were malformed [**] [Priority: 3] {TCP} 192.168.1.33:45528 -> 192.168.1.34:21