4.2.2. Librerías Ruby y arquitectura modular de Metasploit
Metasploit Framework (a partir de ahora se referirá a este como simplemente Metasploit) es un proyecto de código abierto propiedad de Rapid7 y es actualmente la herramienta más conocida y usada para pruebas de penetración y seguridad en sistemas informáticos. Existen versiones para los Sistemas Operativos más conocidos, aunque este bloque se va a centrar en la versión para la distribución Debian de Kali Linux.
Entre sus características destaca la arquitectura modular. Los módulos son pequeños bloques de código que forman parte de un sistema completo. Cada módulo está pensado para efectuar una tarea específica pudiéndose combinar y facilitar la tarea a los desarrolladores. En casi todas las guías y manuales para Metasploit es habitual mostrar el siguiente gráfico para representar la arquitectura modular de la herramienta:
Antes de explicar el gráfico, conviene indicar que Metasploit está escrito en el lenguaje de programación orientado a objetos Ruby y por lo tanto se sirve de sus funciones y características. Las distribuciones de Ruby cuyas versiones 2.7.0 y 3.0.0 se encuentran disponible por defecto en las distribuciones de Kali Linux, incluyen un conjunto de librerías de funciones denominadas REX-Ruby extensión (ver gráfico). Como se indica en el gráfico, estas librerías constituyen una parte fundamental del framework ya que provee la implementación para el uso tanto como servidor o cliente de los diferentes protocolos de red estándares, APIs, así como un sistema de clases que ayuda a los desarrolladores del software, entre otras funciones. Los ficheros escritos en este lenguaje (entre los que se incluye los que determinan los módulos de Metasploit) tienen por extensión .rb.
En REX también están los paquetes de software para librerías y aplicaciones específicas escritas en Ruby que se denominan gemas (o gems en inglés). Existen diferentes foros para la comunidad de desarrolladores de Ruby que comparten de forma libre estos conocimientos y colaboran en la elaboración de software mediante gemas, por ejemplo en: https://rubygems.org/. Una gema por ejemplo sería el paquete que contiene las funciones y librerías para el framework Ruby on Rails (https://rubyonrails.org/), que permite implementar diferentes servicios web. Para gestionar estas librerías o gemas, se puede hacer a través del comando gem, cuya función es gestionar los paquetes de librerías de Ruby similar a como la hace apt.
Como ya se ha comentado, en la distribución de Kali Linux usada al escribir esto, vienen por defecto las versiones 2.7.0 y 3.0.0 de Ruby. Algunos de los directorios para las librerías de funciones escritas en Ruby serían:
/usr/include/ruby-3.0.0/ruby/…
/usr/lib/ruby/…
Volviendo al gráfico de la arquitectura de Metasploit, el segundo bloque de librerías de funciones del framework es MSF Core (Núcleo). Este componente viene a ampliar con funciones específicas para Metasploit los contenidos de REX y permite la interacción del resto de elementos que componen el gráfico: pluggins, los módulos (MSF Base) y la implementación de las diferentes interfaces de usuario. El directorio principal en Kali Linux para estas librerías Core (en concreto dentro del directorio lib, ver imagen) y Base es:
usr/share/metasploit-framework
Accediendo al directorio modules en la misma ruta y listando los elementos, se puede ver de forma explícita los tipos de módulos (MSF Base) con los que funciona Metasploit. En los siguientes subdirectorios se puede ver la estructura modular organizada de forma genérica en Sistema Operativo, servicio de red y descripción de la función, hasta llegar a los ficheros Ruby que contienen el código del módulo en lenguaje Ruby. En la siguiente imagen se muestra ejemplo para los módulos tipo Exploit para el servicio SSH en SO Windows:
/usr/share/metasploit-framework/modules/exploits
/usr/share/metasploit-framework/modules/exploits/windows
/usr/share/metasploit-framework/modules/exploits/windows/ssh
A parte de los módulos exploits, payloads y post (postexplotación) cuya función es clara de acuerdo a la explicación del punto anterior y los auxiliary que se han visto en el bloque de escaneo de redes y servicios, existen otros módulos de encoders y evasion cuya función es proveer a los otros módulos de sistemas de ocultamiento ante los sistemas de defensa (se verán en puntos siguientes).
Ante todo, el éxito de Metasploit se debe a su versatilidad. El corazón del framework que es el lenguaje de programación Ruby y su sistema de librerías, permite integrar diferentes funciones para todos los módulos y que a su vez estos puedan combinarse a través del uso en las diferentes interfaces de Metasploit, resultando fácil tanto para efectuar pruebas de penetración para cualquier usuario sin importar mucho sus conocimientos como también para los desarrolladores. Por ejemplo, abriendo con un editor de texto el fichero de un exploit común como EternalBlue (ms17_010_eternalblue.rb) se pueden ver algunos bloques comunes que caracterizan el código con el que se escribe un módulo en Metasploit. Sin entrar en detalles ahora, las imágenes de abajo resumen estos bloques:
1. Definición de librerías (REX o Core) a partir del método require, necesarias para que el módulo pueda operar. Las cláusulas class e include permiten añadir funcionalidades propias de acuerdo al tipo de módulo (en este caso de la familia Exploit para Remote Code Execution) y el servicio o aplicación para el cual están diseñados.
2. Función def initialize para introducir información del módulo como son el nombre, descripción, licencia, autor, plataforma…
3. Definición de argumentos y configuración del módulo a partir de register_options:
4. Finalmente, la función principal que ejecuta las funciones del módulo, que suele ser def run o def exploit. Normalmente el código contiene funciones auxiliares o rutinas específicas que dependerán de la complejidad del módulo y de quién haya hecho el código:
Finalmente, la biblioteca base (MSF Base) se amplía con el soporte para la interfaz de usuario (UI, de las siglas en ingles user interface). El framework básico proporciona dos tipos de interfaces: la web y la consola de línea de comandos denominada msfconsole. En este bloque se mostrará principalmente la interfaz msfconsole por su versatilidad y porque aprovecha mejor todas las funcionalidades del framework.
Para terminar esta sección, se va a indicar que Metasploit tiene disponible una edición de pago para aquellos que se dedican profesionalmente al pentesting o pertenecen a algún departamento de seguridad de alguna empresa IT. Esta versión se denomina Metasploit Pro.