Verificar firma digital archivo del sistema

Verificar la firma digital de un archivo del sistema

Qué es la verificación de firma digital en archivos del sistema y para qué sirve

La verificación de firma digital en archivos del sistema es un proceso criptográfico que permite confirmar que un componente fundamental del sistema operativo, como un archivo ejecutable, una biblioteca de enlace dinámico o un controlador, no ha sido alterado desde que el fabricante lo firmó y que procede efectivamente de una fuente legítima y confiable. Este mecanismo de seguridad se apoya en la Infraestructura de Clave Pública y utiliza certificados digitales emitidos por autoridades de certificación reconocidas para garantizar la autenticidad e integridad de cada archivo.

El propósito principal de esta verificación es proteger la estabilidad y la seguridad del sistema operativo frente a amenazas que buscan suplantar archivos legítimos por versiones maliciosas. Un atacante podría, por ejemplo, reemplazar un archivo crítico como explorer.exe o una biblioteca del sistema como ntdll.dll con una copia modificada que ejecute código dañino en segundo plano. Al verificar la firma digital, el sistema o el usuario pueden detectar de inmediato si el archivo ha sido manipulado, ya que cualquier modificación, por mínima que sea, invalidará la firma criptográfica.

En los sistemas operativos modernos, esta verificación se realiza de manera automática en diversos contextos. Windows incorpora tecnologías como la Protección de recursos de Windows y el Administrador de arranque de Windows que comprueban las firmas de los componentes críticos antes de cargarlos. De igual manera, macOS utiliza Gatekeeper y la comprobación de firmas en aplicaciones descargadas, mientras que en Linux los gestores de paquetes verifican las firmas GPG de los repositorios y los binarios instalados. ¿Sospechas que algún archivo de tu sistema ha podido ser alterado o simplemente quieres verificar su autenticidad? A continuación te mostramos cómo hacerlo paso a paso.

Qué necesitas saber antes de empezar

Antes de proceder con la verificación de la firma digital de un archivo del sistema, es importante que identifiques correctamente la ubicación exacta del archivo que deseas comprobar. Los archivos del sistema suelen residir en directorios protegidos como C:\Windows\System32 en Windows, /System/Library en macOS o /usr/bin en Linux. Para verificar estos archivos, necesitarás tener permisos de lectura sobre ellos, pero no se requieren privilegios de administrador para realizar una verificación básica de la firma.

La verificación de archivos del sistema presenta una particularidad importante respecto a los documentos de oficina convencionales. En Windows, muchos archivos del sistema no están firmados individualmente, sino que su firma se almacena en archivos de catálogo de seguridad con extensión .cat ubicados en C:\Windows\System32\catroot. Este mecanismo, conocido como firma mediante catálogo, permite al sistema operativo verificar la integridad de múltiples archivos a la vez sin necesidad de incrustar la firma en cada uno de ellos. Por ello, al verificar un archivo del sistema, es fundamental tener en cuenta esta posibilidad.

Conviene tener presente que, en función del sistema operativo y la herramienta que utilices, la verificación puede requerir que los certificados raíz de las autoridades de certificación estén instalados en el almacén de confianza del sistema. En la mayoría de los casos, los sistemas operativos modernos ya incluyen estos certificados de fábrica. Sin embargo, si la verificación falla con un mensaje de confianza no establecida, puede deberse a que el certificado necesario no está presente o a que la cadena de certificación está incompleta.

Cómo verificar la firma digital de un archivo del sistema

