Cómo habilitar o deshabilitar la ejecución de Scripts en PowerShell

Habilitar o deshabilitar la ejecución de Scripts en PowerShell

En Windows 10, la ejecución de scripts viene habilitada por defecto, lo que abre un mundo de posibilidades.

Sin embargo, con Windows 11, Microsoft adoptó un enfoque más cauteloso, deshabilitando por defecto esta capacidad para aumentar la seguridad del sistema.

En este artículo, te mostraremos cómo activar o desactivar la ejecución de Scripts en PowerShell, ya sea que quieras automatizar y gestionar tareas o prevenir posibles amenazas cibernéticas.

Y es que así como PowerShell ofrece numerosas ventajas para trabajar con automatización y scripting sin demora, también podría ser una potencial vía de ataque si se gestiona inadecuadamente.

Habilitar la ejecución de Scripts en PowerShell

Si has estado tratando de ejecutar un script .ps1 y no has podido, es posible que te haya aparecido un mensaje como este:

No se puede cargar el archivo XXX porque la ejecución de scripts está deshabilitada en este sistema. Para obtener más información, consulta el tema about_Execution_P0licies en https:/go.microsoft.com…

Mensaje de PowerShell
Ejecución de scripts restringida

Esto ocurre porque, tal y como se menciona en el mensaje, el sistema ha deshabilitado la ejecución de estos comandos.

Sigue estos pasos para activar la ejecución de scripts en PowerShell en Windows 10/11:

  1. Abrir PowerShell como administrador.
  2. Ejecutar el siguiente comando:

powershell Set-ExecutionPolicy -ExecutionPolicy Unrestricted

Para comprobar que se ha habilitado, ejecuta este comando:

Get-ExecutionPolicy

Si hiciste todo bien, debería aparecer el siguiente mensaje: Unrestricted.

Habilitar la ejecución de Scripts en PowerShell

También puedes ejecutar estos otros comandos dependiendo de tus necesidades específicas:

  • Para ejecutar scripts locales sin firma y scripts remotos firmados:

Set-ExecutionPolicy RemoteSigned

  • Para eliminar todas las restricciones sobre la ejecución de scripts:

Set-ExecutionPolicy Unrestricted

Confirmar el cambio de política cuando se te solicite: S para Sí. N para No.

Activar scripts Windows 11/10

Deshabilitar la ejecución de Scripts en PowerShell

Desactivar la ejecución de scripts en PowerShell puede ser una medida necesaria para proteger sistemas que no requieren la ejecución regular de scripts o aquellos en entornos altamente sensibles.

Sigue estos pasos para desactivar la ejecución de scripts:

  1. Abrir PowerShell como administrador.
  2. Ejecutar el siguiente comando:

powershell Set-ExecutionPolicy -ExecutionPolicy Restricted

Para comprobar que se ha deshabilitado, ejecuta este comando:

Get-ExecutionPolicy

Si hiciste todo bien, debería aparecer el siguiente mensaje: Restricted.

Desactivar la ejecución de Scripts en PowerShell

Recuerda que siempre puedes volver a cambiar la política de Restricted (Restringido) a Unrestricted (Sin restricciones), o viceversa, en cualquier momento.

La seguridad en PowerShell

PowerShell es una herramienta extremadamente poderosa diseñada para automatizar tareas y administrar configuraciones a través de scripts. Sin embargo, su misma potencia lo convierte en un blanco atractivo para los atacantes.

Los scripts maliciosos de PowerShell pueden ser empleados para instalar malware o ransomware, modificar configuraciones del sistema, o exfiltrar datos sin el conocimiento del usuario.

Por ejemplo, un atacante podría utilizar un script de PowerShell para descargar y ejecutar un payload de ransomware desde un servidor remoto, cifrando archivos críticos y solicitando un rescate.

A pesar de los riesgos, hay situaciones en las que la activación de scripts es necesaria, como para la realización de tareas administrativas automatizadas y la implementación de software a gran escala.

Es vital para los usuarios y administradores entender estos riesgos y tomar medidas proactivas para asegurar sus sistemas contra tales amenazas. La configuración de la política de ejecución de scripts juega un papel central en esta protección, como veremos a continuación.

Entendiendo las Políticas de ejecución en PowerShell

PowerShell incorpora un mecanismo de seguridad conocido como “políticas de ejecución”, diseñado para controlar el nivel de seguridad en la ejecución de scripts.

Estas políticas ayudan a prevenir la ejecución de scripts no autorizados y a proteger los sistemas de posibles amenazas.

Comprender y configurar correctamente estas políticas es crucial para mantener la seguridad y la eficiencia operativa de tu entorno de trabajo.

¿Qué son las Políticas de ejecución?

Las políticas de ejecución en PowerShell son configuraciones que determinan cómo se pueden ejecutar los scripts en el sistema. No impiden que se carguen o se editen scripts en PowerShell, sino que restringen su ejecución basándose en ciertos criterios.

Estas políticas son fundamentales para administrar la seguridad en entornos donde los scripts pueden representar un riesgo.

Tipos de Políticas de ejecución en PowerShell

PowerShell define varias políticas de ejecución, cada una adecuada para diferentes niveles de seguridad y tipos de uso:

  • Restricted: Esta es la configuración por defecto en muchos sistemas. Bajo esta política, no se permite la ejecución de scripts; solo se pueden ejecutar comandos individuales.
  • AllSigned: Exige que todos los scripts y archivos de configuración estén firmados por un desarrollador de confianza antes de que puedan ejecutarse. Esta política es ideal para entornos que requieren un alto nivel de seguridad.
  • RemoteSigned: Requiere una firma digital solo para los scripts que se han descargado de internet. Los scripts locales pueden ejecutarse sin firma. Esta política ofrece un equilibrio entre seguridad y flexibilidad.
  • Unrestricted: Permite ejecutar cualquier script sin ninguna restricción. Aunque esta política ofrece la máxima flexibilidad, también expone al sistema a un mayor riesgo de ataques.
  • Bypass: Ignora todas las políticas de ejecución y ejecuta todos los scripts sin ninguna restricción. Esta política debería usarse únicamente en circunstancias controladas y por usuarios que comprendan bien los riesgos asociados.
  • Default: PowerShell utiliza la política que esté configurada como predeterminada en el sistema, que usualmente es Restricted, pero puede variar según la configuración del sistema.

Ámbitos de las Políticas de ejecución de PowerShell

Las políticas de ejecución en PowerShell se pueden configurar en diferentes ámbitos o niveles, lo que permite una gestión detallada y granular de cómo y quién puede ejecutar scripts en un sistema.

Cada ámbito tiene su propio nivel de prioridad y se aplica en un contexto específico.

  • MachinePolicy: Aplica una política de ejecución para todos los usuarios y procesos en una máquina, configurada a través de directivas de grupo. Afecta a todo el sistema.
  • UserPolicy: Establece una política de ejecución específica para un usuario individual, también configurada a través de directivas de grupo, afectando solo a ese usuario.
  • Process: Define la política de ejecución para el proceso actual de PowerShell. Esta configuración es temporal y solo afecta a la sesión actual.
  • CurrentUser: Aplica una política de ejecución a todas las sesiones de PowerShell iniciadas por el usuario actual, sin afectar a otros usuarios en la misma máquina.
  • LocalMachine: Configura la política de ejecución para todas las sesiones de PowerShell en una máquina específica, aplicable a todos los usuarios que operen en dicha máquina.

Cómo configurar las Políticas de ejecución

Configurar la política de ejecución adecuada es esencial para proteger tu sistema mientras se aprovechan las capacidades de automatización de PowerShell.

