3.5.1. Metasploit Framework: Information Gathering and Scanning
Metasploit Framework: Introducción
Metasploit Framework es una de las herramientas más conocidas para efectuar pruebas de penetración y búsquedas de vulnerabilidades en una red informática. Metasploit es mantenido por la empresa Rapid7 LLC y está escrito en lenguaje de programación Ruby. Destaca por ser un proyecto open-source, aunque Rapid7 también proporciona otro tipo de licencias de pago con versiones más robustas de Metasploit. Metasploit es usado como herramienta para la formación en seguridad informática debido al amplio abanico de pruebas que permite y a su versatilidad.
El funcionamiento de Metasploit está basado en librerías que implementan diferentes tareas y rutinas, organizando un sistema modular basado en exploits, malware y una diversificación de ataques informáticos. Dentro de este sistema modular, están los componentes (módulos) auxiliares para efectuar las acciones de comprobación de actividad de host y escaneo de puertos y servicios. A continuación se describe parte de estos con la aplicación NMAP dentro de Metasploit y la integración de este con Nessus. En siguientes capítulos, se va a profundizar en la arquitectura y funcionamiento de Metasploit.
Nota: En el anexo se incluye una mínima formación para la configuración e inicio rápido de Metasploit de lectura obligada si no se conoce la herramienta.
3.5.1.1. Metasploit: NMAP
Una vez iniciado Metasploit, se pueden usar los comandos habituales para efectuar acciones como en la consola de línea de comandos normal (clear, mv, ls…), así como iniciar diferentes servicios. Además también permite la ejecución de algunas aplicaciones como nmap. No obstante, Metasploit añade un comando exclusivo que es db_nmap cuyo funcionamiento es igual al nmap habitual y que permite almacenar de forma práctica la información obtenida en tablas y así generar un reporte de datos sobre hosts y servicios descubiertos. El comando es el siguiente, pudiendo obtener información sobre las opciones en los apuntes de nmap:
msf > db_nmap [options] [target]
Para poder ver la información recopilada en los escaneos, se emplean los comandos hosts y services. Como su nombre indica, queda claro para que sirven. La información es mostrada en formato tabla con diferentes campos cuya descripción queda especificada. Esta información se irá completando de forma automática para cada host y servicio a medida que se vayan realizando otros tipos de escaneo, ya sea con nmap o mediante módulos específicos (inciando antes el servicio de postgresql).
msf6 > hosts
msf6 > services [-u]
Nota: Añadiendo el parámetro -u en el comando services se mostrará solamente los servicios activos.
3.5.1.2. Metasploit: módulos auxiliares
Como se ha indicado en la presentación de Metasploit, esta herramienta está organizada a través de una estructura basada en módulos que permiten agrupar funcionalmente las opciones disponibles (uso de exploits, generación de troyanos, evasión, etc.). Para organizar y describir un módulo se utiliza un formato en árbol, siendo la parte raiz la que indica a que conjunto principal pertenece. La segunda parte después de la raíz suele indicar la función y finalmente el resto agrupa por servicio, aplicación, sistema operativo, etc. dependiendo de ciertos criterios.
Metasploit suele ser conocido por su elenco de exploits y generación de troyanos (payloads) no obstante dentro de la categoría de módulos de auxiliary (auxiliares) se encuentran diferentes funciones muy interesantes entre las que destacan las de gather y scanner, que como el nombre indica permiten realizar las operaciones para efectuar reconocimiento y escaneo de servicios en hosts, entre otras.
Una de las virtudes de estos módulos es que permiten realizar operaciones muy concretas que en ocasiones por si solo nmap solo puede realizar mediante scripts complejos o ni eso. Así pues, es habitual primero realizar un sondeo con nmap para descubrir hosts y servicios y en todo caso posteriormente emplear algún módulo de Metasploit. En siguientes secciones se trabajará más en profundidad cómo se emplean los comandos para efectuar búsquedas de módulos, obtener información, etc. La forma de operar rápida sería la siguiente:
1. Se emplea el comando search y una descripción que puede ser una referencia al servicio (por ejemplo ssh) o las palabras clave para agrupar por módulos (por ejemplo auxiliary/scanner/ssh). Con esto se obtendrá un listado específico de módulos. Con el comando use [#] como se indica en la siguiente pantalla, se seleccionará el módulo. Para terminar es recomendable utilizar el comando info para obtener información detallada del módulo y saber si se adecua al tipo de prueba que se quiere realizar.
msf6 > search [palabra_busqueda]
msf6 > use [id_modulo]
msf6 root_module(module_name)> info
2. El siguiente paso es añadir las opciones (setear en argot hacker) del módulo. Para ver estas opciones se emplean los comandos options y advanced, este último normalmente para opciones avanzadas. Estas opciones añaden una descripción sobre su función y se distingue si son obligatorias o no (columna Required). Algunas de las obligatorias ya contienen información de configuración básica por defecto. Es habitual que en muchos casos solo se requiera indicar el target, indicando la IP y el puerto. Para setear el módulo, se debe emplear el comando set seguido del nombre de la opción y el valor.
msf6 root_module(module_name)> options
msf6 root_module(module_name)> advanced
msf6 root_module(module_name)> set [option] [value]
3. Para terminar solo será necesario accionar el módulo con el comando run, viendo a continuación la información obtenida:
Ahora, solo para contrastar, se puede volver a lanzar la información de hosts y server para ver la diferencia respecto al ejemplo inicial con db_nmap:
3.5.1.3. Metasploit: Integración con Nessus
Otras opciones que tiene Metasploit Framework es la posibilidad de integrarse con algunas herramientas de escaneo de vulnerabilidades como por ejemplo Nessus u Openvas. Con la integración, estas herramientas se pueden emplear a través de la consola de línea de comandos de Metasploit, pudiendo automatizar determinadas funciones.
Hay que comentar que este tipo de integraciones tampoco reportan una ventaja evidente, pues los resultados obtenidos serán los mismos que usando estas aplicaciones a través de la interfaz web. Además, cuando salen nuevas versiones tanto de Metasploit como de estas aplicaciones, a veces deja de funcionar la integración y aparecen más errores de lo esperado. En todo caso, en esta sección se va a mostrar cómo es la integración con Nessus.
Revisión y configuración previa
1. Es necesario tener una instalación de Nessus en el sistema.
2. Metasploit emplea las Policies de Nessus. Las Policies vienen a ser configuraciones de los tipos de escaneo. Es necesario crear una de ellas para poder llevar a cabo alguna acción entre ambas aplicaciones. Para generar una hay que ir a Nessus a la sección de Scans como se indica en la siguiente pantalla. Se deberá escoger entre alguna de las opciones propuestas y parametrizarlas como se ha vista en la configuración de un escaneo de Nessus.
3. A continuación hay que revisar el contenido del fichero nessus_rest.rb que se encuentra en el directorio /usr/share/metasploit-framework/vendor/bundle/ruby/<ruby_version>/gems/nessus_rest-0.1.6/lib/, en función de la versión de Ruby. Hay que borrar el contenido y copiar el de este enlace con un editor de texto (https://raw.githubusercontent.com/QKaiser/nessus_rest-ruby/nessus-protected-api-support/lib/nessus_rest.rb):
Funcionamiento integración Metasploit-Nessus
1. Primero hay que iniciar el servicio de Nessus y mantenerlo activo, pues ambas aplicaciones se van a comunicar y traspasar información. Después, en la consola de Metasploit iniciar las funciones Nessus con el siguiente comando:
msf6 > load nessus
2. Se establece la conexión entre ambas aplicaciones, de Metasploit hacia Nessus con el siguiente comando, indicando las credenciales del usuario de Nessus:
msf6 > nessus_connect user:password@127.0.0.1
3. Se debe listar las Policies que se han mencionado en la preparación de la configuración previa para obtener la clave de identificación, que se corresponde con una cadena de texto y números.
msf6 > nessus_policy_list
4. Ahora, como si se tratara de Nessus, debe crearse un nuevo escaneo aunque en esta sección se utilizará la configuración que proporciona la Policy. En este caso en el comando deben indicarse la clave de la Policy, una descripción para el host, el escaneo y el o los targets:
msf6 > nessus_scan_new [policy_key] [host_name] "descripción escaneo" [target(s)]
5. Una vez creado el escáner, debe comprobarse la identificación (ID) que le corresponde para poder ejecutarlo. Para ello deben listarse los escáneres con el siguiente comando (como se observa, Metasploit recuperará la información de todos los escaneos realizados, incluyendo los generados en Nessus). En el listado también se obtiene información sobre el estado (status):
msf6 > nessus_scan_list
6. Para realizar el escaneo, debe utilizarse el siguiente comando, indicando el ID del escáner. Como los escaneos en Nessus suelen tardar bastante, se dejará en segundo plano la ejecución del proceso. En cualquier momento se podrá ver el estado listando los escáneres de nuevo.
msf6 > nessus_scan_launch [scan_ID]
7. Una vez terminado el escaneo, debe emplearse el comando que se describe a continuación. Pueden consultarse diferentes formatos de resultados (info, hosts,…).
msf6 > nessus_scan_details [scan_ID] [info|hosts|vulnerabilities|history]