El malware PHOREAL se dirige al sector financiero del sudeste asiático

Elastic Security descubrió el malware PHOREAL, cuyo objetivo son las organizaciones financieras del sudeste asiático, especialmente, las del sector financiero vietnamita.

17 min de lecturaCampañas
El malware PHOREAL apunta al sector financiero del sudeste asiático

Preámbulo

Elastic Security identificó una campaña en curso dirigida a una institución de servicios financieros vietnamita con la puerta trasera PHOREAL/RIZZO. Si bien este malware estuvo en uso durante algún tiempo, esta es la primera vez que observamos que se carga en la memoria como una técnica de evasión de defensa y protección de campañas. Tras el análisis de nuestras propias observaciones y la información reportada anteriormente, estamos rastreando este grupo de actividad (malware + técnica + victimología) como REF4322.

¿Cuál es la amenaza?

PHOREAL/RIZZO es una puerta trasera que permite la caracterización inicial de la víctima y las operaciones posteriores a la explotación para comprometer la confidencialidad de los datos de las organizaciones. Se informó en otras investigaciones que es empleado exclusivamente por APT32 (también conocido como SeaLotus, OceanLotus, APT-C-00, Group G0050).

¿Cuál es el impacto?

APT32 se dirige en gran medida a víctimas con intereses políticos o económicos en el sudeste asiático, específicamente en Vietnam.

¿Qué está haciendo Elastic al respecto?

Elastic Security detalló cómo clasificar una de estas alertas de amenazas, extrajo observables para el filtrado de endpoints y redes, y produjo una nueva firma de malware para la identificación y mitigación de la amenaza en toda la flota de Elastic Agents desplegados.

Detalles de la investigación

Mientras realizaban operaciones de Threat Discovery & Monitoring, los investigadores de Elastic Security identificaron un cluster de alertas de protección de memoria de Windows shellcode_thread generadas a partir de un sensor de endpoint de Elastic Agent. Estas alertas en individuo fueron interesantes porque todas ocurrieron dentro del mismo clúster y, de manera inusual, se dirigieron al proceso control.exe. El proceso de Windows control.exe controla la ejecución de los elementos del Panel de control, que son utilidades que permiten a los usuarios ver y ajustar la configuración del equipo.

Por lo general, cuando observamos falsos positivos para la protección shellcode_thread, se identifica en una amplia base de usuarios y, en muchos casos, se atribuye a varios mecanismos antitrampas de juegos o DRM (Digital Rights Management). En este caso, un solo clúster y un proceso de destino firmado por Microsoft eran atípicos y merecían una investigación más profunda.

Puedes leer más sobre las protecciones de memoria de Elastic Security AQUÍ y sobre los ataques en memoria AQUÍ.

Con nuestro interés despertado por las características atípicas de las alertas, investigamos más a fondo para validar y caracterizar la amenaza:

El proceso de destino es un binario de Windows firmado

