bg-blog-articles

Buenas prácticas de firma de código: Directrices esenciales de seguridad para desarrolladores de software

La firma de código aprovecha la infraestructura de clave pública (PKI) para servir como pasaporte digital de tu software. Mediante las firmas digitales, crea una prueba criptográfica de autenticidad e integridad. Te autentica como editor y garantiza la integridad del código demostrando que no ha sido manipulado desde que lo publicaste.

Code Signing Best Practices

Cuando los usuarios descargan tu software, te están confiando la seguridad de su sistema. Rompe esa confianza una vez, y estás acabado.


Índice

  1. Protege las claves privadas con módulos de seguridad de hardware
  2. Implementar controles de acceso estrictos para las claves de firma de código
  3. Marca el tiempo de tu código durante el proceso de firma
  4. Separar los entornos de prueba-firma de los de liberación-firma
  5. Implementar la autenticación del código y la verificación de la integridad antes de firmarlo
  6. Realiza un escaneo de virus en el código antes de firmarlo
  7. Rota las claves y utiliza varios certificados
  8. Tómate en serio la revocación de certificados
  9. Aprovecha los Certificados de Firma de Código con Validación Extendida
  10. Automatiza y centraliza la gestión de la firma de código
  11. Protege tu cadena de suministro de software con SSL Dragon

Las apuestas se hicieron reales después de que la brecha de SolarWinds expusiera vulnerabilidades críticas de la cadena de suministro de software, mostrando cómo las claves de firma comprometidas pueden convertir en armas las actualizaciones de software legítimas y comprometer a miles de organizaciones. Ahora más que nunca, seguir las mejores prácticas de firma de código no es opcional: es fundamental para proteger a tus usuarios y tu reputación.

Proteger la cadena de suministro de software se ha convertido en una prioridad para organizaciones de todos los tamaños. Estas directrices te ayudarán a aplicar medidas de seguridad que importan, tanto si eres un desarrollador en solitario como si gestionas canalizaciones DevOps empresariales. Tanto si firmas ejecutables de Windows, aplicaciones de macOS, paquetes de Linux o aplicaciones móviles para iOS y Android, estos principios se aplican a todas las plataformas.

Protege las claves privadas con módulos de seguridad de hardware

Tu clave privada lo es todo en la firma de código. Si la comprometes, los atacantes pueden firmar malware con tu identidad. Tu certificado será revocado, tus clientes perderán la confianza y tu marca sufrirá un golpe del que quizá no te recuperes.

Por qué es crítica la seguridad de las claves privadas

Piensa en tu clave privada como la llave maestra de la credibilidad de tu software: genera las firmas digitales que prueban tu identidad. Si alguien la roba, puede distribuir código malicioso que parezca proceder de ti. Tendrás que revocar tu certificado, volver a firmar todo lo que hayas publicado y esperar que tus clientes noten la diferencia antes de instalar software infectado.

El enfoque tradicional de almacenar las claves en discos duros o construir servidores es buscarse problemas. Las máquinas de los desarrolladores se ven comprometidas. Los servidores de construcción son violados. Incluso el almacenamiento cifrado en hardware normal hace que las claves sean vulnerables a la extracción.

Soluciones de hardware con certificación FIPS 140-2

Los Módulos de Seguridad de Hardware (HSM) resuelven este problema almacenando las claves privadas en hardware a prueba de manipulaciones. Como piedra angular de tu infraestructura PKI, los HSM proporcionan la base de seguridad que requiere la confianza basada en certificados. Estos dispositivos generan y utilizan claves internamente sin exponerlas nunca a tu sistema. Si intentas manipular físicamente un HSM, destruirás las claves.

