Docly Child

4.5.3. Post-Explotation: Meterpreter Gathering: recopilación de información (no privileges)

Tabla de contenidos:

Metasploit: Meterpreter Gathering

Después de haber mostrado las características de los módulos de postexplotación de Metasploit en el anterior punto y la gestión de sesiones con el payload meterpreter, a continuación se ofrece una recopilación de uso de extensiones y módulos para llevar a cabo el primer paso fundamental para las tareas de postexplotación. Este primer paso consiste en obtener información del host explotado (Information Gathering). Como si se tratara de realizar test de pruebas de penetración con nmap o búsquedas de vulnerabilidades, pero con la ventaja de hacerlo desde dentro al haber comprometido el sistema. Estas tareas consisten en recopilar información de aspectos generales como información del sistema operativo y versión, usuario obtenido y sus privilegios, listar procesos, información de red y servicios activos… con el objetivo de llevar un paso más allá la explotación encontrando alguna vulnerabilidad no detectada durante el pentesting.

Para realizar esta muestra se va a utilizar meterpreter con un sistema comprometido de tipo Windows 7. Con las funciones de la extensión stdapi estándar de meterpreter y algunos de los módulos, es suficiente para obtener información de forma fácil. Se debe tener en cuenta:

  • Muchas de las funciones de la extensión stdapi tienen su equivalente para los sistemas Linux, MacOS o incluso Android. No ocurre lo mismo con los módulos de postexplotación que suelen estar especializados en la explotación de un sistema y/o algunas de sus características (aunque existen de tipo multisistema multi). Es por ello, que para los módulos se recomienda haber listado y probado algunos previamente y obtener experiencia con su uso.
  • La extensión stdapi incluye los comandos para la gestión del sistema de ficheros (File system Commands). Esto incluye la posibilidad de crear directorios en la máquina comprometida, subir y descargar ficheros, lectura de documentos, etc. Estas funciones se manejan del mismo modo que algunos de los comandos estándares de bash: cd, mkdir, cat, etc. Algunas de estas funciones resultan muy útiles para otras fases del proceso de postexplotación (escalar privilegios, obtener una puerta trasera o backdoor…) y por lo tanto no se van a mostrar aquí por ser muy genéricas.
  • En la descripción general de los módulos de Metasploit, se ha indicado que en algunos de ellos debe especificarse un target (objetivo). Es decir, en ocasiones no es suficiente con seleccionar un módulo para un determinado sistema operativo. Como es sabido, los sistemas operativos evolucionan para ser más seguros, así que es muy probable que por ejemplo un método de explotación de una vulnerabilidad para un Windows 8 no funcione para una versión superior del sistema (10/11).

Y finalmente, el aspecto que condiciona más el éxito en el proceso de postexplotación así como también la obtención de información va a ser los permisos o privilegios asociados al usuario que gestiona la sesión de meterpreter. Como se va a mostrar en el siguiente punto (Privilege Escalation), cuando se muestren técnicas para escalar privilegios de usuarios, la información que se puede obtener con los siguientes comandos y módulos difiere substancialmente. Para la muestra que se va a realizar, se va a utilizar un usuario sin ningún tipo de permiso especial en el Sistema Operativo Windows.

4.5.3.1. Meterpreter: Información de sistema, usuario y sesión

Una vez obtenida la sesión se meterpreter, el primer paso es conocer en detalle el tipo de sistema explotado (sabiendo de antemano que se ha explotado al menos un Windows, algo que ya se habrá detectado en fases anteriores de la intrusión). Para esto se pueden utilizar los siguientes scripts de núcleo o del módulo stdapi, así como también módulos del framework de Metasploit.

Se puede utilizar sysinfo y el módulo post/multi/gather/env. El primero de ellos muestra información sobre versión del sistema operativo, arquitectura de CPU, nombre del equipo, etc. Por otro lado, el módulo es apropiado para enumerar las variables de entorno (env), incluyendo rutas del sistema, información del usuario del proceso iniciado, etc. Toda esta información será de gran relevancia para poder seguir con las actuaciones propias de postexplotación (escalada de privilegios, persistencia, etc.):

				
					sysinfo
run post/multi/gather/env

				
			
Información de sistema con meterpreter

