Document Details

Uploaded by Deleted User

Tags

network security TCP/IP cyber attacks computer networks

Full Transcript

Seguridad TEMA 9: ATAQUES CONTRA REDES TCP/IP Introducción Durante los primeros años de internet, los ataques a sistemas informáticos requerían pocos conocimientos técnicos. Por un lado, los ataques realizados desde el interior de la red se basaban en la alteración de permisos para modificar la i...

Seguridad TEMA 9: ATAQUES CONTRA REDES TCP/IP Introducción Durante los primeros años de internet, los ataques a sistemas informáticos requerían pocos conocimientos técnicos. Por un lado, los ataques realizados desde el interior de la red se basaban en la alteración de permisos para modificar la información del sistema. Por el contrario, los ataques externos se producían gracias al conocimiento de las contraseñas necesarias para acceder a los equipos de la red. Con el paso de los años se han ido desarrollando nuevos ataques cada vez más sofisticados para explotar vulnerabilidades tanto en el diseño de las redes TCP/IP como en la configuración y operación de los sistemas informáticos que conforman las redes conectadas a internet. Estos nuevos métodos de ataque se han ido automatizando, por lo que en muchos casos solo se necesita un conocimiento técnico muy básico para realizarlos. Introducción Cualquier usuario con una conexión a internet tiene acceso hoy en día a numerosas aplicaciones para realizar estos ataques y las instrucciones necesarias para ejecutarlos. En la mayor parte de la bibliografía relacionada con la seguridad en redes informáticas podemos encontrar clasificadas las tres generaciones de ataques siguientes: Primera generación: ataques físicos. Encontramos aquí ataques que se centran en componentes electrónicos, como podrían ser los propios ordenadores, los cables o los dispositivos de red. Actualmente se conocen soluciones para estos ataques, utilizando protocolos distribuidos y de redundancia para conseguir una tolerancia a fallos aceptable. Segunda generación: ataques sintácticos. Se trata de ataques contra la lógica operativa de los ordenadores y las redes, que quieren explotar vulnerabilidades existentes en el software, algoritmos de cifrado y en protocolos. Aunque no existen soluciones globales para contrarrestar de forma eficiente estos ataques, podemos encontrar soluciones cada vez más eficaces. Introducción Tercera generación: ataques semánticos. Finalmente, podemos hablar de aquellos ataques que se aprovechan de la confianza de los usuarios en la información. Este tipo de ataques pueden ir desde la colocación de información falsa en boletines informativos y correos electrónicos hasta la modificación del contenido de los datos en servicios de confianza, como, por ejemplo, la manipulación de bases de datos con información pública, sistemas de información bursátil, sistemas de control de tráfico aéreo, etc. Antes de pasar a hablar detalladamente de cómo evitar estos ataques desde un punto de vista más técnico, introduciremos en este capítulo algunas de las deficiencias típicas de los protocolos TCP/IP y analizaremos algunos de los ataques más conocidos contra esta arquitectura. Seguridad en redes TCP/IP Seguridad en redes TCP/IP Durante la década de los 60, dentro del marco de la guerra fría, la Agencia de Proyectos de Investigación Avanzada del Departamento de Defensa de los Estados Unidos (DARPA) se planteó la posibilidad de que un ataque afectara a su red de comunicaciones y financió equipos de investigación en distintas universidades con el objetivo de desarrollar una red de ordenadores con una administración totalmente distribuida. Como resultado de la aplicación de sus estudios en redes de conmutación de paquetes, se creó la denominada red ARPANET, de carácter experimental y altamente tolerable a fallos. Más adelante, a mediados de los 70, la agencia empezó a investigar en la interconexión de distintas redes, y en 1974 estableció las bases de desarrollo de la familia de protocolos que se utilizan en las redes que conocemos hoy en día como redes TCP/IP. Seguridad en redes TCP/IP La familia de protocolos TCP/IP se divide en las cuatro capas Seguridad en redes TCP/IP 1) Capa de red. Normalmente está formada por una red LAN (Local Area Network) o WAN (Wide Area Network) (de conexión punto a punto) homogénea. Todos los equipos conectados a internet implementan esta capa. Todo lo que se encuentra por debajo de la IP es la capa de red física o, simplemente, capa de red. 2) Capa de internet (o capa de internetworking). Da unidad a todos los miembros de la red y, por lo tanto, es la capa que permite que todos se puedan interconectar, independientemente de si se conectan mediante línea telefónica o mediante una red local Ethernet. La dirección y el encaminamiento son sus principales funciones. Todos los equipos conectados a internet implementan esta capa. 3) Capa de transporte. Da fiabilidad a la red. El control de flujo y de errores se lleva a cabo principalmente dentro esta capa, que sólo es implementada por equipos usuarios de internet o por terminales de internet. Los dispositivos de encaminamiento o routers (encaminadores) no la necesitan. 4) Capa de aplicación. Engloba todo lo que hay por encima de la capa de transporte. Es la capa en la que encontramos las aplicaciones que utilizan internet: clientes y servidores de web, correo electrónico, FTP. etc. Sólo es implementada por los equipos usuarios de internet o por terminales de internet. Los dispositivos de encaminamiento no la utilizan. Seguridad en redes TCP/IP Sólo los equipos terminales implementan todas las capas. Los equipos intermedios únicamente implementan el nivel de red y el nivel IP Seguridad en redes TCP/IP En cada una de las capas expuestas encontramos protocolos distintos. La situación relativa de cada protocolo en las diferentes capas se muestra en la siguiente figura Seguridad en redes TCP/IP En cada capa del modelo TCP/IP pueden existir distintas vulnerabilidades y un atacante puede explotar los protocolos asociados a cada una de ellas. Cada día se descubren nuevas deficiencias, la mayoría de las cuales se hacen públicas por organismos internacionales, tratando de documentar, si es posible, la forma de solucionar y contrarrestar los problemas. A continuación, presentamos algunas de las vulnerabilidades más comunes de las distintas capas que veremos con más detalle a lo largo de este capítulo: 1) Vulnerabilidades de la capa de red. Las vulnerabilidades de la capa de red están estrechamente ligadas al medio sobre el que se realiza la conexión. Esta capa presenta problemas de control de acceso y de confidencialidad. Son ejemplos de vulnerabilidades a este nivel los ataques a las líneas punto a punto: desvío de los cables de conexión hacia otros sistemas, interceptación intrusiva de las comunicaciones (pinchar la línea), escuchas no intrusivas en medios de transmisión sin cables, etc. Seguridad en redes TCP/IP 2) Vulnerabilidades de la capa internet. En esta capa se puede realizar cualquier ataque que afecte un datagrama IP. Se incluyen como ataques contra esta capa las técnicas de sniffing, la suplantación de mensajes, la modificación de datos, los retrasos de mensajes y la denegación de mensajes. Cualquier atacante puede suplantar un paquete si indica que proviene de otro sistema. La suplantación de un mensaje se puede realizar, por ejemplo, dando una respuesta a otro mensaje antes de que lo haga el suplantado. En esta capa, la autenticación de los paquetes se realiza a nivel de máquina (por dirección IP) y no a nivel de usuario. Seguridad en redes TCP/IP Si un sistema suministra una dirección de máquina errónea, el receptor no detectará la suplantación. Para conseguir su objetivo, este tipo de ataques suele utilizar otras técnicas, como la predicción de números de secuencia TCP, el envenenamiento de tablas caché, etc. Por otro lado, los paquetes se pueden manipular si se modifican sus datos y se reconstruyen de forma adecuada los controles de las cabeceras. Si esto es posible, el receptor será incapaz de detectar el cambio. 3) Vulnerabilidades de la capa de transporte. La capa de transporte transmite información TCP o UDP sobre datagramas IP. En esta capa podamos encontrar problemas de autenticación, de integridad y de confidencialidad. Algunos de los ataques más conocidos en esta capa son las denegaciones de servicio debidas a protocolos de transporte. Seguridad en redes TCP/IP En cuanto a los mecanismos de seguridad incorporados en el diseño del protocolo de TCP (como las negociaciones involucradas en el establecimiento de una sesión TCP), existe una serie de ataques que aprovechan ciertas deficiencias en su diseño. Una de las vulnerabilidades más graves contra estos mecanismos de control puede comportar la posibilidad de interceptación de sesiones TCP establecidas, con el objetivo de secuestrarlas y dirigirlas a otros equipos con tiñes deshonestos. Estos ataques de secuestro se aprovechan de la poca exigencia en el protocolo de intercambio de TCP respecto a la autenticación de los equipos involucrados en una sesión. Así, si un usuario hostil puede observar los intercambios de información utilizados durante el inicio de la sesión y es capaz de interceptar con éxito una conexión en marcha con todos los parámetros de autenticación configurados adecuadamente, podrá secuestrar la sesión. Seguridad en redes TCP/IP 4) Vulnerabilidades de la capa de aplicación. Como en el resto de niveles, la capa de aplicación presenta varias deficiencias de seguridad asociadas a sus protocolos. Debido al gran número de protocolos definidos en esta capa, la cantidad de deficiencias presentes también será superior al resto de capas. Algunos ejemplos de deficiencias de seguridad a este nivel podrían ser los siguientes: Servicio de nombres de dominio. Normalmente, cuando un sistema solicita conexión a un servicio, pide la dirección IP de un nombre de dominio y envía un paquete UDP a un servidor DNS; entonces, éste responde con la dirección IP del dominio solicitado o una referencia que apunta a otro DNS que pueda suministrar la dirección IP solicitada. Un servidor DNS debe entregar la dirección IP correcta, pero, además, también puede entregar un nombre de dominio dada una dirección IP u otro tipo de información. Seguridad en redes TCP/IP En el fondo, un servidor de DNS es una base de datos accesible desde internet. Por lo tanto, un atacante puede modificar la información que suministra esta base de datos o acceder a información sensible almacenada en la base de datos por error, pudiendo obtener información relativa a la topología de la red de una organización concreta (por ejemplo, la lista de los sistemas que tiene la organización). Telnet. Normalmente, el servicio Telnet autentica al usuario mediante la solicitud del identificador de usuario y su contraseña, que se transmiten en claro por la red. Así, al igual que el resto de servicios de internet que no protegen los datos mediante mecanismos de protección, el protocolo de aplicación Telnet hace posible la captura de aplicación sensible mediante el uso de técnicas de sniffing. Seguridad en redes TCP/IP Actualmente existen otros protocolos a nivel de aplicación (como, por ejemplo, SSH) para acceder a un servicio equivalente a Telnet, pero de manera segura (mediante autenticación fuerte). Aun así, el hecho de cifrar el identificador del usuario y la contraseña no impide que un atacante que las conozca acceda al servicio. File Transfer Protocol. Al igual que Telnet, FTP es un protocolo que envía la información en claro (tanto por el canal de datos como por el canal de comandos). Así pues, al enviar el identificador de usuario y la contraseña en claro por una red potencialmente hostil, presenta las mismas deficiencias de seguridad que veíamos anteriormente con el protocolo Telnet. Seguridad en redes TCP/IP Aparte de pensar en mecanismos de protección de información para solucionar el problema, FTP permite la conexión anónima a una zona restringida en la cual sólo se permite la descarga de archivos. De este modo, se restringen considerablemente los posibles problemas de seguridad relacionados con la captura de contraseñas, sin limitar una de las funcionalidades más interesantes del servicio. Hypertext Transfer Protocol. El protocolo HTTP es el responsable del servicio World Wide Web. Una de sus vulnerabilidades más conocidas procede de la posibilidad de entrega de información por parte de los usuarios del servicio. Esta entrega de información desde el cliente de HTTP es posible mediante la ejecución remota de código en la parte del servidor. Seguridad en redes TCP/IP La ejecución de este código por parte del servidor suele utilizarse para dar el formato adecuado tanto a la información entregada por el usuario como a los resultados devueltos (para que el navegador del cliente la pueda visualizar correctamente). Si este código que se ejecuta presenta deficiencias de programación, la seguridad del equipo en el que esté funcionando el servidor se podrá poner en peligro. Actividades previas a la realización de un ataque Actividades previas a la realización de un ataque Previamente a la planificación de un posible ataque contra uno o más equipos de una red TCP/IP, es necesario conocer el objetivo que hay que atacar. Para realizar esta primera fase, es decir, para obtener toda la información posible de la víctima, será necesario utilizar una serie de técnicas de obtención y recolección de información. A continuación, veremos, con algunos ejemplos sencillos, algunas de las técnicas existentes que tanto los administradores de una red como los posibles atacantes, pueden utilizar para realizar la fase de recogida y obtención de información previa a un ataque. Utilización de herramientas de administración La fase de recogida de información podría empezar con la utilización de todas aquellas aplicaciones de administración que permitan la obtención de información de un sistema como, por ejemplo, ping, traceroute, whois, finger, rusers, nslookup, rcpinfo, telnet, dig, etc. La simple ejecución del comando ping contra la dirección IP asociada a un nombre de dominio podría ofrecer al atacante información de gran utilidad. Para empezar, esta información le permitirá determinar la existencia de uno o más equipos conectados a la red de este dominio. Una vez descubierta la existencia de, como mínimo, uno de los equipos del dominio, el atacante podría obtener información relacionada con la topología o la distribución física y lógica de la red, mediante alguna aplicación de administración como, por ejemplo, traceroute. Utilización de herramientas de administración Aunque traceroute es una herramienta de administración pensada para solucionar problemas de red, también se puede utilizar con objetivos deshonestos. Por ejemplo, traceroute se puede emplear para tratar de averiguar qué sistemas existen entre distintos equipos (en este caso, entre el ordenador del atacante y el equipo que se quiere atacar). El funcionamiento de traceroute se basa en la manipulación del campo TTL de la cabecera IP de un paquete, de forma que es capaz de determinar uno a uno los saltos por los que un determinado paquete avanza por la red TCP/IP. El campo TTL actúa como un contador de saltos, viéndose reducido en una unidad al ser reenviado por cada dispositivo de encaminamiento. Así, mediante traceroute se puede llegar a obtener una lista de los elementos de la red recorridos desde una ubicación de origen hasta el sistema de destino Utilización de herramientas de administración Durante esta primera etapa de recogida de información, el atacante también tratará de obtener toda aquella información general relacionada con la organización que hay detrás de la red que se quiere atacar. La recogida de esta información puede empezar extrayendo la información relativa a los dominios asociados a la organización, así como las subredes correspondientes. Esto puede obtenerse fácilmente mediante consultas al servicio de nombre de dominios Si el servidor que ofrece la información de este dominio no se ha configurado adecuadamente, es posible realizar una consulta de transferencia de zona completa, lo cual permitirá obtener toda la información de traducción de direcciones IP a nombres de máquina. Este tipo de consulta puede realizarse con las utilidades host, dig y nslookup, entre otras Utilización de herramientas de administración A medida que vaya encontrando nuevos sistemas, el atacante irá complementando la información recogida con toda aquella información que pueda serle de utilidad para explotar posibles deficiencias en la seguridad de la red. Una primera fuente de información podría ser, por ejemplo, la información que ofrecen las cadenas de texto que generalmente aparece al conectarse a un determinado servicio. Estas cadenas, aparte de identificar cada uno de los servicios ofrecidos por estos equipos, podrían indicar el nombre y la versión de la aplicación que se está ejecutando detrás de dicho servicio. Por ejemplo ftp Búsqueda de huellas identificativas La huella identificativa que un atacante querría obtener de los sistemas de una red hace referencia a toda aquella información de la implementación de pila TCP/IP de los mismos. En primer lugar, esta información le permitirá descubrir de forma muy fiable el sistema operativo que se ejecuta en la máquina analizada. Por otro lado, estos datos, junto con la versión del servicio y del servidor obtenidos anteriormente, facilitarán al atacante la búsqueda de herramientas necesarias para realizar, por ejemplo, una explotación de un servicio contra algunos de estos sistemas. La mayor parte de las técnicas para obtener esta huella identificativa se basan en la información de la pila TCP/IP que puede obtenerse a partir de los mecanismos de control del intercambio de tres pasos propio del protocolo TCP/IP. Búsqueda de huellas identificativas El protocolo TCP es un protocolo de la capa de transporte que asegura que los datos sean enviados correctamente. Esto significa que se garantiza que la información recibida se corresponda con la información enviada y que los paquetes sean ensamblados en el mismo orden en que fueron enviados. Generalmente, las características de implementación de los mecanismos de control incorporados en el diseño de TCP en pila TCP/IP de un sistema operativo se basa en la interpretación que los desarrolladores realizan de los RFC. La interpretación de los RFC (y por lo tanto, las características propias de implementación) puede ser muy distinta en cada sistema operativo (incluso en diferentes versiones de un mismo sistema operativo). Así pues, la probabilidad de acierto del sistema operativo remoto mediante esta información es muy elevada. Búsqueda de huellas identificativas Aunque el objetivo original del protocolo ICMP es el de notificar errores y condiciones ICMP inusuales (que requieren una especial atención respecto al protocolo IP), es posible poder realizar un uso indebido de este protocolo para obtener huellas identificativas de un sistema remoto. Comentaremos a continuación algunos ejemplos de cómo obtener estas huellas a partir de las distintas respuestas ofrecidas mediante el tráfico ICMP ICMP echo. Como hemos visto anteriormente, el uso de tráfico ICMP de tipo echo permite la exploración de sistemas activos. Así, con esta exploración se pretende identificar los equipos existentes dentro de la red que se quiere explorar, normalmente accesibles desde internet. Búsqueda de huellas identificativas El comando ping puede informar, mediante paquetes ICMP de tipos echo-request y echo-reply, sobre si una determinada dirección IP está o no activa. El campo TTL, utilizado en este intercambio de paquetes echo de ICMP, suele ser inicializado de forma distinta según el sistema operativo que haya detrás del equipo. Por otra parte, cuando se envía un paquete ICMP echo-request hacia la dirección de difusión (broadcast), se consigue que con un único paquete enviado todos los equipos respondan con un paquete ICMP de tipo echo-reply. Esta característica no es propia de todos los sistemas operativos. Así, por ejemplo, puede estar presente en algunas variantes de sistemas operativos Unix, mientras que los sistemas operativos de Microsoft no responden a este tipo de paquetes. Estas dos informaciones, el número de TTL inicial y la respuesta a un ping enviado por difusión, podría ser de utilizado como una primera huella identificativa de los sistemas de la red. Búsqueda de huellas identificativas ICMP timestamp. Mediante la transmisión de un paquete ICMP de tipo time stamp-request, si un sistema está activo, se recibirá un paquete de tipo timestamp-reply, indicando si es posible conocer la referencia de tiempo en el sistema de destino. La decisión de responder o no a estos paquetes depende de la implementación. Algunos sistemas operativos Windows sí responden, mientras que otros no lo hacen. No obstante, la mayoría de los sistemas operativos Unix sí que suelen implementarlo. Según si los sistemas de la red responden o no ante esta petición, su huella identificativa apuntará a un posible sistema o a otro. Búsqueda de huellas identificativas ICMP information. La finalidad de los paquetes ICMP de tipo information-request y su respuesta asociada, information-reply, consiste en permitir que ciertos equipos que no disponen de disco puedan extraer su propia configuración, autoconfigurarse en el momento de inicio, obtener su dirección IP, etc. Aunque las recomendaciones de seguridad indican que los sistemas operativos no deberían generar este tipo de paquetes ni responder a ellos, la realidad de las implementaciones existentes es otra. La respuesta, en lugar de indicar la dirección IP de la red en el campo de origen, indica la dirección IP del equipo. Algunos sistemas operativos responderán únicamente cuando la dirección IP de destino del paquete tenga el valor de una dirección IP de confianza. Otros sistemas, así como muchos dispositivos de red, implementan distintos métodos de respuesta ante este tipo de paquetes. Todas estas diferencias se pueden utilizar en el momento de confeccionar la huella identificativa Exploración de puertos TCP La exploración de puertos (Port Scanning) es una técnica ampliamente utilizada para identificar los servicios que ofrecen los sistemas de destino. Suele ser la última de las actividades previas a la realización de un ataque. La exploración de puertos puede permitir el reconocimiento de los servicios ofrecidos por cada uno de los equipos encontrados en la red escogida. Con esta información, el atacante podría realizar posteriormente una búsqueda de exploits que le permitiera un ataque de intrusión en el sistema analizado. Existe un grande número de técnicas para realizar esta exploración de puertos TCP. Entre las más conocidas, podemos destacar las siguientes: Exploración de puertos TCP TCP connect scan. Mediante el establecimiento de una conexión TCP completa (completando los tres pasos del establecimiento de la conexión) la exploración puede ir analizando todos los puertos posibles. Si la conexión se realiza correctamente, se anotará el puerto como abierto (realizando una suposición de su servicio asociado según el número de puerto). TCP SYN scan. Enviando únicamente paquetes de inicio de conexión (SYN) por cada uno de los puertos que se quieren analizar se puede determinar si éstos están abiertos o no. Recibir como respuesta un paquete RST-ACK significa que no existe ningún servicio que escuche por este puerro. Por el contrario, si se recibe un paquete SYN-ACK, podemos afirmar la existencia de un servicio asociado a dicho puerto TCP En este caso, se enviará un paquete RST-ACK para no establecer conexión y no ser registrados por el sistema objetivo, a diferencia del caso anterior (TCP connect scan). Exploración de puertos TCP TCP FIN scan. Al enviar un paquete FIN a un puerto, deberíamos recibir un paquete de reset (RST) sí dicho puerto está cerrado. Esta técnica se aplica principalmente sobre implementaciones de pilas TCP/IP de sistemas Unix. TCP Xmas Tree scan. Esta técnica es muy similar a la anterior, y también se obtiene como resultado un paquete de reset si el puerto está cerrado. En este caso se envían paquetes FIN, URG y PUSH. TCP Null scan. En el caso de poner a cero todos los indicadores de la cabecera TCP, la exploración debería recibir como resultado un paquete de reset en los puertos no activos. La mayor parte de aplicaciones para realizar exploración de puertos TCP suelen ser ruidosas, es decir, no intentan esconder lo que se está analizando la red. Esto suele ser así porque se presume que o bien nadie está revisando la actividad de exploración o que, utilizando un equipo comprometido, nadie podrá descubrir el equipo desde el que realmente se realiza la exploración de puertos. Exploración de puertos UDP Mediante la exploración de puertos UDP es posible determinar si un sistema está o no disponible, así como encontrar los servicios asociados a los puertos UDP que encontramos abiertos. Para realizar esta exploración se envían datagramas UDP sin ninguna información al campo de datos. En el caso de que el puerto esté cerrado, se recibirá un mensaje ICMP de puerto no alcanzable (port unreachable). Si el puerto está abierto, no se recibirá ninguna respuesta. Dado que UDP es un protocolo no orientado a conexión, la fiabilidad de este método depende de numerosos factores (más todavía en internet), como son la utilización de la red y sus recursos, la carga existente, la existencia de filtros de paquetes en sistemas finales o en sistemas cortafuegos, etc. Exploración de puertos UDP Asimismo, y a diferencia de las exploraciones TCP, se trata de un proceso mucho más lento, puesto que la recepción de los paquetes enviados se consigue mediante el vencimiento de temporizadores (timeouts). En el caso de detectar un elevado número de puertos UDP abiertos, el atacante podría concluir que existe un sistema cortafuegos entre su equipo y el objetivo. Para confirmar esta última posibilidad, se puede enviar un datagrama UDP al puerto cero. Esto tendría que generar una respuesta ICMP de puerto no alcanzable. No recibir esta respuesta significa que existe un dispositivo que filtra el tráfico. Herramientas para realizar la exploración de puertos La aplicación por excelencia para realizar exploración de puertos es Nmap (NetworkMap-per). Esta herramienta implementa la gran mayoría de técnicas conocidas para exploración de puertos y permite descubrir información de los servicios y sistemas encontrados. Nmap también implementa un gran número de técnicas de reconocimiento de huellas identificativas, como las que hemos visto anteriormente. Mediante Nmap pueden realizarse, por ejemplo, las siguientes acciones de exploración: Descubrimiento de direcciones IP activas mediante una exploración de la red: ❖nmap -sP IP ADDRESS/NETMASK Exploración de puertos TCP activos: ❖nmap -sT IP ADDRESS/NETMASK Herramientas para realizar la exploración de puertos Exploración de puertos UDP activos ❖nmap -sU IP ADDRESS/NETMASK Exploración del tipo de sistema operativo de un equipo en red ❖nmap -O IP ADDRESS/NETMASK Nmap es utilizado internamente por otras aplicaciones Éste es el caso de la utilidad Nessus. Se trata de una utilidad que permite comprobar si un sistema es vulnerable a un conjunto muy amplio de problemas de seguridad almacenados en su base de datos. Si encuentra alguna de estas debilidades en el sistema analizado, se encargará de informar sobre su existencia y sobre posibles soluciones. Escuchas de red Escuchas de red Se trata de un ataque realmente efectivo, puesto que permite la obtención de una gran cantidad de información sensible. Mediante aplicaciones que se encargan de capturar e interpretar tramas y datagramas en entornos de red basados en difusión, conocidos como escuchas de red o sniffers, es posible realizar el análisis de la información contenida en los paquetes TCP/IP que interceptan para poder extraer todo tipo de información. Un sniffer no es más que un sencillo programa que intercepta toda la información que pase por la interfaz de red a la que esté asociado. Una vez capturada, se podrá almacenar para su análisis posterior. De esta forma, sin necesidad de acceso a ningún sistema de la red, un atacante podrá obtener información sobre cuentas de usuario, claves de acceso o incluso mensajes de correo electrónico en el que se envían estas claves. Este tipo de técnica se conoce como sniffing. Escuchas de red Las técnicas de sniffing también se conocen como técnicas de eavesdropping y técnicas de snooping. La primera, eavesdropping, es una variante del sniffing, caracterizada por realizar la adquisición o intercepción del tráfico que circula por la red de forma pasiva, es decir, sin modificar el contenido de la información. Por otra parte, las técnicas de snooping se caracterizan por el almacenamiento de la información capturada en el ordenador del atacante, mediante una conexión remota establecida durante toda la sesión de captura. En este caso, tampoco se modifica la información incluida en la transmisión. La forma más habitual de realizar técnicas de sniffing en una red, probablemente porque está al alcance de todo el mundo, es la que podríamos denominar sniffing software, utilizando las aplicaciones que ya mencionadas. Desactivación de filtro MAC Una de las técnicas más utilizadas por la mayoría de los sniffers de redes Ethernet se basa en la posibilidad de configurar la interfaz de red para que desactive su filtro MAC (poniendo la tarjeta de red en modo promiscuo). Las redes basadas en dispositivos Ethernet fueron concebidas en tomo a una idea principal: todas las máquinas de una misma red local comparten el mismo medio, de manera que todos los equipos son capaces de ver el tráfico de la red de forma global. Cuando se envían datos es necesario especificar claramente a quién van dirigidos, indicando la dirección MAC. De los 48 bits que componen la dirección MAC, los 24 primeros bits identifican al fabricante del hardware, y los 24 bits restantes corresponden al número de serie asignado por el fabricante. Esto garantiza que dos tarjetas no puedan tener la misma dirección MAC. Desactivación de filtro MAC Para evitar que cualquier máquina se pueda apropiar de información fraudulenta, las tarjetas Ethernet incorporan un filtro que ignora todo el tráfico que no les pertenece, descartando aquellos paquetes con una dirección MAC que no coincide con la suya. La desactivación de este filtro se conoce con el nombre de modo promiscuo. Con el uso adecuado de expresiones regulares y otros filtros de texto, se podrá visualizar o almacenar únicamente la información que más interese; en especial, aquella información sensible, como nombres de usuario y contraseñas. El entorno en el que suele ser más efectivo este tipo de escuchas son las redes de área local configuradas con una topología en bus. Por ejemplo una red WiFi Desactivación de filtro MAC En este tipo de redes, todos los equipos están conectado a un mismo cable. Esto implica que todo el tráfico transmitido y recibido por los equipos de la red pasa por este medio común. Una solución para evitar esta técnica consiste en la segmentación de la red y de los equipos mediante el uso de conmutadores (Switches). Al segmentar la red y los equipos, el único tráfico que tendrían que ver las máquinas sería el que les pertenece, puesto que el conmutador se encarga de encaminar hacia el equipo únicamente aquellos paquetes destinados a su dirección MAC. Aun así, existen técnicas para poder continuar realizando sniffing aunque se haya segmentado la red mediante switches. Una de estas técnicas es la suplantación de ARP, que describiremos a continuación. Suplantación de ARP El protocolo ARP es el encargado de traducir direcciones IP de 32 bits, a las correspondientes direcciones hardware, generalmente de 48 bits en dispositivos Ethernet. Cuando un ordenador necesita resolver una dirección IP en una dirección MAC, lo que hace es efectuar una petición ARP (arp-request) a la dirección de difusión de dicho segmento de red, FF:FF:FF:FF:FF:FF, solicitando que el equipo que tiene esta IP responda con dilección MAC. Suplantación de ARP Con el objetivo de reducir el tráfico en la red, cada respuesta de ARP (arp-reply) que llega a la tarjeta de red es almacenada en una tabla caché, aunque la máquina no haya realizado la correspondiente petición. Así pues, toda respuesta de ARP que llega a la máquina es almacenada en la tabla de ARP de esta máquina. Este factor es el que se utilizará para realizar el ataque de suplantación de ARP El objetivo de un ataque de suplantación de ARP es poder capturar tráfico ajeno sin necesidad de poner en modo promiscuo la interfaz de red. Envenenando la tabla de ARP de los equipos involucrados en la comunicación que se quiere capturar se puede conseguir que el conmutador les haga llegar los paquetes. Suplantación de ARP Si el engaño es posible, cuando las dos máquinas empiecen la comunicación enviarán sus paquetes hacia la máquina donde está el sniffer. Éste, para no descubrir el engaño, se encargará de encaminar el tráfico que ha interceptado. Una posible solución para evitar ataques de suplantación de ARP es la utilización de direcciones MAC estáticas en el encaminador Herramientas disponibles para realizar sniffing Una de las aplicaciones más tradcionales, en especial en sistemas Unix, es Tcpdump. Este programa, una vez ejecutado, captura todos los paquetes que llegan a nuestra máquina y muestra por consola toda la información relativa a los mismos. Se trata de una herramienta que se ejecuta desde la línea de comandos y que cuenta con una gran cantidad de opciones para mostrar la información capturada de formas muy diversas. Tcpdump es una herramienta muy potente y es la base para muchos otros sniffers que han aparecido posteriormente. Hoy en día la herramienta por excelencia es Wireshark, esta aplicación está disponible para casi cualquier sistema operativo. Fragmentación IP Fragmentación para enmascaramiento de datagramas IP La fragmentación IP puede plantear una serie de problemáticas relacionadas con la seguridad de nuestra red. Aparte de los problemas de denegación que veremos con más detenimiento en la siguiente sección, una de las problemáticas más destacadas es la utilización de fragmentación IP malintencionada para burlar las técnicas básicas de inspección de datagramas IP. En este caso, un atacante tratará de provocar intencionadamente una fragmentación en los datagramas que envía a nuestra red con el objetivo de que pasen desapercibidos por diferentes dispositivos de prevención y de detección de ataques que no tienen implementado el proceso de fragmentación y reensamblado de datagramas IP. En el caso de los dispositivos de prevención más básicos (como, por ejemplo, encaminadores con filtrado de paquetes), las decisiones para bloquear paquetes se basan generalmente en la información de cabecera de los paquetes (como, por ejemplo, puertos TCP o UDP de destino, banderas de TCP,...). Fragmentación para enmascaramiento de datagramas IP Esto significa que los paquetes TCP y UDP fragmentados son susceptibles de burlar aquellos mecanismos de prevención que no implementen el proceso de reensamblado para poder tener una visión global del paquete que hay que bloquear. Por otro lado, en el caso de dispositivos de prevención más avanzados (como, por ejemplo, pasarelas a nivel de aplicación), así como en la mayor parte de los mecanismos de detección, las decisiones para detectar paquetes potencialmente peligrosos acostumbran a basarse nuevamente en la inspección de la cabecera del datagrama IP, así como en la parte de datos del paquete. Esto significa que la fragmentación se puede utilizar nuevamente para burlar este proceso de detección y conseguir que estos paquetes entren o salgan de la red de forma desapercibida. Fragmentación para enmascaramiento de datagramas IP Con el objetivo de descubrir la MTU de la red e intentar así realizar fragmentación, el atacante puede utilizar el indicador de no fragmentación del datagrama IP. Cuando el indicador de no fragmentación está activado, como indica su nombre, no se realizará ninguna fragmentación en el datagrama. Por lo tanto, si un datagrama con este indicador cruza una red en la que se exija la fragmentación, el encaminador lo descubrirá, descartará el datagrama y devolverá el mensaje de error al equipo emisor. Este mensaje de error ICMP contiene la MTU de la red que requiere la fragmentación. De esta forma, el atacante solo deberá construir datagramas con diferentes longitudes, con el indicador de fragmentación establecido, a la espera de recibir estos mensajes de error. Fragmentación para enmascaramiento de datagramas IP Para solucionar el uso de la fragmentación fraudulenta y garantizar una correcta inspección de paquetes, es necesaria la implementación del proceso de fragmentación y el reensamblado de datagramas en dispositivos de prevención y detección. Esta solución puede suponer un coste adicional, ya que significa tener que examinar y almacenar cada fragmento. Aunque puede resultar muy costoso en cuanto a recursos (tiempo, proceso y memoria), será la única forma de asegurar que la inspección del paquete se ha realizado de forma correcta. Ataques de denegación de servicio Ataques de denegación de servicio Un ataque de denegación de servicio (Deny of Service Attack, DoS), es un incidente en el cual un usuario o una organización es privada de los servicios de un recurso que esperaba obtener. Normalmente, la pérdida de servicio se corresponde con la imposibilidad de obtener un determinado servicio de red como, por ejemplo, el acceso a una página web. Definimos denegación de servicio como la imposibilidad de acceder a un recurso o servicio por parte de un usuario legítimo. Es decir, la apropiación exclusiva de un recurso o servicio con la intención de evitar cualquier acceso a terceras partes. De forma más restrictiva, se pueden definir los ataques de denegación de servicio en redes IP como la consecución total o parcial (temporal o total) del cese de la prestación de servicio de un equipo conectado a la red. Ataques de denegación de servicio Los ataques de denegación de servicio pueden ser provocados tanto por usuarios internos en el sistema como por usuarios externos. Dentro del primer grupo podríamos pensar en usuarios con pocos conocimientos que pueden colapsar el sistema o servicio inconscientemente. Por ejemplo, usuarios que abusan de los recursos del sistema, ocupando mucho ancho de banda en la búsqueda de archivos de música o de películas, usuarios malintencionados que aprovechan su acceso al sistema para causar problemas de forma premeditada, etc. En el segundo grupo se encuentran aquellos usuarios que han conseguido un acceso al sistema de forma ilegítima, falseando además la dirección de origen con el propósito de evitar la detección del origen real del ataque (mediante ataques de suplantación). Ataques de denegación de servicio El peligro de los ataques de denegación de servicio viene dado por su independencia de plataforma. Como sabemos, el protocolo IP permite una comunicación homogénea (independiente del tipo de ordenador o fabricante) a través de espacios heterogéneos (redes Ethernet, ATM....). De esta forma, un ataque exitoso contra el protocolo IP se convierte inmediatamente en una amenaza real para todos los equipos conectados a la red, independientemente de la plataforma que utilicen. A continuación, realizaremos una exposición sobre algunos de los ataques de denegación de servicio más representativos. IP Flooding El ataque de IP Flooding se basa en una inundación masiva de la red mediante datagramas IP. Este ataque se realiza habitualmente en redes locales o en conexiones con un gran ancho de banda. Consiste en la generación de tráfico basura con el objetivo de conseguir la degradación del servicio. De esta forma, se resume el ancho de banda disponible, ralentizando las comunicaciones existentes de toda la red. IP Flooding El tráfico generado en este tipo de ataque puede ser: Aleatorio. Cuando la dirección de origen o destino del paquete IP es ficticia o falsa. Este tipo de ataque es el más básico y simplemente busca degradar el servicio de comunicación del segmento de red al que está conectado el ordenador responsable del ataque. Definido o dirigido. Cuando la dirección de origen, destino, o incluso ambas, es la de la máquina que recibe el ataque. El objetivo de este ataque es doble, ya que además de dejar fuera de servicio la red donde el atacante genera los datagramas IP, también tratará de colapsar al equipo de destino, sea reduciendo el ancho de banda disponible, o bien saturando su servicio ante una gran cantidad de peticiones que el servidor será incapaz de procesar. IP Flooding Los datagramas IP utilizados podrían corresponder a: UDP. Con el objetivo de generar peticiones sin conexión a ninguno de los puertos disponibles. Según la implementación de la pila TCP/IP de las máquinas involucradas, las peticiones masivas a puertos específicos UDP pueden llegar a causar el colapso del sistema. ICMP. Generando mensajes de error o de control de flujo. TCP. Para generar peticiones de conexión con el objetivo de saturar los recursos de red de la máquina atacada. IP Flooding Una variante del IP Flooding tradicional consiste en la utilización de la dirección de difusión de la red como dirección de destino de los datagramas IP. De esta forma, el encaminador de la red se verá obligado a enviar el paquete a todos los ordenadores de la misma, consumiendo ancho de banda y degradando el rendimiento del servicio. También existen otras variantes en las que se envían peticiones ICMP de tipo echo-request a varios ordenadores suplantando la dirección IP de origen, sustituida por la dirección de difusión (broadcast) de la red que se quiere atacar. De esta forma, todas las respuestas individuales se ven amplificadas y propagadas a todos los ordenadores conectados a la red. Smurf Este tipo de ataque de denegación de servicio es una variante del ataque anterior (IP Flooding), pero realizando una suplantación de las direcciones de origen y destino de una petición ICMP del tipo echo-request: Smurf Como dirección de origen se pone la dirección IP de la máquina que debe ser atacada. En el campo de la dirección IP de destino se pone la dirección de difusión de la red local o red que se utilizará como trampolín para colapsar a la víctima. Con esta petición fraudulenta, se consigue que todas las máquinas de la red respondan a la vez a una misma máquina, consumiendo todo el ancho de banda disponible y saturando el ordenador atacado. TCP/SYN Flooding Como ya hemos visto anteriormente, algunos de los ataques y técnicas de exploración que se utilizan en la actualidad se basan en no complementar intencionadamente el protocolo de intercambio del TCP. Esta debilidad del protocolo TCP proviene de las primeras implementaciones de las pilas TCP. Cada vez que se procesa una conexión, deben crearse datagramas IP para almacenar la información necesaria para el funcionamiento del protocolo. Esto puede llegar a ocupar mucha memoria. Como la memoria del equipo es finita, es necesario imponer restricciones sobre el número de conexiones que un equipo podrá aceptar antes de quedarse sin recursos. El ataque de TCP/SYN Flooding se aprovecha del número de conexiones que están esperando para establecer un servicio en particular para conseguir la denegación del servicio. TCP/SYN Flooding Cuando un atacante configura una inundación de paquetes SYN de TCP no tiene ninguna intención de complementar el protocolo de intercambio, ni de establecer la conexión. Su objetivo es exceder los límites establecidos para el número de conexiones que están a la espera de establecerse para un servicio dado. Esto puede hacer que el sistema que es víctima del ataque sea incapaz de establecer cualquier conexión adicional para este servicio hasta que las conexiones que estén a la espera bajen el umbral. Hasta que se llegue a este límite, cada paquete SYN genera un SYN/ACK que permanecerá en la cola a la espera de establecerse. Es decir, cada conexión tiene un temporizador (un límite para el tiempo que el sistema espera, el establecimiento de la conexión) que tiende a configurarse en un minuto. TCP/SYN Flooding Cuando se excede el límite de tiempo, se libera la memoria que mantiene el estado de esta conexión y la cuenta de la cola de servicios disminuye en una unidad. Después de alcanzar el límite, puede mantenerse completa la cola de servicios, evitando que el sistema establezca nuevas conexiones en este puerto con nuevos paquetes SYN. Dado que el único propósito de la técnica es inundar la cola, no tiene ningún sentido utilizar la dirección IP real del atacante, ni tampoco devolver los SYN/ACK puesto que de esta forma facilitaría que alguien pudiera llegar hasta él siguiendo la conexión. Por lo tanto, normalmente se falsea la dirección de origen del paquete, modificando para ello la cabecera IP de los paquetes que intervendrán en el ataque de una inundación SYN. Teardrop Como hemos visto en este mismo capítulo, el protocolo IP especifica unos campos en la cabecera encargados de señalar si el datagrama IP está fragmentado (forma parte de un paquete mayor) y la posición que ocupa dentro del datagrama original. En el campo de indicadores de TCP (TCP flags), encontramos el indicador de más fragmentos que indica si el paquete recibido es un fragmento de un datagrama mayor. Por otra parte, el campo de identificación del datagrama especifica la posición del fragmento en el datagrama original. El ataque Teardrop, intentará realizar una utilización fraudulenta de la fragmentación IP para poder confundir al sistema operativo en la reconstrucción del datagrama original y colapsar así el sistema. Teardrop Supongamos que deseamos enviar un fichero de 1024 bytes a una red con un MTU (Maxim Transfer Unit) de 512 bytes. Será suficiente enviar dos fragmentos de 512 bytes: El objetivo de Teardrop será realizar las modificaciones necesarias en los campos de posición y longitud para introducir incoherencias cuando se produzca la reconstrucción del datagrama original: Teardrop De esta forma, Teardrop y sus variantes directas conseguirán que el datagrama se sobrescriba y produzca un error de buffer-overrun al ser reensamblado. Otra posibilidad consiste en enviar centenares de fragmentos modificados malintencionadamente, con el objetivo de saturar la pila de protocolo IP del equipo atacado (a causa de una superposición de distintos datagramas IP). Snork El ataque Snork se basa en una utilización malintencionada de dos servicios típicos en sistemas Unix: el servicio CHARGEN (CHARacter GENerator, generador de caracteres) y el servicio ECHO. El primer servicio se limita a responder con una secuencia aleatoria de caracteres a las peticiones que recibe. El segundo servicio, ECHO, se utiliza como sistema de pruebas para verificar el funcionamiento del protocolo IR Así, esta denegación de servicio se basa en el envío de un datagrama especial al ordenador de destino, que una vez reconocido, enviará una respuesta al equipo de origen. Snork El ataque Snork consiste en el cruce de los servicios ECHO y CHARGEN, mediante el envío de una petición falsa al servicio CHARGEN, habiendo colocado previamente como dirección de origen la dirección IP de la máquina que hay que atacar (con el puerto del servicio ECHO como puerto de respuesta). De esta forma, se inicia un juego de ping-pong infinito. Este ataque se puede realizar con distintos pares de equipos de la red obteniendo un consumo masivo de ancho de banda hasta degradar el rendimiento de la misma. También se puede realizar contra una misma máquina (ella misma se envía una petición y su respuesta) consiguiendo consumir los recursos (especialmente CPU y memoria) de este equipo. Ping of death El ataque de denegación de servicio "ping de la muerte'\ping of death) es uno de los ataques más conocidos y que más artículos de prensa ha generado (1996-1997). Resuelto a partir de 2013. Al igual que otros ataques de denegación existentes, utiliza una definición de longitud máxima de datagrama IP fraudulenta. La longitud máxima de un datagrama IP es de 65535 bytes, incluyendo la cabecera del paquete (20 bytes) y partiendo de la base de que no hay opciones especiales especificadas. Por otra parte, recordemos que el protocolo ICMP tiene una cabecera de 8 bytes. De esta forma, si queremos construir un mensaje ICMP tenemos disponibles 65535 - 20 - 8 = 65507 bytes. Debido a la posibilidad de fragmentación de IP, si es necesario enviar más de 65535 bytes, el datagrama IP se fragmentará y se reensamblará en el destino con los mecanismos que comentados anteriormente. Ping of death El ataque ping de la muerte se basa en la posibilidad de construir, mediante el comando ping, un datagrama IP superior a los 65535 bytes, fragmentado en N trozos, con el objetivo de provocar incoherencias en el proceso de reensamblado. Si, por ejemplo, construimos un mensaje ICMP de tipo echo-request de 65510 bytes mediante el comando ping -s 65510, los datos ICMP podrán ser enviados en un único paquete fragmentado en N trozos (según la MTU de la red), pero pertenecientes al mismo datagrama IP. Si hacemos la suma de los distintos campos del datagrama, veremos que los 20 bytes de cabecera IP más los 8 bytes de cabecera ICMP, junto con los datos ICMP (65510 bytes) ocuparán 65538 bytes. De esta forma, el ataque consigue provocar un desbordamiento de 3 bytes. Este hecho provocará que, al reconstruir el paquete original en el destino, se producirán errores que, si existen deficiencias en la implementación de la pila TCP/IP del sistema, podrían causar la degradación total del sistema atacado. Ataques distribuidos Un ataque de denegación de servicio distribuido (Distributed Denial of Service, DDoS), es aquél en el que una multitud de sistemas (que previamente han sido comprometidos) cooperan entre ellos para atacar a un equipo objetivo, causándole una denegación de servicio. El flujo de mensajes de entrada que padece el equipo atacado le dejará sin recursos y será incapaz de ofrecer sus servicios a usuarios legítimos. Así pues, podemos definir los ataques de denegación de servicio distribuidos como un ataque de denegación de servicio en el que existen múltiples equipos sincronizados de forma distribuida que se unen para atacar un mismo objetivo. A continuación, veremos algunos de los ataques de denegación de servicio distribuidos más representativos, prestando especial atención tanto a su evolución histórica, como al modelo distribuido de las fuentes que realizan el ataque, su sincronización y la forma en la que realizan la denegación de servicio. TRIN00 TRIN00 es un conjunto de herramientas master-slave utilizadas para sincronizar distintos equipos que cooperarán, de forma distribuida, en la realización de una denegación de servicio. Las primeras implementaciones de TRIN00 fueron implementadas únicamente para sistemas Sun Solaris (en los que se produjeron los primeros ataques conocidos). El primer paso para realizar un ataque con TRIN00 consiste en la instalación de las herramientas en los equipos desde los que partirá el ataque. Para ello, el atacante necesitará obtener privilegios de administrador en estos equipos (que habrá conseguido mediante técnicas de sniffing, explotación de servicios,...). Estos sistemas deberían ser equipos interconectados en grandes redes corporativas con un gran ancho de banda y en los que el origen del ataque pudiera pasar desapercibido entre cientos o millares de sistemas dentro la misma red. TRIN00 El atacante tratará de realizar un ataque de intrusión a un primer equipo de estas redes, desde donde continuará con la búsqueda de nuevos equipos vulnerables y procederá a su infección de igual manera como se realizó con el primer equipo. Para realizar las intrusiones, el atacante llevará a cabo una búsqueda de vulnerabilidades en los equipos existentes en la red, generando una lista de equipos potencialmente débiles en los que tratará de introducirse y ejecutar las herramientas necesarias para provocar la escalada de privilegios. Desde el primer equipo infectado por TRIN00, el atacante tratará de distribuir las herramientas a cada una de las demás máquinas infectadas. También se encargará de la ejecución de tareas periódicas para tratar de esconder los rastros de la intrusión que puedan delatar la entrada en el sistema y la detección del origen del ataque. TRIN00 En la siguiente figura podemos observar el diagrama de tres capas que conforma un ataque ejecutado mediante TRIN00. Vemos cómo a partir de un único ordenador, el atacante podrá llegar a obtener toda una red de equipos a su disposición para la realización del ataque distribuido: TRIN00 La comunicación entre las distintas capas se realiza mediante conexiones TCP (fiables) para la parte atacante-master, y conexiones UDP (no fiables) para la parte master-slave y slave-master. en puertos específicos de cada máquina. La comunicación siempre se inicia con la transmisión de una contraseña. Esto permite que ni el administrador del equipo ni el de otros atacantes puedan acceder al control de la red de ataques de TRIN00. Los demonios de TRIN00 situados en los equipos master y slave permiten la ejecución de comandos para iniciar, controlar y detener ataques de denegación tradicionales como ICMP Flooding, SYN Flooding, UDP Flooding, Smurf etc. TRIN00 Para acceder a estos comandos, el atacante realizará una conexión Telnet en el puerto especificado en el siguiente esquema: Tribe Flood Network Tribe Flood Network (TFN) es otra de las herramientas existentes para realizar ataques de denegación de servicio distribuidos que utiliza un esquema master-slave para coordinar ataques de denegación tradicionales (ICMP Flooding, SYN Flooding, UDP Flooding y Smurf). Al igual que TRIN00, permite dejar abierta una consola de administración a la máquina de origen (escuchando por un puerto TCP determinado) ofreciendo un acceso ilimitado a los equipos infectados. La arquitectura de funcionamiento del TFN es muy parecida a la de TRIN00. Una de las pocas diferencias la encontramos en la parte de clientes (respecto a los Masters del esquema de TRIN00) y la parte de demonios (respeto a los Slaves de TRIN00). De forma análoga, un atacante controla a uno o más clientes que a su vez, controlan a uno o más demonios. Tribe Flood Network El control de la red TFN se consigue mediante la ejecución directa de comandos utilizando conexiones cliente-servidor basadas en paquetes ICMP de tipo echo-reply. La comunicación para el envío de comandos se realiza mediante un número binario de 16 bits en el campo de identificación de mensajes ICMP de tipo echo. El número de secuencia es una constante 0x0000 para enmascarar el mensaje ICMP como si fuera a una petición echo-request y pasar así desapercibido en el caso de existir en la red mecanismos de detección de ataques. Este cambio en la comunicación, respecto a TRIN00, se debe a que muchos sistemas de monitorización para la protección de redes (dispositivos cortafuegos, sistemas de detección de intrusos....) pueden filtrar tráfico TCP y UDP que va hacia puertos determinados. Tribe Flood Network No obstante, la mayoría de sistemas dejan pasar mensajes ICMP de tipo echo utilizados para utilizar el comando ping y realizar así verificaciones de los equipos activos en la red. Además, pocas herramientas de red muestran adecuadamente los mensajes ICMP, lo cual permite un camuflaje perfecto entre el tráfico normal de la red. Otra diferencia respeto a TRIN00 es que los clientes de TFN no están protegidos por contraseñas de acceso, con lo cual puede ser ejecutado sin restricciones por otros usuarios una vez instalado. Shaft Otro conjunto de herramientas derivado de los dos anteriores (TRIN00 y TFN) es Shaft. La jerarquía utilizada por Shaft es similar a las demás herramientas analizadas. Una vez más, se basa en varios masters (denominados ahora Shaftmasters) que gobiernan a su vez diversos slaves (Shaftnodes). Al igual que en los otros esquemas, el atacante se conecta mediante un programa cliente a los Shaftmasters desde donde inicia, controla y finaliza los ataques distribuidos. Shaft utiliza mensajes UDP para transmitir información entre los Shaftmasters y los Shaftnodes. Por otra parte, el atacante se conecta vía Telnet a un Shaftmaster utilizando una conexión fiable mediante TCP. Una vez conectado, utilizará una contraseña para autorizar su acceso. Shaft La comunicación entre Shaftmasters y Shaftnodes se realiza mediante UDP (que no es fiable). Por este motivo, Shaft utiliza tickets para poder mantener ordenada la comunicación y asignar a cada paquete una orden de secuencia. La combinación de contraseñas y tickets es utilizada por los Shaftmasters para transmitir las órdenes hacia a los Shaftnodes, que a su vez verificarán que sean correctas. Tribe Flood NetWork La arquitectura básica en la que existe un atacante que utiliza clientes para gobernar los distintos demonios instalados en las máquinas infectadas se mantiene, de forma que el control de este tipo de ataques mantiene la premisa de tener el máximo número de ordenadores segmentados. De esta forma, si un cliente es neutralizado, el resto de la red continúa bajo control. Aun así, Tribe FloodNetwork añade una serie de características adicionales, de entre las que destacamos las siguientes: ❖La comunicación master-slave se realizan ahora mediante protocolos TCP, UDP, ICMP o los tres a la vez de forma aleatoria. ❖Los ataques continúan siendo los mismos (ICMP Flooding, UDP Flooding, SYN Flooding y Smurf). Aun así, el demonio se puede programar para que alterne entre estos cuatro tipos de ataque, para dificultar la detección por parte de sistemas de monitorización en la red. Tribe Flood NetWork ❖Las cabeceras de los paquetes de comunicación master-slave son ahora aleatorias, excepto en el caso de ICMP (donde siempre se utilizan mensajes de tipo echo-reply). De esta forma se evitaría una detección mediante patrones de comportamiento. ❖Todos los comandos van cifrados. La clave se define en tiempo de compilación y se utiliza como contraseña para acceder al cliente. ❖Cada demonio genera un proceso hijo por ataque, tratando de diferenciarse entre sí a través de los argumentos y parámetros que se pasan en el momento de ejecución. Además, se altera su nombre de proceso para hacerlo pasar por un proceso más del sistema Deficiencias de programación Deficiencias de programación En este último apartado analizaremos dos de los errores de programación más graves que podemos encontrar en aplicaciones de red como ejemplo del último tipo de deficiencias asociadas al modelo de comunicaciones TCP/IP. En realidad, este tipo de deficiencias se deberían considerar como vulnerabilidades de seguridad a nivel de sistema más que como deficiencias de seguridad de la arquitectura de red TCP/IP. Aun así, se han incluido en este capítulo puesto que son vulnerabilidades asociadas a los servicios proporcionados sobre TCP/IP y porque, en el caso de estar presentes en los servicios que ofrece la red, incrementarán el riesgo de vulnerar la seguridad de la misma. Deficiencias de programación La mayor parte de estas deficiencias de programación pueden suponer un agujero en la seguridad de la red debido a situaciones no previstas como, por ejemplo: ❖Entradas no controladas por el autor de la aplicación, que pueden provocar acciones malintencionadas y ejecución de código malicioso. ❖Uso de caracteres especiales que permiten un acceso no autorizado al servidor del servicio. ❖Entradas inesperadamente largas que provocan desbordamientos dentro de la pila de ejecución y que pueden implicar una alteración en el código que hay que ejecutar Los ataques que permiten explotar este tipo de deficiencias se presentan generalmente en forma de binarios (programas ejecutables) ya compilados para el sistema operativo en el que se está ejecutando la aplicación vulnerable (conocidos con el nombre de exploits). Deficiencias de programación Un exploit es un programa, generalmente escrito en C o ensamblador, que fuerza las condiciones necesarias para aprovecharse de un error de seguridad subyacente. Existen infinidad de exploits, para servidores de aplicaciones de internet (servidores de imap, pop3, smtp, ftp, httpd....) y generalmente se pueden encontrar disponibles en internet ya compilados o en forma de código fuente. Desbordamiento de buffer Un ataque de desbordamiento de buffer se basa en la posibilidad de escribir información más allá de los límites de una tupla almacenada en la pila de ejecución. A partir de esta tupla, asociada a una llamada a función dentro del programa, se puede conseguir corromper el flujo de la ejecución modificando el valor de regreso de la llamada a la función. Si este cambio en el flujo de ejecución es posible, se podrá llevar la ejecución a una dirección de memoria arbitraria (introducida en los datos de la pila a partir del mismo ataque) y ejecutar un código malicioso. El éxito de este ataque será posible en aquellos programas que utilizan funciones de manipulación de buffers que no comprueban los límites de las estructuras de los datos como, por ejemplo, la función strcpy(), en vez de las que sí lo hacen como, por ejemplo, la función strncpy(). Cadenas de formato Los ataques que explotan deficiencias de programación mediante cadenas de formato se producen en el momento de imprimir o copiar una cadena de caracteres desde un buffer sin las comprobaciones necesarias. Imaginemos, por ejemplo, que un programador que quiere imprimir el contenido de un buffer con la sentencia printf("%s", buffer) lo codifica como printf(buffer) por error. Aunque el resultado funcional es el mismo, el resultado técnico es muy distinto, ya que la sentencia genera un agujero de seguridad en el código que permitirá controlar el flujo de la ejecución. Al indicar directamente a la función printf() el buffer que hay que imprimir, la sentencia lo interpreta como una cadena de formato. Así, la función tratará de encontrar en el contenido del buffer caracteres de formato especiales, como por ejemplo "%d", "%s", "%x". Para cada uno de los caracteres de formato, se extraerá de la pila de ejecución un número variable de argumentos. Cadenas de formato A causa de este error, un atacante podría acceder a valores de la pila de ejecución que se encuentren por encima de esta cadena de formato. Esta deficiencia le permitirá. por tanto, tener el control necesario para escribir en la memoria del proceso y alterar el flujo de la ejecución para llevarlo a un shellcode. Este tipo de ataque es muy similar a otro que se realiza sobre bases de datos denominado inyección SQL.

Use Quizgecko on...
Browser
Browser