En Windows

  1. Localiza el archivo del sistema que deseas verificar. Por ejemplo, navega hasta C:\Windows\System32 y selecciona un archivo como notepad.exe.
  2. Haz clic derecho sobre el archivo y selecciona Propiedades en el menú contextual.
  3. En la ventana de propiedades, selecciona la pestaña Firmas digitales.
  4. En la lista de firmas, selecciona la firma que deseas examinar y haz clic en el botón Detalles.
  5. En la nueva ventana, haz clic en Ver certificado para examinar la información del firmante y la autoridad de certificación.
  6. Comprueba que el mensaje indique Esta firma digital es válida y que el certificado no haya caducado ni esté revocado.
  7. Para una verificación más exhaustiva, puedes utilizar la herramienta de línea de comandos SignTool, que se instala con el SDK de Windows. Abre un Símbolo del sistema y ejecuta: signtool verify /pa /v "C:\Windows\System32\notepad.exe".
  8. Si el archivo está firmado mediante catálogo, usa el comando: signtool verify /a "C:\Windows\System32\wmploc.dll" para que la herramienta busque automáticamente el catálogo correspondiente.

En macOS

  1. Abre el Terminal desde Aplicaciones > Utilidades.
  2. Para verificar la firma de un binario del sistema, utiliza el comando codesign. Por ejemplo: codesign -dvvv /bin/ls.
  3. El sistema mostrará información detallada sobre la firma, incluyendo el identificador del equipo de desarrollo (TeamIdentifier) y la autoridad de certificación.
  4. Para una verificación más estricta que compruebe la integridad completa, ejecuta: codesign --verify --strict --verbose=4 /bin/ls.
  5. Si el archivo es válido, el comando retornará un código de salida 0 y mostrará el mensaje «valid on disk» y «satisfies its Designated Requirement».
  6. Para archivos descargados de internet que puedan tener una firma GPG, puedes utilizar la herramienta GPGTools. Una vez instalada, verifica con: gpg --verify archivo.sig archivo_original.
  7. Para aplicaciones completas del sistema, puedes usar el comando: spctl --assess --verbose /System/Applications/Calculator.app.

En Linux

  1. Abre una ventana del Terminal.
  2. En distribuciones basadas en Debian y Ubuntu, los binarios de los paquetes instalados se verifican automáticamente mediante el sistema de paquetes. Para comprobar manualmente la integridad de un paquete instalado, usa: debsums -s nombre_del_paquete.
  3. Para verificar la firma GPG de un archivo descargado manualmente, primero importa la clave pública del desarrollador con gpg --recv-keys ID_DE_CLAVE y luego ejecuta gpg --verify archivo.sig archivo_original.
  4. Si necesitas verificar la firma de un binario específico del sistema, puedes comprobar el paquete al que pertenece con dpkg -S /ruta/al/binario y luego verificar todo el paquete con debsums.
  5. Para una verificación de integridad del sistema más amplia en distribuciones que usan RPM como Fedora, ejecuta: rpm -Va para verificar todos los paquetes instalados.
  6. Algunas herramientas de código abierto como dotsig también permiten verificar firmas RSA y ECDSA de archivos individuales en entornos Linux.

Para verificar que la firma digital es correcta, el indicador más claro en Windows es que la pestaña Firmas digitales muestre el mensaje Esta firma digital es válida. En macOS, el comando codesign --verify debe completarse sin errores y retornar un código de salida 0. En Linux, la verificación con GPG mostrará el mensaje Firma correcta o Good signature. Si observas advertencias como La firma digital no es válida, No se puede verificar la firma o Certificate revoked, la verificación no es satisfactoria y el archivo podría haber sido manipulado.

Problemas frecuentes y cómo resolverlos

El archivo no muestra la pestaña de Firmas digitales en Windows

Esto es habitual en archivos del sistema que están firmados mediante catálogo. No significa que el archivo no esté firmado, sino que la firma no está incrustada en el propio ejecutable. La solución es utilizar la herramienta SignTool desde la línea de comandos con el parámetro /a, que busca automáticamente la firma en los catálogos de seguridad del sistema. El comando signtool verify /a "ruta_del_archivo" te proporcionará la información de verificación correcta.

La verificación con SignTool muestra un error de política