El siguiente paso es reconocer el usuario asignado al proceso de la sesión de meterpreter y la relación de privilegios asignados. Las diferentes cuentas de usuario poseen una relación de privilegios, siendo de interés la obtención de los máximos equivalentes a una cuenta de administración o de sistema (ver siguiente punto Privilege Escalation). Aunque se puede utilizar el script getuid para mostrar el nombre del usuario, es preferible emplear directamente el módulo post/windows/gather/win_privs debido a la amplia información que proporciona respecto a la cuenta de usuario del proceso. Como se muestra en la siguiente imagen se indica si la cuenta pertenece a administración o sistema, si está habilitado para UAC (User Account Control, concepto en el que se profundizará en siguientes puntos para escalar privilegios), su identificación (UID) y algunos privilegios de Windows, que para este caso representa un nivel de riesgo leve (SeChangeNotifyPrivilege, SeShutdownPrivilege…):

				
					run post/windows/gather/win_privs
				
			
Meterpreter cuentas de usuario

Otra actuación determinante en este punto de la intrusión sería listar las cuentas y usuarios del sistema. Normalmente, cuando la cuenta del proceso no posee suficientes privilegios la obtención de información para esta actuación es limitada. Se puede obtener un mínimo de información con el módulo enum_logged_on_users. Este módulo proporciona datos como la sesión de usuario (SID o Security Identifier) y accesos de otro tipo de perfiles como SYSTEM, LOCAL SERVICE, NETWORK SERVICE. Por otro lado, el script hashdump también permitiría el volcado de información de base de datos del SAM, que contiene la relación de usuarios y contraseñas como hash. No obstante, como muestra la imagen la cuenta de usuario actual (victim) no posee suficientes privilegios para llevar a cabo la acción.

				
					run post/windows/gather/enum_logged_on_users
hushdump

				
			
Meterpreter cuentas de usuario y SID

Para terminar esta primera sección y solo a modo de mención, también se puede utilizar el script winenum. Como se indica en la siguiente imagen, este script ejecuta de forma automatizada una serie de instrucciones en la consola de línea de comandos (CMD) y almacena el resultado en un directorio para su posterior lectura. Este enfoque resulta útil para obtener una visión general del sistema cuando se dispone de poco tiempo o se requiere una recolección masiva de información:

				
					run winenum
				
			
Módulo winenum de Meterpreter

4.5.3.2. Meterpreter: Información de procesos

Otra actuación muy importante a realizar durante esta fase de postexplotación inicial es listar los procesos en curso (se puede consultar información sobre la noción de proceso informático en el siguiente enlace). La información que proporciona esta actuación puede ser muy relevante debido a que se indicará programas y servicios en ejecución y el usuario asociado a los mismos, información que puede utilizarse posteriormente para posteriores actuaciones (por ejemplo, se podría descubrir la existencia de un servicio vulnerable que no ha sido detectado durante la fase de escaneo de servicios, la presencia de un sistema de detección de amenazas en curso, etc.).

Para obtener este listado, se puede emplear el comando ps, proporcionado con la extensión stdpi. Como en otras ocasiones, la información mostrada dependerá del nivel de privilegios del usuario de la sesión. En la imagen mostrada a continuación, se puede observar algunos programas que están en ejecución como explorere.exe o paint.exe (nota: imagen compuesta). Además del usuario (User) vinculado al proceso y el identificador (PID). Existen otros procesos vinculados a cuentas de usuario de tipo sistema o administrador, cuya información no es posible obtener por los privilegios. Además, se muestra el proceso vinculado a la sesión de meterpreter (PID 1812). Al haber empleado un nombre bastante explícito (metepreter.exe) y otras circunstancias (conexiones sospechosas), se podrían dar el caso de que fácilmente un sistema de detección de intrusos o antivirus detectara el proceso como una amenaza potencial y terminara el proceso de la sesión. Como se mostrará a continuación, se pueden gestionar los procesos con meterpreter.

Listado de procesos (ps) con meterpreter

Algunas tareas básicas para gestionar los procesos desde meterpreter son los siguientes:

				
					# Fitrar proceso por nombre, por ejemplo 'calc' para calculadora, obteniendo así el PID asociado:
pgrep <nombre>
# Cerrar un proceso si se dispone de un usuario con permisos (por ejemplo, un programa de detección):
kill <PID>
# Obtener el número de proceso en curso:
getpid
# Obtener los privilegios vinculados al proceso y al usuario (similar a win_privs):
getprivs

				
			
Gestión de procesos con meterpreter

