Características de seguridad de PowerShell

PowerShell tiene varias características diseñadas para mejorar la seguridad del entorno de scripting.

Directiva de ejecución

La directiva de ejecución de PowerShell es una característica de seguridad que controla las condiciones en las que PowerShell carga archivos de configuración y ejecuta scripts. Esta característica ayuda a evitar la ejecución de scripts malintencionados. Puede usar una configuración de directiva de grupo para establecer directivas de ejecución para equipos y usuarios. Las directivas de ejecución solo se aplican a la plataforma Windows.

Para obtener más información, vea about_Execution_Policies.

Registro de módulos y bloques de scripts

El registro de módulos permite habilitar el registro de módulos de PowerShell seleccionados. Este valor es eficaz en todas las sesiones del equipo. Los eventos de ejecución de canalizaciones de los módulos especificados se registran en el registro de Windows PowerShell en el Visor de eventos.

El registro de bloques de scripts habilita el registro para el procesamiento de comandos, bloques de scripts, funciones y scripts, tanto si se invocan de forma interactiva como mediante automatización. Esta información se registra en el registro de eventos Microsoft-Windows-PowerShell/Operational.

Para más información, consulte los siguientes artículos.

Compatibilidad con AMSI

Windows Antimalware Scan Interface (AMSI) es una API que permite a las aplicaciones pasar acciones a un escáner antimalware, como Windows Defender, para detectar cargas malintencionadas. A partir de PowerShell 5.1, si PowerShell se ejecuta en Windows 10 (y superior) pasa todos los bloques de script a AMSI.

PowerShell 7.3 amplía los datos que se envían a AMSI para su inspección. Ahora incluye todas las invocaciones de miembros de método de .NET.

Para obtener más información sobre AMSI, consulte Cómo ayuda AMSI.

Modo de lenguaje restringido

El modo ConstrainedLanguage protege el sistema mediante la limitación de los cmdlets y los tipos de .NET que se pueden usar en una sesión de PowerShell. Para obtener una descripción completa, vea about_Language_Modes.

Control de la aplicación

Windows 10 incluye dos tecnologías, Control de aplicaciones de Windows Defender (WDAC) y AppLocker, que se pueden usar para controlar aplicaciones. Estas tecnologías permiten crear una experiencia de bloqueo que ayuda a proteger el entorno de PowerShell.

Para más información sobre la forma en que PowerShell admite AppLocker y WDAC, consulte Uso de Control de aplicaciones de Windows Defender.

Cambios en PowerShell 7.4

En Windows, cuando PowerShell se ejecuta en una directiva de Control de aplicaciones de Windows Defender (WDAC), cambia su comportamiento en función de la directiva de seguridad definida. En una directiva de WDAC, PowerShell ejecuta los scripts y módulos de confianza que permite la directiva en modo Lenguaje completo. Los restantes scripts y bloques de scripts no son de confianza y se ejecutan en modo Lenguaje restringido. PowerShell genera errores cuando los scripts que no son de confianza intentan realizar acciones no permitidas. Es difícil conocer los motivos por los que un script no se ejecuta correctamente en el modo Lenguaje restringido.

PowerShell 7.4 ahora admite directivas WDAC en el modo Auditoría. En este modo, PowerShell ejecuta los scripts que no son de confianza en el modo Lenguaje restringido, pero registra los mensajes en el registro de eventos, en lugar de generar errores. Los mensajes del registro describen qué restricciones se aplicarían si la directiva estuviera en modo Aplicar.

Cambios en PowerShell 7.3

  • PowerShell 7.3 ahora admite la capacidad de bloquear o permitir archivos de script de PowerShell a través de la API WDAC.

Cambios en PowerShell 7.2

  • Hay un caso extremo en AppLocker donde solo hay reglas de denegación y el modo restringido no se usa para aplicar la directiva que permite omitir la directiva de ejecución. A partir de PowerShell 7.2, se realizó un cambio para garantizar que las reglas de AppLocker tuvieran prioridad sobre un comando Set-ExecutionPolicy -ExecutionPolicy Bypass.

  • PowerShell 7.2 ahora no permite el uso del cmdlet Add-Type en una sesión de PowerShell en modo NoLanguage en una máquina bloqueada.

  • PowerShell 7.2 ahora no permite que los scripts usen objetos COM en condiciones de bloqueo del sistema de AppLocker. Los cmdlets que usan COM o DCOM internamente no se ven afectados.

Criterios de servicio de seguridad

PowerShell sigue los criterios de servicio de seguridad de Microsoft para Windows. En la tabla siguiente se describen las características que cumplen los criterios de servicio y las que no lo hacen.

Característica Tipo
Bloqueo del sistema: con WDAC Característica de seguridad
Modo de lenguaje restringido: con WDAC Característica de seguridad
Bloqueo del sistema: con AppLocker Defensa en profundidad
Modo de lenguaje restringido: con AppLocker Defensa en profundidad
Directiva de ejecución Defensa en profundidad

Lista de materiales de software (SBOM)

A partir de PowerShell 7.2, todos los paquetes de instalación contiene una lista de materiales de software (SBOM). La SBOM se encuentra en $PSHOME/_manifest/spdx_2.2/manifest.spdx.json. Crear y publicar la SBOM es el primer paso para modernizar la ciberseguridad del Gobierno federal y mejorar la seguridad de la cadena de suministros de software.

El equipo de PowerShell también está produciendo SBOM para los módulos que son suyos pero se envían fuera de PowerShell. Las SBOM se añadirán en la siguiente versión del módulo. En el caso de los módulos, la SBOM se instala en la carpeta del módulo que hay en _manifest/spdx_2.2/manifest.spdx.json.

Para obtener más información sobre esta iniciativa, vea la entrada de blog Generating Software Bills of Materials (SBOMs) with SPDX at Microsoft (Generación de listas de materiales de software [SBOM] con SPDX en Microsoft).