Al abordar la ciberseguridad y la seguridad de una organización, es fundamental prepararse para cualquier eventualidad. Una de las formas más importantes de hacerlo, especialmente para las organizaciones que crean y distribuyen software a sus clientes, es la firma de código. En esencia, la firma de código es un proceso relativamente sencillo. Un editor o distribuidor de software desea crear código para enviarlo a un cliente, pero primero debe asegurarse de que el usuario pueda confiar en dicho código. Aquí es donde entra en juego la firma de código. En primer lugar, se genera un par de claves a partir de una infraestructura de clave pública (PKI) confiable, generalmente externa, mediante una solicitud de firma de certificado.
Una solicitud de firma de certificado (CSR, por sus siglas en inglés) solicita que se genere y firme un certificado mediante una infraestructura de clave pública (PKI) de confianza y que se asocie a un par de claves. Un par de claves consta de una clave pública y una clave privada que, como su nombre indica, se mantienen disponibles pública y privadamente, respectivamente.
La solicitud de firma de código (CSR) y el par de claves se envían a la Autoridad de Certificación (CA) de la infraestructura de clave pública (PKI), donde se verifica la identidad del usuario . Tras esta verificación, la CSR se autentica y la clave pública se asocia a la identidad del solicitante, creando así un certificado de firma de código válido una vez que la CA firma el conjunto. El solicitante recibe entonces el certificado y puede comenzar a firmar código.
Una vez creado el certificado de firma de código, comienza el proceso de firma de código propiamente dicho. Primero, el código que se va a firmar se somete a un algoritmo de hash . Este algoritmo toma un archivo como entrada y genera un resumen hash.
Un resumen hash es una serie de números y letras única según el contenido de un archivo. Si se cambiara una sola letra de un archivo, el resumen hash sería completamente diferente. El hash y la clave privada del certificado se pasan a un algoritmo de firma y crean una firma. Esta se adjunta al código y se envía al usuario. Antes de profundizar en las mejores prácticas para la firma de código, veamos brevemente por qué es tan importante.
La importancia de la firma de código
La firma de código es vital para la seguridad de muchas organizaciones. Si un atacante logra robar la capacidad de firmar código con malware, la reputación de su organización estaría en riesgo. Además, la validez del software y su desarrollador pueden autenticarse mediante la firma de código. Esto también facilita el acceso a las grandes tiendas de aplicaciones.
Las tiendas de aplicaciones más grandes exigen el uso de la firma de código en las aplicaciones que se utilizan en ellas. Esto permitirá a muchos pequeños desarrolladores de aplicaciones introducir sus aplicaciones en las grandes tiendas mediante el sencillo proceso de firma de código. Ahora que sabemos por qué es tan importante la firma de código, veamos las mejores prácticas.
Mejores prácticas para la firma de código
-
Escaneo de virus
Un aspecto importante de cualquier firma de código es la implementación de análisis de malware y virus. Este análisis debe realizarse al cargar el archivo para su hashecho. La razón por la que el análisis de virus es tan vital es que, si el código contiene malware incrustado y luego se le aplica un hashecho, este podría pasar desapercibido durante el proceso de firma.
Una vez que su organización firma y aprueba el código con malware incrustado, un usuario lo instalaría en su ordenador sin dudarlo, ya que una organización de confianza lo ha aprobado. Una vez descargado, el malware puede empezar a infectar el ordenador del usuario, perjudicando así la imagen de su organización y perjudicando a los usuarios que confiaron en ella. Lo mejor es seleccionar una herramienta de firma de código que se integre con el análisis de virus y malware ya implementado por su organización.
-
Almacenamiento seguro de claves privadas
Una de las partes más vulnerables del proceso de firma de código es la clave privada asociada al certificado. Si esta no está protegida adecuadamente, todo el proceso de firma de código es inútil. Una vez robada la clave, un atacante puede usarla para firmar su propio código bajo el nombre de la organización, haciendo creer a los usuarios que se trata de un software confiable cuando no lo es. Posteriormente, pueden enviar código, supuestamente de su organización, lleno de malware, de modo que todos los usuarios que lo descarguen y lo usen se infecten. En los últimos años, muchos ataques a la cadena de suministro se han producido de esta misma manera. Con protecciones inadecuadas en las claves privadas, los atacantes pudieron obtener estas claves y firmar código con malware.
El código se envió a los proveedores de servicios, cada uno con miles de usuarios que utilizan este software en diversas empresas. El malware logró infectar a todos estos usuarios, permitiendo así a los atacantes robar información, dinero y otros datos. Si bien es posible almacenar claves mediante software, este método es mucho menos seguro que el almacenamiento basado en hardware. Se recomienda seleccionar una solución de firma de código que utilice un método de almacenamiento basado en hardware, como un Módulo de Seguridad de Hardware ( HSM). Estos dispositivos almacenan las claves de forma tan segura que un atacante necesitaría robar el dispositivo para acceder a él y sustraer las claves. Para entonces, las claves podrían haber sido rotadas o inutilizadas, quedando así completamente inservibles.
-
Verificación secundaria
Se pueden usar otras herramientas con la firma de código para garantizar la seguridad de las firmas. Herramientas como Active Directory, la autenticación multifactor, la autenticación de dos factores y otras son excelentes maneras de controlar quién puede firmar código y cuándo. Con estas herramientas, un usuario necesitaría no solo iniciar sesión con una contraseña, sino también una segunda capa de verificación antes de acceder a una página web para crear pares de claves de firma de código y antes del proceso de firma. Esto evitará que atacantes externos firmen cuando no deberían y también permitirá rastrear cualquier amenaza interna que pueda ocurrir dentro de una organización. Cualquier producto de firma de código que utilice una organización debe utilizar algún tipo de verificación secundaria para garantizar la máxima seguridad y proteger los envíos de dicha organización.
-
Marcando la hora
El uso del sellado de tiempo es otra herramienta importante en el proceso de firma de código. El sellado de tiempo implica la impresión de una fecha y hora específicas en el momento de la firma para el registro y seguimiento de los procesos de firma. Esto suele hacerse contactando a un servidor de sellado de tiempo durante el proceso de firma de código. Este sellado de tiempo facilitará la siguiente práctica recomendada que analizaré: el proceso de registro de las operaciones de firma.
-
Registro de archivos
Otro factor importante en la firma de código es el registro de cada operación de firma de código y otras tareas relacionadas. Operaciones como la creación de un par de claves, la creación de un certificado de firma de código, la firma del código y la modificación de certificados o pares de claves de firma de código deben registrarse para su uso futuro. El almacenamiento de los registros en una sola ubicación permitirá a los auditores visualizar los procesos realizados y tomar nota de lo que ocurre dentro de la herramienta de firma de código.
Además, si se produce una amenaza interna o externa, también es importante contar con estos registros. Esto permitirá a la organización rastrear los procesos realizados para descubrir quién firmó qué. Los registros también pueden utilizarse para impedir que un desarrollador malicioso firme a mitad del proceso. Si un proceso de firma no es aprobado por los equipos adecuados, se puede detener antes de que sea demasiado tarde.
-
Gestión de claves y certificados
Para garantizar la seguridad de sus claves, es fundamental contar con un sistema sólido de gestión de claves y certificados.
-
Limitar el uso repetido de teclas
La rotación de claves es una práctica que reduce el uso de una clave determinada. Consiste en retirar una clave de firma existente y reemplazarla por una clave criptográfica recién generada. Rotar las claves con frecuencia minimiza el riesgo, ya que usar una clave para múltiples firmas crea una vulnerabilidad.
Si se ve comprometida, todo el software firmado con esa clave se invalida. Los atacantes pueden aprovechar esta situación y aumentar su vulnerabilidad ante una vulneración de software distribuyendo malware camuflado en software legítimo.
-
Revocar certificados comprometidos
La revocación de certificados consiste en detener el uso de un certificado antes de que finalice su período de validez. Detener el uso del certificado comprometido es fundamental, ya que terceros no autorizados no podrán seguir firmando código malicioso con el nombre de su empresa.
Si sospecha que hay una violación de su clave o certificado, es fundamental actuar; comunicarse con su autoridad de certificación (CA) y revocar el certificado para evitar el uso de esta clave para la firma de código es una buena opción a considerar.
-
-
Proceso de firma simplificado
Se debe implementar la automatización en la firma para mantener la eficiencia en el flujo de trabajo y el desarrollo de modo que tome menos tiempo debido a menos factores humanos:
-
Diferencia entre la firma de prueba y la firma de liberación
Para evitar la publicación accidental de código sin probar, se podría diferenciar entre la firma de prueba y la firma de lanzamiento. La firma de prueba es solo para uso interno, para verificar la información en la empresa u organización, pero no para los clientes, mientras que la firma de lanzamiento es el estado final de la implementación para los clientes.
Esto se podría lograr de muchas maneras, como tener diferentes certificados o un nombre bien definido para las firmas para pruebas y lanzamiento.
-
CI/CD y firma de código
El flujo de trabajo de CI/CD está totalmente automatizado y te lleva del desarrollo a la implementación. Esto incluye la creación, las pruebas, la firma y la implementación. La firma de código integrada en el ciclo de vida del desarrollo de software (SDLC) ahorra tiempo y mejora la consistencia.
La firma manual puede llevar tiempo y ser propensa a errores, especialmente en proyectos grandes con numerosos desarrolladores. La implementación de un proceso automatizado de firma de código mediante una canalización de CI/CD aceleraría el proceso y reduciría el riesgo de errores humanos.
-
-
Medidas de seguridad avanzadas
Más vale prevenir que curar; para ello, es necesario estar alerta y tomar medidas proactivas contra las crecientes amenazas de seguridad. A continuación, se presentan algunas medidas de seguridad avanzadas contra la firma de código malicioso.
-
Estar al día
La firma de código es un ámbito que debe adaptarse a los nuevos tiempos; el código fuente debe demostrar su fiabilidad y estar actualizado. Los algoritmos criptográficos obsoletos podrían ser vulnerables a nuevos ataques, dejando inoperable su protocolo de firma de código.
Evalúe y actualice periódicamente los estándares criptográficos de su organización para asegurarse de que estén sincronizados con las mejores prácticas más recientes.
-
Comparar fichajes
Las condiciones existentes y la amenaza de manipulación del código hacen necesario verificar las firmas entre sí, manteniendo la fiabilidad del código fuente a la vista del usuario. La comparación de firmas de compilaciones de diferentes servidores podría utilizarse para detectar disparidades y revelar fuentes de explotación.
Las diferencias en las firmas reflejan cambios no autorizados o intentos delictivos de introducir malware en la fuente para extraer información confidencial. El resultado de estas comprobaciones se convierte en un voto de confianza si dos o más compilaciones de firma muestran un resultado equivalente, lo que representa un entorno de usuario seguro.
-
Conclusión
Si buscas una herramienta de firma de código, no busques más allá de Encryption Consulting. En Encryption Consulting , contamos con Code Sign Secure , una herramienta de firma de código que incorpora todas las mejores prácticas mencionadas en este blog, y más. Utilizamos módulos de seguridad de hardware para proteger las claves privadas de los certificados de firma de código . Además, empleamos Active Directory para iniciar sesión en nuestro sitio web y crear claves y certificados, así como autenticación multifactor, necesaria antes de firmar cualquier código. También utilizamos control de acceso basado en roles, garantizando que solo quienes tengan los permisos adecuados puedan usar nuestro producto de firma de código. Finalmente, realizamos análisis antivirus antes de generar el hash de un archivo, registramos la fecha y hora de cada firma creada y contamos con un registro centralizado accesible a través de nuestra página web.
Para obtener más información sobre Code Sign Secure o para probar nuestra prueba de concepto, póngase en contacto con la solución CodeSigning.