Aquí importa la certificación FIPS 140-2. El Nivel 2 requiere una prueba de manipulación física, mientras que el Nivel 3 añade una respuesta de manipulación activa que pone a cero las claves cuando alguien intenta entrar. Para la mayoría de las organizaciones, el Nivel 2 proporciona una protección sólida. Estas soluciones de hardware se integran perfectamente con los entornos de desarrollo de Windows, macOS y Linux, protegiendo tus claves independientemente de tu plataforma de construcción. Las aplicaciones gubernamentales y de alta seguridad deberían considerar el Nivel 3.

Los tokens USB ofrecen una alternativa HSM portátil. Son hardware criptográfico con certificación FIPS que puedes llevar contigo, añadiendo seguridad física mediante la posesión. Las principales autoridades de certificación admiten implementaciones tanto de HSM como de tokens USB para certificados de firma de código.

Sin embargo, las políticas de las CA difieren, y tienes que planificar en función de ellas. DigiCert y GoGetSSL emiten certificados de firma de código sólo por 1 año, y puedes utilizar un HSM proporcionado por la CA o tu propio hardware.

Sectigo (Comodo) ofrece certificados plurianuales de hasta 3 años, pero con normas más estrictas. Si eliges un certificado de 2 ó 3 años, debes utilizar tu propio HSM. El hardware proporcionado por CA sólo está disponible para pedidos de 1 año.

¿Quieres firmar código? Necesitas el token. Sin token no hay firma, aunque alguien ponga en peligro toda tu red.

Jerarquía de seguridad de los datos

Implementar controles de acceso estrictos para las claves de firma de código

No todo el mundo en tu equipo necesita acceso a las claves de firma de producción. De hecho, la mayoría no debería tenerlo.

El principio es sencillo: menos personas con acceso significa menos vectores de ataque. Establece un control de acceso basado en roles (RBAC) que limite los permisos de firma a roles específicos. Tu equipo de control de calidad no necesita acceso de firma en producción. Tus desarrolladores junior probablemente tampoco.

Crea flujos de trabajo de aprobación que requieran varias firmas para las versiones de producción. Una persona envía el código para su firma, otra lo aprueba, y sólo entonces se produce la firma real. Esta separación de funciones detecta errores y evita amenazas internas.

Mantén registros de auditoría exhaustivos. Registra quién firmó qué, cuándo lo firmó y desde qué sistema. El documento de CA Security Council’s Code Signing Best Practices subraya que el registro detallado es esencial para la respuesta a incidentes y la investigación forense. Cuando algo va mal -y al final siempre pasa algo- necesitas saber exactamente qué ha ocurrido.

La seguridad física también importa:

  • No dejes fichas USB sobre los escritorios.
  • No guardes las credenciales de acceso al HSM en archivos de texto plano.
  • No escribas códigos PIN en notas adhesivas.

Parecen obvios, pero son problemas comunes que socavan una seguridad por lo demás sólida.


Marca el tiempo de tu código durante el proceso de firma

Aquí hay un problema: los certificados de firma de código caducan, normalmente al cabo de uno a tres años. Sin sello de tiempo, tu firma pierde validez cuando caduca tu certificado. Los usuarios empiezan a ver mensajes de advertencia sobre software no fiable, aunque no haya cambiado nada en tu código.

El sellado de tiempo lo soluciona añadiendo una marca de tiempo de confianza del servidor de marcas de tiempo de una autoridad de certificación durante el proceso de firma. Esta marca de tiempo demuestra que firmaste el código cuando tu certificado aún era válido. La firma sigue siendo fiable incluso después de que tu certificado caduque o sea revocado.

Piensa en ello como un sello de notario con una fecha. El notario puede jubilarse o cerrar el negocio, pero su sello en tu documento de 2020 sigue demostrando que el documento existió y se verificó en 2020.