Otra funcionalidad muy destacable es la posibilidad de migrar el proceso actual de meterpreter hacia otro con el comando migrate. Sin entrar en muchos tecnicismos, este script de características avanzadas realiza una inyección del payload en otro proceso en curso gestionando la memoria asignada a este con funciones de librería del núcleo de Windows como OpenProcess, VirtualAllocEx, etc. y creando otro hilo (thread) en el proceso en el que se ha migrado. A su vez, el proceso original se va a terminar. Los propósitos para realizar esta acción podrían ser:

  • Ejecutar la instancia de meterpreter de forma oculta desde otro proceso y así ser menos detectable.
  • Obtener más privilegios: Al migrar a un proceso cuya ejecución se realiza con un usuario con privilegios elevados, estos se van a heredar para el nuevo hilo, con todas las ventajas que conlleva.
  • Obtener mayor persistencia: algunos procesos de sistema (núcleo) se mantienen activos durante toda la sesión del sistema operativo.

Aun así, es preciso migrar a un proceso que no tenga el peligro de terminar de forma inmediata o abrupta (o porqué el usuario víctima cierra el programa manualmente), pues en este caso también se perdería la sesión de meterpreter. En la siguiente imagen se muestra cómo se realiza la migración a un proceso de mspaint.exe, comprobando que se realiza sin problema. No obstante, al intentar migrar a un proceso que se ejecuta con altos privilegios, no es posible:

Migración de procesos con meterpreter

4.5.3.3. Meterpreter: Información de red

Los comandos para información de red son similares a los que se pueden encontrar en las herramientas de la consola de línea de comandos tanto de Windows como de Linux. Además de parecerse en su nombre, la información mostrada también es parecida en cuanto a formato. La recolección de esta información es fundamental para descubrir otros equipos de la red o bien descubrir servicios de red activos que no han sido detectados previamente, normalmente por qué no están expuestos públicamente a Internet. La obtención de esta información resulta útil para propagar la incursión a otros dispositivos de la red así como también descubrir nuevas características del host comprometido. En el punto de Post-Explotation: Lateral Movement and Pivoting Attacks se clasificaran algunas de las técnicas, resultando fundamental obtener información de la red.

Los comandos a utilizar serían principalmente:

  • Ifconfig: Información de las interfaces de red, proporcionando datos sobre el rango de direcciones IP privadas de la red.
Interfaces de red con meterpreter
  • arp: Información de tablas ARP para el protocolo de traducción de direcciones MAC a direcciones IP utilizado en redes locales (Address Resolution Protocol). Puede contener información de otros host que utilizan este protocolo.
  • netstat: Proporciona la información y estadísticas de conexiones de red TCP/IP del host. Esto aporta datos importantes como son servicios activos y los puertos en los que son mantenidos, si se realizan conexiones con otros host de la red, etc.
Información de servicios y tablas ARP con Meterpreter

4.5.3.4. Meterpreter: Información de montaje y sistema de ficheros

En ocasiones, el objetivo de la intrusión consiste en obtener información almacenada en ficheros, extraer archivos concretos o simplemente investigar qué datos contiene el sistema comprometido. En este sentido, lo más habitual es realizar una exploración del sistema de ficheros a través de los discos de almacenamiento secundarios que contienen las particiones y volúmenes del sistema. Esta información puede incluir desde documentos sensibles hasta configuraciones del sistema, credenciales en texto plano o scripts de interés para el atacante.

Para facilitar esta tarea, puede resultar útil identificar las unidades montadas, conocer su punto de montaje y tipo de sistema de archivos, lo que permite orientar la exploración de forma más eficiente y selectiva. Para ello, se puede utilizar el comando show_mount como se muestra en pantalla. En este caso, la información se resume en una única unidad de disco duro (C:\) que es en la que se centraría la búsqueda de información. En su defecto, también se puede utilizar el módulo post/windows/gather/forensics/enum_drives.

Información de montaje de discos duros con meterpreter

Una vez identificada la unidad que se quiere explorar, existen diferentes modos de hacerlo. Uno de ellos sería obtener una shell tipo CMD de Windows con la instrucción shell, caso que se verá más adelante. No obstante, se puede hacer de forma más gráfico y amable con el módulo fileshare. Como se muestra en pantalla, este módulo inicia un servicio web permitiendo la exploración del sistema de ficheros desde el navegador del atacante de forma remota, pudiendo realizar acciones de desplazamiento dentro del sistema de ficheros e incluso descargar directamente la información en el sistema local:

Exploración del sistema de ficheros gráficamente con meterpreter

4.5.3.5. Meterpreter: otros módulos y comandos, gestión del registro

Para finalizar esta sección introductoria sobre los módulos y comandos de recopilación de información en meterpreter, se van a mencionar brevemente algunos adicionales también representativos. En secciones posteriores dedicadas al análisis de postexplotación, estos volverán a aparecer ilustrados con casos prácticos relacionados con la escalada de privilegios, la creación de persistencia y la implantación de puertas traseras (backdooring).

