Gelsemium: un malware complejo y modular utilizado por grupo de cibersespionaje

June 9, 2021

A mediados del 2020  diversos investigadores detectaron múltiples campañas, que luego fueron atribuidas al grupo Gelsemium, y rastrearon la primera versión del malware que utiliza el grupo y que se remonta a 2014. Las víctimas de estas campañas se encuentran en el este de Asia, así como en el Medio Oriente, e incluyen gobiernos, organizaciones religiosas, fabricantes de productos electrónicos y universidades.

Principales puntos en esta investigación:

  • Los investigadores de ES creen que Gelsemium está detrás del ataque de cadena de suministro contra BigNox que informamos anteriormente y que denominamos Operación NightScout
  • Se encontraron una nueva versión de Gelsemium, un malware complejo y modular al que nos referimos más adelante como Gelsemine, Gelsenicine y Gelsevirine

Componentes de Gelsemium

Toda la cadena de Gelsemium puede parecer simple a primera vista, pero las exhaustivas configuraciones, implantadas en cada etapa, modifican sobre la marcha la configuración para el payload final, lo que hace que sea más difícil de entender. Los comportamientos analizados a continuación están vinculados a la configuración.

Por lo tanto, los nombres de archivo y las rutas pueden que sean diferentes en otras muestras. La mayoría de las campañas que observamos siguen lo que describimos aquí.


Gelsemine: el dropper

Gelsemium emplea tres componentes y un sistema de complementos que ofrece a los operadores diferentes opciones para recoger la información: el dropper Gelsemine, el loader Gelsenicine y el componente principal Gelsevirine.

En primer lugar, el dropper está escrito en C++ utilizando la biblioteca Microsoft Foundation Class (MFC) y contiene múltiples binarios de otras etapas. El tamaño oscila entre los 400k y los 700kb, lo cual es inusual y sería aún mayor si los ocho ejecutables incrustados no estuvieran comprimidos.

En este sentido, los desarrolladores han empleado la biblioteca zlib, enlazada estáticamente, para reducir el tamaño total, escondiendo detrás de cada ejecutable un mecanismo complejo, pero flexible capaz de soltar diferentes etapas según las características del ordenador de la víctima, como la cantidad de bits o los privilegios.

Casi todas las etapas están comprimidas y ubicadas en la sección de recursos del PE y mapeadas en el mismo espacio de dirección de memoria del componente.

Por su parte, el segundo paso es el loader (cargador), un cargador que recupera Gelsevirine y lo ejecuta, habiendo dos versiones diferentes (ambos son DLLs), que difieren en el contexto en el que se ejecuta, en función de si se trata de un administrador o de un usuario con privilegios estándar comprometidos.

Por último, el plugin principal es la última etapa de la cadena, que tiene la particularidad de que si los defensores consiguen obtener esta última etapa solos, no se ejecutará, ya que requiere que sus argumentos hayan sido configurados por Gelsenicine. La configuración utilizada contiene un campo llamado controller_version es el versionado utilizado por los operadores para este complemento principal.

Gelsenicine: el loader

Gelsenicine es un loader que recupera Gelsevirine y lo ejecuta. Hay dos versiones diferentes del loader: ambas son DLL; sin embargo, difieren en el contexto en el que se ejecuta Gelsemine.

Para víctimas con privilegios de administrador, Gelsemine droppea Gelsenicine en C:\Windows\System32\spool\prtprocs\x64\winprint.dll (DLL en modo usuario para el procesador de impresión) que luego se carga automáticamente por el servicio spoolsv de Windows. Para escribir un archivo en el directorio %WINDIR%/system32, los privilegios de administrador son obligatorios; de ahí el requisito mencionado anteriormente.

En el caso de los usuarios con privilegios estándar que son comprometidos por Gelsemine se droppea Gelsenicine en un directorio diferente que no requiere privilegios de administrador. La DLL chrome_elf.dll se droppea en CommonAppData/Google/Chrome/Application/Library/.

El bioma Gelsemium es muy interesante: muestra pocas víctimas (según nuestra telemetría) con una gran cantidad de componentes adaptables. El sistema de plugins muestra que sus desarrolladores tienen un conocimiento profundo de C++. Pequeñas similitudes con herramientas de malware conocidas arrojan luz sobre posibles relaciones con otros grupos y actividades pasadas. Esperamos que esta investigación impulse a otros investigadores a publicar sobre el grupo y revelar más raíces relacionadas con esta biosfera de malware.