miércoles, 23 de diciembre de 2020

Firma de scripts Powershell para cumplimiento elevado

 Estimados amigos de Inseguros !!!

El tema de hoy es la risa, porque no conozco empresa que lo tenga bien, y mira que doy vueltas por compañías de todo tipo...

Ejecución de scripts en Powershell. Recuerdo cuando se introdujo su uso, o mejor dicho, popularizó, con Server 2012 ejecutabas un script y no tiraba. En internet calculo que hay un millón y medio de post diciendo cómo desactivar la política de ejecución de scripts en Windows. ( 500.000 en castellano).

Hablo del famoso set-execution policy unrestricted

No voy a entrar en todos los modos que hay, ni los ámbitos de aplicación, ni como "hackear" esto. Voy a comenzar por el principio.

Por qué no dejas la configuración de ficheros firmados, e implementas la buena práctica de usar scripts firmados, o auto-firmados... pero desactivarlo la primera vez que usas PS y dejarlo así? así no my friend !!!

Los pasos son sencillos. Debemos instalar una Entidad emisora de Certificados como un role en nuestro server favorito. Siguiendo cualquier documental en video, o en Twich ( algún día opinaré sobre esto xD) o siguiente siguiente, podrás instalar por defecto una CA, que te vendrá bien para firmar tus apps internas, tu EFS, tu IPSEC o cualquier otro servicio que requiera de certificados dentro del dominio. En este caso, solo firmar tus scripts...

Con la CA instalada, el proceso es sencillo. Configuramos en la plantilla de certificados qué usuario o grupo podrá firmar scripts PowerShell.


Con esta modificación, o dejándolo por defecto para los administradores del dominio, habilitamos la plantilla para que esté disponible.


Ahora es el turno de cargar el complemento Certificados, en el almacén personal, solicitar un nuevo certificado de firma de código a la CA.


Una vez solicitado, exportamos el certificado que usaremos para cifrar.

Creamos una GPO e indicamos que este certificado es válido, de confianza. De esta manera podremos confiar en este script firmado en todo el dominio.


Después de una actualización Gpupdate, compruebo que tengo la política habilitada de solo firmados, ejecuto cualquier script chorra ( echo "hola mundo" ) y no lo ejecutará.

Firmas el script, y lo ejecutas y lo tienes...

$cert=(dir cert:currentuser\my\ -CodeSigningCert)
Set-AuthenticodeSignature ‘.\hello.ps1' $cert


Mira el contenido del script. Crees que si lo modificas la firma funcionará o tendrás que volver a firmarlo?

Sabes cómo ver las políticas de ejecución en tu dominio? Cómo cambiarlas? Cómo detectar si alguien quiere hacer un bypass? Sabes cómo hacer un bypass?



Estamos preparando el mejor curso de ciberseguridad Microsoft en castellano y tienes la posibilidad de recibir la información y descuento cuando salga. Si te interesa, apunta tu correo en el formulario y te informaré de las novedades.

Mientras tanto, y como siempre, me tienes aquí gratis para lo que necesites !!!

Gracias por leerme !!!