Este artículo fue publicado originalmente por Security Magazine.
Hoy en día, casi todo se basa en código. El Software impregna prácticamente todos los aspectos de nuestras vidas; desde los productos y máquinas que utilizamos a diario hasta la infraestructura crítica que sustenta a la sociedad en su conjunto. Es difícil imaginar una empresa, agencia gubernamental, otra entidad o dispositivo que no dependa del Software de alguna manera.
Hubo un tiempo en que los usuarios finales podían confiar en el Software que descargaban. Lamentablemente, ya no es así. A medida que los hackers y otros ciberdelincuentes se vuelven cada vez más expertos en el arte de propagar malware, incluso los profesionales de tecnologías de la información (TI) tienen dificultades para saber si el producto de Software que han adquirido es legítimo. Por no hablar de las actualizaciones automáticas de Software en ordenadores portátiles, dispositivos móviles y dispositivos de Internet de las Cosas (IoT).
Gracias a la adopción de la integración continua y la entrega continua (CI/CD) y las herramientas de automatización de compilación y prueba, los equipos de aplicaciones y operaciones se mueven más rápido que nunca, lo que significa que hay menos ojos humanos con una línea de visión directa sobre lo que sucede a lo largo de la cadena de desarrollo. Los actores maliciosos han reconocido esto y buscan debilidades en estos entornos complejos y de rápido movimiento, inyectando o modificando código malicioso en prácticamente cualquier punto de la cadena de suministro de Software. Esto puede ser cualquier cosa que entre o afecte al código desde el desarrollo, a través de la cadena de CI/CD de una organización, hasta que se implementa en producción (es decir, en dependencias de Software, en el repositorio de código fuente de una organización o comprometiendo servidores de compilación).
Aquí es donde entra en juego la firma de código.
Autenticidad, integridad y confianza: Por qué la firma de código es crucial en la seguridad
La firma de código es un método criptográfico utilizado por los desarrolladores para demostrar que una pieza de Software es auténtica. Protege contra el código alterado y crea una cadena de confianza. De manera similar a cómo un certificado SSL sirve como forma de autenticación para identificar un sitio web, un certificado de firma de código es una clase especial de certificado digital utilizado por los desarrolladores para firmar aplicaciones y Software.
Un certificado de firma de código permite a cualquier destinatario del Software verificar su legitimidad confirmando información como el nombre de la empresa que lo desarrolló, funcionando de manera muy similar a una licencia de conducir para el mundo digital.
Una vez que el Software se firma con un certificado de firma de código, significa que cualquier versión del Software que tenga esa firma válida no ha sido alterada por un tercero. Confirmar que un trabajo no ha sido alterado en tránsito es crucial porque cualquier modificación en el código del Software podría indicar la presencia de actividad maliciosa. El código firmado significa que lo que los usuarios finales ven y experimentan es exactamente lo que el creador del Software pretendía.
Prevención del compromiso de código
La confianza y la integridad de la firma de código dependen enteramente de la seguridad de las claves de firma de una organización. En el entorno de amenazas actual, las claves privadas vinculadas a los certificados de firma de código son uno de los mayores botines que un hacker puede obtener, ya que hacerse con esta parte del certificado de firma de código significa que pueden crear nuevo Software que parezca legítimo y de una fuente reputada.
Una única brecha en esta cadena de confianza puede provocar daños graves para una empresa. El proceso de revocar y reemitir certificados rápidamente, notificar a los usuarios afectados y lanzar una actualización recién firmada es costoso. Sin mencionar que restablecer la confianza con usuarios, socios comerciales e inversores puede ser un proceso largo y arduo.
Más allá del robo de claves, otras vulnerabilidades comunes incluyen las brechas de firma y el uso indebido interno. Los hackers pueden conseguir que se firme código malicioso incluso sin robar las claves privadas adecuadas si logran acceder a una estación de trabajo de desarrollador que tenga acceso abierto a las claves de firma de código. Una vez que esto ocurre, simplemente pueden enviar su Software para su firma y lanzamiento. Además, si un desarrollador tiene acceso abierto a la clave de firma de código correspondiente y la utiliza indebidamente o la extravía accidentalmente, puede crear una oportunidad para que los hackers se infiltren en las operaciones.
Una vez que los equipos de seguridad reconocen y comprenden estas vulnerabilidades, hay una serie de acciones que pueden tomar para protegerse contra ellas, generando mayor confianza en la cadena de suministro de Software.
1. Equilibrar el acceso de los desarrolladores
El desafío más común que experimentan las organizaciones es implementar la firma de código de una manera que satisfaga eficazmente las necesidades tanto de los desarrolladores como de los equipos de seguridad de TI. Proporcionar demasiado acceso a los desarrolladores puede hacer que el proceso sea vulnerable a ataques. Sin embargo, muy poco acceso crea fricción en el proceso de desarrollo, y es probable que los equipos eludan las políticas de seguridad. Lograr el equilibrio adecuado requiere una protección integral para las claves privadas de firma de código, de modo que permanezcan en una ubicación segura y solo puedan ser accedidas por usuarios restringidos.
2. Aumentar la visibilidad y el control para los equipos de seguridad
A menudo, los equipos de seguridad carecen de visibilidad y control sobre los procesos de firma. Implementar tecnología que pueda centralizar la visibilidad y el control para facilitar a los equipos de seguridad la auditoría de todo puede contribuir en gran medida a abordar este desafío. Contar con la tecnología adecuada puede ayudar a los equipos de seguridad a rastrear y monitorear las actividades de firma de código, crear un registro de auditoría para los certificados de firma de código y los intentos de firma, y centralizar y estandarizar las políticas sobre quién puede firmar código.
3. Integrar las actividades de firma de código en los procesos de desarrollo
La mejor manera de garantizar que los desarrolladores no eludan las políticas de seguridad o las expongan accidentalmente a riesgos es integrar las actividades de firma de código en sus procesos DevOps existentes. Esto debe incluir la integración de cualquier herramienta de firma con las herramientas DevOps, la habilitación de capacidades de firma remota para equipos distribuidos y la introducción de comprobaciones y verificaciones que deben realizarse antes de cualquier firma de código.
4. Evaluar continuamente las actividades de firma de código
La firma de código es un proceso continuo. Los certificados, en algún momento, caducarán, las claves y los algoritmos podrían debilitarse con el tiempo, y las amenazas evolucionan. Mantener un control estricto de todas las actividades de firma de código, auditar todo el uso de claves y cubrir los certificados de firma de código en cualquier actividad más amplia de gestión de certificados PKI no solo ayudará a los equipos de seguridad a detectar las amenazas con antelación, sino que también garantizará que todos los controles establecidos para proteger un certificado de firma de código se mantengan adecuadamente a lo largo del tiempo.
En nuestro mundo impulsado por el Software, la confianza lo es todo. Garantizar que los equipos de seguridad y desarrollo de una organización trabajen juntos para proteger los certificados digitales y las claves utilizadas para la firma de código es clave para garantizar que su Software siga siendo seguro y fiable, lo que convierte la firma de código en una parte fundamental de una cadena de suministro de Software segura.