Ir al contenido

Webinar: Regístrese para nuestro próximo seminario web

Regístrate Ahora

Una guía detallada sobre el abuso de la firma de código

La firma de código desempeña un papel importante, ya que permite identificar software legítimo en comparación con malware o código fraudulento. En términos técnicos, la firma de código crea un hash del código y lo cifra con una clave privada, añadiendo su firma. Durante la ejecución, esta firma se valida y, si el hash coincide, garantiza que el código no ha sido modificado. También garantiza que el código proviene del autor legítimo que afirma ser.

Introducción

Construir una infraestructura de TI segura implica contar con sólidos controles de seguridad. Algunos ejemplos de esto incluyen la implementación de un Infraestructura de Clave Pública, implementando productos de monitoreo en su entorno o utilizando herramientas legítimas Soluciones de firma de códigoLa firma de código es el proceso de firmar software para autenticarlo para los usuarios.

Uso de la firma de código certificadosUn diseñador de software firma su software con un certificado que contiene su clave pública. El receptor del software puede verificar que la clave pública forma parte de un par de claves con la clave privada del diseñador, autenticando así el software. La firma de código también confirma la originalidad de la información digital, como el código del software, y establece la legitimidad del autor.

La firma de código desempeña un papel importante, ya que permite identificar software legítimo en comparación con malware o código fraudulento. En términos técnicos, la firma de código crea un hash del código y lo cifra con una clave privada, añadiendo su firma. Durante la ejecución, esta firma se valida y, si el hash coincide, garantiza que el código no ha sido modificado. También garantiza que el código proviene del autor legítimo que afirma ser.

Si bien la firma de código proporciona seguridad al código, puede plantear problemas y ser vulnerable a ataques o abusos si no se implementa correctamente. El reciente ataque a Solar Winds es un ejemplo de cómo el proceso de firma de código se vio comprometido y se implementó código fraudulento en sistemas y endpoints como software legítimo. El objetivo de un atacante es encontrar la vía de menor resistencia.

Muchas industrias, como la de los videojuegos, buscan una liberación o implementación de código mucho más rápida. Por ejemplo, omitir procesos o no seguir las mejores prácticas de seguridad es muy común, lo que permite a las organizaciones ser víctimas del abuso de la firma de código.

¿Cómo se utiliza la firma de código?

La firma de código se utiliza para diversos fines. El uso más obvio es firmar código de software con la clave privada del desarrollador. Como se mencionó anteriormente, el software se firma para garantizar que no contenga código malicioso, para que el receptor de los datos sepa que el desarrollador es quien dice ser y para generar confianza entre el desarrollador y el usuario final.

Con el código firmado, los usuarios pueden confiar en que no hay intenciones maliciosas en el código, ya que el firmante del código sería responsable si así fuera. La firma de código también se utiliza en aplicaciones empresariales, dispositivos del Internet de las Cosas (IoT) y desarrollo y operaciones de TI (Dev Ops).

En las aplicaciones empresariales, todo el código interno, scripts, paquetes, etc., se firma mediante firma de código. Los scripts y paquetes se firman por las mismas razones que el código, ya que los atacantes podrían ocultar cargas maliciosas en ellos. Los dispositivos IoT utilizan la firma de código para fines de autenticación y validación. Las actualizaciones de firmware y software, al igual que los mensajes entre usuarios, están firmadas por los desarrolladores.

Con las Infraestructuras de Clave Pública (PKI), los certificados de firma de código autentican a los usuarios dentro de la red de una organización. Al firmar su certificado con su clave privada, utilizando la clave pública, se puede validar la identidad de los usuarios. Con Dev Ops, la integración y la implementación del código son constantes. El código se implementa en múltiples instancias en contenedores y sistemas en la nube, lo que significa que estas imágenes de contenedor deben firmarse durante varias etapas del ciclo de vida del código.

Abuso de firma de código

Una razón común para abusar de la firma de código es proporcionar a las víctimas código aparentemente legítimo, pero que contiene software malicioso que puede robar información confidencial de los usuarios o destruir completamente sus sistemas. Los atacantes también podrían robar certificados de firma de código de desarrolladores legítimos, lo que les permite publicar código bajo el nombre de un creador de confianza y, de esta manera, distribuir malware a más víctimas. El abuso de la firma de código puede ocurrir de diversas maneras.

  • Robo de llaves

    Cuando los certificados o claves digitales se almacenan y gestionan de forma deficiente, se abre la puerta a las amenazas, permitiéndoles robar las claves privadas de usuarios de confianza. Con estas claves, pueden firmar código con otra identidad, obtener certificados emitidos a nombre de la identidad de confianza y hacer un uso indebido de ellos dentro de la red.

    Por ejemplo, una pequeña empresa de desarrollo de software almacena su clave privada en un servidor no seguro. Un atacante puede robar la clave accediendo al servidor mediante un ataque de phishing dirigido al administrador. Mediante el uso de Módulos de seguridad de hardware (HSM) Las claves pueden mantenerse completamente seguras de los atacantes, ya que necesitarían acceder físicamente al HSM con las credenciales adecuadas para robar las claves almacenadas en su interior.

  • Errores de codificación

    Otro error menos considerado que puede provocar un abuso de la firma de código es que el software firmado con código contenga vulnerabilidades. Si existen vulnerabilidades en el software y los atacantes las descubren antes de que se parcheen, su firma de código no servirá de nada. Aunque el código esté firmado, los atacantes pueden aprovechar estas vulnerabilidades para instalar malware en los sistemas de las víctimas. El código debe probarse exhaustivamente antes de su implementación para garantizar que no presente vulnerabilidades.

    Por ejemplo, un desarrollador se apresura a actualizar un software para corregir un error de alta prioridad. El código se firma y se envía a los clientes sin realizar las pruebas de seguridad adecuadas. Sin embargo, este código contiene puertas traseras para acceder a información confidencial de los clientes, lo que puede tener muchas consecuencias para la organización y sus clientes.

  • Compromiso del sistema

    Si un sistema se ve comprometido y se firma software en él, el código puede modificarse antes de la firma. Esto permite ocultar cargas útiles de malware en código legítimamente firmado, sin el conocimiento del desarrollador. Una vez dentro del sistema, los atacantes pueden inyectar un pequeño fragmento de código malicioso en el software antes de que se firme la compilación. La firma de código se abusó de esta forma en el reciente ataque a SolarWinds. Asegurarse de que sus sistemas estén actualizados con todos los parches de seguridad puede garantizar la seguridad de su entorno en línea.

  • Uso de certificados revocados o caducados

    Cuando una clave o un certificado vencido se ve comprometido, si la validez de ese certificado no es verificada por un Autoridad de certificación (CA), entonces ese certificado se puede utilizar para permitir la firma de código de software malicioso.

    Los certificados que hayan expirado o hayan sido revocados deben colocarse en el Lista de revocación de certificados (CRL) para que las CA puedan tener en cuenta que ese certificado ya no debe usarse para nada hasta su reemplazo o renovación.

Solución de firma de código empresarial

Obtenga una solución para todas sus necesidades criptográficas de firma de código de software con nuestra solución de firma de código.

Abusos conocidos de firma de código

Al aprender de los abusos de firma de código del pasado, podemos proteger los datos en el futuro. Se han producido varios abusos de firma de código notables en el pasado, pero hoy nos centraremos en tres de los más destacados, empezando por SolarWinds. En 2020, SolarWinds descubrió que sus sistemas principales habían sido comprometidos. Mediante un ataque a la cadena de suministro, los atacantes lograron acceder a una cuenta de Microsoft 365 propiedad de SolarWinds en septiembre de 2019.

Esto permitió a los actores de amenazas acceder al código de SolarWinds y a otros sistemas, lo que les permitió abusar de la firma de código. Al editar el código antes de firmarlo, estos atacantes pudieron implementar un tipo de malware llamado troyano de acceso remoto (RAT), que les otorgaba acceso remoto a los equipos de las víctimas.