El proceso técnico es sencillo. Durante la firma, tu herramienta se pone en contacto con un servidor de marcas de tiempo gestionado por tu autoridad de certificación. El servidor devuelve una marca de tiempo firmada que se incrusta en la firma de tu código. Cuando los usuarios verifican tu firma en cualquier plataforma -Windows, macOS, Linux, iOS o Android- comprueban tanto tu certificado de firma como la marca de tiempo. Este proceso de verificación mantiene la integridad del código a lo largo del tiempo, incluso cuando los certificados caducan y las normas de seguridad evolucionan.

Esto también ahorra dinero. Sin el sellado de tiempo, tendrías que volver a firmar todo el software distribuido cada vez que renovaras el certificado. Con el sellado de tiempo, las versiones antiguas siguen siendo de confianza indefinidamente.


¡Ahorra un 10% en Certificados SSL al hacer tu pedido en SSL Dragon hoy mismo!

Emisión rápida, encriptación fuerte, 99,99% de confianza del navegador, soporte dedicado y garantía de devolución del dinero en 25 días. Código del cupón: AHORRA10

Una imagen detallada de un dragón en vuelo

Separar los entornos de prueba-firma de los de liberación-firma

Tu entorno de pruebas no debe utilizar las mismas claves de firma que el de producción. Nunca.

Los certificados de prueba deben ser autofirmados o emitidos por una autoridad de certificados de prueba interna que se encadene a una raíz distinta de la de tus certificados de producción. Esta separación arquitectónica evita que el código firmado en pruebas se confunda con el software listo para su publicación.

Configura una infraestructura de firma independiente para cada entorno. Tu firma de prueba puede ser más accesible y menos restrictiva: los desarrolladores necesitan iterar rápidamente. Pero la firma de producción debe estar firmemente bloqueada con todas las medidas de seguridad de las que hemos hablado.

Marca claramente los paquetes de prueba. Incluye «PRUEBA» o «BETA» en los nombres de los archivos. Utiliza identificadores de producto diferentes. Haz que sea imposible distribuir accidentalmente código firmado de prueba a los clientes.

Los controles de acceso también deberían diferir drásticamente. Los desarrolladores podrían tener acceso directo a la firma de prueba. La firma de producción debería requerir flujos de trabajo de aprobación y, posiblemente, credenciales totalmente diferentes.

Entornos de prueba frente a entornos de producción

Implementar la autenticación del código y la verificación de la integridad antes de firmarlo

La firma de código proporciona autenticación del código: confirma quién publicó el software. No confirma que el software sea seguro.

Esta distinción es importante porque, en última instancia, eres responsable de todo lo que firmas, aunque no lo hayas escrito todo. Firmar un código que no has verificado es como firmar un préstamo sin comprobar las finanzas del prestatario.

Pon en marcha procesos de presentación y aprobación antes de firmar nada. Haz que alguien revise lo que se va a firmar. Compara el código de tu servidor de creación con el de tu repositorio de código fuente. Asegúrate de que coinciden exactamente.

La brecha de SolarWinds nos enseñó que los atacantes pueden inyectar código malicioso en los procesos de compilación. Este ataque puso de relieve la importancia de la seguridad de la cadena de suministro de software: cada componente, dependencia y paso de compilación representa un vector de ataque potencial. Si firmas sin verificar, estás confiando en cada parte de tu infraestructura y en cada fragmento de código de fuentes externas. No es una apuesta que quieras hacer.

Establece comprobaciones automáticas siempre que sea posible. Verifica las firmas digitales del código que los desarrolladores introducen en tu repositorio. Ejecuta herramientas de análisis estático. Crea sumas de comprobación de las compilaciones aprobadas y verifícalas antes de firmar.

Regístralo todo. Cuando alguien envíe código para firmar, registra qué se envió, quién lo envió, quién lo aprobó y qué se firmó. Estos registros de auditoría son cruciales a la hora de investigar incidentes.


Realiza un escaneo de virus en el código antes de firmarlo

La firma de código demuestra que has publicado el software. Los usuarios confían en que no publiques malware, pero los certificados de firma de código no verifican la seguridad.