Obtención de directorio y ficheros y obtención de CMD de Windows

Como se ha indicado más arriba, desde meterpreter se puede interactuar directamente con el sistema de ficheros del target. De este modo, desde la sesión es posible realizar acciones como mostrar el directorio actual (pwd) o listar los ficheros de este (ls o dir). Además, meterpreter incluye otros comandos que se podrán utilizar de forma recurrente para transferir archivos entre la máquina atacante y el sistema comprometido, como upload (subida) y download (descarga). La subida de ficheros maliciosos una vez obtenida la sesión, suele ser una acción habitual con el objetivo de aprovechar otras vulnerabilidades, extender la intrusión o crear un mayor daño. En el ejemplo de la imagen, simplemente se ha exportado el payload ubicado en el directorio shells del escritorio de la víctima.

Meterpreter comandos de subida y descarga de ficheros

Con meterpreter también es posible obtener una sesión de consola de linea de comandos de Windows o CMD con el comando shell. Al invocar esta función, se crea un nuevo proceso correspondiente a la consola y se permite la interacción con el sistema y generar instrucciones de CMD (nativos de Windows) de forma directa. Aunque la información mostrada a través de esta consola dependerá obviamente de los privilegios del usuario de la consola, también es interesante ejecutar comandos habituales que pueden mostrar una información diferente a la mostrada directamente a través de las extensiones y módulos de metepreter. Además, desde la CMD, se podran ejecutar programas maliciosos que se hayan subido previamente como se muestra en la siguiente imagen:

Obtención shell nativa (CMD) desde metepreter

El registro de Windows desde Meterpreter

El comando reg en meterpreter permite obtener información del Registro de Windows y modificarlo. El objetivo de este apartado no es analizar en profundidad esta herramienta, que actúa como una base de datos jerárquica encargada de almacenar la configuración del sistema operativo y de las aplicaciones instaladas. Sin embargo, como se deduce de esta descripción, la consulta de claves y valores del registro puede aportar una cantidad de información superior a la que ofrecen otros módulos o comandos, e incluso a la que puede obtener un usuario estándar desde el propio entorno gráfico de Windows.

En la siguiente imagen se muestra una consulta por pantalla y por consola al Registro de Windows para el valor EnableLUA, ubicado en la clave HKEY_LOCAL_MACHINE\(…)\System. Este valor indica si la funcionalidad de UAC (User Account Control) está activada o no (1 y 0 respectivamente) y forma parte de la configuración general de seguridad del sistema.

Consulta al registro de Windows

Como se ha indicado, esta misma consulta se puede realizar a través de las diferentes opciones del comando reg, que además, como se muestra en la siguiente imagen utiliza una sintaxis bastante similar:

				
					# Windows:
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v EnableLUA
# Meterpreter: 
reg queryval -k HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System -v EnableLUA

				
			
Consulta del Registro de Windows a través de Meterpreter

La información mostrada por el Registro así como la posibilidad de editarla también dependerá del nivel de permisos de usuario. La edición del registro permite programar instrucciones para que al arrancar el sistema se ejecuten de forma automática sin el consentimiento de la víctima o el administrador, pudiendo así generar de forma fácil y sigilosa puertas traseras como se verá en los siguientes puntos.

Otros módulos para Windows Meterpreter

Enfocándose en Windows, estos serían algunos módulos interesantes para seguir con la fase de recopilación de información. Como siempre, su éxito dependerá en muchos casos de los privilegios del usuario, por lo que es habitual que algunos de ellos se dejen para más adelante en el proceso de postexplotación, una vez obtenidos los privilegios. Se dejan para que el usuario los pueda probar y practicar:

Módulo

Descripción breve

post/windows/gather/checkvm

Permite detectar si el sistema comprometido se está ejecutando dentro de una máquina virtual.

post/windows/gather/enum_av

Enumera los productos de seguridad instalados como por ejemplo antivirus, antispyware o cortafuegos). Para ello se utiliza WMI.

post/windows/gather/enum_browsers

Extrae información almacenada por navegadores como Chrome, Firefox o Internet Explorer: historial, credenciales, cookies y formularios.

post/windows/manage/killav

Intenta detener procesos de antivirus conocidos. Su efectividad depende de varios factores.

post/windows/manage/enable_rdp

Habilita el servicio de Escritorio Remoto (RDP) en la máquina víctima, permitiendo conexiones futuras sin intervención del usuario.