¿Cómo validar la autenticidad de archivos en Windows con PowerShell?

¿Qué es Get-AuthenticodeSignature?

Get-AuthenticodeSignature es un cmdlet de PowerShell que permite verificar la firma digital de un archivo. Esta firma permite comprobar:

  • Quién publicó el archivo.
  • Si el archivo ha sido modificado después de ser firmado.
  • Si la firma es válida y confiable.

Es una herramienta muy útil para administradores de sistemas y profesionales de seguridad cuando necesitan validar la procedencia de ejecutables, scripts o bibliotecas.


Sintaxis básica

Get-AuthenticodeSignature -FilePath "C:\Ruta\Archivo.exe"

Ejemplo:

Get-AuthenticodeSignature -FilePath "C:\Program Files (x86)\Steam\steam.exe"


Campos más importantes

La salida suele contener información como:

SignerCertificate                         Status
-----------------                         ------
CN=Valve Corp.                            Valid

Status

Los valores más comunes son:

Estado Descripción
Valid La firma es válida.
NotSigned El archivo no está firmado.
UnknownError Ocurrió un error al validar la firma.
HashMismatch El archivo fue modificado después de ser firmado.
NotTrusted La firma existe, pero no es de confianza para el sistema.

Ejemplo 1: Verificar Steam

Get-AuthenticodeSignature `
    "C:\Program Files (x86)\Steam\steam.exe"

Resultado esperado:

Status : Valid

Ejemplo 2: Verificar un instalador descargado

Get-AuthenticodeSignature `
    "C:\Descargas\WindowsAdminCenter.msi"

Si el resultado es:

Status : Valid

significa que el instalador conserva una firma digital válida.


Ejemplo 3: Ver únicamente el estado

(Get-AuthenticodeSignature "archivo.exe").Status

Salida:

Valid

Ejemplo 4: Mostrar el editor del archivo

(Get-AuthenticodeSignature "archivo.exe").SignerCertificate.Subject

Ejemplo de salida:

CN=Microsoft Corporation,
O=Microsoft Corporation,
L=Redmond,
S=Washington,
C=US

Ejemplo 5: Revisar varios ejecutables

Get-ChildItem "C:\Tools" -Filter *.exe |
ForEach-Object {
    [PSCustomObject]@{
        Archivo = $_.Name
        Estado  = (Get-AuthenticodeSignature $_.FullName).Status
    }
}

Salida:

Archivo      Estado
-------      ------
tool1.exe    Valid
tool2.exe    NotSigned
tool3.exe    Valid

Ejemplo 6: Encontrar archivos sin firma

Get-ChildItem "C:\Tools" -Filter *.exe |
Where-Object {
    (Get-AuthenticodeSignature $_.FullName).Status -eq "NotSigned"
}

Este comando ayuda a identificar ejecutables que carecen de firma digital.


Ejemplo 7: Exportar resultados a CSV

Get-ChildItem "C:\Tools" -Filter *.exe |
ForEach-Object {
    [PSCustomObject]@{
        Archivo = $_.Name
        Estado  = (Get-AuthenticodeSignature $_.FullName).Status
    }
} | Export-Csv "C:\Temp\Firmas.csv" -NoTypeInformation

Interpretación en un contexto de seguridad

Cuando Microsoft Defender reporta una amenaza asociada a un proceso, una de las primeras verificaciones recomendadas es validar la firma digital del ejecutable:

Get-AuthenticodeSignature `
"C:\Program Files (x86)\Steam\steam.exe"

Si:

  • El estado es Valid.
  • El certificado pertenece a por ejemplo a Valve Corp..
  • El archivo se encuentra en la ruta oficial de instalación.

Entonces aumenta considerablemente la probabilidad de que se trate de un falso positivo o de una detección basada en comportamiento y no de un ejecutable malicioso reemplazado.


Buenas prácticas

  1. Verificar siempre la firma de software descargado desde Internet.
  2. No confiar únicamente en el nombre del archivo.
  3. Validar la firma cuando Defender detecte comportamientos sospechosos.
  4. Combinar esta validación con análisis antivirus y revisión de hashes.
  5. Revisar periódicamente herramientas administrativas y scripts ejecutados en servidores.

Resumen

Get-AuthenticodeSignature es una herramienta sencilla pero extremadamente útil para validar la autenticidad de archivos en Windows. Permite comprobar si un archivo está firmado, quién lo firmó y si la firma sigue siendo válida, convirtiéndose en una excelente primera línea de investigación ante alertas de seguridad o software sospechoso.

1 me gusta