Investigadores de ESET descubrieron un framework para ciberespionaje no reportado anteriormente, al cual han denominado Ramsay. El mismo está diseñado para recolectar y exfiltrar documentos sensibles y es capaz de operar dentro de redes aisladas, también conocidas como redes air-gapped.
Inicialmente se descubrió una instancia de Ramsay en VirusTotal a partir de una muestra cargada desde Japón, lo que nos llevó al descubrimiento de otros componentes y versiones del framework, además de evidencia suficiente para concluir que el mismo está en etapa de desarrollo.
La visibilidad actual de los blancos de ataque de Ramsay es baja. Basados en los datos de la telemetría de ESET, pocas víctimas han sido descubiertas a la fecha actual. Creemos que esta escasez de víctimas refuerza la hipótesis de que este framework está bajo un continuo proceso de desarrollo, aunque la baja visibilidad de las víctimas puede tener que ver también con la naturaleza de los sistemas apuntados, siendo redes air-gapped.
Por otra parte, se descubrieron artefactos compartidos junto con el backdoor Retro. Este malware ha estado asociado al grupo de APT Darkhotel, conocido por haber llevado adelante operaciones de ciberespionaje desde el año 2004 que apuntaban a entidades gubernamentales de países como China o Japón.
Vectores de ataque
En cuanto a los vectores de ataque, hemos descubierto que Ramsay ha estado haciendo uso de distintas versiones:
Documentos maliciosos que droppean la versión 1 de Ramsay
Este vector de ataque consiste en el uso de documentos maliciosos que explotan la vulnerabilidad CVE-2017-0199 con el objetivo de eliminar una versión anterior de Ramsay. Este documento entrega un Script Visual Basic inicial (OfficeTemporary.sct, el cual se puede observar en la siguiente captura de pantalla, que extraerá, del cuerpo del documento, el agente Ramsay enmascarado como una imagen JPG que presenta un PE codificado en base64 bajo un encabezado JPG.
ID | Index | OLE Object |
---|---|---|
0 | 0x80c8 | Format_id: 2 (Embedded) Class name: ‘Package’ Data size: 8994 OLE Package object: Filename: u‘OfficeTemporary.sct’ Source path: u‘C:\\Intel\\OfficeTemporary.sct’ Temp path = u:‘C\\Intel\\OfficeTemporary.sct’ MD5 = ‘cf133c06180f130c471c95b3a4ebd7a5’ EXECUTABLE FILE |
1 | 0xc798 | Format_id: 2 (Embedded) Class name: ‘OLE2Link’ Data size: 2560 MD5 = ‘daee337d42fba92badbea2a4e085f73f’ CLSID: 00000300-0000-0000-C000-000000000046 StdOleLink (embedded OLE object - known related to CVE-2017-0199, CVE-2017-8570, CVE-2017-8759 or CVE-2018-8174. Possibly an exploit for the OLE2Link vulnerability (VU#921560, CVE-2017-0199) |
Tabla 1. Diseño del objeto OLE contenido en el archivo RTF de Ramsay versión 1 como lo ven los oletools
Notamos que la instancia específica de Ramsay eliminada por estos documentos mostró una baja complejidad en su implementación y carecía de muchas de las características más avanzadas que hemos visto en versiones posteriores de Ramsay.
Varias instancias de estos mismos documentos maliciosos los hemos descubierto cargados en motores de sandbox públicos, etiquetados como artefactos de prueba bajo nombres como 'access_test.docx' o 'Test.docx', lo que denota un esfuerzo continuo para probar este vector de ataque específico.
Teniendo en cuenta la baja complejidad del agente Ramsay distribuido, los operadores detrás de esta amenaza probablemente estén incorporando esta instancia específica dentro de estos documentos maliciosos para fines de evaluación.
Uso de instaladores como señuelo para droppear la versión 2.a de Ramsay
Encontramos una instancia de Ramsay cargada en VirusTotal enmascarada como un instalador de 7zip.
La razón por la que decidimos llamar Ramsay a este malware es debido a algunas de las strings contenidas en este binario, como las siguientes:
Esta versión de Ramsay muestra una mejora en cuanto a las tácticas de evasión y persistencia utilizadas, además de la introducción de nuevas características, como es un componente Spreader y un rootkit. Los detalles de este componente Spreader se explican con mayor profundidad en la sección “Capacidades”.
Documentos maliciosos que droppean la versión 2.b de Ramsay
Este vector de ataque consiste en la entrega de un documento malicioso diferente que abusa de la vulnerabilidad CVE-2017-11882. Este documento droppeará un instalador de Ramsay llamado lmsch.exe, tal como se aprecia en la Tabla 1.
ID | Index | OLE Object |
---|---|---|
0 | 0x80c8 | Format_id: 2 (Embedded) Class name: ‘Package’ Data size: 644790 OLE Package object: Filename: u‘lmsch.exe’ Source path: u‘C:\\fakepath\\lmsch.exe’ Temp path = u:‘C:\\fakepath\\lmsch.exe’ MD5 = ‘27cd5b330a93d891bdcbd08050a5a6e1’ |
1 | 0xc798 | Format_id: 2 (Embedded) Class name: ‘Equation.3’ Data size: 3584 MD5 = ‘5ae434c951b106d63d79c98b1a95e99d’ CLSID: 0002CE02-0000-0000-C000-000000000046 Microsoft Equation 3.0 (Known related to CVE-2017-11882 or CVE-2018-0802) Possibly an exploit for the Equation Editor vulnerability (VU#421280, CVE-2017-11882) |
Tabla 2. Diseño del objeto OLE contenido en el archivo RTF de la versión 2.b de Ramsay, como lo muestran los oletools
La versión de Ramsay que hace uso de este documento es una versión ligeramente modificada de la versión 2.a, con la principal diferencia de no aprovechar el componente spreader. En cuanto a la funcionalidad de los componentes restantes es la misma con respecto a la versión 2.a de Ramsay.
Ejecución de los archivos infectados en el cliente
Como se mencionó anteriormente, la versión 2.a de Ramsay presenta un componente Spreader que se comportará como un infectador de archivos, cambiando la estructura de los archivos ejecutables PE benignos que se encuentran dentro de unidades extraíbles y compartidas en red para embeber artefactos maliciosos de Ramsay que son activados en la ejecución del archivo host.
El componente spreader es altamente agresivo en su mecanismo de propagación y cualquier ejecutable PE que resida en las unidades de destino serían candidatos para la infección.
Según las marcas de tiempo de compilación entre los componentes de las distintas versiones encontradas de Ramsay podemos estimar la siguiente línea de tiempo de desarrollo de este framework:
El análisis de las diferentes marcas de tiempo de compilación encontradas a lo largo de diferentes componentes implica que este framework ha estado en desarrollo desde finales de 2019, con la posibilidad de que existan actualmente dos versiones bajo mantenimiento diseñadas en función de la configuración de diferentes objetivos.
Mecanismos de persistencia
Según la versión, Ramsay implementa varios mecanismos de persistencia de diferente complejidad. Algunos de estos son los siguientes:
- Clave de registro AppInit DLL
El sistema operativo Windows ofrece una funcionalidad que permite que las DLL personalizadas se carguen en el espacio de direcciones de casi todos los procesos de aplicación a través de la clave de registro AppInit DLL. Esta técnica no es particularmente compleja. Se implementa en las primeras versiones de Ramsay y es común en otras familias de malware.
- Tarea programada a través de la API COM
Las tareas programadas permiten a los administradores ejecutar tareas o "trabajos" en los momentos designados en lugar de hacerlo cada vez que se inicia el sistema o el usuario inicia sesión. Esta característica, incluida en las primeras versiones de Ramsay, se puede implementar a través de la API COM de Windows. Teniendo en cuenta el alto porcentaje de similitud que presenta con la implementación en Carberp, es muy probable que en el caso de Ramsay, la misma haya sido una adaptación del código fuente de Carberp que está disponible de manera pública.
- Hijacking de Phantom DLL
Las versiones más maduras de Ramsay denotan un aumento en la complejidad de sus técnicas de persistencia, lo que incluye el uso de una técnica a veces denominada "Hijacking de Phantom DLL".
Esta técnica se aprovecha del hecho de que muchas aplicaciones de Windows usan dependencias obsoletas que no son estrictamente necesarias para la funcionalidad de la aplicación en sí, lo que permite la posibilidad de hacer uso de versiones maliciosas de estas dependencias.
Dos servicios serán apuntados para hacer cumplir esta técnica. Estos son:
- Hijacking de WSearch (búsqueda de Windows) msfte.dll:
- El servicio MSDTC (Microsoft Distributed Transaction Coordinator) secuestra una dependencia de oracle descrita a continuación como oci.dll:
Esta técnica de persistencia es muy versátil, permitiendo a los agentes de Ramsay distribuidos como archivos DLL que fragmenten su lógica en secciones separadas, implementando diferentes funcionalidades adaptadas a los procesos donde se cargará el agente. Además, el uso de esta técnica hace que la detección sea más difícil, ya que la carga de estas DLL en sus respectivos procesos/servicios no necesariamente activarán una alerta.
Capacidades
La arquitectura de Ramsay proporciona una serie de capacidades monitoreadas a través de un mecanismo de registro que tienen como objetivo ayudar a los operadores al proporcionar un feed de inteligencia accionable para llevar a cabo acciones como exfiltración, control y movimiento lateral, así como proporcionar información general del sistema comprometido y estadísticas de cada sistema. La realización de estas acciones es posible debido a las siguientes capacidades:
-
Recolección de archivos y almacenamiento encubierto
El objetivo principal de este framework es recopilar todos los documentos de Microsoft Word existentes dentro del sistema de archivos del objetivo. Las etapas generales de recolección se muestran en la Figura 6:
Los documentos Word primero se recopilarán y almacenarán en un directorio de recopilación preliminar. La ubicación de este directorio puede variar según la versión de Ramsay. Dos de los directorios que observamos siendo utilizados para este propósito fueron APPDATA%\Microsoft\UserSetting y %APPDATA%\Microsoft\UserSetting\MediaCache.
Dependiendo de la versión de Ramsay, la recopilación de archivos no se limitará a la unidad del sistema local, sino que también buscará unidades adicionales, como unidades de red o extraíbles:
Los documentos recopilados son cifrados utilizando el algoritmo de cifrado RC4.
La clave RC4 utilizada para cifrar cada archivo será un hash MD5 calculado a partir de una secuencia de 16 bytes generada aleatoriamente, con salto de 16 bytes hardcodeados en la muestra de malware. Los primeros 16 bytes del buffer donde se guardará el archivo cifrado corresponderán a la actual clave RC4 utilizada:
Los archivos recopilados en el directorio de recopilación preliminar se comprimirán utilizando una instancia de WinRAR que droppea el instalador de Ramsay. Este archivo comprimido se guardará dentro del directorio de recopilación preliminar y luego generará un artefacto contenedor de Ramsay:
Como se muestra en la captura de pantalla anterior, estos contenedores de Ramsay contienen un valor mágico al comienzo del archivo, junto con un GUID del perfil del hardware que muestra un identificador de la máquina de la víctima. Asimismo, una capa de cifrado adicional basada en XOR se aplicará al archivo comprimido generado. El siguiente diagrama muestra la estructura de estos artefactos:
Ramsay implementa una forma descentralizada de almacenar estos artefactos entre el sistema de archivos de la víctima mediante el uso de hooks en línea aplicados en dos funciones de Windows API: WriteFile y CloseHandle.
El propósito principal del procedimiento WriteFile hookeado es guardar el identificador de archivo del archivo de asunto para escribir e instalar otro hook en la función API CloseHandle. El procedimiento de hookeado de CloseHandle verificará si el nombre del archivo de asunto tiene una extensión .doc; si ese es el caso, se agregará al final del documento de asunto el artefacto del contenedor Ramsay seguido de una secuencia de 1024 bytes denotando un pie de página del documento de Microsoft Word.
Esto se realiza como una medida de evasión para proporcionar un medio para ocultar a simple vista el artefacto embebido dentro del documento de asunto:
Los contenedores Ramsay añadidos a los documentos de Word se marcarán para evitar que se añadan artefactos redundantes a los documentos ya afectados y el directorio de almacenamiento preliminar se borrará para generar un artefacto Ramsay nuevo en intervalos.
Aunque los documentos afectados serán modificados, no afectarán su integridad; cada documento de Word permanece completamente operativo después de que se haya agregado el artefacto.
La exfiltración de estos artefactos se realiza a través de un componente externo que no hemos podido recuperar. Sin embargo, según la metodología descentralizada que Ramsay implementa para el almacenamiento de los artefactos recolectados, creemos que este componente escaneará el sistema de archivos de la víctima en busca de los valores mágicos del contenedor de Ramsay, para de esta manera identificar la ubicación de los artefactos que se van a filtrar.
-
Ejecución del comando
A diferencia de la mayoría del malware convencional, Ramsay no tiene un protocolo de comunicación C&C basado en la red ni intenta conectarse a un host remoto con fines de comunicación. El protocolo de control de Ramsay sigue la misma filosofía descentralizada implementada para el almacenamiento de artefactos recolectados.
Ramsay escaneará todas las redes compartidas y las unidades extraíbles (excepto A: y B: unidades generalmente reservadas para disquetes) en busca de posibles archivos de control. Primero, Ramsay busca documentos Word y también, en versiones más recientes, archivos PDF y archivos ZIP:
Estos archivos son parseados por la presencia de un marcador mágico específico para el formato del archivo de control. Más específicamente, Ramsay busca cualquiera de los dos GUIDs de perfil de hardware codificados proporcionados. Uno de estos está hardcodeado como se muestra en la Figura 14, mientras que el otro se genera de forma dinámica en función de la máquina de la víctima comprometida. Si se encuentra alguno de los identificadores de asunto, se intentará analizar una firma de comando.
La búsqueda de estas dos instancias de GUID implica que los documentos de control de Ramsay pueden ser elaborados deliberadamente con la capacidad de desplegar, en varias víctimas, la misma instancia de documento de control al aprovechar un GUID "global" dentro de los mismos. Por otro lado, los documentos de control pueden elaborarse incorporando un GUID específico destinado a ser entregado exclusivamente en la máquina de una sola víctima.
El protocolo de control de Ramsay admite tres comandos diferentes:
Signature | Command |
---|---|
Rr*e#R79m3QNU3Sy | File Execution |
CNDkS_&pgaU#7Yg9 | DLL Load |
2DWcdSqcv3?(XYqT | Batch Execution |
Tabla 3. Comandos de control de Ramsay
Después de que una firma de comando dada es recuperada, el artefacto contenido a ejecutar se extraerá dentro del cuerpo del documento de control para luego ser restaurado, modificando el asunto del documento de control a su forma original después de la ejecución del comando.
-
Componente spreader
Entre los diferentes archivos eliminados por las últimas versiones de Ramsay, encontramos un componente spreader. Este ejecutable intentará buscar recursos compartidos de red y unidades extraíbles, excluyendo las unidades A: y B:
Es importante notar que existe una correlación entre las unidades apuntadas que Ramsay escanea para la propagación y la recuperación de documentos de control. Esto evalúa la relación entre las capacidades de difusión y control de Ramsay mostrando cómo los operadores de Ramsay aprovechan el framework para el movimiento lateral, denotando la probabilidad de que este framework haya sido diseñado para operar dentro de redes air-gapped.
La técnica de propagación consiste principalmente en la infección de archivos como un infector de archivos prepender para generar ejecutables de estructura similar a los instaladores señuelo de Ramsay para cada archivo PE accesible dentro de las unidades objetivo anteriormente mencionadas. El siguiente diagrama ilustra los cambios aplicados a los ejecutables apuntados después de que la infección tuvo lugar y cómo estos componentes interactúan en la ejecución:
Todos los artefactos diferentes involucrados en la etapa de infección están dentro del contexto del spreader o han sido droppeados previamente por otro componente de Ramsay. Algunos de los artefactos son parseados para los siguientes tokens:
Después de que un archivo determinado ha sido infectado, se marcará escribiendo un token específico al final para proporcionarle al spreader un identificador para evitar una infección redundante.
Además, algunos componentes de Ramsay han implementado un escáner de red destinado al descubrimiento de máquinas susceptibles a la vulnerabilidad EternalBlue SMBv1 dentro de la subred del host comprometido. Esta información estará contenida junto a toda la información registrada que Ramsay recopila y puede ser utilizada por los operadores para realizar, en una etapa posterior, un movimiento lateral sobre la red a través de un canal diferente.
Más observaciones
Se descubrió que el componente spreader de la versión 2.a de Ramsay había reutilizado una serie de tokens vistos anteriormente en el backdoor Retro de Darkhotel. Estas fichas son las siguientes:
Ramsay serializa a las víctimas utilizando la API GetCurrentHwProfile para luego recuperar un GUID para la máquina específica de la víctima. Esto también se ve implementado en Retro. Ambos usan el mismo GUID predeterminado en caso de que falle la llamada a la API:
Tanto Ramsay como Retro comparten el mismo algoritmo de codificación para codificar el GUID recuperado.
El GUID recuperado por GetCurrentHwProfile es específico para el hardware del sistema, pero no para el usuario o la instancia de PC. Por lo tanto, es probable que simplemente aprovechando este GUID, los operadores puedan encontrar duplicados destinados a serializar diferentes víctimas.
El propósito de este esquema es generar un GUID que es menos probable que sea propenso a duplicarse 'saltándolo' con la dirección ethernet de la máquina. Esto implica que Retro y Ramsay comparten el mismo esquema para generar identificadores únicos.
También encontramos similitudes en la forma en que Ramsay y Retro guardaron algunos de sus archivos de registro, compartiendo una convención de nombre de archivo similar:
Es importante resaltar que entre las técnicas documentadas de Retro, aprovecha las instancias maliciosas de msfte.dll, oci.dll y lame_enc.dll y a través de Phantom DLL Hijacking. Como se documentó anteriormente, Ramsay también utiliza esta técnica en algunas de sus versiones, que también utilizan msfte.dll y oci.dll.
Además, también observamos similitudes entre Ramsay y Retro en lo que respecta a las herramientas de código abierto utilizadas entre sus conjunto de herramientas, como son el aprovechamiento de UACMe para escalar privilegios y ImprovedReflectiveDLLInjection para implementar algunos de sus componentes.
Finalmente, notamos metadatos en coreano dentro de los documentos maliciosos utilizados por Ramsay, denotando el uso de templates en coreano.
Conclusión
A partir de las diferentes instancias del framework que hemos descubierto, Ramsay ha pasado por varias etapas de desarrollo, lo que denota una creciente progresión en el número y la complejidad de sus capacidades.
Los desarrolladores a cargo parecen estar probando varios enfoques, como los viejos exploits para las vulnerabilidades de Word de 2017, así como también implementando aplicaciones troyanizadas para ser utilizadas muy probablemente a través de ataques de spearphishing.
Interpretamos esto como que los desarrolladores tienen un conocimiento previo del entorno de las víctimas y están confeccionando vectores de ataque que puedan introducirse satisfactoriamente en los sistemas objetivo sin la necesidad de desperdiciar recursos innecesarios.
Algunas etapas del framework de Ramsay aún están bajo evaluación, lo que podría explicar la baja visibilidad actual de las víctimas, teniendo en cuenta que los objetivos de Ramsay pueden estar redes aisladas, lo que también afectaría a la visibilidad de las víctimas.
Continuaremos monitoreando las nuevas actividades de Ramsay y publicaremos información relevante en nuestro blog. Para cualquier consulta, contáctenos como threatintel@eset.com. Los indicadores de compromiso también se pueden encontrar en nuestro repositorio de GitHub.
Indicadores de Compromiso (IoCs)
SHA-1 | ESET detection name | Comments |
---|---|---|
f79da0d8bb1267f9906fad1111bd929a41b18c03 | Win32/TrojanDropper.Agent.SHN | Initial Installer |
62d2cc1f6eedba2f35a55beb96cd59a0a6c66880 | Win32/Ramsay.A | Installer Launcher |
baa20ce99089fc35179802a0cc1149f929bdf0fa | Win32/HackTool.UACMe.T | UAC Bypass Module |
5c482bb8623329d4764492ff78b4fbc673b2ef23 | Win32/HackTool.UACMe.T | UAC Bypass Module |
e7987627200d542bb30d6f2386997f668b8a928c | Win32/TrojanDropper.Agent.SHM | Spreader |
3bb205698e89955b4bd07a8a7de3fc75f1cb5cde | Win32/TrojanDropper.Agent.SHN | Malware Installer |
bd8d0143ec75ef4c369f341c2786facbd9f73256 | Win32/HideProc.M | HideDriver Rootkit |
7d85b163d19942bb8d047793ff78ea728da19870 | Win32/HideProc.M | HideDriver Rootkit |
3849e01bff610d155a3153c897bb662f5527c04c | Win64/HackTool.Inject.A | Darkhotel Retro Backdoor Loader |
50eb291fc37fe05f9e55140b98b68d77bd61149e | Win32/Ramsay.B | Ramsay Initial Installer (version 2.b) |
87ef7bf00fe6aa928c111c472e2472d2cb047eae | Win32/Exploit.CVE-2017-11882.H | RTF file that drops 50eb291fc37fe05f9e55140b98b68d77bd61149e |
5a5738e2ec8af9f5400952be923e55a5780a8c55 | Win32/Ramsay.C | Ramsay Agent DLL (32bits) |
19bf019fc0bf44828378f008332430a080871274 | Win32/Ramsay.C | Ramsay Agent EXE (32bits) |
bd97b31998e9d673661ea5697fe436efe026cba1 | Win32/Ramsay.C | Ramsay Agent DLL (32bits) |
eb69b45faf3be0135f44293bc95f06dad73bc562 | Win32/Ramsay.C | Ramsay Agent DLL (32bits) |
f74d86b6e9bd105ab65f2af10d60c4074b8044c9 | Win64/Ramsay.C | Ramsay Agent DLL (64bits) |
ae722a90098d1c95829480e056ef8fd4a98eedd7 | Win64/Ramsay.C | Ramsay Agent DLL (64bits) |
Técnicas de MITRE ATT&CK
Tactic | ID | Name | Description |
---|---|---|---|
Initial Access | T1091 | Replication Through Removable Media | Ramsay’s spreading mechanism is done via removable drives. |
Execution | T1106 | Execution through API | Ramsay’s embedded components are executed via CreateProcessA and ShellExecute . |
T1129 | Execution through Module Load | Ramsay agent can be delivered as a DLL. | |
T1203 | Exploitation for Client Execution | Ramsay attack vectors exploit CVE-2017-1188 or CVE-2017-0199. | |
T1035 | Service Execution | Ramsay components can be executed as service dependencies. | |
T1204 | User Execution | Ramsay Spreader component infects files within the file system. | |
Persistence | T1103 | AppInit DLLs | Ramsay can use this registry key for persistence. |
T1050 | New Service | Ramsay components can be executed as service dependencies. | |
T1053 | Scheduled Task | Ramsay sets a scheduled task to persist after reboot. | |
Privilege Escalation | T1088 | Bypass User Account Control | Ramsay drops UACMe instances for privilege escalation. |
Defense Evasion | T1038 | DLL Order Hijacking | Ramsay agents will masquerade as service dependencies leveraging Phantom DLL Hijacking. |
T1107 | File Deletion | Ramsay installer is deleted after execution. | |
T1055 | Process Injection | Ramsay’s agent is injected into various processes. | |
T1045 | Software Packing | Ramsay installer may be packed with UPX. | |
Discovery | T1083 | File and Directory Discovery | Ramsay agent scans for files and directories on the system drive. |
T1135 | Network Share Discovery | Ramsay agent scans for available network shares. | |
T1057 | Process Discovery | Ramsay will attempt to find if host is already compromised by checking the existence of specific processes. | |
Lateral Movement | T1210 | Exploitation of Remote Services | Ramsay network scanner may scan the host’s subnet to find targets vulnerable to EternalBlue. |
T1105 | Remote File Copy | Ramsay attempts to infect files on network shares. | |
T1091 | Replication Through Removable Media | Ramsay attempts to infect files on removable drives. | |
Collection | T1119 | Automated Collection | Ramsay agent collects files in intervals. |
T1005 | Data from Local System | Ramsay agent scans files on system drive. | |
T1039 | Data from Network Shared Drive | Ramsay agent scans files on network shares. | |
T1025 | Data from Removable Media | Ramsay agent scans files on removable drives. | |
T1113 | Screen Capture | Ramsay agent may generate and collect screenshots. | |
Command and Control | T1092 | Communication Through Removable Media | Ramsay agent scans for control files for its file-based communication protocol on removable drives. |
T1094 | Custom Command and Control Protocol | Ramsay implements a custom, file-based C&C protocol. | |
Exfiltration | T1002 | Data Compressed | Ramsay agent compresses its collection directory. |