Esta RAT se ocultaba en las actualizaciones de Orion, un software de monitoreo de red creado por SolarWinds. Esto desencadenó una campaña que creó una infraestructura de comando y control en los dispositivos de las víctimas. Funcionarios gubernamentales, organizaciones privadas y muchas agencias del gobierno federal de EE. UU. se vieron afectados por Solar Winds.

Otro ataque que abusó de la firma de código fue el ataque a D-Link. Un proveedor de equipos de red llamado D-Link publicó accidentalmente sus claves privadas de firma de código al publicar el código fuente de una actualización de firmware. En este caso, los atacantes podrían usar estas claves para manipular código de su propia creación, pero haciendo creer a los destinatarios que reciben código confiable de D-Link.

La importancia de proteger las claves privadas de firma de código es fundamental, ya que el robo de identidad digital puede provocar la pérdida de datos confidenciales, demandas judiciales y más. En el ataque a D-Link, solo una de las cuatro claves de firma filtradas era válida, pero basta con un certificado válido para que se use indebidamente.

Un último abuso de firma de código del que hablaremos es Shadow Hammer. En 2019, el proceso de firma de código de un importante fabricante de computadoras llamado ASUS fue comprometido. Utilizando la utilidad de actualización en vivo del software de ASUS, los actores de amenazas lanzaron malware para crear puertas traseras en los sistemas informáticos de miles de usuarios.

Dado que el malware fue firmado por ASUS, la herramienta de actualización en vivo actualizó los sistemas, lo que permitió a los atacantes robar datos confidenciales de las víctimas. Proteger los sistemas actualizando el software y manteniendo seguros los demás sistemas evitará que se controle el proceso de firma de código.

Protección de los certificados de firma de código

Hay varias prácticas recomendadas de firma de código diferentes que se pueden seguir para garantizar que su proceso de firma de código tenga un entorno seguro en el que trabajar. Instituto Nacional de Ciencia y Tecnología (NIST) Publica una serie de recomendaciones sobre las mejores prácticas de certificados y firma de código para que los usuarios las consulten. Algunas son más obvias que otras, pero las repasaremos todas.

  1. Protección de claves privadas en HSM

    Una de las debilidades de muchas organizaciones es la falta de seguridad en torno a sus claves privadas. Ya sea en la nube o localmente, los módulos de seguridad de hardware pueden proteger completamente sus claves privadas de los atacantes. Un módulo de seguridad de hardware es un dispositivo físico especializado y altamente confiable que realiza todas las operaciones criptográficas principales, incluyendo cifrado, descifrado, autenticación, gestión de claves e intercambio de claves.

    Los HSM son dispositivos de seguridad especializados cuyo único objetivo es ocultar y proteger materiales criptográficos. Cuentan con un sistema operativo robusto y acceso restringido a la red, protegido por un firewall. Además, son dispositivos resistentes a la manipulación y con evidencia de manipulación. Dado que se requiere acceso físico a un HSM local para robar claves, se consideran una de las mejores maneras de impedir que usuarios no deseados accedan a claves criptográficas privadas.

  2. Control del proceso de firma de código

    Con solo dos de nuestros tres ejemplos reales de abuso de firma de código, puede ver que controlar el proceso de firma de código de su organización es vital para seguir las mejores prácticas. Parte de asegurar el proceso de firma de código consiste en utilizar soluciones de firma de código auténticas y seguras, si decide optar por esta vía.

    Las soluciones de firma de código proporcionan toda la infraestructura para firmar código y otros documentos, mientras usted gestiona la seguridad del sistema. Además de las soluciones de firma de código segura, controlar el acceso a las claves privadas, validar la identidad de los usuarios y usar la autenticación de dos factores en los servicios de firma de código son solo algunas otras maneras de gestionar su proceso de firma de código.

  3. Validación de código

    Antes de firmar cualquier código, las aplicaciones deben revisarse exhaustivamente para detectar vulnerabilidades o malware. Además, las llamadas a funciones obsoletas deben eliminarse del código. Revisar el código dos o tres veces para detectar vulnerabilidades o brechas de seguridad puede evitar que su organización publique código inseguro que pueda ser utilizado por actores de amenazas para robar datos confidenciales de sus usuarios.

  4. Sistemas dedicados a la firma de código

    Para garantizar el máximo nivel de seguridad en el proceso de firma de código, el sistema que implementa la firma de código debe realizar exclusivamente firmas de código. De esta forma, se evita cualquier vulnerabilidad causada por otro tipo de software que pueda afectar sus servicios de firma de código. Dos de los casos de firma de código mencionados anteriormente sufrieron un secuestro de sus procesos debido a vulnerabilidades en otro software.

    Si una computadora tiene instalados muchos programas diferentes, cada uno de ellos puede ser un vector para que los atacantes los usen indebidamente. Además, parte de esta práctica es la idea de que el sistema debe estar completamente actualizado y parcheado para lograr el entorno más seguro posible.

  5. Comprobación de la validez del certificado

    Al ejecutar una PKI, los certificados deben validarse antes de permitir su uso. Con la firma de código, la situación es similar. Ningún certificado debe utilizarse para la firma de código a menos que se haya verificado su validez. La validez de los certificados debe comprobarse no solo antes de la firma de código, sino también como parte del proceso. Esto protege contra cualquier posible descuido en la Infraestructura de Clave Pública.

  6. Gestión del ciclo de vida de los certificados

    Un componente clave para el funcionamiento exitoso de una PKI es tener una sólida Ciclo de vida del certificado Plan de gestión implementado. Los pasos del ciclo de vida del certificado y cómo protegerlo en cada fase son los siguientes:

    1. Descubrimiento:

      En la fase de descubrimiento del ciclo de vida del certificado, se busca en la red certificados faltantes, caducados, comprometidos o sin usar. De encontrarlos, estos certificados deben revocarse, renovarse o reemplazarse. Esta fase del ciclo de vida es fundamental, ya que detecta vulnerabilidades en la seguridad de las Infraestructuras de Clave Pública y las transmite a las herramientas de monitorización existentes. Esto permite corregir las brechas en el sistema sin pérdida de datos confidenciales.

      Esta fase de gestión también realiza un inventario de los certificados dentro de la PKI, lo que facilita futuras fases de descubrimiento y cualquier auditoría de PKI que pueda realizarse. La detección de certificados mal administrados o caducados debe realizarse únicamente con software de confianza, ya que la omisión de un certificado en la fase de descubrimiento puede permitir que los atacantes lo utilicen para abusar de la firma de código.

    2. Creación/Compra

      En la fase de Creación/Compra del ciclo de vida, los certificados se crean o compran para su uso por parte del solicitante. Un usuario o dispositivo envía un Solicitud de firma de certificado (CSR) A una Autoridad de Certificación Emisora. La CSR contiene la clave pública y demás información de registro necesaria para inscribir al usuario en la PKI. La CA verifica la información contenida en la CSR y, si es válida, crea el certificado para el usuario.

      La Autoridad de Certificación Emisora ​​puede formar parte de la PKI de la organización o de una Infraestructura de Clave Pública de terceros. Si se utiliza una PKI de terceros, el certificado debe adquirirse. Al crear o adquirir certificados, la CA emisora ​​debe asegurarse de que los datos de la solicitud sean legítimos, ya que un atacante podría hacerse pasar por otra persona para obtener un certificado con fines maliciosos.

    3. Instalación

      Es fundamental instalar correctamente un certificado, ya que un certificado mal instalado puede utilizarse para actividades maliciosas. El acceso al certificado debe ser posible, ya que los navegadores y otros usuarios deben poder verificar su autenticidad.

      Aun así, la seguridad del certificado sigue siendo fundamental durante el proceso de instalación. Para garantizar el máximo nivel de gestión y seguridad del certificado, al instalarlo, la CA implementa políticas que garantizan que solo las personas autorizadas puedan modificarlo.

    4. Almacenaje

      Para evitar vulnerabilidades, el almacenamiento de certificados de firma de código es vital, ya que los certificados mal almacenados pueden ser robados y utilizados por actores maliciosos. Como se mencionó anteriormente, aunque deben almacenarse de forma segura, los certificados deben ser legibles por el software y otros usuarios para autenticarlos. Para un almacenamiento seguro, utilice módulos de seguridad de hardware para almacenar las claves privadas de los certificados.

    5. Monitoring

      El seguimiento de los certificados y su estado es vital para un proceso de firma de código sólido. Esta fase es constante, ya que los certificados pueden caducar o perderse en cualquier momento. La fase de Monitoreo realiza un seguimiento de los certificados que deben revocarse, renovarse o reemplazarse mediante el inventario creado inicialmente en la fase de Descubrimiento.

      Si se determina que un certificado necesita reemplazo, renovación o revocación, este pasa a la siguiente etapa del ciclo de vida del certificado. Se deben implementar sistemas de monitoreo automatizados y sólidos para una supervisión adecuada. La supervisión automatizada garantiza que no haya supervisión humana y que los certificados que requieren la siguiente fase no se pasen por alto.

    6. Renovación

      Un certificado entra en la etapa de renovación de su ciclo de vida cuando se acerca a su fecha de vencimiento. Para cumplir con las mejores prácticas, los certificados deben tener una fecha de vencimiento de más de 5 años como máximo.

      Dependiendo de si se ha implementado la renovación automática o manual de certificados, estos pueden configurarse para que se renueven automáticamente al acercarse su fecha de vencimiento, o un administrador del sistema puede mantener una lista de todas las fechas de vencimiento para que se puedan renovar manualmente en el momento oportuno. Se recomienda automatizar el proceso de renovación, ya que un error humano puede provocar que se pasen por alto las fechas de vencimiento de los certificados.

    7. Revocación

      Los certificados deben revocarse si se detecta un uso indebido o incorrecto. Cuando se revoca un certificado, este, junto con sus datos, se incorpora a una Lista de Revocación de Certificados.

      Las Autoridades de Certificación revisan periódicamente esta lista para rechazar cualquier Solicitud de Firma de Certificado que contenga esos mismos datos. Para proteger la fase de revocación del Ciclo de Vida del Certificado, las CRL deben mantenerse actualizadas, ya que permitir el uso de certificados revocados otorgará a los actores de amenazas acceso a datos confidenciales.

    8. DE MOLARES

      La fase final del ciclo de vida del certificado es la de reemplazo. Al pasar de la compra de certificados a la creación de los propios de su organización, es necesario reemplazar los certificados adquiridos. Esto rara vez se hace, ya que es mucho más sencillo simplemente renovar un certificado del proveedor original que reemplazarlo.

      La sustitución de certificados solo debe ser realizada por Autoridades de Certificación Emisoras de confianza. Además, se deben seguir las mejores prácticas en cada fase del ciclo de vida posterior a la de sustitución, ya que el ciclo de vida del certificado se reinicia al sustituir un certificado por uno nuevo.

Solución de firma de código empresarial

Obtenga una solución para todas sus necesidades criptográficas de firma de código de software con nuestra solución de firma de código.

Servicios de firma de código de Encryption Consulting

Para proteger su proceso de firma de código en cada fase, consulte el sitio web de Encryption Consulting. Solución de firma de código – CodeSign Secure. CodeSign Secure ofrece una solución segura y flexible para sus necesidades de firma de código en todos los sistemas operativos, incluyendo Windows, Linux, Macintosh, Docker y aplicaciones de Android e iOS. El código firmado digitalmente garantiza que el software que se ejecuta en computadoras y dispositivos sea confiable y no se haya modificado.

Protegemos sus claves de firma de código con el HSM de su elección. FIPS 140-2 Nivel 3 Cumplimiento normativo. Le ayudamos a diseñar flujos de trabajo y políticas para proteger y optimizar su proceso de envío y aprobación de trabajos. Además, integraremos completamente su software de detección de malware y virus con CodeSign Secure para ofrecerle la mejor supervisión posible del proceso de firma de código. CodeSign Secure se desarrolló sobre una API REST abierta, lo que permite integraciones y requisitos personalizados.