Dominar la seguridad: una guía completa sobre cómo firmar un script de PowerShell
7 consejos de expertos para firmar su script de PowerShell de forma eficiente y segura
Como ingeniero de software, es posible que se haya encontrado con el desafío de firmar sus scripts de PowerShell para garantizar su integridad y evitar modificaciones no autorizadas. Firmar correctamente sus scripts no sólo prueba que usted es el autor del código, sino que también confirma que permanece inalterado desde que lo firmó. En este artículo, profundizaremos en el mundo de la firma de scripts de PowerShell y compartiremos siete consejos de expertos que le ayudarán a firmar sus scripts con éxito y facilidad.
1. Comprensión de las políticas de ejecución de scripts de PowerShell
Para comprender cómo firmar un script de PowerShell, es fundamental comprender las políticas de ejecución integradas de PowerShell. Estas políticas dictan si los scripts se pueden ejecutar en un sistema y determinan su nivel de confianza. Las cuatro políticas de ejecución principales son:
- Restringido (predeterminado): no se permiten scripts
- AllSigned: solo se permiten scripts firmados
- RemoteSigned: los scripts creados localmente se ejecutan sin restricciones, mientras que los scripts descargados remotamente deben estar firmados
- Sin restricciones: todos guiones permitidos
Para máxima seguridad, se recomienda utilizar la política de ejecución AllSigned o RemoteSigned.
2. Obtención de un certificado de firma de código
Necesitará un certificado de firma de código válido para firmar sus scripts de PowerShell. Hay dos tipos principales:
- Certificados de confianza pública de una autoridad certificadora (CA): aunque son más confiables, pueden ser costosos y requieren que usted valide su identidad.
- Certificados autofirmados: menos costosos y fáciles de crear usando el *Nuevo Certificado Autofirmado * cmdlet en PowerShell; sin embargo, es menos confiable.
Para crear un certificado autofirmado, ejecute el siguiente comando:
New-SelfSignedCertificate -Type CodeSigningCert -Subject “CN=Your Name” -KeyUsage DigitalSignature -TextExtension @(“2.5.29.37={text}1.3.6.1.5.5.7.3.3”)Reemplace Su nombre con el nombre del Asunto que desee.
3. Exportación del certificado de firma de código
Después de obtener un certificado, expórtelo a un archivo PFX (Personal Information Exchange) para realizar una copia de seguridad y almacenar de forma segura su clave privada. Para hacer esto, use el cmdlet *Export-PfxCertificate*:
$Cert = Get-ChildItem -Path Cert:CurrentUserMy -CodeSigningCert
Export-PfxCertificate -Cert $Cert -FilePath “C:pathtoyourcert.pfx” -Password (ConvertTo-SecureString -String “YourPassword” -Force -AsPlainText)Reemplace C:pathtoyourcert.pfx con la ruta de exportación que desee y YourPassword con una contraseña segura.
4. Asignación del certificado de firma de código a PowerShell
Antes de firmar el script, configure el certificado de firma de código correcto dentro de PowerShell configurando la variable de entorno *$env:certs*:
$env:certs = Get-ChildItem -Path Cert:CurrentUserMy -CodeSigningCert | Select-Object -First 15. Firmar el script de PowerShell
¡Ahora es el momento de firmar tu guión! Utilice el cmdlet *Set-AuthenticodeSignature* para hacerlo:
Set-AuthenticodeSignature -FilePath “C:pathtoyourscript.ps1” -Certificate $env:certsReemplace C:pathtoyourscript.ps1 con la ruta a su script de PowerShell.
6. Verificación del guión firmado
Para confirmar que su script esté firmado correctamente, ejecute el siguiente comando:
Get-AuthenticodeSignature -FilePath “C:pathtoyoursignedscript.ps1”Una firma válida mostrará el *Estado* como
7. Distribución de su guión y certificado firmados
Finalmente, distribuya su script firmado a sus usuarios finales. Si utilizó un certificado autofirmado, también deberá proporcionar la clave pública a sus usuarios. Deben instalarlo en su almacén de certificados *Trusted Publishers* para ejecutar el script.
Para exportar la clave pública, ejecute:
Export-Certificate -Cert $Cert -FilePath “C:pathtoyourcert.cer”Con estos consejos de expertos a mano, ahora está equipado para firmar sus scripts de PowerShell de manera eficiente y segura. Recuerde, firmar correctamente sus scripts no solo mantiene la integridad sino que también fomenta la confianza dentro de su comunidad de usuarios al garantizar que estén ejecutando código auténtico y sin compromisos. ¡Feliz guión!
Cómo obtengo ingresos pasivos con ChatGPT AI
40 comandos de Windows que NECESITAS saber (en 10 minutos)
¿Es posible firmar un script de PowerShell?
Sí, es posible firmar un script de PowerShell. En el contexto de la línea de comandos de PowerShell, firmar un script se refiere a agregar una firma digital que garantiza la integridad y autenticidad del script. La firma es esencial para evitar cambios no autorizados y la ejecución de scripts dañinos o maliciosos.
Para firmar un script de PowerShell, debe seguir estos pasos:
1. Obtener un certificado de firma de código: puede obtener un certificado de firma de código de una autoridad certificadora (CA) confiable o crear un certificado autofirmado usando el cmdlet New-SelfSignedCertificate. en PowerShell.
2. Firme el script: una vez que tenga un certificado válido, firme su script usando el cmdlet Set-AuthenticodeSignature. El comando se verá así:
Set-AuthenticodeSignature -FilePath “PathToYourScript.ps1” -Certificate (Get-ChildItem -Path Cert:CurrentUserMy -CodeSigningCert)Reemplace PathToYourScript.ps1 con la ruta real a su archivo de script.
3. Verifique la firma: después de firmar el script, verifique la firma usando el cmdlet Get-AuthenticodeSignature ejecutando:
Get-AuthenticodeSignature -FilePath “PathToYourScript.ps1”Nota: Si utiliza un certificado autofirmado, asegúrese de importar el certificado en las máquinas donde se ejecutará el script. De lo contrario, la firma no se considerará válida y es posible que el script no se ejecute (según la política de ejecución).
¿Cómo puedo firmar un script de PowerShell para permitir su ejecución?
Para firmar un script de PowerShell y habilitar su ejecución, debe seguir estos pasos:
1. Obtenga un certificado de firma de código: puede crear un certificado autofirmado u obtener uno de una autoridad certificadora (CA) confiable. A efectos de prueba, basta con un certificado autofirmado. Sin embargo, para uso en producción, se recomienda obtener un certificado de una CA confiable.
2. Importe el certificado de firma de código: una vez que tenga un certificado de firma de código, impórtelo al almacén de certificados personales de su computadora. Para hacer esto, abra el complemento Certificados MMC (escriba certmgr.msc en el cuadro de diálogo Ejecutar) y navegue hasta Personal -> Certificados. Luego, haga clic derecho, seleccione Importar y siga el asistente para importar su certificado.
3. Firme el script de PowerShell: utilice el cmdlet Set-AuthenticodeSignature para firmar el script. Primero, busque el certificado que importó ejecutando:
$cert = Get-ChildItem -Path Cert:CurrentUserMy -CodeSigningCertA continuación, utilice el cmdlet Set-AuthenticodeSignature para firmar su script:
Set-AuthenticodeSignature -Certificate $cert -FilePath “Pathtoyourscript.ps1”4. Configure la política de ejecución: de forma predeterminada, PowerShell puede estar configurado para no permitir la ejecución de scripts. Debe cambiar la política de ejecución para permitir la ejecución de scripts firmados:
Set-ExecutionPolicy RemoteSignedEste comando establece la política de ejecución para permitir la ejecución de scripts firmados desde cualquier fuente y scripts sin firmar desde la computadora local.
5. Ejecute su script firmado: ahora puede ejecutar su script de PowerShell firmado sin ningún problema.
Tenga en cuenta que si está utilizando un certificado autofirmado, es posible que deba agregar el certificado al almacén de certificados de Trusted Publishers en otras computadoras que ejecutarán su secuencia de comandos. De lo contrario, es posible que no confíen en la firma.
¿Cómo inserto un símbolo en PowerShell?
En PowerShell, puede insertar símbolos utilizando su representación Unicode o utilizando el cmdlet Write-Host con la opción -NoNewline.
Para insertar un símbolo usando su representación Unicode, necesita conocer el valor Unicode del símbolo que desea insertar. Por ejemplo, digamos que desea insertar el símbolo de copyright (©) que tiene un valor Unicode de U+00A9. Puede hacer esto en PowerShell de la siguiente manera:
$unicodeSymbol = [char]0x00A9
Write-Host “My Company Name $unicodeSymbol”Otro enfoque es utilizar el cmdlet Write-Host con la opción -NoNewline. Esto le permite escribir el resultado sin un carácter de nueva línea al final, para que pueda continuar escribiendo en la misma línea. Aquí hay un ejemplo:
Write-Host “My Company Name” -NoNewLine
Write-Host ” ©”En ambos casos la salida será:
My Company Name ©Recuerda reemplazar el valor Unicode o el símbolo con el que deseas insertar en tu script de PowerShell.
¿Cómo puedo firmar un script de PowerShell, Parte 2?
En la Parte 1, analizamos la creación de un certificado autofirmado para la firma de scripts. Ahora, veamos cómo puede firmar un script de PowerShell usando el certificado.
Paso 1: Verifique el certificado en su almacén de certificados
Antes de firmar el script, asegúrese de que el certificado esté disponible en su almacén de certificados. Para verificar, abra el Administrador de certificados (certmgr.msc) y navegue hasta Personal > Certificados. Debería ver su certificado autofirmado allí.
Paso 2: firme su secuencia de comandos de PowerShell
Para firmar su guión, siga estos pasos:
1. Abra PowerShell con privilegios de administrador buscando PowerShell en el menú Inicio, haciendo clic derecho sobre él y seleccionando Ejecutar como administrador.
2. Ejecute el siguiente comando para obtener el certificado del almacén de certificados:
$cert = Get-ChildItem -Path Cert:CurrentUserMy -CodeSigningCertEste comando recupera el certificado de firma de código de su almacén de certificados y lo almacena en la variable $cert.
Nota: Si tiene varios certificados de firma de código, es posible que deba filtrar los certificados recuperados mediante el asunto u otro atributo.
3. Firme su script usando el cmdlet Set-AuthenticodeSignature:
Set-AuthenticodeSignature -FilePath “C:PathToYourScript.ps1” -Certificate $certReemplace ”C:PathToYourScript.ps1″ con la ruta del script que desea firmar.
Después de ejecutar estos comandos, su secuencia de comandos ahora estará firmada con su certificado autofirmado. Al ejecutar el script, ya no verá la advertencia ejecutando scripts sin firmar.
Notas importantes:
- De forma predeterminada, la política de ejecución de PowerShell está configurada en Restringida, lo que solo permite la ejecución de scripts firmados. Puede cambiar la política de ejecución utilizando el cmdlet Set-ExecutionPolicy (por ejemplo, Set-ExecutionPolicy RemoteSigned para permitir la ejecución de scripts locales sin firmar y scripts firmados remotamente).
- Tenga en cuenta que otros sistemas no confían en los certificados autofirmados. En un entorno corporativo, es posible que desee utilizar un certificado emitido por la autoridad de certificación (CA) interna de su empresa o una CA pública.
- Puede ver la firma del script firmado haciendo clic derecho en el archivo del script, seleccionando Propiedades y navegando a la pestaña Firmas digitales.
¿Cuál es el proceso para crear y utilizar un certificado autofirmado para firmar scripts de PowerShell, garantizando su integridad y autenticidad en el entorno de línea de comandos de PowerShell?
Crear y utilizar un certificado autofirmado para firmar scripts de PowerShell implica varios pasos:
1. Cree un certificado autofirmado: use el cmdlet New-SelfSignedCertificate para crear un nuevo certificado autofirmado. El comando se verá así:
New-SelfSignedCertificate -DnsName “yourdomain.com” -CertStoreLocation “cert:LocalMachineMy” -FriendlyName “PowerShellScriptSigning”Reemplace yourdomain.com con un nombre significativo y PowerShellScriptSigning con un nombre descriptivo para una fácil identificación.
2. Exportar el certificado autofirmado: exporte el certificado recién creado a un archivo, que se puede importar en otras máquinas para confiar en los scripts firmados. Utilice el cmdlet Export-Certificate:
$cert = Get-ChildItem -Path “Cert:LocalMachineMy” | Where-Object {$_.FriendlyName -eq “PowerShellScriptSigning”}
Export-Certificate -Cert $cert -FilePath “C:your-pathScriptSigningCert.cer”3. Importar el certificado: importe el certificado en otras máquinas para confiar en los scripts firmados. Utilice el cmdlet Import-Certificate:
$store = “Cert:LocalMachineRoot”
$certPath = “C:your-pathScriptSigningCert.cer”
Import-Certificate -FilePath $certPath -CertStoreLocation $store4. Firme su secuencia de comandos de PowerShell: utilice el cmdlet Set-AuthenticodeSignature para firmar una secuencia de comandos con el certificado autofirmado:
$script = “C:your-pathYourScript.ps1”
$cert = Get-ChildItem -Path “Cert:LocalMachineMy” | Where-Object -FilterScript {$_.FriendlyName -eq “PowerShellScriptSigning”}
Set-AuthenticodeSignature -Certificate $cert -FilePath $script5. Verifique la firma del script: use el cmdlet Get-AuthenticodeSignature para verificar la firma del script antes de ejecutarlo:
$script = “C:your-pathYourScript.ps1”
$signature = Get-AuthenticodeSignature -FilePath $script
if ($signature.Status -eq “Valid”) {
. $script
} else {
Write-Host “The script signature is not valid.”
}Si sigue estos pasos, puede crear un certificado autofirmado, firmar scripts de PowerShell y garantizar su integridad y autenticidad en el entorno de línea de comandos de PowerShell.
En el contexto de la línea de comandos de PowerShell, ¿cómo se puede firmar un script con un certificado de firma de código existente para evitar cambios y ejecuciones no autorizados en los sistemas cliente?
Para firmar un script con un certificado de firma de código existente en la línea de comandos de PowerShell, siga estos pasos:
1. Abra PowerShell con privilegios administrativos: haga clic derecho en el icono de PowerShell y elija Ejecutar como administrador.
2. Importe el certificado de firma de código: si el certificado está almacenado en un archivo, puede importarlo usando el cmdlet Import-PfxCertificate:
$cert = Import-PfxCertificate -FilePath “” -Password (ConvertTo-SecureString -String “” -AsPlainText -Force) -CertStoreLocation Cert:CurrentUserMyReemplace " con la ruta del archivo de su certificado PFX y " con la contraseña del certificado.
Si el certificado ya está instalado en su sistema, búsquelo usando el cmdlet Get-ChildItem:
$cert = Get-ChildItem -Path ‘Cert:CurrentUserMy’ -CodeSigningCert3. Firme el script: use el cmdlet Set-AuthenticodeSignature para firmar el script con el certificado importado:
Set-AuthenticodeSignature -FilePath “” -Certificate $certReemplace " con la ruta del archivo de su script de PowerShell.
4. Verifique la firma: para asegurarse de que el script se haya firmado correctamente, utilice el cmdlet Get-AuthenticodeSignature:
Get-AuthenticodeSignature -FilePath “”Estos pasos le ayudarán a firmar su script de PowerShell con un certificado de firma de código existente, evitando cambios y ejecuciones no autorizados en sistemas cliente.
¿Cómo maneja la línea de comandos de PowerShell las políticas de ejecución de scripts y cuáles son las mejores prácticas para configurar estas políticas al firmar y ejecutar scripts de PowerShell firmados?
En la línea de comandos de PowerShell, las políticas de ejecución de scripts determinan las condiciones bajo las cuales se pueden ejecutar los archivos de configuración y los scripts. Estas políticas ayudan a los administradores a mantener un entorno seguro y al mismo tiempo permiten la ejecución de scripts para diversas tareas. Hay cuatro políticas de ejecución diferentes disponibles en PowerShell:
1. Restringido: esta es la política de ejecución predeterminada y no permite que se ejecute ningún script.
2. AllSigned: permite que solo se ejecuten esos scripts. han sido firmados por un editor confiable.
3. RemoteSigned: permite que los scripts creados localmente se ejecuten sin firmar, pero los scripts descargados deben estar firmados por un editor confiable.
4. Sin restricciones: permite que se ejecuten todos los scripts, ya sean firmados o no, pero aún solicita confirmación cuando se ejecutan scripts sin firmar desde Internet.
Para configurar y administrar políticas de ejecución de scripts, puede utilizar los cmdlets Get-ExecutionPolicy y Set-ExecutionPolicy. Para establecer una política de ejecución específica, ejecute el siguiente comando:
Set-ExecutionPolicy RemoteSignedReemplace RemoteSigned con la política de ejecución deseada.
Las prácticas recomendadas para configurar y ejecutar scripts de PowerShell firmados implican los siguientes pasos:
1. Elija la política de ejecución adecuada: determine qué política de ejecución se adapta mejor a los requisitos de seguridad de su organización. Utilice AllSigned o RemoteSigned para mayor seguridad.
2. Adquiera un certificado de firma de código: obtenga o cree un certificado de firma de código de una autoridad certificadora (CA) confiable, ya sea la CA interna de su organización o una CA pública.
3. Firme sus scripts de PowerShell: utilice el cmdlet Set-AuthenticodeSignature para firmar sus scripts con el certificado de firma de código.
$cert = @(Get-ChildItem cert:CurrentUserMy -CodeSigning)[0]
Set-AuthenticodeSignature -FilePath ‘C:ScriptsMyScript.ps1’ -Certificate $cert4. Distribuya el certificado: asegúrese de que todos los sistemas que ejecutan sus scripts de PowerShell confíen en el certificado de firma. Instale y distribuya el certificado a la tienda de Trusted Publishers en cada sistema.
5. Actualice y revoque certificados periódicamente: revise y actualice periódicamente sus certificados de firma de código y revoque cualquier certificado comprometido para mantener un entorno seguro.
Si sigue estas prácticas recomendadas, puede garantizar un entorno seguro para ejecutar scripts de PowerShell y, al mismo tiempo, minimizar el riesgo de ejecución de scripts maliciosos o no autorizados.