Detector De Barrido De Puertos: Sistema Para Detectar Excesivos
Intentos De Conexión Tcp Y Udp Entre Dos Equipos
Abstract. Los barridos de puertos son una señal inconfundible de
que algo esta mal en una red. La detección temprana de que esta sucediendo uno
de estos puede ayudar a los administradores a vigilar más de cerca algún punto
en particular de la red. Existen varias técnicas de barrido de puertos, pero
todas comparten un mismo grupo de información con el cual se puede crear un
pequeño y simple algoritmo que rastree los patrones de actividad asociadas al
barrido de puertos.
1 Introducción
Para
que un atacante acceda un equipo, recorre cuatro fases de actividad: recolecta
información acerca del objetivo, obtiene el acceso, escala privilegios y
finalmente si esa es su intención, daña el sistema.
En este documento se describe una de las actividades
que se emplea con mayor frecuencia para obtener información de los equipos que
hay en una red, y se indica cómo podría detectarse si ésta ocurre.
En la primera fase, el atacante, conocido en el mundo
de la informática como Hacker, pretende encontrar equipos dentro de una
red que por falta de conocimientos o exceso de confianza de parte del propietario,
se encuentren vulnerables. Trata de obtener la mayor cantidad posible de
información acerca de esos equipos (contenido, contraseñas, etc). Esto se puede
lograr revisando la información publicada por la misma corporación, también
puede emplear simples o muy elaboradas técnicas de ingeniería social con los
empleados de la compañía para obtener datos importantes que le evite grandes
esfuerzos, o también puede utilizar herramientas automatizadas que hacen
revisiones completas sobre rangos de direcciones electrónicas.
Una de las técnicas que dieron origen a esta
investigación es la conocida como “Barrido
de puertos”. Con esta técnica, el intruso pretende obtener una lista de
equipos activos dentro de un rango de direcciones y conocer los puertos abiertos
que cada máquina tiene.
La lista de puertos abiertos es importante pues en la
gran mayoría de los casos, cada puerto está asignado a un servicio conocido,
por ejemplo, el puerto 80 es usado para el protocolo http, los puertos
137 y 139, son usados para comunicaciones NETBIOS, hay otros puertos
“bien conocidos” (well known ports) que se dejan abiertos por
aplicaciones creadas por personas con malas intenciones, por ejemplo, el puerto
12345 es usado por el programa Netbus, una aplicación que abre una “puerta trasera”
(back door) en el sistema, una vez hecho esto, el atacante solo necesita
conectarse a la aplicación para obtener control total y absoluto del equipo.
Cuando el atacante sabe cuáles servicios están activos
en un sistema, entonces puede sacar conclusiones sobre las vulnerabilidades que
puede contener cada servicio y explotarlas hasta tener el acceso. Esto quiere
decir que entre más puertos abiertos haya en un equipo, hay más puertas por las
que se puede entrar.
2 Funcionamiento técnico del barrido de puertos
El
procedimiento es sencillo, un equipo atacante (equipo A) va a intentar realizar
una conexión a cada puerto del equipo víctima (equipo V) por medio de los
protocolos UDP y TCP, y si el puerto se encuentra abierto con un servicio
activo, entonces el equipo V enviará una respuesta al equipo A.
Cada sistema puede tener un total de 65535 puertos
disponibles, por lo que un barrido de
puertos en una sola computadora puede ser una tarea prolongada, usualmente el
barrido de puertos se realiza con el apoyo de una herramienta que permita
hacerlo de diferentes formas, ya sea en base a una lista de números conocidos
asociados a un servicio en particular (21 ftp, 23, telnet, 25 smtp,
80 http, etc.), o cubriendo todos los puertos o rangos de valores (0 –
65535).
Las herramientas que se usan para ello, hacen el
proceso de una forma muy rápida, utilizan paquetes IP muy cortos (~60 bytes)
que contienen una petición de conexión entre un par de puertos del protocolo
TCP o UDP.
El paquete contiene 4 datos que son importantes, la IP
del atacante, la IP de la víctima, el puerto de destino en la máquina de la
víctima, y el puerto de comunicación que está usando la máquina del atacante.
Hay dos escenarios en los que puede realizarse el barrido de puertos:
Caso
1:
Cuando el atacante utiliza un solo
puerto de comunicaciones para conectarse al objetivo, hay una solicitud de
conexión hacia cada uno de los puertos, el siguiente intento de conexión se
realiza hasta que se recibe la respuesta, esto hace que el barrido de los
puertos sea tardado, pero resulta igualmente efectivo.
Caso
2:
El equipo atacante abrirá un puerto por cada puerto
que quiera revisar del equipo víctima, de esta forma el barrido se hace mas
rápido.
En ambos casos, entre la máquina del atacante y la
máquina de la víctima, siempre habrá una comunicación entre un par de puertos
diferentes en un lapso de tiempo pequeño, y, serán siempre un número grande de
enlaces comparados con los que normalmente se ven en una red, ya sea que se
haga la búsqueda en base a una lista de números o por rangos de valores.
El tráfico que se genera entre las dos máquinas puede
ser fácilmente detectado en un segmento de red que maneje un medio de
comunicación común para los equipos como las redes ethernet de bus
lineal y de concentradores.
Conociendo cómo se generan los barridos de puertos, se
creó un sistema que escucha el tráfico de una red (sniffer), revisa las
comunicaciones entre pares de máquinas y lleva el registro de las conexiones e
intentos de conexión entre pares de puertos a nivel de protocolos UDP y
TCP para analizas y detectar los equipos
que están intentando un número excesivo de conexiones, registrando los
incidentes en una bitácora para análisis futuro.
El sistema generado, centra su principal función en la
organización de la información obtenida filtrando los paquetes sacados de la
red, introduciéndola en una estructura de datos simple pero lo suficientemente
flexible para manejar una gran cantidad de información para analizarla en el
menor tiempo posible.
3 Descripción del sistema.
Empleando
una librería de captura de paquetes que pueda introducirse en un lenguaje de
programación de alto nivel se toman de la red los paquetes generados por las
máquinas conectadas a ella y se filtran para registrar los datos que incluye
cada paquete TCP o UDP enviado entre 2 máquinas.
El registro muestra los datos que forman el paquete
del protocolo; los datos relevantes de esta captura son: la dirección IP
origen, dirección IP destino, el número del puerto origen y el número de puerto
destino.
La estructura de datos donde se almacena la
información está compuesta de la siguiente forma:
3.1 Para almacenar la información se sigue el siguiente
algoritmo:
Cada cierto tiempo, en una frecuencia definida por el
usuario, se recorren los registros de conexiones de cada enlace, decrementando
el valor del tiempo de vida de cada conexión, y si este ha llegado a 0,
entonces se eliminará el registro. En el momento en el que un enlace no tiene
elementos en el arreglo que almacena las conexiones, entonces ese enlace se elimina
de la estructura.
Otra acción que se realiza con la periodicidad
definida por el usuario, permite revisar la estructura contando cuántas
conexiones mantiene cada enlace, si el número de esas conexiones supera a las
que el administrador estableció como un máximo, entonces se registrará en la
bitácora una advertencia, con la fecha, hora, las direcciones involucradas y el
número de conexiones que mantenían. También se ha incluido un valor por defecto
como parámetro para determinar la posibilidad de un barrido de puertos. Este
número es de veinticinco, pues fue el menor número de conexiones que se
realizaban de manera predeterminada por algunas de las herramientas disponibles
para barrido de puertos.
Cada cierto tiempo, se despliega en pantalla la
información contenida en la estructura, indicando las direcciones que se están
comunicando y la lista de puertos que intentaron conectarse. Con base en un
parámetro definido por el administrador, se pueden indicar los detalles del
enlace o solo indicar con números el estado actual de las conexiones.
4 Restricciones
Aunque
la intención de esta aplicación es lograr que el almacenamiento y el análisis
de los datos se realiza lo más rápido posible y de una forma eficiente, entre
mas información se vaya acumulando en la estructura de almacenamiento, el
procedimiento para recorrer la estructura se vuelve cada vez mas lento, esto
puede provocar que el sistema no procese con suficiente velocidad todos los
paquetes que puedan ser capturados. Para evitarlo, se requiere contar con
un equipo muy rápido con gran cantidad
de memoria RAM.
El atacante puede utilizar una técnica de Spoofing
para esconder el origen del barrido de puertos, pero aun así, se puede detectar
cuando esta sucediendo uno y sobre todo, el sistema permite conocer cual es el
sistema objetivo, donde se podrán establecer otras medidas de vigilancia.
5 Pruebas
Para realizar pruebas con este algoritmo propuesto, se
creó una aplicación en Borland Delphi 6 para MS Windows. Este sistema se
localizo en una computadora dentro de una red LAN conectada con HUBs, de esta
forma se podrá analizar el tráfico de red que circula por todo ese segmento de
red.
Para generar un barrido de puertos, se utilizo la
popular herramienta NMAP v3.30, con la que se pueden generar diferentes tipos
de barridos de puertos: TCP Connect, TCP SYN Scan, Stealth FIN, Xmas Tree, Null
scan, UDP Scan, ACK Scan, y, Window Scan. [5,6].
Debido a que el algoritmo propuesto no presta mayor
atención a los detalles de la conexión entre dos sistemas, y con solo mantener
el registro de los enlaces entre cada par de puertos, la aplicación fue capaz
de identificar el alto numero de intentos de conexión entre un par de maquinas,
sin importar de que técnica de barrido de puertos se este utilizando.
La misma herramienta NMAP ofrece la posibilidad de
realizar el barrido de puertos con mayor lentitud, con la intención de pasar
desapercibido para los sistemas detectores de intrusos y firewalls. El
algoritmo que se propone también se ve afectado por esta técnica, pues al hacer
un barrido de puertos a muy baja velocidad, el factor del tiempo de vida entre
cada registro de par de puertos termina antes de que se registre un par nuevo
de conexiones, por lo que la cantidad de registros activos no supera el mínimo
determinado para determinar si esta ocurriendo un barrido de puertos.
Para que este algoritmo pueda detectar un barrido de
puertos de baja velocidad, se tendrían que usar valores mas altos del factor de
tiempo de vida de cada registro de par de puestos, ó, establecer un valor menor
del factor que sirve como referencia para determinar si hay exceso de
conexiones entre dos direcciones.
Estableciendo el tiempo de vida con un valor mas alto,
se logra que los registros se mantengan por mas tiempo y se puede detectar el barrido
de puertos, pero aumenta el riesgo de que se registren falsos positivos al
mantener los registros de un usuario normal con comunicaciones muy activas como
las usadas por el Kazzaa.
6 Conclusiones
Muchas
veces, una actividad como el barrido de puertos pasa desapercibida para el
administrador de una red debido a que se utilizan procesos de comunicación
“legales” dentro de ella, de forma que se confunden con el tráfico normal de
los usuarios y no pueden darse cuenta de que están siendo observados por un
posible intruso.
La aplicación creada y descrita en este documento,
puede crecer aún mas hasta convertirse en un buen Sistema Detector de
Intrusos (IDS, Intrusion Detection System) que permita obtener mas
información sobre los atacantes; o desarrollarse hasta incluir un poco de
“inteligencia” para tomar decisiones como el enlace a otros equipos de la red
con el fin de realizar alguna acción de defensa y convertirse en lo que se
conoce como un Sistema de Medidas Electrónicas Contra intrusos (ICE, Intruder
Counter-measure Electronics).
La investigación está en progreso y los atacantes se
multiplican cada día, es necesario tener conciencia del peligro que pueda
representar la ociosidad de jóvenes que al tener herramientas gratuitas
disponibles en diversos sitios por internet no duden en probarlas en las redes
que tienen al alcance sin importar el giro de la empresa, afectando
laboralmente a los usuarios. El exceso de confianza también es un atacante que
se tiene que combatir.
6
Referencias
1 Hatch,
B.,& James B. L. (2001) Hacking Linux Exposed. McGraw-Hill Osborne
Media.
2 Scambray,
J., & McClure, S. (2002). Hacking Exposed Windows 2000. McGraw-Hill
Osborne Media.
3 Schiffman, M. Hackers,(2002). 20 desafíos
prácticos. Ed. McGraw-Hill
Osborne Media.
4 McClure, S., & Scambray J., Hackers, Secretos y
soluciones para la seguridad de redes.(2000). Ed. McGraw-Hill Osborne Media.
5 Fyodor
(2003) Nmap network security scanner man
page
6 Fyodor
(1997) The Art of Port Scanning