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.
PS> $imps = ls "$env:WinDir\*.exe" | ForEach-Object { Get-Win32ModuleImport -Path $_.FullName } PS>
$imps | Where-Object Names -Contains "CreateProcessW" | Select-Object ModulePathBú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.
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.
Get-NtTokenPrivilegePS> Get-NtTokenPrivilege $tokenModificació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.
PS> Test-NtTokenPrivilege SeChangeNotifyPrivilegeSeChangeNotifyPrivilege: 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:
- Tokens restringidos normales, que limitan el acceso mediante identificadores de seguridad específicos.
- 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
# 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
} 