# Análisis de ejecutables, privilegios y tokens en Windows

- Link: https://binariocero.com/windows/analisis-de-ejecutables-privilegios-y-tokens-en-windows
- Published: 2025-12-23T13:13:25+01:00
- Author: Binario 0

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

## Identificación de ejecutables que importan APIs específicas

Esta técnica permite analizar ejecutables del sistema para identificar cuáles importan
funciones concretas de la API de Windows. El análisis de las tablas de importación
resulta especialmente útil para localizar aplicaciones que interactúan con funcionalidades
críticas del sistema, como la creación de procesos.

Reducir un conjunto amplio de ejecutables a aquellos que utilizan una API específica
facilita el estudio de comportamientos concretos y la identificación de posibles**
vectores de ataque** o **superficies de explotación** relacionadas con determinadas
funciones del sistema operativo.

Este enfoque es común en tareas de auditoría, análisis de malware y pruebas de seguridad
ofensiva.

    ```wp-block-code
    PS> $imps = ls "$env:WinDir\*.exe" | ForEach-Object { Get-Win32ModuleImport -Path $_.FullName } PS>
    $imps | Where-Object Names -Contains "CreateProcessW" | Select-Object ModulePath
    ```

## Búsqueda de claves o valores ocultos en el registro de Windows

El registro de Windows puede contener claves o valores diseñados para pasar desapercibidos,
como aquellos que incluyen caracteres especiales no visibles mediante herramientas
estándar. Estas técnicas son utilizadas habitualmente por malware avanzado para **
evadir la detección**.

Mediante el acceso de bajo nivel al registro, es posible enumerar y localizar estas
entradas ocultas, lo que resulta fundamental en **análisis forense**, **respuesta
ante incidentes** y detección de persistencia encubierta.

