Docly Child

4.4.5. Reconocimiento Sistemas Operativos Windows

Tabla de contenidos:

Sistema Operativos Windows

Después de mostrar las funciones principales de los Sistemas Operativos (SO en adelante) desde una perspectiva bastante teórica (procesos, gestión de memoria, etc.), en este punto se va a profundizar en los aspectos prácticos de los SO Windows. Para ello se va a mostrar varias instrucciones para ejecutar en la consola de línea de comandos de Windows (CMD) así como también algunos componentes importantes de este SO que están presentes en las versiones más modernas (usuarios, registro, sistema de eventos, etc.). Todo ello con el objetivo de obtener información sobre el target y su entorno de red para fines de explotación y postexplotación.

La primera parte de los contenidos se han efectuado con una shell (versión CMD) obtenida a través de Netcat en un entorno de laboratorio, siendo el objetivo un Windows 10 (192.168.1.41) y el atacante un Kali Linux (192.168.1.47), todo ello para simular un entorno de explotación lo más verosímil posible. En la sección de anexos de este bloque existe un punto dedicado a la obtención de shells a través de Netcat. Es necesario precisar que algunas de las instrucciones mostradas solo pueden realizarse cuando el atacante haya obtenido suficientes privilegios de usuario a través de la shell (usuario Administrador), aspecto que se va a profundizar en el siguiente apartado de postexplotación.

Una vez se obtiene la shell, una de las primeras cosas que se suele hacer es obtener información sobre el nombre del host y el usuario con las instrucciones hostname y whoami respectivamente como se muestra en la siguiente pantalla. El nombre de usuario mostrado (favoritevictim) no parece indicar que con la shell obtenida se puedan efectuar instrucciones correspondientes a un usuario de mayor rango como podría ser NT AUTHORITY o Administrador. Los privilegios de usuario obtenidos con esta shell en Netcat son los del usuario que ha iniciado la ejecución de Netcat en Windows como proceso. En los siguientes puntos se mostrará más información sobre el sistema de nombre de hosts y gestión y características de usuarios con el comando net.

Comandos hostname y whoami en Windows

4.4.5.1. Windows: Reconocimiento de redes

En la fase de reconocimiento es fundamental obtener información sobre las interfaces de red y las redes en las que opera el host. Para llevar a cabo este reconocimiento se puede utilizar el comando ipconfig en la consola de línea de comandos de Windows. Este comando permite obtener varios detalles importantes sobre la configuración de red del host objetivo. Entre la información más relevante se encuentra la dirección IP con la que opera dentro de su entorno local. Además, se puede obtener datos sobre la configuración de la máscara de red (Subnet Mask), lo que proporciona la notación CIDR (Classless Inter-Domain Routing) que identifica la red a la que pertenece.

Comando ipconfig en Windows

El siguiente paso es realizar un reconocimiento más amplio de la red para identificar otros dispositivos que operan en la misma red. Este paso es especialmente relevante durante la fase de postexplotación, cuando el objetivo es propagar la incursión a otros dispositivos de la red comprometida. Existen varias técnicas y herramientas que se pueden utilizar para realizar este reconocimiento de la red y descubrir otros hosts:

1. Análisis de la tabla ARP: El protocolo de resolución de direcciones (ARP, de las siglas en inglés Address Resolution Protocol) es un protocolo de comunicaciones en red para entornos de red locales (LAN). Resumiendo mucho, se encarga de vincular la dirección MAC (física) que identifica la tarjeta de red del host con su IP privada (lógica). Este protocolo opera en la capa de enlace de datos en el modelo OSI, permitiendo a un dispositivo conectado a una red obtener la dirección MAC de otro dispositivo en la misma red e ir generando así una tabla con una pareja IP-MAC de los dispositivos conectados. Para obtener los datos de esta tabla en el host comprometido y así identificar otros posibles targets, se puede utilizar el comando arp -a:

Tabla ARP

Nota: En la imagen mostrada se ha ocultado la información de la direcciones MAC (Physical Address) pues estas identifican de forma unívoca a una tarjeta de red. La MAC está compuesta por 12 dígitos en hexadecimal divididos en pares. Los tres primeros pares identifican al fabricante de la tarjeta de red y los otros se asignan de forma única por el fabricante.