Esto es importante cuando incorporas código de fuentes externas: bibliotecas de código abierto, componentes de terceros, contribuciones de contratistas. Lo firmarás todo con tu nombre.

Analiza todo antes de firmar. Utiliza varios motores antivirus si es posible. Busca firmas de malware conocidas, patrones sospechosos y vulnerabilidades potenciales. Esto se aplica tanto si estás preparando ejecutables para Windows, aplicaciones para macOS, paquetes para Linux o aplicaciones móviles para iOS y Android.

Detectar una inserción maliciosa inadvertida antes de firmar protege a tus usuarios y tu reputación. Descubrirlo después de haber distribuido malware firmado significa la revocación del certificado, la notificación al cliente y el control de daños.

El escaneado añade un tiempo mínimo a tu proceso de construcción, pero proporciona una protección esencial para la integridad y autenticidad del código. Hazlo obligatorio, no opcional.


Rota las claves y utiliza varios certificados

No pongas todos los huevos en la misma cesta. Utilizar un único certificado de firma de código para todo crea un único punto de fallo.

Considera la posibilidad de utilizar certificados diferentes para las distintas líneas de productos o versiones principales. Si descubres un fallo de seguridad en la gestión de un certificado, sólo tendrás que revocar ese certificado concreto. Tus otros productos seguirán siendo de confianza.

Rotar las claves regularmente también limita la exposición. Si alguien comprometió tu clave hace seis meses, pero desde entonces has rotado a un nuevo certificado, no puede firmar código actual como tú. El daño se limita a las versiones anteriores.

Algunas organizaciones asignan certificados únicos a diferentes equipos DevOps o ramas de lanzamiento. Esto distribuye el riesgo y facilita la investigación de compromisos. Cuando algo va mal, sabes exactamente de qué certificado se trata y qué versiones están afectadas.

Establece un calendario de rotación que equilibre la seguridad con los gastos operativos. La rotación anual o bianual funciona para muchas organizaciones. Los entornos de alta seguridad pueden rotar trimestralmente.


Tómate en serio la revocación de certificados

La revocación del certificado es la opción nuclear, pero a veces es necesaria.

Revócala inmediatamente si tu clave privada se ve comprometida. No esperes a evaluar los daños. No esperes que nadie se dé cuenta. Revoca, notifica a tu autoridad de certificación e inicia la contención.

La revocación afecta a todo el código firmado con ese certificado. Los usuarios verán advertencias. Los sistemas automatizados pueden bloquear la instalación. Por eso es fundamental el sellado de tiempo: limita el daño al código firmado después del sellado de tiempo pero antes de la revocación.

Haz un seguimiento cuidadoso de tus certificados dentro de tu infraestructura PKI. Conoce dónde están, quién tiene acceso, cuándo caducan y qué código han firmado. La gestión del ciclo de vida de los certificados es crucial a medida que creces.

Informa de los compromisos a tu autoridad de certificación de acuerdo con sus procedimientos. Te ayudarán con la revocación y pueden orientarte sobre los requisitos de notificación.

Disponer de un plan de revocación antes de necesitarlo hace que el proceso sea menos caótico. Documenta los pasos, asigna responsabilidades y practica el procedimiento.


Aprovecha los Certificados de Firma de Código con Validación Extendida

Los certificados de firma de código con Extended Validation (EV) son certificados digitales X.509 que ofrecen mayor garantía que los certificados estándar. La autoridad de certificación realiza una verificación de identidad más rigurosa antes de emitirlos.

Los certificados EV requieren un almacenamiento de hardware que cumpla las normas FIPS 140-2 Nivel 2 o superiores. No puedes obtener un certificado EV y almacenarlo en tu disco duro. Esta protección de hardware obligatoria reduce el riesgo de compromiso de la clave.

La mayoría de los certificados EV vienen en tokens USB con protección por PIN. Necesitas tanto el token físico como el PIN para firmar el código. Este enfoque de dos factores dificulta la firma no autorizada.