Esta capacidad demuestra la potencia de PowerShell para interactuar con componentes
internos del sistema que no siempre son accesibles a través de interfaces gráficas.

    ```wp-block-code
    PS> ls NtKeyUser:\SOFTWARE -Recurse | Where-Object Name -Match "`0"
    ```

## Visión general de los privilegios en Windows

En Windows, los privilegios son permisos especiales que permiten a un usuario o 
proceso **eludir determinados controles de seguridad**. A diferencia de los permisos
tradicionales, los privilegios controlan acciones críticas como la depuración de
procesos, la carga de controladores o el acceso a objetos protegidos.

Los privilegios pueden encontrarse habilitados o deshabilitados dentro de un token
de seguridad, y su estado determina si pueden ser utilizados de forma efectiva. 
Comprender este modelo es esencial para analizar escenarios de **escalada de privilegios**
y control de acceso avanzado.

## Enumeración de privilegios de un token de seguridad

Esta técnica permite listar los privilegios asociados a un token de seguridad, incluyendo
su identificador interno y su estado (habilitado o deshabilitado). El análisis de
los privilegios de un token proporciona una visión clara de las **capacidades reales**
de un usuario o proceso.

Esta información resulta clave para evaluar si un contexto de ejecución dispone 
de permisos suficientes para realizar acciones sensibles dentro del sistema.

    ```wp-block-code
    Get-NtTokenPrivilege
    ```

    ```wp-block-code
    PS> Get-NtTokenPrivilege $token
    ```

## Modificación de privilegios de un token

Los privilegios de un token pueden modificarse dinámicamente para adaptarse a distintas
necesidades operativas. Esto incluye la posibilidad de habilitar o deshabilitar 
privilegios específicos, así como eliminar privilegios de forma permanente.

La gestión dinámica de privilegios es especialmente relevante en escenarios donde
se requiere **control granular del acceso**, o para demostrar el impacto que tiene
un privilegio concreto en la ejecución de determinadas acciones.

    ```wp-block-code
    PS> Test-NtTokenPrivilege SeChangeNotifyPrivilege
    ```

**SeChangeNotifyPrivilege**: Permite omitir las comprobaciones de recorrido de directorios(
_traverse checking_), posibilitando acceder a archivos y carpetas aunque no se tengan
permisos explícitos sobre los directorios intermedios.

**SeAssignPrimaryTokenPrivilege** y **SeImpersonatePrivilege**: Permiten eludir 
las comprobaciones de asignación de tokens y suplantación de identidad. Son fundamentales
para técnicas de impersonación y ejecución de procesos bajo el contexto de otro 
usuario.

**SeBackupPrivilege** y **SeRestorePrivilege**: Permiten omitir las comprobaciones
de acceso durante operaciones de copia de seguridad y restauración, posibilitando
la lectura o escritura de archivos independientemente de sus permisos NTFS.

**SeDebugPrivilege**: Permite omitir las comprobaciones de acceso al abrir objetos
de tipo proceso o hilo, facilitando la depuración, inspección de memoria y manipulación
de procesos protegidos.

**Otros privilegios avanzados**, como **SeCreateTokenPrivilege**, **SeTcbPrivilege**,**
SeLoadDriverPrivilege**, **SeTakeOwnershipPrivilege** y **SeRelabelPrivilege**, 
proporcionan capacidades elevadas adicionales, incluyendo la creación de tokens 
de seguridad, la ejecución de operaciones como parte del sistema operativo, la carga
de controladores, la toma de posesión de objetos y la modificación de etiquetas 
de seguridad.

## Comprobación del estado de privilegios específicos

Antes de realizar operaciones que dependen de un privilegio concreto, es fundamental
verificar si dicho privilegio se encuentra habilitado en el token actual. Esta comprobación
evita errores operativos y permite validar si el contexto de seguridad es el adecuado.

Este tipo de verificación es una práctica común tanto en desarrollo seguro como 
en pruebas de seguridad.

## Privilegios clave en entornos Windows

Existen ciertos privilegios que destacan por su impacto en la seguridad del sistema:

 * Privilegios que permiten omitir comprobaciones de acceso a objetos.
 * Privilegios relacionados con la suplantación y asignación de tokens.
 * Privilegios orientados a operaciones de copia de seguridad y restauración.
 * Privilegios que facilitan la depuración de procesos y el acceso a memoria protegida.

El abuso de estos privilegios puede conducir a **control total del sistema**, por
lo que su correcta gestión es crítica.

## Tokens restringidos en Windows

Los tokens restringidos son un mecanismo de seguridad utilizado para **limitar el
acceso a recursos**, y se emplean habitualmente en entornos aislados como _sandboxes_.
Estos tokens reducen las capacidades del proceso incluso cuando el usuario original
dispone de mayores privilegios.

Se crean mediante llamadas específicas al sistema operativo y permiten definir distintos
niveles de restricción.

## Tipos de tokens restringidos

Existen diferentes variantes de tokens restringidos:

 1. **Tokens restringidos normales**, que limitan el acceso mediante identificadores
    de seguridad específicos.
 2. **Tokens con restricción de escritura**, que impiden operaciones de escritura pero
    permiten lectura y ejecución, ofreciendo un aislamiento más simple pero menos robusto.

Cada tipo presenta ventajas y limitaciones según el caso de uso.

## Creación y análisis de tokens restringidos

Es posible crear tokens restringidos con distintos niveles de limitación y posteriormente
analizar sus propiedades para comprender su comportamiento. Propiedades como el 
estado de restricción o la capacidad de escritura permiten determinar el grado de
aislamiento aplicado.

Este análisis es esencial para validar la efectividad de mecanismos de seguridad
basados en aislamiento de procesos.

## Casos de uso y limitaciones de los tokens restringidos

Los tokens restringidos son ampliamente utilizados en navegadores web, visores de
documentos y otros entornos que procesan contenido no confiable. Sin embargo, un
exceso de restricciones puede impedir el acceso a recursos necesarios, afectando
a la funcionalidad.

Encontrar el equilibrio entre seguridad y usabilidad es uno de los principales retos
en su implementación.

## Control de Cuentas de Usuario (UAC) y manipulación de tokens

Windows utiliza UAC para separar las operaciones cotidianas de las acciones administrativas.
Este mecanismo se basa en el uso de **tokens enlazados**, que permiten ejecutar 
procesos en modo limitado o elevado según sea necesario.

El análisis de estos tokens permite comprender cómo el sistema gestiona la elevación
de privilegios y cómo pueden identificarse procesos con distintos niveles de integridad.

## Inspección de manifiestos de ejecutables

Los ejecutables de Windows pueden incluir manifiestos que definen su comportamiento
en relación con UAC, como si requieren privilegios administrativos, si se auto-elevan
o si se ejecutan con los permisos del usuario que los invoca.

La inspección de estos manifiestos es clave para identificar binarios con comportamientos
especiales desde el punto de vista de seguridad.

## Elevación manual de procesos

Windows permite elevar manualmente un proceso para que se ejecute con privilegios
administrativos, siempre que el usuario disponga de los permisos necesarios. Este
mecanismo activa una solicitud de confirmación a través de UAC.

Comprender este flujo es fundamental para analizar cómo se produce la transición
entre contextos de seguridad.

## Análisis de tokens enlazados

Los tokens enlazados representan las dos caras de una sesión con UAC habilitado:
el token completo (elevado) y el token limitado. El primero dispone de mayores privilegios
y un nivel de integridad alto, mientras que el segundo presenta restricciones y 
un nivel de integridad medio.

El estudio de estos tokens permite entender en profundidad el modelo de seguridad
de Windows y su impacto en la ejecución de procesos.

## Evasión del Control de Cuentas de Usuario (UAC) y manipulación de tokens

    ```wp-block-code
    # Inspecting Executable Manifests
    PS> ls c:\windows\system32\*.exe | Get-ExecutableManifest
    # Manual Elevation of Process
    PS> Start-Process notepad -Verb runas
    # Accessing and Displaying Linked Tokens
    # For Full Token
    PS> Use-NtObject($token = Get-NtToken -Linked) {
    Format-NtToken $token -Group -Privilege -Integrity -Information
    }
    # For Limited Token
    PS> Use-NtObject($token = Get-NtToken) {
    Format-NtToken $token -Group -Privilege -Integrity -Information
    }
    ```