Este error suele aparecer cuando SignTool utiliza la política de verificación de controladores de Windows por defecto, que es más estricta que la necesaria para archivos de usuario. Para archivos del sistema que no son controladores, debes especificar explícitamente la Directiva de comprobación de autenticación predeterminada utilizando el parámetro /pa. El comando completo sería signtool verify /pa /v "ruta_del_archivo". Esto aplicará los criterios de verificación adecuados para la mayoría de los componentes del sistema.

El comando codesign en macOS indica «code object is not signed at all»

Este mensaje puede aparecer en ciertos binarios de macOS que, sorprendentemente, no están firmados individualmente. Apple ha ido incrementando progresivamente los requisitos de firma en cada versión del sistema, pero algunos archivos heredados pueden carecer de ella. Para estos casos, verifica la integridad del sistema completo utilizando la Utilidad de Discos en el modo de recuperación o ejecutando csrutil status para comprobar que la Protección de Integridad del Sistema está activa, lo que protege estos archivos incluso sin firma individual.

La firma GPG en Linux muestra «Can’t check signature: No public key»

Este error indica que tu llavero de GPG no contiene la clave pública necesaria para verificar la firma. Debes obtener la clave pública del desarrollador o del repositorio oficial. Generalmente, puedes importarla desde un servidor de claves con gpg --keyserver keyserver.ubuntu.com --recv-keys ID_DE_CLAVE. También puedes descargar el archivo de clave pública desde el sitio web oficial del proyecto y añadirlo manualmente con gpg --import clave_publica.asc. Una vez importada, la verificación debería funcionar correctamente.

Consejos para sacar más partido a la verificación de firmas del sistema

Aprovecha las capacidades de verificación por lotes que ofrecen las herramientas de línea de comandos. En Windows, puedes combinar PowerShell con SignTool para verificar la firma de todos los archivos ejecutables de un directorio. Por ejemplo, el comando Get-ChildItem -Path C:\Windows\System32\*.exe | ForEach-Object { signtool verify /pa /q $_.FullName } te permitirá auditar rápidamente la integridad de todos los ejecutables de la carpeta System32. Los archivos que devuelvan un código de error distinto de cero merecen una investigación más detallada.

Familiarízate con el Visor de eventos de Windows para monitorizar los fallos de verificación de firma que el propio sistema operativo registra. Navega a Visor de eventos > Registros de Windows > Seguridad y busca eventos con los ID 5038 o 6281, que indican problemas con la verificación de firmas de controladores o archivos del sistema. Esta monitorización proactiva puede alertarte de intentos de manipulación del sistema o de la presencia de controladores maliciosos antes de que causen problemas evidentes.

En macOS, complementa la verificación de archivos individuales con un chequeo completo de la integridad del sistema utilizando la herramienta csrutil. Reinicia tu Mac en modo de recuperación manteniendo pulsado Cmd + R durante el arranque, abre el Terminal desde el menú Utilidades y ejecuta csrutil status. Si la Protección de Integridad del Sistema está activa, puedes confiar en que los archivos críticos del sistema están protegidos contra modificaciones no autorizadas, incluso sin verificar cada uno manualmente.

Por último, si trabajas en un entorno profesional que requiere verificar archivos de sistema de forma recurrente, considera la posibilidad de automatizar el proceso mediante scripts. En Linux, puedes programar una tarea cron que ejecute debsums -s o rpm -Va periódicamente y envíe un informe por correo electrónico. En Windows, el Programador de tareas puede ejecutar un script de PowerShell que verifique las firmas de un conjunto predefinido de archivos críticos y registre los resultados. Esta automatización te proporcionará una capa adicional de seguridad y te alertará de cualquier anomalía de forma temprana.

Compatibilidad con diferentes versiones de Windows