...
"process": {
     "args": [
       "control.exe",
       "Firewall.cpl",
       "{2D48D219-C306-4349-AE1F-09744DFFB5B9}"
     ],
     "Ext": {
       "code_signature": [
         {
           "trusted": true,
           "subject_name": "Microsoft Windows",
           "exists": true,
           "status": "trusted"
         }
       ],
       "dll": [
...

.dll cargado sin firmar

...
   "Ext": {
     "mapped_address": 1945501696,
     "mapped_size": 21135360
   },
   "path": "C:\\Windows\\SysWOW64\\tscon32.dll",
   "code_signature": [
     {
       "exists": false
     }
   ],
   "name": "tscon32.dll",
   "hash": {
     "sha1": "007970b7a42852b55379ef4cffa4475865c69d48",
     "sha256": "ec5d5e18804e5d8118c459f5b6f3ca96047d629a50d1a0571dee0ac8d5a4ce33",
     "md5": "2b6da20e4fc1af2c5dd5c6f6191936d1"
   }
 },
...

Módulo de inicio desde el hilo de alertas

...
 "pe": {
   "original_file_name": "CONTROL.EXE"
 },
 "name": "control.exe",
 "pid": 5284,
 "thread": {
   "Ext": {
     "start_address_module": "C:\\Windows\\SysWOW64\\tscon32.dll",
...

Alertas de metadatos de la región de memoria

...
"memory_region": {`
   "region_size": 73728,
   "region_protection": "RWX",
   "allocation_base": 81395712,
   "bytes_allocation_offset": 0,
   "allocation_type": "PRIVATE",
   "memory_pe_detected": true,
   "region_state": "COMMIT",
   "strings": [
     "QSSSSSSh ",
     ...
     "bad cast",
     "Local\\{5FBC3F53-A76D-4248-969A-31740CBC8AD6}",
     "Netapi32.dll",
     "NetWkstaGetInfo",
     "NetApiBufferFree",
     "\\\\.\\pipe\\{A06F176F-79F1-473E-AF44-9763E3CB34E5}",
     "list<T> too long",
     "{FD5F8447-657A-45C1-894B-D533926C9B66}.dll",
     "DllEntry",
     ...
     ".?AVbad_alloc@std@@",
     "C:\\Windows\\syswow64\\control.exe",
     ":z:zzzzzz7",
     ...
     "InternalName",
     "mobsync.exe",
     "LegalCopyright",
...

Datos de subprocesos para pivotar

...
"thread": {
 "Ext": {
   "start_address_bytes": "8bff558bece8e6430000e8db43000050e8bb43000085c0751fff7508e8c94300",
   ...
   "start_address_bytes_disasm": "mov edi, edi\npush ebp\nmov ebp, esp\ncall 0x000043f0\ncall 0x000043ea\npush eax\ncall 0x000043d0\ntest eax, eax\njnz 0x00000038\npush dword ptr [ebp+0x08]"
 },
...

A partir de la alerta de ejemplo, primero identificamos el start_address_module que es la dll/módulo donde comenzó el hilo. C:\Windows\SysWOW64\tscon32.dll es el start_address_module para el subproceso sobre el que alertamos. También es la única dll sin firmar cargada, por lo que es un gran lugar para centrar nuestros esfuerzos. Al comprobar el valor hash en VirusTotal, para identificar la información divulgada anteriormente sobre la muestra, no vimos ningún resultado.

Profundizando, observamos los start_address_bytes, que son los primeros 32 bytes de nuestro hilo de alerta. Podemos usar el valor del start_address_bytes (8bff558bece8e6430000e8db43000050e8bb43000085c0751fff7508e8c94300) para buscar pivotes en VirusTotal consultando el contenido: {8bff558bec56e83f3e0000e8343e000050e8143e000085c0752a8b750856e821}. Identificamos relativamente pocos resultados, pero incluyeron la siguiente entrada presentada por primera vez en julio de 2021.

Al investigar los resultados de VirusTotal, pudimos ver que el investigador de amenazas Felix Bilstein (@fxb_b) fue el autor de una regla YARA de colaboración colectiva que identifica esto como la puerta trasera de PHOREAL . Pasando a la pestaña CONTENIDO, podemos comparar algunas de las cadenas de nuestra alerta con lo que se informó previamente a VirusTotal.

Usando las cadenas únicas que identificamos anteriormente y el start_address_bytes, podemos crear una firma YARA convirtiendo las cadenas únicas ($a) y el start_address_bytes ($b) en valores hexadecimales como se muestra a continuación.

Cadenas YARA convertidas

strings:
          \\  "\\.\pipe\{A06F176F-79F1-473E-AF44-9763E3CB34E5}"  ascii wide
    $a1 = { 5C 00 5C 00 2E 00 5C 00 70 00 69 00 70 00 65 00 5C 00 7B 00 41 00
            30 00 36 00 46 00 31 00 37 00 36 00 46 00 2D 00 37 00 39 00 46 00
            31 00 2D 00 34 00 37 00 33 00 45 00 2D 00 41 00 46 00 34 00 34 00
            2D 00 39 00 37 00 36 00 33 00 45 00 33 00 43 00 42 00 33 00 34 00
            45 00 35 00 7D 00 }

          \\  "Local\{5FBC3F53-A76D-4248-969A-31740CBC8AD6}"  ascii wide
    $a2 = { 4C 00 6F 00 63 00 61 00 6C 00 5C 00 7B 00 35 00 46 00 42 00 43 00
            33 00 46 00 35 00 33 00 2D 00 41 00 37 00 36 00 44 00 2D 00 34 00
            32 00 34 00 38 00 2D 00 39 00 36 00 39 00 41 00 2D 00 33 00 31 00
            37 00 34 00 30 00 43 00 42 00 43 00 38 00 41 00 44 00 36 00 7D 00 }

          \\  "{FD5F8447-657A-45C1-894B-D533926C9B66}.dll"  ascii
    $a3 = { 7B 46 44 35 46 38 34 34 37 2D 36 35 37 41 2D 34 35 43 31 2D 38 39
            34 42 2D 44 35 33 33 39 32 36 43 39 42 36 36 7D 2E 64 6C 6C }

          \\  PHOREAL start_address_bytes sequence
          \\  mov edi, edi; push ebp; mov ebp, esp; call 0x000043f0;
          \\  call 0x000043ea; push eax; call 0x000043d0; test eax, eax;
          \\  jnz 0x00000038; push dword ptr [ebp+0x08]
    $str_addr = { 8B FF 55 8B EC 56 E8 3F 3E 00 00 E8 34 3E 00 00 50 E8 14 3E
            00 00 85 C0 75 2A 8B 75 08 56 E8 21 }
condition:
    2 of them

Esta regla, cuando se despliega en el Elastic Agent, identificará PHOREAL para los clientes y la prevención de respaldo que ya se proporciona a través de la protección de memoria shellcode_thread (en entornos de clientes con la protección de memoria activada). En nuestro caso, la implementación de esta regla también permitió la recopilación del hilo malicioso empleando el mismo mecanismo detallado en nuestro artículo Recolección de balizas de ataque de cobalto .

Poco después de que se implementara el nuevo artefacto YARA, teníamos una nueva alerta de malware_signature en mano con el subproceso malicioso capturado de la memoria. La clasificación binaria manual de nuestro equipo de análisis de malware e ingeniería inversa (MARE) confirmó rápidamente que la muestra era PHOREAL/RIZZO al comparar la estructura y las funciones entre nuestra muestra y los reportes anteriores. Además, pudieron extraer un dominio cifrado RC4 de un recurso RCDATA , como se describe en un documento técnico de CYLANCE OceanLotus de 2018.

El dominio identificado por MARE (thelivemusicgroup[.]com) actualmente se resuelve en 103.75.117[.]250 que es propiedad de Oneprovider[.]COM una compañía de alojamiento de servidores dedicados con sede en Canadá con centros de datos distribuidos por todo el mundo.

https://ipinfo.io/ Resultados de la consulta para 103.75.117[.]250

{
  "ip": "103.75.117[.]250",
  "city": "Hong Kong",
  "region": "Central and Western",
  "country": "HK",
  "loc": "22.2783,114.1747",
  "org": "AS133752 Leaseweb Asia Pacific pte. ltd.",
  "timezone": "Asia/Hong_Kong",
  "asn": {
    "asn": "AS133752",
    "name": "Leaseweb Asia Pacific pte. ltd.",
    "domain": "leaseweb.com",
    "route": "103.75.117[.]0/24",
    "type": "hosting"
  },
  "company": {
    "name": "Oneprovider.com - Hong Kong Infrastructure",
    "domain": "oneprovider[.]com",
    "type": "hosting"
  },
  "privacy": {
    "vpn": false,
    "proxy": false,
    "tor": false,
    "relay": false,
    "hosting": true,
    "service": ""
  },
  "abuse": {
    "address": "1500 Ste-Rose LAVAL H7R 1S4 Laval Quebec, Canada",
    "country": "CA",
    "email": "info@oneprovider.com",
    "name": "ONE PROVIDER",
    "network": "103.75.117[.]0/24",
    "phone": "+1 514 286-0253"
  },
  "domains": {
    "ip": "103.75.117[.]250",
    "total": 2,
    "domains": [
      "thelivemusicgroup[.]com",
      "cdn-api-cn-1[.]com"
    ]
  }

La mayor parte de la información interesante sobre el dominio está protegida por la privacidad, pero las fechas de "Actualizado" y "Creado" en la siguiente figura pueden ser útiles para delimitar cuánto tiempo se empleó este dominio de manera maliciosa.

El Elastic Agent parece haber desplegado luego de un compromiso, lo que limitó nuestra capacidad para determinar el vector de acceso inicial. Un reporte de Mandiant de 2017 indica que PHOREAL puede desplegar en una capacidad de "establecer un punto de apoyo" para permitir el triaje de las víctimas y las herramientas de seguimiento posteriores a la explotación.

Análisis

Elastic Security emplea el modelo Diamond para describir las relaciones de alto nivel entre los adversarios y las víctimas de intrusiones.

Justificación de la evaluación del adversario

Evaluamos con un alto nivel de confianza basándonos en la actividad observada y los reportes previos de que REF4322 es APT32/OceanLotus y el actor detrás de este incidente. APT32 estuvo activo desde 2014 especialmente dirigido a gobiernos y compañías del sudeste asiático u otras compañías internacionales con intereses en Vietnam. APT32 es el único grupo identificado actualmente como operador de la puerta trasera PHOREAL, y nuestra víctima coincide con el perfil vertical geográfico y de la industria de las víctimas típicas y específicas de APT32 anteriores.

Conclusión

Reglas de YARA

Creamos una regla YARA para identificar esta actividad PHOREAL.

Regla de Yara para detectar puerta trasera en memoria REF4322/APT32 PHOREAL/Rizzo

rule Windows_Trojan_PHOREAL {
    meta:
        Author = "Elastic Security"
        creation_date = "2022-02-16"
        last_modified = "2022-02-16"
        os = "Windows"
        arch = "x86"
        category_type = "Trojan"
        family = "PHOREAL"
        threat_name = "Windows.Trojan.PHOREAL"
        description = "Detects REF4322/APT32 in-memory backdoor PHOREAL/Rizzo."
        reference_sample = "88f073552b30462a00d1d612b1638b0508e4ef02c15cf46203998091f0aef4de"


    strings:
              \\  "\\.\pipe\{A06F176F-79F1-473E-AF44-9763E3CB34E5}"  ascii wide
        $a1 = { 5C 00 5C 00 2E 00 5C 00 70 00 69 00 70 00 65 00 5C 00 7B 00 41 00
                30 00 36 00 46 00 31 00 37 00 36 00 46 00 2D 00 37 00 39 00 46 00
                31 00 2D 00 34 00 37 00 33 00 45 00 2D 00 41 00 46 00 34 00 34 00
                2D 00 39 00 37 00 36 00 33 00 45 00 33 00 43 00 42 00 33 00 34 00
                45 00 35 00 7D 00 }

              \\  "Local\{5FBC3F53-A76D-4248-969A-31740CBC8AD6}"  ascii wide
        $a2 = { 4C 00 6F 00 63 00 61 00 6C 00 5C 00 7B 00 35 00 46 00 42 00 43 00
                33 00 46 00 35 00 33 00 2D 00 41 00 37 00 36 00 44 00 2D 00 34 00
                32 00 34 00 38 00 2D 00 39 00 36 00 39 00 41 00 2D 00 33 00 31 00
                37 00 34 00 30 00 43 00 42 00 43 00 38 00 41 00 44 00 36 00 7D 00 }

              \\  "{FD5F8447-657A-45C1-894B-D533926C9B66}.dll"  ascii
        $a3 = { 7B 46 44 35 46 38 34 34 37 2D 36 35 37 41 2D 34 35 43 31 2D 38 39
                34 42 2D 44 35 33 33 39 32 36 43 39 42 36 36 7D 2E 64 6C 6C }

              \\  PHOREAL start_address_bytes sequence
        $str_addr = { 8B FF 55 8B EC 56 E8 3F 3E 00 00 E8 34 3E 00 00 50 E8 14 3E
                00 00 85 C0 75 2A 8B 75 08 56 E8 21 }
    condition:
        2 of them
}

Recomendaciones defensivas

Los siguientes pasos se pueden aprovechar para mejorar la postura de protección de una red:

  1. Habilitación de Elastic Security Memory Protection en endpoints de Windows
  2. Aproveche las firmas YARA incluidas anteriormente para determinar si existe actividad PHOREAL dentro de su organización
  3. Monitorear o bloquee el tráfico de red hacia o desde los IOC de red identificados y corrija los sistemas afectados en consecuencia.

Referencias

A lo largo del documento se hace referencia a las siguientes investigaciones:

Observables

IndicadorTipoReferenciaNotas
thelivemusicgroup[.]comnombre-de-dominioDominio C2 cifrado en malware
103.75.117[.]250IPv4-ADDRIP resuelta de thelivemusicgroup[.]COM
ec5d5e18804e5d8118c459f5b6f3ca96047d629a50d1a0571dee0ac8d5a4ce33SHA256tscon32.dllPHOREAL dll

Artefactos

Los artefactos también están disponibles para descargar en formato ECS y STIX en un paquete zip combinado.