Para cambiar la política de ejecución, puedes utilizar el cmdlet Set-ExecutionPolicy. Aquí te mostramos cómo:

  1. Abre PowerShell como administrador.
  2. Para establecer una política, usa el comando: Set-ExecutionPolicy [Política], donde [Política] es el nombre de la política que deseas aplicar.
  3. PowerShell te pedirá que confirmes el cambio de política, especialmente si estás reduciendo las restricciones de seguridad.
Configurar las Políticas de ejecución

Consultar la Política de ejecución actual

El comando Get-ExecutionPolicy es utilizado para consultar la política de ejecución actual en el entorno de PowerShell en el que estás trabajando. Este comando devuelve la política que está efectivamente controlando la ejecución de scripts en tu sesión actual.

Ejemplo de uso:

  1. Abre PowerShell.
  2. Escribe el comando Get-ExecutionPolicy y presiona Enter.
  3. PowerShell te mostrará la política de ejecución actual, como Restricted, AllSigned, RemoteSigned, Unrestricted, Bypass, o Undefined.

Este comando es particularmente útil si estás en un entorno en el que las políticas de ejecución pueden haber sido configuradas por otros administradores o por políticas de grupo en una organización.

Consultar política de ejecución de scripts

Por su parte, el comando Get-ExecutionPolicy -List proporciona una vista más detallada de todas las políticas de ejecución que están configuradas en diferentes ámbitos en el sistema. Este comando es extremadamente útil para diagnosticar comportamientos inesperados relacionados con la ejecución de scripts.

Ejemplo de uso:

  1. Abre PowerShell como administrador para asegurar que tienes acceso a toda la información.
  2. Escribe el comando Get-ExecutionPolicy -List y presiona Enter.
  3. Obtendrás una lista de políticas de ejecución para cada ámbito posible, como MachinePolicy, UserPolicy, Process, CurrentUser y LocalMachine.
Get-ExecutionPolicy -List

Esta lista detalla las políticas aplicables en diferentes niveles o “scopes”. Aquí puedes ver si una política más restrictiva ha sido impuesta en un ámbito específico, lo que podría sobreescribir las configuraciones menos restrictivas en otros ámbitos.

Consideraciones importantes

  • Orden de precedencia: PowerShell aplica la política de ejecución más restrictiva disponible en el orden de precedencia de los ámbitos. Por ejemplo, si MachinePolicy está configurada como Restricted, prevalecerá sobre cualquier otra política menos restrictiva en otros ámbitos.
  • Seguridad: Siempre verifica las políticas de ejecución antes de ejecutar scripts desconocidos o descargados, especialmente en entornos de producción o críticos.
  • Administración de cambios: Cuando trabajes en entornos corporativos o de equipo, ten en cuenta que cambios en las políticas de ejecución pueden afectar a otros usuarios y sistemas dentro de la misma red.

Con estos comandos, puedes asegurarte de que la configuración de la política de ejecución de PowerShell en tu sistema es la adecuada para tus necesidades de seguridad y operativas, proporcionando un balance entre protección y funcionalidad.

Consejos y recomendaciones finales

En un entorno donde no se requiere el uso regular de scripts de PowerShell, o en situaciones donde la seguridad es una preocupación primordial, la mejor práctica es mantener la ejecución de scripts deshabilitada: Restricted.

Esta estrategia minimiza los riesgos de seguridad al prevenir la ejecución accidental o maliciosa de scripts no autorizados. Además, puedes optar por habilitar la ejecución de scripts temporalmente cuando sea necesario y desactivarla inmediatamente después para mantener un entorno controlado y seguro.

Siempre sé consciente de las implicaciones de seguridad al cambiar las políticas de ejecución de scripts. Asegúrate de entender la función y el origen de cualquier script antes de ejecutarlo, y siempre opera bajo el principio de “el menor privilegio”, utilizando la configuración de política más restrictiva que permita realizar el trabajo necesario.