Los pipelines de CI/CD son parte integral de los flujos de trabajo modernos y las herramientas que los respaldan amplían aún más sus capacidades latentes. El trabajo en equipo es esencial en los flujos de trabajo modernos, donde los plazos no solo son urgentes, sino también regulares. Cada segundo cuenta cuando un cliente espera al otro lado.
Gestionar una organización grande con múltiples pasos en el desarrollo de código puede resultar abrumador si se intenta hacerlo manualmente. Por eso, herramientas como las canalizaciones de CI/CD, como Jenkins , se han vuelto tan comunes en los entornos de desarrollo. El mejor punto de partida para hablar de CI/CD es analizar qué permiten lograr estas herramientas.
En resumen, para integrar la firma de código en CI/CD: automatizar la firma como una etapa obligatoria del proceso utilizando una identidad de servicio con privilegios mínimos, firmar contra una clave respaldada por HSM para que el proceso nunca maneje material de clave sin procesar, restringir las versiones de producción a un paso de aprobación y verificar cada firma inmediatamente después de firmarla, en lugar de confiar en un código de salida limpio.
Puntos Clave
- Esta página abarca el caso conceptual y la arquitectura de referencia para la firma de código en CI/CD en general. Para tutoriales paso a paso sobre las plataformas, consulte las guías de integración de Jenkins, GitHub Actions, GitLab y Azure DevOps, cuyos enlaces se encuentran a lo largo de este documento.
- La firma "sin secretos" significa que la canalización se autentica ante el HSM o KSP sin una credencial integrada de larga duración; una identidad de servicio con acceso restringido y limitado en el tiempo es lo que realmente impide que una canalización comprometida se convierta en una clave de firma comprometida.
Arquitectura de referencia y controles necesarios
| Control | Lo que previene |
|---|---|
| Identidad de servicio con privilegios mínimos | Una cuenta de canalización comprometida que se puede utilizar para cualquier cosa más allá de la acción de firma específica para la que fue diseñada. |
| Firma sin secretos y respaldada por HSM | La clave privada podría quedar expuesta en los registros de la canalización, las variables de entorno o el sistema de archivos de un agente de compilación comprometido. |
| Fase de aprobación antes de la firma de producción | Una única confirmación comprometida o maliciosa llega a un artefacto firmado y publicado sin revisión humana. |
| Verificación inmediatamente después de firmar | Una firma que falló silenciosamente o que está mal formada se trata como exitosa porque el comando de firma finalizó correctamente. |
| Registro de auditoría de cada evento de firma | Incapacidad para responder a las preguntas "¿quién firmó qué y cuándo?" durante la investigación de un incidente. |
| Plan de reversión para un lanzamiento defectuoso | Un artefacto firmado pero defectuoso que sigue siendo la última versión disponible sin una forma rápida de revertir los cambios. |
¿Qué es una canalización de CI/CD?
La idea detrás de una canalización es que se trata de una serie de procesos que impulsan el desarrollo de software a través de las etapas de compilación, prueba e implementación de código. Esto también se conoce como CI/CD. CI/CD es un modelo para un entorno de compilación compartido, generalmente alojado localmente. Las diversas plataformas integran implementaciones de CI/CD con herramientas de comunicación y compilación que permiten que el software se publique más rápidamente al agilizar el proceso de compilación y lanzamiento.
Históricamente, el código se desarrolla en equipos separados y se prueba en entornos personales. La integración lleva tiempo y la retroalimentación sobre código defectuoso también. Esto conlleva ciclos de compilación prolongados y una disminución de la eficiencia. Es común probar un fragmento de código con una serie de casos de prueba diseñados antes del desarrollo.
Si el código final cumple con estos estándares, debería integrarse fácilmente con el código existente. Pero como desarrolladores, sabemos que este no es el único resultado posible, incluso con casos de prueba meticulosamente diseñados. Como se puede apreciar, CI/CD es la base de DevOps en general. Se centra en la integración, la entrega y el despliegue continuos.
Los pasos de integración implican la compilación del código, la ejecución de casos de prueba y la fusión de dicho código. La fase de entrega libera automáticamente el código al repositorio especificado, y la fase de implementación, como se indica, lo implementa automáticamente en el entorno de producción.
Aunque el proceso de CI/CD consta de muchos pasos, uno de los más importantes es la capacidad de probar el código. CI/CD permite ejecutar casos de prueba a gran escala, donde los cambios en el código se pueden probar mediante una única acción optimizada y automatizada.
El código se envía, se recibe en el pipeline, se prueba y, si todos los casos superan los requisitos, la compilación puede configurarse para su lanzamiento. Es asombroso lo que esto puede hacer por la agilidad de su organización. Corregir un error rápidamente es posiblemente el futuro del desarrollo. Solo que aquí nos estamos olvidando de un paso importante: ningún cliente ni organización debería ejecutar código sin firmar. Aquí es donde entra en juego la firma de código.
¿Qué es la firma de código y por qué es importante?
La firma de código es el proceso de generar una firma digital y adjuntarla al código, para que el usuario final pueda confiar en que el código que se le distribuye es seguro. Los fundamentos de la firma de código son los siguientes:
- Un desarrollador decidirá que desea firmar su código. Esto les sucede a la mayoría de los desarrolladores actualmente, ya que proporcionar código sin firmar a un usuario final es inseguro.
- Una vez que un desarrollador decide firmar su código, debe generar un par de claves pública y privada, y una Solicitud de firma de certificado (CSR)El par de claves pública-privada identifica al desarrollador como él mismo y es necesario para crear la CSR. Esta se entrega a una autoridad de certificación, junto con el par de claves, y es necesaria para generar una firma digital para el código.
- Luego, la clave pública del par de claves pública-privada se envía a la autoridad de certificación, o CA, y se solicita un certificado de firma de código.
- El CA Luego verifica la identidad del editor, autentica la solicitud de certificado del editor y luego agrupa la identidad del editor con la clave pública.
- La CA firma el paquete, creando así un certificado de firma de código digital. Este certificado permite al desarrollador generar una firma digital para el código en cuestión, identificando que fue desarrollado por el editor del software.
- Finalmente, el certificado de firma se envía al editor del software y ahora éste puede generar su firma digital y adjuntarla a su código.
El proceso de lanzamiento moderno exige el codiseño, un paso que, según el proceso actual de su organización, podría reducir considerablemente la velocidad y la eficiencia que ofrece la CI/CD. La firma de código acredita la identidad del desarrollador y garantiza su integridad.
Cuando se realiza la firma digital del código , cualquier modificación posterior invalida la firma, lo que garantiza que el código firmado no ha sido manipulado. Este es el principal beneficio de la firma digital, que la hace tan necesaria en el mundo actual. Independientemente de su sector, sus productos serán inutilizables en entornos que van desde redes escolares hasta bancos si no implementa la firma digital.
También existe la ventaja de mitigar los riesgos de daño a la reputación. Al distribuir únicamente código firmado, su organización puede garantizar que los usuarios se acostumbren a ver una firma antes de instalar su software. Esto los hace menos vulnerables a los atacantes que se hacen pasar por su organización.
Integración de la firma de código con la canalización CI/CD
La firma de código solía ser un proceso independiente durante el desarrollo. Este paso solía realizarse manualmente, lo que generaba errores. La integración con una canalización de CI/CD para la firma de código ofrece varias ventajas. El proceso de firma de código se puede automatizar fácilmente con esta integración, lo que elimina aún más el trabajo manual necesario para firmar los artefactos antes de su implementación.
Existen varias herramientas de CI/CD, como Jenkins, Azure DevOps, GitHub Actions, GitLab y otras, que facilitan la integración con herramientas de firma de código. En general, esto permite que el proceso de firma de código sea automático en el flujo de trabajo actual de desarrollo e implementación.
Al automatizar nuestros flujos de trabajo para firmar nuestros artefactos, observamos numerosas ventajas. Este tipo de automatización, con la ayuda de una canalización de CI/CD, garantiza la consistencia. Todo el código publicado seguirá el mismo proceso de firma, lo que garantiza implementaciones fiables. Además, ahorra tiempo al equipo de implementación al eliminar el proceso de firma manual.
En general, esto reduce el riesgo de errores humanos que podrían ocurrir durante la firma manual. Esta integración del flujo de trabajo de CI/CD con la firma de código es beneficiosa para todos, ya que refuerza la seguridad al garantizar la integridad y agiliza el proceso de desarrollo, lo que resulta en una entrega de software más rápida y eficiente.
Beneficios de la firma de código en CI/CD
-
Seguridad mejorada
Al firmar código en el pipeline de CI/CD, siempre se asegura de que solo el código permitido y verificado se implemente en entornos de producción. Este método reduce la probabilidad de insertar vulnerabilidades. Si se intenta manipularla, la firma se invalidará, lo que indica posibles amenazas a la seguridad. De esta manera, se mantiene a raya a cualquier persona que quiera introducir malware en el pipeline y realizar ataques a la cadena de suministro.
-
Lanzamientos automatizados
Una vez automatizado el proceso de firma de código dentro del pipeline de CI/CD, se configura un proceso de firma típico. Esta automatización siempre se lleva a cabo, independientemente del desarrollador y del entorno de desarrollo.
Como resultado de este paso, los desarrolladores ya no tienen que firmar el código manualmente, lo que les permite dedicar tiempo a otras tareas. Además, se reduce el número de errores al firmar, ya que todo se realiza sin intervención humana. Los errores humanos se pueden evitar por completo, ya que todo se ejecuta sin intervención humana. Si incluimos la firma automatizada como una de nuestras canalizaciones para CI/CD, tendremos lanzamientos más rápidos.
-
Mejores prácticas de desarrollo
Cuando las herramientas de CI/CD se vinculan con la firma de código, los errores de firma se notifican mediante una notificación. Esta notificación permite al desarrollador detectar un error y corregirlo en las primeras etapas del proceso de desarrollo. Los registros de las actividades de compilación e implementación siempre son más detallados en las canalizaciones de CI/CD. En este caso, monitorizan la firma de código y ofrecen la claridad necesaria para cumplir con las normas de seguridad.
CI / CD y DevSecOps
DevSecOps significa desarrollo, seguridad y operaciones. Es una metodología para avanzar en el desarrollo donde todos los involucrados en la creación de software colaboran para garantizar la seguridad del software desde el principio. DevSecOps se basa en flujos de trabajo automatizados para las pruebas, la implementación y la monitorización a lo largo de todo el ciclo de desarrollo de software.
Los artefactos firmados de forma segura fluyen sin esfuerzo a través de estos canales automatizados de CI/CD, manteniendo su integridad y seguridad en cada etapa. El proceso de firma puede automatizarse dentro del canal de compilación, lo que aporta seguridad al flujo de trabajo de desarrollo sin problemas. DevSecOps, en pocas palabras, es DevOps CI/CD, pero de forma segura. Esto demuestra que la seguridad es una preocupación primordial que afecta a todas las decisiones y pasos del ciclo de vida del desarrollo.
Integración de una canalización CI/CD con un HSM
Necesitamos la firma de código, pero un sistema de compilación automatizado con acceso directo a las claves es una receta para el desastre. Las filtraciones y las vulneraciones ocurren, por lo que es fundamental almacenar y proteger adecuadamente las claves de firma de código en un Módulo de Seguridad de Hardware (HSM). Las consecuencias de no proteger las claves de firma de código con un HSM quedaron patentes en abril de 2023, cuando un ataque de ransomware contra MSI expuso las claves privadas de Intel BootGuard utilizadas para firmar el firmware de varias familias de dispositivos.
Dado que las claves de BootGuard están integradas en la cadena de confianza del hardware, no se pueden reiniciar ni reemplazar, y las consecuencias podrían afectar a las empresas durante años. Los HSM no solo sirven para firmar código, sino también para proteger las claves de cifrado de bases de datos y de infraestructura de clave pública. Cabe destacar que los HSM son una herramienta esencial para prácticamente todas las organizaciones que almacenan datos, claves de cifrado o desarrollan código.
Al hablar de módulos de seguridad de hardware (HSM), quienes tienen poca experiencia podrían pensar que su gestión es un proceso complejo. Una seguridad óptima implica actualizaciones periódicas de firmware y software, auditorías regulares y una gestión adecuada del acceso a las claves. Además, es necesario integrar el HSM en el flujo de trabajo existente.
El trabajo personalizado de un ingeniero de HSM certificado es costoso y requiere mucho tiempo, y si algo falla, contactar a alguien externo a su empresa puede resultar lento y poco práctico. Para resolver los problemas y las complejidades presentadas hasta ahora, Encryption Consulting ha desarrollado una solución a un precio competitivo en Code Sign Secure y su integración con cualquier HSM que su organización desee.
Aprovechando las capacidades y la seguridad de los HSM como los de Thales, Entrust o Utimaco, Code Sign Secure se integrará fácilmente en sus flujos de trabajo existentes, agilizando el proceso de firma de código.
Preguntas frecuentes
¿Qué significa realmente la firma "sin secretos" en un contexto de CI/CD?
Esto significa que la canalización nunca almacena una clave privada o contraseña integrada de larga duración para autenticarse al firmar. En su lugar, utiliza una identidad de servicio con ámbito definido para solicitar una firma a un HSM o KSP, de modo que una cuenta de canalización comprometida no puede utilizarse para extraer o hacer un uso indebido de la clave de firma.
¿La automatización de la firma de código en CI/CD elimina la necesidad de un paso de aprobación?
No. La automatización debería eliminar el esfuerzo de firma manual, no la supervisión humana de lo que se publica. Se sigue recomendando un proceso de aprobación de firmas en producción para que una única confirmación comprometida o maliciosa no pueda llegar a un artefacto firmado y distribuido sin revisión.
Conclusión
Dependiendo del tamaño actual de su empresa, es posible que ya cuente con un centro de datos; asimismo, es posible que no desee invertir en uno por resultar simplemente impráctico para el tamaño de su organización. En cualquier caso, Code Sign Secure puede satisfacer sus necesidades con sus soluciones locales o de sistema como servicio.
Las soluciones de sistema como servicio (SaaS) le ahorran la molestia de poseer y mantener un HSM. Sin embargo, si su organización ya posee un HSM o está implementando simultáneamente una infraestructura de clave pública (PKI) u otro servicio que dependa de un HSM, este mismo HSM puede ser compatible con Code Sign Secure . Por lo tanto, la mejor opción para su organización depende de su plan estratégico de seguridad.
Afortunadamente, Encryption Consulting puede colaborar con su organización para planificar el futuro, identificando las deficiencias actuales en seguridad y sus necesidades. Ofrecemos servicios de auditoría y consultoría, y nuestro equipo de expertos del sector se encargará de identificar la solución ideal para usted.
