Comprender las mejores prácticas de la firma de código
La firma de código garantiza a los usuarios, a los sistemas operativos y a las herramientas de seguridad que una aplicación procede realmente del editor indicado y que no ha sido alterada desde su lanzamiento. Sin ella, el software puede ser marcado como inseguro, se puede bloquear su instalación o puede ser objeto de ataques por parte de personas malintencionadas.
La firma de código se utiliza para autenticar la identidad del desarrollador de un programa y su procedencia, al tiempo que confirma que el software no ha sido alterado desde que se firmó.
Al firmar digitalmente un programa, una aplicación, un ejecutable o un script, el desarrollador adjunta un certificado digital que confirma su identidad y la integridad del software. Los certificados de firma de código utilizan criptografía de clave pública, que es la misma tecnología que se emplea con otros tipos de certificados digitales. Este enfoque es compatible con todos los sistemas operativos y plataformas, desde entornos móviles hasta de escritorio, pasando por sistemas integrados. La firma de código se utiliza ampliamente en Windows (de Microsoft), Mac OS X (de Apple), distribuciones de Linux, así como en iOS y Android.
Dado que las ciberamenazas se centran cada vez más en las brechas de confianza del software, la firma de código se ha convertido en una defensa de primera línea contra la manipulación, la distribución de malware y los ataques a la cadena de suministro.
Por lo tanto, la implementación de prácticas sólidas de firma de código es fundamental para los editores de software y las organizaciones de desarrollo que buscan proteger a los usuarios, mantener la confianza en la plataforma y garantizar que el software se pueda distribuir de forma segura y fiable. Las siguientes prácticas recomendadas ayudan a abordar los riesgos más comunes asociados a la seguridad de la firma de código:
- Proteja su código con certificados de firma de código: la recomendación más importante de todas es utilizar certificados de firma de código siempre que sea posible. Estos verifican el origen y la autenticidad del código ante los usuarios finales y aumentan la confianza de los clientes en su seguridad personal. Al firmar correctamente su código, puede dotar a su aplicación o programa de la confianza gestionada por una autoridad de certificación pública de confianza como Sectigo. Para mayor seguridad, puede utilizar un certificado de firma de código con validación extendida (EV), que ofrece una verificación de identidad más sólida en comparación con la firma de código estándar.
- Minimice el acceso a las claves privadas: cualquier buen experto en TI establecerá medidas de control de acceso siempre que sea posible; esto incluye restringir el acceso a las claves privadas y a los certificados raíz base. Solo debe permitir que un número reducido de personas tenga acceso a las claves privadas de su organización, y dichas personas deben tener un motivo específico para necesitar dicho acceso. Establecer una política de acceso basado en roles (RBAC) dentro de su organización ayudará a limitar la posible exposición.
- Proteja las claves privadas con hardware criptográfico: el uso de hardware criptográfico le permite proteger sus claves privadas con los algoritmos de cifrado más actualizados. Este tipo de hardware debe ser, como mínimo, un producto certificado según la norma FIPS 140 Nivel 2. Productos como los módulos de seguridad de hardware (HSM) protegerán sus claves privadas para que no caigan en manos de personas malintencionadas.
- Sello de tiempo en el código: El sello de tiempo en su código garantiza que el software siga siendo fiable incluso después de que caduque el certificado de firma, ya que demuestra que el código se firmó mientras el certificado era válido.
- Diferencias entre la firma de prueba y la firma de lanzamiento: Tal y como se ha descrito anteriormente, es importante diferenciar y comprender la distinción entre las claves y certificados de firma de prueba y de firma de lanzamiento. Los certificados y claves de firma de prueba requieren menos seguridad y pueden ser autofirmados por una CA interna privada. Además, deben estar encadenados a un certificado raíz diferente al del producto firmado y publicado. Entre las mejores prácticas se incluye la configuración de una infraestructura de firma de código completamente diferente para la firma de la versión final y la de la versión preliminar. Esto te permitirá establecer controles de acceso adecuados para tu entorno de pruebas y tu código de producción.
- Autenticación del código: La firmade código no identifica específicamente el código como seguro; simplemente indica quién lo ha escrito. Por lo tanto, el código debe autenticarse por completo antes de que pueda publicarse. De este modo, te aseguras de no difundir accidentalmente código incorrecto o malicioso que pudiera perjudicar a los clientes y dañar tu reputación. Todas las actividades de autenticación relacionadas con la firma de código deben registrarse para el futuro, por si fuera necesario llevar a cabo algún tipo de investigación o respuesta ante un incidente.
- Analice el código en busca de malware o virus antes de firmarlo: además de verificar que no se hayan realizado modificaciones en su código, es importante analizarlo en busca de virus u otro código malicioso. A menudo, los desarrolladores pueden insertar código malicioso de forma inadvertida al reutilizar o incorporar código existente procedente de proyectos externos. Es mucho más fácil detectar y corregir los errores antes de que se publique el código.
- Limita el uso repetido de claves: la reutilización de claves privadas para firmar código varias veces aumenta el riesgo. Si una clave se ve comprometida, todo el código firmado con esa clave y marcado para esa fecha quedará invalidado y deberá actualizarse con un nuevo certificado de firma de código. Mantener el hábito de alternar entre diferentes claves y certificados te permitirá distribuir el riesgo y reducirá el esfuerzo y el impacto a la hora de reemitir certificados.
- Revoca los certificados comprometidos: la revocación es una de las tareas más importantes para garantizar la seguridad del código. La organización de desarrollo es responsable de notificar cualquier código, clave o certificado comprometido a su autoridad de certificación para que esta pueda tomar las medidas adecuadas. En caso de que surja algún problema, la autoridad de certificación exigirá que se revoque el certificado de firma de código. Si se aplica un sello de tiempo al código, solo se verá afectado el código cuya fecha de revocación sea posterior al incidente.
- Supervisar y auditar la actividad de firma: sin visibilidad, el uso indebido puede pasar desapercibido hasta que se produzcan daños. Mantén registros detallados de los eventos de firma de código, el acceso, las aprobaciones y las marcas de tiempo. Las revisiones periódicas ayudan a detectar anomalías y facilitan las investigaciones.
- Mantener políticas y formación actualizadas: Las prácticas inconsistentes entre los equipos debilitarán la seguridad. Deben utilizarse políticas formales para definir la gestión de claves, los flujos de trabajo, las aprobaciones, las normas de automatización y la gestión de incidentes. La formación continua garantiza que los equipos se mantengan alineados a medida que evolucionan las amenazas.
¿Cómo se implementa la firma de código?
Para implementar la firma de código, se requiere un par de claves criptográficas único. Este consta de una clave privada, que se mantiene en secreto, y una clave pública, que puede compartirse. Juntas, constituyen la base de la criptografía de clave pública y permiten firmar el software sin exponer la clave privada.
Tras generar el nuevo par de claves mediante una infraestructura de clave pública (PKI), la clave pública se envía a una autoridad de certificación (CA) como parte de una solicitud de firma de certificado (CSR). La CA verifica la identidad del desarrollador o de la organización y emite el certificado de firma de código.
Ahora que el desarrollador está en posesión del certificado, debe aplicar un hash al código del software. El hash es un procedimiento en el que se utiliza una función hash para convertir el código en un valor fijo arbitrario. El resultado del hash, denominado «digesto», se cifra a continuación utilizando la clave privada. A continuación, el desarrollador combina este resumen con el certificado de firma de código y la función hash para crear lo que se denomina un «bloque de firma», que es, en esencia, la combinación de todos los elementos anteriores en un fragmento de código que puede insertarse fácilmente en el software.
Importancia de la protección
El mayor problema de la firma de código es la protección de la clave privada de firma asociada al certificado. Si una clave se ve comprometida, el certificado pierde su fiabilidad y su valor, lo que pone en peligro el software que se ha firmado.
Muchas organizaciones se protegen utilizando cajas fuertes seguras y módulos de seguridad de hardware (HSM) para aumentar el nivel de seguridad de sus claves privadas. Otras utilizan plataformas de gestión de certificados diseñadas para automatizar y proteger la gestión del ciclo de vida de todos los certificados de firma de código. Un ejemplo de ello es el Sectigo Certificate Manager. El uso de un gestor de certificados contribuye en gran medida a garantizar la integridad de las claves privadas y otros activos de cifrado.
¿Qué evita la firma de código?
En pocas palabras, la firma de código ayuda a evitar que el malware y otros códigos maliciosos se introduzcan en el sistema de un usuario final bajo la apariencia de un archivo inofensivo o un evento como una actualización de Windows. Lo consigue permitiendo a los usuarios verificar que el archivo que se está descargando procede realmente del emisor y no de un actor malintencionado. Esto refuerza el concepto de confianza dentro del sistema, lo que permite a los desarrolladores garantizar a los usuarios finales que descargan el software que la fuente es fiable y segura.
Los certificados de firma de código EV ofrecen garantías adicionales de seguridad. Exigen que la clave se almacene en un dispositivo de hardware de alta seguridad que cumpla con la norma FIPS 140-2 o superior. Existen tokens USB que cumplen este requisito y añaden otra capa de protección mediante un PIN. Como alternativa, puede almacenar la(s) clave(s) en el HSM de su organización, instalado en sus propias instalaciones.
Una investigación del Laboratorio de Innovación en Ciberforense de Georgia Tech muestra que la emisión y el uso de certificados SSL/TLS de validación extendida (EV) ofrecen una probabilidad del 99,99 % de estar libres de ataques de phishing y abusos. El informe técnico, patrocinado por Sectigo, se puede descargar aquí.
Proteja su software con las soluciones de firma de código de confianza de Sectigo
Seguir estas prácticas recomendadas de firma de código reduce en gran medida el riesgo de distribución no autorizada de software, de que aparezcan advertencias de seguridad durante la instalación y de pérdida de confianza por parte de los usuarios. Además, puede contribuir a aumentar las tasas de instalación y facilitar la adopción de su software.
Los certificados emitidos por autoridades de confianza gozan de un amplio reconocimiento por parte de los sistemas operativos y las plataformas de seguridad. Sectigo es una autoridad de certificación líder que ofrece soluciones de firma de código rápidas y flexibles. Nuestros certificados de firma de código ayudan a los editores a generar confianza, a proteger a los usuarios frente a código manipulado y a distribuir el software más rápidamente. Descubre los diferentes tipos de certificados de firma de código que ofrece Sectigo o ponte en contacto con nuestro equipo de expertos para obtener más información.