La herramienta SignTool es compatible con todas las versiones modernas de Windows, incluyendo Windows 11, Windows 10, Windows 8.1 y Windows Server 2022. Se instala como parte del SDK de Windows o de las Herramientas de compilación de Visual Studio, aunque en muchas instalaciones de Windows 10 y Windows 11 ya se encuentra disponible sin necesidad de instalación adicional. La sintaxis de los comandos es idéntica en todas las versiones soportadas.

En Windows 11 23H2, la verificación mediante la pestaña Firmas digitales de las propiedades del archivo ha sido mejorada visualmente, mostrando información más clara sobre la cadena de certificación y el estado de revocación. En Windows 10, esta misma funcionalidad está disponible, aunque con una presentación ligeramente menos detallada. En ambos sistemas, la verificación mediante SignTool desde la línea de comandos ofrece el máximo nivel de detalle y control sobre el proceso.

En macOS, los comandos codesign y spctl son compatibles con todas las versiones recientes del sistema, incluyendo Ventura, Sonoma y Sequoia. La Protección de Integridad del Sistema, que protege los archivos críticos del sistema, se introdujo con OS X El Capitan y ha ido ampliando su cobertura en cada versión posterior. En Linux, las herramientas de verificación de paquetes como debsums y rpm -Va son estándar en todas las distribuciones modernas y funcionan de manera consistente en sus respectivas familias de sistemas.

Preguntas frecuentes

¿La verificación de firma digital de archivos del sistema funciona en Windows 10 y Windows 11?

Sí, la funcionalidad es plenamente operativa y prácticamente idéntica en ambas versiones del sistema operativo. Windows 11 ofrece una interfaz visual ligeramente más detallada en la pestaña Firmas digitales de las propiedades del archivo, pero la herramienta de línea de comandos SignTool funciona exactamente igual en ambos sistemas. Los comandos como signtool verify /pa /v archivo.exe son universales.

¿Necesito permisos de administrador para verificar la firma digital de un archivo del sistema?

Para la verificación básica de un archivo del sistema, ya sea mediante la pestaña Firmas digitales de las propiedades del archivo o mediante SignTool, no se requieren permisos de administrador. Cualquier usuario con permisos de lectura sobre el archivo puede realizar la verificación. Sin embargo, si la verificación implica acceder a los catálogos de seguridad en C:\Windows\System32\catroot, es posible que el sistema solicite elevación de privilegios en ciertos contextos.

¿Qué diferencia hay entre una firma incrustada y una firma por catálogo en Windows?

Una firma incrustada se almacena dentro del propio archivo ejecutable, generalmente al final del mismo, y es típica de aplicaciones de terceros descargadas de internet. Una firma por catálogo se almacena en un archivo separado con extensión .cat en el directorio C:\Windows\System32\catroot. Este segundo método es el que Microsoft utiliza para la gran mayoría de los archivos del sistema operativo, ya que permite firmar múltiples archivos a la vez y facilita las actualizaciones mediante Windows Update.

¿Puedo verificar la firma de un archivo del sistema sin conexión a internet?

Sí, la verificación criptográfica básica que comprueba la integridad del archivo y la correspondencia con el certificado del firmante no requiere conexión a internet. El sistema utiliza los certificados raíz almacenados localmente en el almacén de confianza. No obstante, para una verificación completa que incluya la comprobación del estado de revocación del certificado mediante OCSP o listas CRL, sí es necesaria una conexión activa para consultar los servidores de la autoridad de certificación.

¿Qué hago si SignTool indica que un archivo del sistema no está firmado?

Si SignTool indica que un archivo del sistema no está firmado, lo primero es asegurarte de que estás utilizando el parámetro /a para que busque automáticamente en los catálogos de seguridad. Si aún así no encuentra la firma, ejecuta el comando sfc /scannow desde un Símbolo del sistema con privilegios de administrador. Esta herramienta del sistema escaneará todos los archivos protegidos y reemplazará cualquier versión dañada o no firmada por la copia correcta desde el almacén de componentes de Windows.