A mediados de 2020 los investigadores de ESET comenzaron a analizar 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 este reporte:

  • Los investigadores de ESET creen que Gelsemium está detrás del ataque de cadena de suministro contra BigNox que informamos anteriormente y que denominamos Operación NightScout
  • Los investigadores de ESET encontraron una nueva versión de Gelsemium, un malware complejo y modular al que nos referimos más adelante como Gelsemine, Gelsenicine y Gelsevirine
  • Se descubrieron nuevos blancos de ataque que incluyen gobiernos, universidades, fabricantes de productos electrónicos y organizaciones religiosas en Asia Oriental y Oriente Medio
  • Gelsemium es un grupo de ciberespionaje activo desde 2014

La distribución geográfica de los blancos de ataque de Gelsemium se puede ver en la Figura 1.

Figura 1. Ubicaciones de los objetivos

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í.

Figura 2. Descripción general del flujo de trabajo de los tres componentes de Gelsemium

Gelsemine: el dropper

La primera etapa de Gelsemium está compuesta por un dropper escrito en C++ que utiliza la biblioteca Microsoft Foundation Class (MFC). Esta etapa contiene varios binarios de etapas adicionales. El tamaño del dropper oscila entre 400 kB y 700 kB, lo cual es inusual y podría ser incluso mayor si los ocho ejecutables embebidos no estuvieran comprimidos. Los desarrolladores usan la biblioteca zlib, vinculada estáticamente, para reducir en gran medida el tamaño total. Detrás de este ejecutable de gran tamaño se esconde un mecanismo complejo pero flexible que es capaz de droppear diferentes etapas según las características de la computadora víctima, ya sea que corra en 32 o 64 bits o de acuerdo con los privilegios (usuario estándar frente a administrador). Casi todas las etapas están comprimidas, ubicadas en la sección de recursos del PE, y mapeadas en el espacio de direcciones de memoria del mismo componente. La Figura 3 ilustra todas las etapas del componente Gelsemine.

Figura 3. Descripción general del espacio de direcciones de Gelsemine

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/.

Gelsevirine: el “plugin principal”

Gelsevirine es la última etapa de la cadena y sus desarrolladores la llaman MainPlugin (plugin principal), de acuerdo con el nombre de la DLL y también la ruta PDB que se encuentra en las muestras antiguas (Z:\z_code\Q1\Client\Win32\Release\MainPlugin.pdb). Vale la pena mencionar que si los defensores logran obtener esta última etapa solamente, no funcionará a la perfección, ya que requiere que sus argumentos hayan sido configurados por Gelsenicine.

La configuración utilizada por Gelsenicine contiene un campo llamado controller_version que creemos que es el control de versiones utilizado por los operadores para este MainPlugin. La Figura 4 proporciona una línea de tiempo de las diferentes versiones que hemos observado en actividad. Las fechas son aproximadas.

Figura 4. Cronología de las distintas versiones de Gelsevirine

Links/herramientas adicionales

Durante nuestra investigación encontramos algunos programas maliciosos interesantes que se describen en las siguientes secciones.

  • Operación NightScout (BigNox): en enero de 2021, otro investigador de ESET analizó y escribió un artículo sobre Operación NightScout; un ataque de cadena de suministro que comprometió el mecanismo de actualización de NoxPlayer, un emulador de Android para PC y Mac, y parte de la gama de productos de BigNox con más de 150 millones de usuarios en todo el mundo. La investigación reveló cierta relación entre este ataque de cadena de suministro y el grupo Gelsemium. Las víctimas originalmente comprometidas por ese ataque fueron luego comprometidas por Gelsemine. Entre las diferentes variantes examinadas, la “variante 2” del presente artículo muestra similitudes con el malware Gelsemium.
  • OwlProxy: este módulo también viene en dos variantes - versiones de 32 y 64 bits - y como resultado contiene una función para probar la versión de Windows al igual que en los componentes de Gelsemium.
  • Chrommme: Chrommme es un backdoor que encontramos durante nuestras aventuras por el ecosistema Gelsemium. Las similitudes de código con los componentes de Gelsemium son casi inexistentes, pero se encontraron pequeños indicadores durante el análisis que nos llevan a creer que de alguna manera está relacionado con el grupo. Se encontró el mismo servidor C&C tanto en Gelsevirine como en Chrommme, ambos utilizan dos servidores C&C. Chrommme se encontró en la máquina de una organización también comprometida por el grupo Gelsemium.

Conclusión

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.

Se puede encontrar una lista completa y completa de Indicadores de Compromiso (IoC) y muestras en el whitepaper y en nuestro repositorio de GitHub.

Para cualquier consulta o enviar muestras relacionadas con el tema, escríbanos a threatintel@eset.com.