Por qué no hay que confiar ciegamente en los archivos firmados con certificados digitales

Contenidos

    La confianza en los certificados digitales estimula a los delincuentes a buscar diferentes formas de usarlos para firmar archivos maliciosos. En este artículos analizaremos las principales amenazas relacionadas con los archivos firmados y propondremos formas prácticas de minimizar los riesgos que implica ejecutarlos.

    Si un archivo tiene firma digital, se considera que no representa peligro. Para los usuarios, la presencia de una firma digital es una garantía de que el archivo no contiene código malicioso. Muchos administradores de sistemas diseñan la política de seguridad de sus compañías para que los usuarios ejecuten sólo los ficheros firmados con certificados digitales. Además, algunos escáneres antivirus consideran que un fichero es seguro de antemano si contiene una firma digital válida.

    Al mismo tiempo, la exagerada confianza en los certificados digitales estimula a los delincuentes a buscar diferentes formas de usarlos para firmar archivos maliciosos y después usarlos para objetivos ilegales.

    En este artículos analizaremos las principales amenazas relacionadas con los archivos firmados y propondremos formas prácticas de minimizar los riesgos que implica ejecutarlos.

    Creación de la firma digital de los ficheros

    Para detectar las amenazas relacionadas con el uso de certificados digitales, analizaremos la secuencia de acciones que se realiza para poner una firma digital:

    1. El desarrollador del software compila el fichero.
    2. Se calcula una de las sumas de control (hash) del fichero: MD5, SHA1, SHA2.
    3. La suma hash del fichero se cifra con la llave privada del desarrollador de software.
    4. El bloque de datos cifrados obtenido y el certificado digital se agregan al final del fichero.

    El certificado digital contiene la llave pública del desarrollador de programa, que permite descifrar el mensaje y verificar la integridad del fichero, así como la información que permite verificar la autenticidad del desarrollador de software.

    La confirmación de autenticidad del productor del fichero se realiza mediante un centro de certificación. Esta organización confirma a los demás usuarios que la llave pública -con la cual se puede descifrar la suma hash y comprobar la integridad del fichero- le pertenece inequívocamente a este desarrollador de software. Con este objetivo, el centro de certificación firma el certificado del desarrollador para con esto confirmar que el par único de llaves pública y privada le pertenece sólo a este desarrollador. El certificado del centro de certificación, que da fe de la autenticidad del fichero también se agrega al final de fichero junto con el certificado del desarrollador.

    Los certificados de los centros de certificación no los autentifica nadie, sino estas mismas organizaciones. Para que el sistema operativo Windows confíe en los certificados expedidos por determinado centro de certificación, es necesario poner este certificado en el almacén de certificados del sistema operativo. Los certificados de los centros de certificación más prestigiosos, que han pasado la certificación, se incluyen automáticamente en el almacén y llegan a poder de los usuarios junto con las actualizaciones del sistema operativo Windows. El usuario puede agregar certificados de otros centros de certificación por sí mismo con la condición de que tenga confianza en estas organizaciones.

    Uso que los delincuentes dan a los certificados de confianza

    Analicemos los ataques que se pueden realizar en cada una de las etapas de firma del fichero. No analizaremos los ataques teóricos relacionados con las debilidades de los algoritmos criptográficos usados durante el proceso de firma del fichero, sino que nos concentraremos en los métodos de ataque usados con más frecuencia por los delincuentes en la práctica.

    Incrustación de código malicioso en la etapa de compilación del fichero

    En muchas grandes compañías desarrolladoras de software el proceso de firma de los ficheros se realiza de forma automática al finalizar el proceso de compilación de los ficheros, que también se realiza de manera centralizada en un servidor build especial.

    Habiendo recibido acceso a la red corporativa del desarrollador de software, el delincuente puede usar el servidor buid de la compañía para compilar un fichero malicioso que recibirá la firma automática de la compañía. Como resultado de este ataque, el delincuente recibe un fichero malicioso que contiene una firma digital auténtica.

    En la práctica esta amenaza se da muy rara vez, ya que en las grandes compañías productoras de software los servidores build están bastante protegidos. De todos modos, se conocen casos de ataques a blancos específicos realizados para firmar ficheros maliciosos con los certificados de compañías de confianza.

    Robo de la llave privada

    A veces los delincuentes consiguen penetrar en la red corporativa de la compañía y obtener acceso a la llave privada usada para firmar ficheros. Usando la llave privada, pueden firmar un fichero malicioso y hacerlo pasar como un fichero del productor legal de software.

    Uno de los métodos usados para robar la llave privada es el uso de software malicioso especializado.

    Después de robar la llave privada, el delincuente la usa él mismo o la revende. Y mientras más famoso sea el productor de software a quien se le haya robado la llave, más interés representará para los delincuentes, ya que el software de desarrolladores de software famosos no levanta sospechas entre los usuarios y administradores de seguridad de la red corporativa.

    Al mismo tiempo, en las grandes compañías dedicadas al desarrollo de software, las llaves privadas se guardan en módulos aparte, que están bien protegidos, lo que hace mucho más complejo que sean robadas. Por esta razón, como regla, las llaves privadas se las roban a pequeñas compañías o desarrolladores privados de software que no prestan suficiente atención a la seguridad.

    Vulnerabilidades en el algoritmo de verificación de la firma de ficheros ejecutables

    Para que el sistema operativo sepa en qué lugar del fichero buscar la información sobre la presencia de la firma digital, en el encabezado de cada fichero ejecutable firmado hay 8 bytes de datos con información sobre la ubicación y el tamaño de la firma digital, que se excluyen al verificar la firma del fichero. šSi al final de la firma se agrega un bloque de datos y se aumenta el tamaño de la firma en la misma dimensión, estos cambios tampoco influirán en el resultado de la verificación de la firma. Esto permite obtener espacio adicional en el fichero firmado, y los datos que se pongan en este no influirán en el resultado de la verificación de la firma del fichero.

    Este algoritmo se usa activamente en los instaladores web legales: sus autores cambian el tamaño de la firma de tal manera que aparezca un bloque de datos adicional que permita incluir en el bloque de la firma digital un enlace a un fichero, que el instalador descargará del sitio del desarrollador de software e instalará en el sistema del usuario. Para los desarrolladores este método es cómodo porque no hace falta firmar el instalador de nuevo cada vez que cambie el enlace a la distribución del programa: basta con sencillamente cambiar el enlace almacenado en el bloque de firma digital.

    Por su parte, los delincuentes usan el algoritmo descrito para sus propios objetivos. Tomando un instalador web de un programa legal, el delincuente cambia el enlace al distributivo a descargar, para que el instalador descargue e instale software malicioso en el sistema. Después de lo cual pone el instalador adulterado en los sitios que distribuyen programas.

    Para eliminar esta vulnerabilidad, Microsoft publicó una actualización de seguridad que permite verificar de una forma muy estricta la firma digital del fichero. Pero esta actualización no se aplica automáticamente porque una gran cantidad de desarrolladores de software usan el algoritmo descrito en sus instaladores y después de la activación automática de esta actualización los programas de estos desarrolladores se considerarán no firmados. El usuario puede activar esta actualización de forma manual, si le hace falta.

    Uso de un certificado obtenido legalmente

    Si hace pocos años sólo los grandes productores de software usaban certificados, en la actualidad son cada vez más los desarrolladores privados y pequeñas compañías que los usan. El siguiente gráfico demuestra la dinámica cuantitativa de los certificados de firma de códigos conocidos por Kaspersky Lab. Como podemos ver, la cantidad de certificados aumenta cada año.

    Cantidad de certificados conocidos por Kaspersky Lab, cuya autenticidad está confirmada por centros de certificación

    El procedimiento de adquisición de un certificado para firmar código ejecutable es bastante simple: a las personas particulares se les exige presentar sus datos de identidad y a las compañías, sus datos oficiales de registro. Pero algunos centros de certificación que expiden certificados no controlan de ninguna manera cuales son las actividades de la compañía que adquiere el certificado. El centro de certificación se limita a expedir un certificado con derecho a firmar ficheros ejecutables y confirmar que este certificado ha sido expedido a esta persona o compañía.

    Esta actitud les da a los delincuentes la posibilidad de comprar legalmente un certificado para firmar software malicioso y potencialmente indeseable.

    Lo más frecuente es que sean las compañías que producen software potencialmente peligroso las que compren certificados. Por una parte, estas compañías no producen software malicioso y por lo tanto, tienen derecho a recibir un certificado digital para firmar sus programas. Por otra, el software que producen estas compañías infringe incomodidades al usuario. Para hacer que el usuario sienta más confianza en estos programas, se los firma con certificados digitales.

    Certificados que no son de confianza

    En todos los casos descritos anteriormente (robo de llave, penetración en la infraestructura de la compañía y firma del fichero con la firma digital de ésta, compra de certificado para firmar software malicioso) el resultado es siempre el mismo: un certificado de confianza firma un fichero malicioso.

    Por lo tanto, estos certificados, a pesar de que su autenticidad está confirmada por el centro de certificación, no pueden considerarse de confianza, ya que se los ha usado o sigue usando para firmar ficheros maliciosos. šDe aquí en adelante nos referiremos a estos certificados como no de confianza.

    En caso de que se robe la llave privada del desarrollador de software o se penetre en la infraestructura de la compañía y se firme el fichero malicioso con un certificado de confianza, los centros de certificación dejan de confirmar la autenticidad del certificado (lo revocan). La celeridad con que reaccionan los centros de certificación depende de cuándo se conoce que el certificado ha sido usado por alguien diferente al desarrollador.

    Pero cuando se compra un certificado para firmar software potencialmente indeseable, los centros de certificación no siempre lo revocan, es decir, el certificado sigue estando vigente.

    El siguiente gráfico muestra la cantidad de certificados usados para firmar software potencialmente indeseable, entre todos los certificados que no son de confianza (según los datos de Kaspersky Lab).

    Distribución de certificados que no son de confianza según tipos

    Métodos de protección contra la ejecución de programas firmados con certificados que no sean de confianza

    Hemos analizado los métodos más difundidos que usan los delincuentes para firmar sus ficheros con certificados digitales. En el presente el problema de la firma de ficheros maliciosos y potencialmente indeseables con certificados digitales está cobrando cada vez más importancia: si en 2008 se expidieron 1500 certificados que después fueron usados para firmar software malicioso, en 2014 estos certificados ya eran más de 6000.

    Cambio de la cantidad de certificados que no son de confianza conocidos por Kaspersky Lab

    Tomando en consideración el aumento de la cantidad de amenazas relacionadas con la firma de ficheros maliciosos con certificados digitales, los usuarios y administradores no deben confiar ciegamente en la presencia de firmas digitales para ejecutar ficheros ejecutables.

    Daremos varias recomendaciones prácticas que permitan reducir la probabilidad de ejecutar software malicioso nuevo, todavía desconocido por los escáneres antivirus y firmado con certificados digitales:

    1. Permitir la ejecución sólo de programas firmados por compañías conocidas.

      Se puede reducir sustancialmente el riesgo de infección del sistema prohibiendo la ejecución de programas firmados con firmas digitales de productores desconocidos de software. Debido a que, como ya hemos escrito más arriba, lo más frecuente es que se robe certificados a las pequeñas compañías productoras de software.

    2. Permitir la ejecución de programas tomando en cuenta los atributos únicos de la firma digital.

      Bajo un solo nombre se pueden difundir varios certificados expedidos a una sola compañía. Si se roba uno de estos certificados a una compañía famosa, se permitirá la ejecución de un fichero firmado con el certificado robado, si para la verificación se usa sólo el criterio de confiar en los productores conocidos de software.

      Para evitar estas situaciones, es necesario usar atributos diferentes al nombre para permitir la ejecución de programas firmados con certificados de compañías famosas. Estos atributos pueden ser el número de serie o la suma hash del certificado. Como el número de serie del certificado es único sólo en los límites de determinado centro de certificación, recomendamos usarlo junto con el nombre de la compañía que firma el certificado.

    3. Activar la actualización MS13-098.

      Recomendamos a los usuarios expertos y los administradores de sistemas activar la actualización MS13-098 porque corrige un error que permite incluir datos adicionales en un fichero firmado, sin modificar la firma del mismo. šEn el centro de seguridad de Microsoft se puede leer más sobre la activación de esta actualización.

    4. No poner en el almacén certificados de centros de certificación desconocidos.

      No se recomienda instalar en el almacén certificados raíz de centros de certificación desconocidos, ya que en el futuro todos los ficheros firmados con certificados confirmados por este centro se considerarán de confianza.

    5. Usar la base de certificados de confianza proporcionada por los productores de software antivirus.

      Algunos productores de antivirus, entre ellos nuestra compañía, incluyen en sus productos una base de certificados de confianza (y una lista negra de los que no lo son) que se actualiza regularmente junto con las bases antivirus. Esto permite recibir información operativa sobre los certificados todavía no revocados que firman software malicioso o potencialmente indeseable. Los ficheros firmados con certificados que no son de confianza y que están presentes en esta base se someten a un control todavía más riguroso del antivirus.

      En la base de certificados de confianza se incluyen los certificados de productores conocidos usados para firmar programas de confianza. La presencia de un certificado en esta base pude usarse como uno de los criterios para ejecutar programas en la red corporativa.

      La presencia de esta base en el producto antivirus permite reducir la presión sobre el administrador, liberándolo de la necesidad de elaborar y tener actualizada su propia base de certificados de confianza.

    El número de certificados digitales que se usan para firmar ficheros maliciosos y potencialmente indeseables se duplica cada año. Como consecuencia, es necesario un estricto control de los ficheros firmados por parte del antivirus y el respeto de las políticas de seguridad descritas más arriba.

    Publicaciones relacionadas

    Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *