En la publicación, le diremos cómo el grupo cibernético OceanLotus (APT32 y APT-C-00) utilizó recientemente uno de los exploits disponibles públicamente para
OceanLotus se especializa en ciberespionaje, los objetivos prioritarios son los países del sudeste asiático. Los atacantes falsifican documentos que atraen la atención de las posibles víctimas para convencerlas de realizar un backdoor, y también trabajan en el desarrollo de herramientas. Los métodos utilizados para crear honeypots varían según los diferentes ataques, desde archivos de "extensión doble", archivos autoextraíbles, documentos de macros, hasta exploits conocidos.
Usando el exploit en Microsoft Equation Editor
A mediados de 2018, OceanLotus realizó una campaña que explotaba la vulnerabilidad CVE-2017-11882. Uno de los documentos maliciosos del cibergrupo fue analizado por especialistas de 360 Threat Intelligence Center (
La etapa primera
documento FW Report on demonstration of former CNRP in Republic of Korea.doc
(sha-1: D1357B284C951470066AAA7A8228190B88A5C7C3
) es similar a la mencionada en el estudio anterior. Es interesante porque está dirigido a usuarios interesados en la política camboyana (CNRP - Partido de Salvación Nacional de Camboya, disuelto a fines de 2017). A pesar de la extensión .doc, el documento está en formato RTF (ver la figura a continuación), contiene código no deseado y también está distorsionado.
Figura 1. Basura en RTF
A pesar de la presencia de elementos con formato incorrecto, Word abre con éxito este archivo RTF. Como puede ver en la Figura 2, aquí hay una estructura EQNOLEFILEHDR en el desplazamiento 0xC00 seguida de un encabezado MTEF y luego una entrada MTEF (Figura 3) para la fuente.
Figura 2. Valores de registro de FONT
Figura 3.
Posible desbordamiento de campo nombre , porque su tamaño no se comprueba antes de copiar. Un nombre demasiado largo desencadena la vulnerabilidad. Como puede ver en el contenido del archivo RTF (compensación 0xC26 en la Figura 2), el búfer se llena con código de shell seguido de un comando ficticio (0x90
) y dirección de remitente 0x402114
. La dirección es un elemento de diálogo en EQNEDT32.exe
señalando instrucciones RET
. Esto hace que EIP apunte al inicio del campo. nombre que contiene el código shell.
Figura 4. Comienzo del shellcode del exploit
dirección 0x45BD3C
almacena una variable que se desreferencia hasta que alcanza un puntero a la estructura cargada actualmente MTEFData
. Aquí está el resto de la shellcode.
El propósito del código de shell es ejecutar la segunda pieza de código de shell incrustada en el documento abierto. Primero, el shellcode original intenta encontrar el descriptor de archivo del documento abierto iterando sobre todos los descriptores del sistema (NtQuerySystemInformation
con un argumento SystemExtendedHandleInformation
) y comprobando si coinciden PID descriptor y PID proceso WinWord
y si el documento se abrió con una máscara de acceso - 0x12019F
.
Para confirmar que se encontró el identificador correcto (y no el identificador de otro documento abierto), el contenido del archivo se muestra mediante la función CreateFileMapping
, y el shellcode comprueba si los últimos cuatro bytes del documento coinciden con "yyyy
» (método Egg Hunting). Una vez que se encuentra una coincidencia, el documento se copia en una carpeta temporal (GetTempPath
) cómo ole.dll
. Luego se leen los últimos 12 bytes del documento.
Figura 5. Marcadores de fin de documento
valor de 32 bits entre marcadores AABBCCDD
и yyyy
es el desplazamiento del siguiente shellcode. se llama con una función CreateThread
. Extraído el mismo shellcode utilizado por el grupo OceanLotus anteriormente.
La segunda etapa
Extracción de componentes
Los nombres de archivos y directorios se eligen dinámicamente. El código elige aleatoriamente el nombre de un archivo ejecutable o DLL en C:Windowssystem32
. Luego hace una solicitud a sus recursos y recupera el campo. FileDescription
para usar como el nombre de la carpeta. Si eso no funciona, el código selecciona aleatoriamente un nombre de carpeta de los directorios %ProgramFiles%
o C:Windows
(de GetWindowsDirectoryW). Evita usar un nombre que pueda entrar en conflicto con los archivos existentes y se asegura de que no contenga las siguientes palabras: windows
, Microsoft
, desktop
, system
, system32
o syswow64
. Si el directorio ya existe, se agrega "NLS_{6 caracteres}" al nombre.
recurso 0x102
analizados y archivos volcados en %ProgramFiles%
o %AppData%
, a una carpeta seleccionada al azar. El tiempo de creación cambió para tener los mismos valores que kernel32.dll
.
Por ejemplo, aquí está la carpeta y la lista de archivos creados al seleccionar el ejecutable C:Windowssystem32TCPSVCS.exe
como fuente de datos.
Figura 6. Extracción de varios componentes
Estructura de recursos 0x102
en un cuentagotas es bastante complicado. En pocas palabras, contiene:
- nombres de archivo
— Tamaño y contenido del archivo
— Formato de compresión (COMPRESSION_FORMAT_LZNT1
utilizado por la función RtlDecompressBuffer
)
El primer archivo se vuelca como TCPSVCS.exe
, que es legítimo AcroTranscoder.exe
(de acuerdo a FileDescription
, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3
).
Es posible que haya notado que algunos archivos DLL tienen más de 11 MB. Esto se debe a que se coloca un gran búfer contiguo de datos aleatorios dentro del ejecutable. Es posible que esta sea una forma de evitar la detección por parte de algunos productos de seguridad.
Garantizar la persistencia
recurso 0x101
en el cuentagotas contiene dos enteros de 32 bits que especifican cómo se debe aplicar la persistencia. El valor del primero especifica cómo persistirá el malware sin derechos de administrador.
Tabla 1. Mecanismo de persistencia de no administrador
El valor del segundo entero especifica cómo el malware debe garantizar la persistencia ejecutándose con privilegios administrativos.
Tabla 2. Mecanismo de persistencia del administrador
El nombre del servicio es el nombre del archivo sin la extensión; el nombre para mostrar es el nombre de la carpeta, pero si ya existe, la cadena "Revision 1
” (el número aumenta hasta que se encuentra un nombre no utilizado). Los operadores se han ocupado de que la persistencia a través del servicio sea resistente: en caso de falla, el servicio debe reiniciarse después de 1 segundo. Entonces el valor WOW64
La nueva clave de registro para el servicio se establece en 4, lo que indica que se trata de un servicio de 32 bits.
Una tarea programada se crea a través de varias interfaces COM: ITaskScheduler
, ITask
, ITaskTrigger
, IPersistFile
и ITaskScheduler
. Esencialmente, el malware crea una tarea oculta, establece la información de la cuenta junto con la información actual del usuario o del administrador y luego establece el disparador.
Esta es una tarea diaria con una duración de 24 horas e intervalos entre dos ejecuciones de 10 minutos, lo que significa que se ejecutará constantemente.
Bit malicioso
En nuestro ejemplo, el ejecutable TCPSVCS.exe
(AcroTranscoder.exe
) es un software legítimo que carga las DLL que se descargan con él. En este caso, es de interés Flash Video Extension.dll
.
Su función DLLMain
simplemente llama a otra función. Hay algunos predicados borrosos:
Figura 7. Predicados borrosos
Después de estas comprobaciones engañosas, el código recibe una sección .text
expediente TCPSVCS.exe
, cambia su protección a PAGE_EXECUTE_READWRITE
y lo sobrescribe con instrucciones ficticias:
Figura 8. Secuencia de instrucciones
Al final a la dirección de la función. FLVCore::Uninitialize(void)
, exportado Flash Video Extension.dll
, se añade la instrucción CALL
. Esto significa que después de cargar la DLL maliciosa, cuando el tiempo de ejecución llama WinMain
в TCPSVCS.exe
, el puntero de instrucción apuntará a NOP, lo que resultará en llamar FLVCore::Uninitialize(void)
, siguiente etapa.
La función simplemente crea un mutex que comienza con {181C8480-A975-411C-AB0A-630DB8B0A221}
seguido del nombre de usuario actual. A continuación, lee el archivo *.db3 descargado, que contiene código independiente de la posición, y utiliza CreateThread
para ejecutar contenido.
El contenido del archivo *.db3 es el código shell que suele utilizar el equipo de OceanLotus. Nuevamente descomprimimos con éxito su carga usando el script del emulador que publicamos.
El guión recupera la etapa final. Este componente es un backdoor que ya hemos analizado en {A96B020F-0000-466F-A96D-A91BBF8EAC96}
archivo binario. La configuración del malware todavía está cifrada en el recurso PE. Tiene aproximadamente la misma configuración, pero los servidores C&C son diferentes a los anteriores:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
El grupo OceanLotus vuelve a demostrar una combinación de diferentes técnicas para evitar la detección. Regresaron con un esquema "terminado" del proceso de infección. Al elegir nombres aleatorios y llenar ejecutables con datos aleatorios, reducen la cantidad de IoC confiables (basados en hash y nombres de archivo). Además, al usar la carga de DLL de terceros, los atacantes solo necesitan eliminar el archivo binario legítimo. AcroTranscoder
.
Archivos autoextraíbles
Después de los archivos RTF, el grupo cambió a archivos autoextraíbles (SFX) con íconos de documentos comunes para confundir aún más al usuario. Threatbook escribió al respecto ({A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
. Desde mediados de enero de 2019, OceanLotus ha estado reutilizando esta técnica, pero cambiando algunas configuraciones con el tiempo. En esta sección, hablaremos sobre la técnica y los cambios.
Creando un señuelo
documento THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE
(sha-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB
) se encontró por primera vez en 2018. Este archivo SFX fue creado con la mente - en la descripción (Información de la versión) dice que es una imagen JPEG. El guión SFX se ve así:
Figura 9. Comandos SFX
El malware se reinicia {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx
(sha-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC
), así como una imagen 2018 thich thong lac.jpg.
La imagen del señuelo se ve así:
Figura 10. Imagen de señuelo
Es posible que haya notado que las dos primeras líneas en el script SFX llaman dos veces al archivo OCX, pero esto no es un error.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
El flujo de control del archivo OCX es muy similar a otros componentes de OceanLotus: muchas secuencias de comandos JZ/JNZ
и PUSH/RET
intercalado con código basura.
Figura 11. Código ofuscado
Después de filtrar el código basura, la exportación DllRegisterServer
, llamado regsvr32.exe
, se ve así:
Figura 12. Código del instalador principal
Básicamente, la primera vez que llamas DllRegisterServer
valor de registro de conjuntos de exportación HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model
para desplazamiento cifrado en DLL (0x10001DE0
).
Cuando se llama a la función por segunda vez, lee el mismo valor y se ejecuta en esa dirección. Desde aquí, el recurso se lee y ejecuta, y muchas acciones se realizan en la RAM.
El shellcode es el mismo cargador de PE que se usó en campañas anteriores de OceanLotus. Se puede emular con db293b825dcc419ba7dc2c49fa2757ee.dll
, lo carga en memoria y ejecuta DllEntry
.
La DLL extrae el contenido de su recurso, lo descifra (AES-256-CBC) y lo descomprime (LZMA). El recurso tiene un formato específico que es fácil de descompilar.
Figura 13. Estructura de configuración del instalador (KaitaiStruct Visualizer)
La configuración se establece explícitamente: según el nivel de privilegio, los datos binarios se escribirán en %appdata%IntellogsBackgroundUploadTask.cpl
o %windir%System32BackgroundUploadTask.cpl
(o SysWOW64
para sistemas de 64 bits).
Se garantiza una mayor persistencia mediante la creación de una tarea denominada BackgroundUploadTask[junk].job
Donde [junk]
es un conjunto de bytes 0x9D
и 0xA0
.
Nombre de la aplicación de tareas %windir%System32control.exe
y el valor del parámetro es la ruta al archivo binario descargado. La tarea oculta se ejecuta todos los días.
Estructuralmente, un archivo CPL es una DLL con un nombre interno ac8e06de0a6c4483af9837d96504127e.dll
, que exporta la función CPlApplet
. Este archivo descifra su único recurso {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
, luego carga esa DLL y llama a su única exportación DllEntry
.
Archivo de configuración de puerta trasera
La configuración de la puerta trasera está encriptada e integrada en sus recursos. La estructura del archivo de configuración es muy similar al anterior.
Figura 14. Estructura de configuración de puerta trasera (KaitaiStruct Visualizer)
A pesar de la estructura similar, los valores de muchos campos se han actualizado en comparación con los datos que se muestran en
El primer elemento de la matriz binaria contiene la DLL (HttpProv.dll
MD5: 2559738D1BD4A999126F900C7357B759
),
Investigación adicional
Recolectando muestras, prestamos atención a algunas características. La muestra que acabamos de describir apareció alrededor de julio de 2018, y otras similares aparecieron más recientemente, a mediados de enero o principios de febrero de 2019. Se utilizó un archivo SFX como vector de infección, dejando caer un documento señuelo legítimo y un archivo OCX malicioso.
Aunque OceanLotus usa marcas de tiempo falsas, notamos que las marcas de tiempo de los archivos SFX y OCX son siempre las mismas (0x57B0C36A
(08/14/2016 a las 7:15 UTC) y 0x498BE80F
(02/06/2009 a las 7:34 a. m. UTC) respectivamente). Esto probablemente indica que los autores tienen algún tipo de "constructor" que usa las mismas plantillas y solo cambia algunas características.
Entre los documentos que hemos estudiado desde principios de 2018, hay varios nombres que indican los países atacantes de interés:
- La nueva información de contacto de Camboya Media (Nuevo).xls.exe
- 李建香 (个人简历).exe (documento pdf falso de un CV)
— comentarios, Rally en EE. UU. del 28 al 29 de julio de 2018.exe
Desde el descubrimiento de la puerta trasera {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
y la publicación de su análisis por parte de varios investigadores, observamos algunos cambios en los datos de configuración del malware.
En primer lugar, los autores comenzaron a eliminar los nombres de las DLL auxiliares DLL (DNSprov.dll
y dos versiones HttpProv.dll
). Luego, los operadores dejaron de empaquetar la tercera DLL (segunda versión HttpProv.dll
), eligiendo incrustar solo uno.
En segundo lugar, se han cambiado muchos campos de configuración de puertas traseras, probablemente para evitar la detección, ya que muchos IoC están disponibles. Entre los campos importantes modificados por los autores se encuentran los siguientes:
- clave de registro modificada AppX (ver IoC)
- cadena de codificación mutex ("def", "abc", "ghi")
- número de puerto
Finalmente, todas las nuevas versiones analizadas tienen nuevos C&C enumerados en la sección IoC.
Hallazgos
OceanLotus sigue evolucionando. El grupo cibernético se enfoca en refinar y expandir las herramientas y señuelos. Los autores enmascaran las cargas útiles maliciosas con documentos llamativos que son relevantes para las víctimas previstas. Desarrollan nuevos circuitos y también utilizan herramientas disponibles públicamente, como el exploit Equation Editor. Además, están mejorando las herramientas para reducir la cantidad de artefactos que quedan en las máquinas de las víctimas, lo que reduce la posibilidad de que el software antivirus los detecte.
Indicadores de compromiso
Los indicadores de compromiso, así como los atributos MITRE ATT&CK están disponibles
Fuente: habr.com