2. Escaneo de redes y puertos empleando NMAP: Aunque NMAP no está disponible por defecto en los Sistemas Operativos Windows, sí es posible obtener un formato ejecutable a través de CMD para este SO. Para ello hay que descargar el paquete de instalación de la web de NMAP (https://nmap.org/download#windows). Al terminar la instalación en Windows se obtiene el directorio con los diferentes componentes. Este directorio incluye librerías de enlace dinámico (DLL) que son importantes para el correcto funcionamiento de la aplicación. Se puede trasladar este directorio a Kali Linux y después probar de descargar el directorio completo en el target a través de Netcat tal y como se ha mostrado en el anexo dedicado a las Netcat Shells. Una vez efectuado con éxito la descarga del directorio en el objetivo, se puede probar a ejecutar el archivo correspondiente a NMAP para explorar la red empleando la notación de red CIDR):

				
					nmap.exe [opciones] [CIDR]
				
			
Ejemplo de descarga y ejecución de nmap en SO Windows con Netcat

Sin duda el método de descargar nmap en el dispositivo target puede resultar tedioso y no siempre funciona, pues requiere que la ejecución del binario (netcat.exe) se realice con privilegios de usuario altos y por otro lado hay que contar con los sistemas de seguridad. No obstante, como se verá en los siguientes puntos de postexplotación existen otras formas más eficaces empleando para ello herramientas como Meterpreter.

4.4.5.2. Windows: Comando net (sistema, usuarios, grupos, dominios y servicios)

Otra herramienta que proporciona información valiosa y permite la administración directa de varios elementos en Windows relacionados con la conectividad en redes, usuarios, grupos y servicios es el comando net. El comando net está presente en la mayoría de versiones de Windows y fue implementado por IBM. La instrucción net en la herramienta de consola de línea de comandos CMD nos proporciona información sobre  algunas de las opciones:

Comando net en Windows

A continuación se proporcionan algunos ejemplos con explicaciones de la información obtenida que puede resultar útil:

				
					net config <server|workstation>
				
			
  • Este comando (con las opciones de Server o Workstation) permite obtener información general sobre la configuración del dispositivo target como son el nombre del equipo y el usuario, aunque como se ha visto anteriormente también se puede obtener por otros medios (instrucción whoami).
  • No obstante, en un entorno corporativo resultan interesantes las variables Full Computer name y Workstation domain. Estos incluyen información sobre los dominios. El funcionamiento de los dominios es equiparable al que se ha explicado en el apartado del protocolo DNS (Domain Name System). Los dominios son una parte fundamental de la infraestructura de red en entornos empresariales y de organizaciones más grandes. Un dominio es un grupo de computadoras, dispositivos de hardware y otros medios que comparten una base de datos de usuarios, contraseñas y recursos de red. Los dominios y subdominios se estructuran de forma jerárquica (incluyendo el dominio raiz), permitiendo obtener información sobre la estructura de una red empresarial.
Comando net config
				
					net localgroup
net localgroup <group>
net localgroup Administrators
net localgroup nombre_grupo nombre_usuario /add

				
			
  • La instrucción net localgroup con sus diferentes argumentos permite obtener información y gestionar los grupos locales (localgroup) en un dispositivo. Los grupos locales son una forma de organizar y gestionar usuarios con fines de seguridad y facilitar la asignación de permisos a varios usuarios al mismo tiempo.
  • Los grupos locales vienen predeterminados en Windows y como indica su nombre tienen que ver con las funciones que se espera realice un usuario de la computadora. Por ejemplo existe el grupo de Administradores, que tiene privilegios casi completos.
  • Las instrucciones mostradas en los ejemplos permiten listar los grupos, obtener información sobre un grupo en concreto y finalmente agregar un usuario creado dentro de un grupo local. Para realizar alguna de estas acciones con el comando net es necesario que el usuario tenga privilegios altos.
Comando net localgroup
				
					net user
net user <user>
net user nombre_usuario contraseña /add

				
			
  • Tal y como el nombre indica, net user y sus diferentes argumentos permiten obtener información valiosa sobre los usuarios y los grupos a los que pertenecen.
Comando net user
  • Otra opción con este comando es la de agregar usuarios (add), que posteriormente también se pueden incluir en algún grupo, como podría ser el de Administradores, combinando con el comando net localgroup. Sin duda, permitir que un atacante gestione usuarios durante una incursión puede tener consecuencias devastadoras. Es una técnica recurrente cuando se obtiene un usuario con suficientes privilegios y se desea dejar una puerta trasera abierta para detener la incursión y continuar en otro momento.
Comando net user add
Comand net agregar usuario a grupo
				
					net share
net share <share_name>

				
			
  • La instrucción net share permite mostrar todos aquellos recursos compartidos en una computadora. Los recursos compartidos suelen ser un directorio o algún dispositivo de hardware como una impresora, etc. Como en los anteriores ejemplos, la instrucción simple muestra un listado y después se puede obtener información en detalle del recurso indicando el nombre del recurso como argumento.
Comando net share
				
					net start
net <start|stop> <service_name>

				
			
  • El comando net start con sus diferentes argumentos permite gestionar los servicios que se están ejecutando en segundo plano. Al utilizar el comando sin argumentos se muestran el listado completo de los que están en ejecución (son equivalentes a procesos). También es posible iniciar o detener un servicio con los argumentos start o stop seguido del nombre del servicio. Si un atacante obtiene un usuario con suficientes privilegios, esta instrucción también puede resultar muy perjudicial en función de los servicios y sistema de seguridad que pudiera detener este atacante.
Comando net start

4.4.5.3. Windows: Procesos

En otros puntos de este bloque de Sistemas Operativos ya se ha tratado en detalle la definición de los procesos en una computadora (instrucciones en ejecución de un programa o la instancia de un programa que está en ejecución). Con Windows se tiene el comando tasklist que junto al argumento /V proporciona información de estos procesos y otros detalles: ID del proceso, memoria utilizada, nombre de la sesión y el usuario que está ejecutando el proceso.

En la columna de usuarios (User Name) está presente la cuenta de usuario especial NT AUTHORITY\SYSTEM. Esta cuenta vendría a ser un equivalente a root en los entornos Linux, aunque en realidad representa al Sistema Operativo en sí mismo y tiene privilegios de administrador. Esta cuenta tiene un acceso completo sobre el sistema, incluyendo componentes críticos. Durante el proceso de postexplotación, el control de esta se convierten en un objetivo fundamental. Es habitual que una vez obtenida la shell, se intente trasladar el proceso de la shell hacia un proceso (PID) que esté siendo ejecutado por esta cuenta.

Nota: La cuenta de Administrator y la cuenta NT AUTHORITY\SYSTEM no son la misma, aunque ambas se crean por defecto durante la instalación de Windows. Administrator es una cuenta de usuario administrador local que puede ser accesible y utilizada por administradores humanos, mientras que NT AUTHORITY\SYSTEM es una cuenta de sistema reservada para servicios y procesos internos del sistema operativo con privilegios aún más elevados.

Comando tasklist en Windows

4.4.5.4. Registro de Windows

El Registro de Windows es un sistema especial de base de datos que almacena información relacionada con la configuración del SO, características de aplicaciones, políticas de seguridad, información de servicios, redes, hardware y usuarios etc. a través de un sistema de valores especial. En la web de Microsoft existe una introducción con abundante información (no se entrará en detalle): https://learn.microsoft.com/es-es/troubleshoot/windows-server/performance/windows-registry-advanced-users

En todo caso, solo indicar que el sistema del Registro tiene una estructura jerárquica, siendo el formato similar al de los directorios y subdirectorios. Los directorios raíces tendrían formato HKEY_LOCAL_MACHINE y dentro de su estructura en forma de árbol se encuentra la información en diferentes formatos (valores binarios o cadenas de un determinado número de bits, valores  múltiples, etc.). Se puede gestionar el Registro con la aplicación particular regedit (se puede acceder con Run en Windows tal y como se muestra en pantalla). Los datos del registro se encuentran en el directorio C:\Windows\System32\config.

regedit (Editor del Registro de Windows)

Exponer de forma exhaustiva todo los posibles valores que se pueden encontrar en el Registro de Windows en este texto sería demasiado. Solo indicar que el Registro también se puede editar a través de la consola de línea de comandos en Windows si se cuenta con un usuario con suficientes privilegios. El comando tipo para consultar el valor de  algún registro y un ejemplo para obtener la versión del sistema operativo serían (con el argumento /? para obtener más formas del comando tipo):

				
					#Ayuda
reg /?
#Ejemplo de consulta
reg query <ruta_del_registro> /v <nombre_del_valor>
#Ejemplo, donde hklm es la abreviatura de HKEY_LOCAL_MACHINE
reg query "hklm\software\microsoft\windows nt\currentversion" /v ProductName

				
			
Edición del registro de Windows a través de la consola

Tener la posibilidad de editar el registro para un un atacante que ha obtenido algún un usuario con suficientes privilegios puede resultar devastador. Con la siguiente instrucción de ejemplo se va a forzar al dispositivo target a que cada vez que se inicie el computador con un determinado usuario se abra la calculadora. Sin embargo, también se podrían indicar que fuera algún tipo de malware en vez de la calculadora. En el capítulo de postexplotación se ampliarán los ejemplos.

				
					#HKCU es la abreviatura de HKEY_CURRENT_USER.
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "Calculator" /t REG_SZ /d "calc.exe" /f

				
			
Ejemplo de registro de Windows iniciar aplicación al iniciar sistema

4.4.5.5. Eventos en Windows: Event Viewer y Logs del Sistema

Un paso fundamental en un proceso de explotación es controlar y eventualmente eliminar cualquier registro de actividad que se pueda producir durante la incursión. Este paso es necesario para eliminar las pruebas de actividad que pudieran desvelar la acción del atacante en un procedimiento de informática forense, o al menos dificultar este proceso.

Tanto Windows como otras aplicaciones que puedan integrar diferentes servicios (FTP, SSH, servidor web, etc.) registran y almacenan datos de eventos, actividades o información relacionada con la actividad del sistema o la aplicación. La forma de almacenar esta información es a través de archivos de logs. A parte de controlar los logs generados por otras aplicaciones, servicios y procesos, Windows también tiene un sistema centralizado de gestión de eventos que es Event Viewer. Se puede acceder a este sistema con el siguiente comando en la CMD (con un usuario tipo administrador):

				
					C:\WINDOWS\>eventvwr
				
			
Aplicación Event Viewer en Windows

Este sistema de gestión de eventos con interfaz gráfica proporciona información sobre la estructura del registro de actividad. Entre las características cabe destacar:

  • Datos de evento: Para cada registro existe información de datos generales (General) y los detalles, que pueden ser alguna descripción, formato XML, etc.
  • Organización de eventos: Existen estos 5 principales como puede verse en la imagen anterior en la parte superior izquierda:
    • Application: De las diferentes aplicaciones.
    • System: Mensajes sobre el propio Sistema Operativo.
    • Setup: Detalles de la instalación del Sistema Operativo
    • Security: Información de las sesiones, loggins de usuarios, intentos de elevar privilegios de un usuario…
    • Forwarded Events: Mensajes de peticiones de clientes cuando el dispositivo actúa como servidor (ver estructura cliente-servidor).

4.4.5.5.1. Especificaciones de eventos y eliminar logs en Windows

El registro de actividad del Gestor de Eventos de Windows se almacena en logs cuya extensión es .evtx. El sitio de almacenaje por defecto es en el siguiente directorio: C:\Windows\System32\winevt\Logs o %SystemRoot%\System32\winevt\Logs\Security.

Nota: Puede consultarse y modificar esta ubicación mediante registro, en la subclave siguiente:

				
					reg query HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Security -v File
				
			
Registros de logs en Windows

Tal y como se ha especificado al principio de este epígrafe, controlar y eliminar los logs después de realizar una incursión puede ser una acción fundamental. Existen dos formas muy expeditivas de eliminar los logs y archivos de gestión de eventos de Windows. Para ello es necesario realizar las siguientes acciones o comandos de consola con privilegios:

1. Eliminación de archivos con formato .log: Se puede utilizar la siguiente instrucción desde el directorio raíz de alguno de los volúmenes i/o discos principales (C:\). Con esta instrucción y sus argumentos el comando del se asegura de eliminar todos los archivos con extensión .log  de forma recursiva (/s) en todos los subdirectorios. Se hace para archivos con atributos de solo lectura y ocultos (/a y /f) y en modo silencioso (/q).

				
					C:\>del *.Log /a /s /q /f
				
			
Eliminación de archivos log del sistema Windows

Eliminación de archivos de eventos en Windows: En esta ocasión se crea un script en lenguaje de procesamiento por lotes (batch) y se añade a un fichero con extensión .bat, que después se ejecuta. Sin entrar en detalles, el script elimina todos los registros de eventos mediante la herramienta wevutil.exe por bucle (for).

				
					#Con esta instrucción se crea el fichero clear_events.bat y se añade la instrucción
echo for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1" > clear_events.bat
#Ejecución del fichero .bat
clear_events.bat

				
			
Eliminación de archivos de eventos de Windows con batch

4.4.5.6. Fichero SAM de usuarios

El fichero de Administrador de Cuentas de Seguridad o SAM (de las siglas en inglés Security Accounts Manager) almacena la base de datos de usuarios locales y sus contraseñas. Se utiliza para autenticar el acceso de los usuarios y contiene información en formato hash cifrado de las contraseñas. El cifrado con un hash de una contraseña implica utilizar un algoritmo matemático (función hash) que toma un valor de texto plano (cadena de caracteres) de cualquier longitud y produce una cadena de caracteres fijos de longitud fija que se conoce como hash value, normalmente en valor hexadecimal.

Las funciones de hash son unidireccionales, siendo fácil generar un hash de una cadena de texto. No obstante, con el hash es prácticamente imposible recuperar la cadena original. A pesar de esto, existen ataques mediante fuerza bruta utilizando diccionarios de claves que transforman cada entrada del diccionario en un hash y la comparan con el valor a recuperar del hash. En este epígrafe se estudiará cómo está formado el SAM en Windows. En la sección de anexos se verá como obtener el SAM con los hashes y algunas técnicas y herramientas para descifrarlos y obtener las contraseñas.

Funciones Hash para cifrar cadenas

El formato de fichero SAM actual se utiliza desde Windows 7 y sigue vigente hasta la actualidad (en el momento de escribir esto ya existe Windows 11). Contiene los siguientes datos (una fila para cada cuenta de usuario):

  • User: Contiene el nombre del usuario de cada cuenta. Este incluye las filas para los usuarios que crea Windows durante la instalación: Administrador, Invitado, etc.
  • SID: Se corresponde a los últimos dígitos de los códigos de Identificadores de Seguridad. Estos identificadores son asignados de forma unívoca a un usuario y son utilizados para asignar permisos de acceso a recursos y objetos del sistema. Un ejemplo de SID podría ser S-1-5-21-1234567890-1234567890-1234567890-500, siendo los últimos dígitos los que se pueden ver en el contenido del SAM para cada usuario. Normalmente los dígitos de 500, 501, etc. son para los usuarios que el Sistema Operativo crea por defecto (500 para el Administrador), mientras que a partir de 1000 es para los usuarios creados por una persona (el 1000 suele ser para el primer usuario creado).
  • Hash LANMAN: Se corresponde con el hash del LAN manager. Pertenece a un método de encriptación anterior a NTLM (ver abajo) y se conserva para permitir la compatibilidad entre sistemas heredados. Se puede considerar un valor obsoleto (no se puede considerar que sea la contraseña hash y no hay nada que obtener de él).
  • Hash NTLM: Contiene el hash de la contraseña del usuario y es considera el sucesor del sistema LANMAN. Una vez obtenido el fichero SAM, estos hashes son los que una vez descifrados permiten obtener la contraseña original. Está formado por 32 caracteres en sistema hexadecimal, al igual que el hash LANMAN.
Formato del fichero SAM

A parte del fichero SAM, en algunas técnicas para la obtención de los hashes también se suele utilizar el fichero SYSTEM. En las prácticas del anexo se verá con mayor detalle, aunque SYSTEM tiene una importancia relativa. Estos ficheros se hallan en el directorio del volumen principal C:/Windows/system32/config y se deniega cualquier tipo de interacción con ellos pues su alteración podría suponer una grave afectación al sistema. Es por ello que se necesitan métodos especiales para obtener su información, ya sea mediante la extracción con discos de arranque (que no se va a mostrar aquí) o con herramientas especializas que se verán en el anexo.

4.4.5.7. Versiones de Windows

Para terminar este punto de reconocimiento de Sistemas Operativos Windows es preciso hablar de las diferentes versiones de Windows. Windows ha evolucionado del SO MS-DOS y en la actualidad probablemente sea el SO más conocido y utilizado en el mundo. Existen versiones tanto para hogar u oficina (home) como para funciones específicas de servidor (server).

A la hora de efectuar una intrusión contra una red lo más probable sea encontrar formatos de servidor, pues están más expuestos, mientras que las versiones para oficina u hogar se reservan a cuando ya la intrusión se ha propagado a otros equipos personales de la red. Es por ello que durante el reconocimiento es importante conocer las versiones de Windows más utilizadas y las que todavía reciben soporte en términos de actualizaciones y parches de seguridad contra vulnerabilidades. La información de estas actualizaciones se puede encontrar dispersada por la web de Windows, por ejemplo en: https://learn.microsoft.com/en-gb/windows/release-health/ . Es importante destacar que las versiones que ya no reciben ningún tipo de soporte por parte del equipo de Windows estarán sujetas a mayores riesgos pues la proliferación y creación de exploits para todas las versiones de Windows (con o sin soporte) están a la orden del día.

En el momento de escribir esto (2023) las siguientes versiones que siguen recibiendo soporte en términos de actualizaciones de seguridad, etc.:

  • Formato servidor: Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019, Windows Server 2022
  • Formato hogar y oficina: Windows 8, Windows 8.1, Windows 10, Windows 11 (las versiones 8 y 8.1 dejarán de recibir soporte a lo largo de 2023).

Para hacerse una idea de que versión de Windows es la más utilizada para un equipo expuesto a Internet se puede utilizar la herramienta de Shodan. Una simple búsqueda incluso sin estar loginado permite hacerse una idea:

Búsqueda Shodan de SO Windows en la red