Una investigación del Laboratorio de Innovación Ciberforense de Georgia Tech descubrió que los ejecutables firmados con EV resistían el 99,99% de los ataques de phishing probados, en comparación con el 90% de las firmas estándar. Los sistemas operativos como Windows, macOS y plataformas móviles como iOS y Android reconocen las firmas EV y muestran indicadores de confianza mejorados a los usuarios. Los indicadores de confianza mejorados y la rigurosa verificación marcan una diferencia mensurable.

Elige certificados EV cuando necesites la máxima confianza: productos estrella, software de amplia distribución o aplicaciones que manejen datos sensibles. El coste adicional y los gastos de gestión se compensan con una mayor credibilidad y seguridad.


Automatiza y centraliza la gestión de la firma de código

La gestión manual de certificados no es escalable en entornos DevOps en los que varios equipos envían código continuamente.

Las soluciones de gestión del ciclo de vida de los certificados (CLM ) centralizan el control a la vez que se integran con los procesos CI/CD. Plataformas como Sectigo Certificate Manager y AppViewX CERT+ proporcionan capacidades de CLM de nivel empresarial diseñadas específicamente para flujos de trabajo de firma de código. Los desarrolladores obtienen acceso de autoservicio para generar firmas digitales sin acceso directo a las claves. Los equipos de seguridad mantienen la visibilidad y aplican políticas en todas las actividades de firma.

Estas plataformas rastrean el inventario de certificados, las fechas de caducidad y los patrones de uso. La gestión centralizada resulta esencial para la seguridad de la cadena de suministro de software, especialmente cuando varios equipos y contratistas contribuyen a tu base de código. Automatizan las renovaciones y facilitan las auditorías. Cuando necesites saber qué se firmó con qué certificado, la información está ahí.

La integración con los sistemas de construcción significa que los desarrolladores no necesitan pensar en los detalles del certificado. Envían el código, el proceso se encarga de firmarlo automáticamente utilizando el certificado adecuado, y el artefacto firmado sale por el otro extremo.

Los flujos de trabajo predefinidos aplican tus políticas de seguridad. El código no puede firmarse sin aprobación. Los certificados de prueba no pueden utilizarse para producción. Los desarrolladores de una unidad de negocio no pueden acceder a las claves de firma de otra unidad.

La centralización simplifica la seguridad sin complicar la vida a los desarrolladores. Ése es el equilibrio que necesitas: una seguridad sólida que funcione con tu proceso de desarrollo, no contra él.


Protege tu cadena de suministro de software con SSL Dragon

SSL Dragon proporciona certificados de firma de código de las principales autoridades de certificación, como DigiCert y Sectigo. Tanto si necesitas firma de código estándar para aplicaciones internas como certificados EV para software de amplia distribución, te ayudaremos a elegir la solución adecuada.

Nuestro equipo comprende los retos de seguridad a los que se enfrentan los desarrolladores de software. Podemos guiarte en la selección, implantación y gestión de certificados para garantizar que tu infraestructura de firma de código sigue las mejores prácticas del sector.

Explora los certificados de firma de código de SSL Dragon o ponte en contacto con nuestro equipo para analizar qué solución se adapta mejor a tus requisitos de desarrollo y seguridad del software. Protege tu cadena de suministro de software: tus usuarios cuentan con ello.

Ahorre un 10% en certificados SSL al realizar su pedido hoy mismo.

Emisión rápida, cifrado potente, 99,99% de confianza del navegador, asistencia dedicada y garantía de devolución del dinero en 25 días. Código del cupón: SAVE10

Una imagen detallada de un dragón en vuelo
Escrito por

Redactor de contenidos experimentado especializado en Certificados SSL. Transformar temas complejos de ciberseguridad en contenido claro y atractivo. Contribuir a mejorar la seguridad digital a través de narrativas impactantes.