SOC Prime Bias: Crítico

22 May 2026 06:29 UTC

NG0002 Apunta a la Academia China con Señuelos Institucionales Armados

Author Photo
SOC Prime Team linkedin icon Seguir
NG0002 Apunta a la Academia China con Señuelos Institucionales Armados
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Un actor de amenazas rastreado como UNG0002 lanzó una campaña de spear-phishing contra universidades chinas utilizando un archivo ZIP malicioso disfrazado como un aviso oficial de prueba de condición física. Dentro del archivo se encontraba un archivo LNK de doble extensión que ejecutaba un VBScript, el cual luego usaba Bandizip para cargar lateralmente una DLL maliciosa. Esa DLL realizaba verificaciones anti-análisis, descifraba una carga útil SFX en memoria y finalmente desplegaba un beacon de Cobalt Strike para actividades de comando y control. La operación combinó técnicas de ‘living-off-the-land’ con infraestructura alojada en Alibaba Cloud para apoyar la intrusión.

Investigación

Seqrite Labs examinó el correo electrónico de phishing, el adjunto y la cadena completa de carga útil, revelando que explorer.exe fue utilizado para lanzar el script VBS y Bandizip.exe fue abusado para alojar la DLL maliciosa. Los analistas documentaron extensas verificaciones anti-depuración diseñadas para evadir entornos de análisis y mapearon el flujo completo de ejecución desde el señuelo inicial hasta el despliegue final del beacon. También identificaron la infraestructura vinculada a la campaña, incluyendo la dirección IP 60.205.186.162 y el dominio lysander.asia, y vincularon la actividad a operaciones anteriores de UNG0002. Un enriquecimiento adicional mostró que el servidor de comando y control estaba alojado en Alibaba Cloud y utilizaba registros MX relacionados con Feishu, lo que respalda aún más la atribución a un actor de amenazas con sede en China.

Mitigación

No especificado

Respuesta

No especificado

"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#e6e6e6 classDef process fill:#ffdd99 classDef malware fill:#ff9999 classDef network fill:#c2c2f0 %% Nodes u2013 Actions (Techniques) action_initial_access["<b>Acción</b> – <b>T1566.001 Adjunto de Spearphishing</b><br/>Email con ZIP malicioso es enviado al objetivo"] class action_initial_access action action_user_execution["<b>Acción</b> – <b>T1204.002 Ejecución del Usuario</b><br/>El usuario abre el archivo LNK pensando que es un PDF"] class action_user_execution action action_masquerading["<b>Acción</b> – <b>T1036 Suplantación</b><br/>El LNK tiene dobleu2011extensión y se muestra como un PDF"] class action_masquerading action action_permission_hijack["<b>Acción</b> – <b>T1574.005 Debilidad de Permisos de Archivos de Instalador Ejecutable</b><br/>Se utiliza Explorer.exe para lanzar un script VBS oculto"] class action_permission_hijack action action_vbscript["<b>Acción</b> – <b>T1059.005 Visual Basic</b><br/>El VBS abre el PDF señuelo y ejecuta Bandizip"] class action_vbscript action action_lol["<b>Acción</b> – <b>T1218 Vivir de la Tierra</b><br/>Se abusa de Bandizip, un archivador legítimo"] class action_lol action action_hidden_files["<b>Acción</b> – <b>T1564.001 Archivos y Directorios Ocultos</b><br/>Carga útil colocada en carpetas tipo macOSu2011"] class action_hidden_files action action_dll_side_loading["<b>Acción</b> – <b>T1574.008 Intercepción de Ruta por Secuestro de Orden de Búsqueda</b> / <b>T1574.002 Carga Lateral de DLL</b><br/>Bandizip carga la dll maliciosa ark.x64.dll"] class action_dll_side_loading action action_obfuscation["<b>Acción</b> – <b>T1027 Archivos o Información Ofuscados</b><br/>La DLL contiene cadenas cifradas y carga útil SFX cifrada"] class action_obfuscation action action_anti_analysis["<b>Acción</b> – <b>T1497 Evitación de Virtualización/Sandbox</b> / <b>T1497.001 Verificaciones del Sistema</b> / <b>T1497.002 Verificaciones de Actividad del Usuario</b> / <b>T1622 Evasión del Depurador</b><br/>La DLL verifica depuradores, herramientas de análisis y artefactos sandbox"] class action_anti_analysis action action_process_discovery["<b>Acción</b> – <b>T1057 Descubrimiento de Procesos</b><br/>Enumera procesos en ejecución para localizar utilidades de análisis"] class action_process_discovery action action_reflective_loading["<b>Acción</b> – <b>T1620 Carga de Código Reflectante</b><br/>La carga útil SFX descifrada se carga directamente en memoria"] class action_reflective_loading action action_c2["<b>Acción</b> – <b>T1071.001 Protocolo de Capa de Aplicación: Protocolos Web</b><br/>La carga útil en memoria establece un beacon de HTTPS Cobaltu202fStrike"] class action_c2 action %% Nodes u2013 Files / Artifacts file_zip["<b>Archivo</b> – malicious.zip<br/>Contiene el LNK malicioso"] class file_zip file file_lnk["<b>Archivo</b> – u5e38u5ddeu5927u5b662026u5e74u300au56fdu5bb6u5b66u751fu4f53u8d28u5065u5eb7u6807u51c6u300bu6d4bu8bd5u901au77e5.pdf.lnk"] class file_lnk file file_vbs["<b>Archivo</b> – chromedo.vbs<br/>Script Visual Basic ejecutado por explorer"] class file_vbs file tool_bandizip["<b>Herramienta</b> – Bandizip.exe<br/>Archivador legítimo abusado para cargar DLL maliciosa"] class tool_bandizip tool file_dll["<b>Archivo</b> – ark.x64.dll<br/>DLL maliciosa cargada vía carga lateral"] class file_dll file malware_cobalt_strike["<b>Malware</b> – Cobaltu202fStrike beacon<br/>Provee acceso remoto"] class malware_cobalt_strike malware %% Nodes u2013 Processes process_explorer["<b>Proceso</b> – explorer.exe"] class process_explorer process process_chromedo["<b>Proceso</b> – chromedo (host VBS)"] class process_chromedo process %% Nodes u2013 Network network_c2["<b>Red</b> – Servidor C2 60.205.186.162 (lysander.asia) sobre HTTPS"] class network_c2 network %% Connections u2013 Attack Flow file_zip –>|contiene| file_lnk file_lnk –>|invoca| process_explorer process_explorer –>|lanza| file_vbs file_vbs –>|ejecuta| tool_bandizip tool_bandizip –>|carga| file_dll file_dll –>|habilita| action_obfuscation file_dll –>|realiza| action_anti_analysis file_dll –>|accionada por| action_process_discovery file_dll –>|soporta| action_reflective_loading action_reflective_loading –>|carga| malware_cobalt_strike malware_cobalt_strike –>|se comunica con| network_c2 %% Linking actions to show sequence action_initial_access –>|conduce a| action_user_execution action_user_execution –>|combinada con| action_masquerading action_masquerading –>|habilita| action_permission_hijack action_permission_hijack –>|accionada por| action_vbscript action_vbscript –>|utiliza| action_lol action_lol –>|crea| action_hidden_files action_hidden_files –>|facilita| action_dll_side_loading action_dll_side_loading –>|incluye| action_obfuscation action_obfuscation –>|cubre| action_anti_analysis action_anti_analysis –>|alimenta| action_process_discovery action_process_discovery –>|precede| action_reflective_loading action_reflective_loading –>|habilita| action_c2 action_c2 –>|establece beacon con| malware_cobalt_strike %% Class assignments class action_initial_access action class action_user_execution action class action_masquerading action class action_permission_hijack action class action_vbscript action class action_lol action class action_hidden_files action class action_dll_side_loading action class action_obfuscation action class action_anti_analysis action class action_process_discovery action class action_reflective_loading action class action_c2 action class file_zip file class file_lnk file class file_vbs file class file_dll file class tool_bandizip tool class process_explorer process class process_chromedo process class malware_cobalt_strike malware class network_c2 network "

Flujo de Ataque

Ejecución de Simulación

Prerequisito: La Verificación de Telemetría y Línea Base debe haber pasado.

Justificación: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente las TTPs identificadas y apuntar a generar la telemetría exacta esperada por la lógica de detección.

  • Narrativa de Ataque y Comandos:
    Un atacante entrega una DLL maliciosa (llamada evil.dll) que es cargada por un proceso host de apariencia benigna (rundll32.exe). El DllMain de la DLL llama inmediatamente a CreateToolhelp32Snapshot seguido de Process32First para enumerar todos los procesos en ejecución. El bucle de enumeración verifica cada nombre de proceso en busca de la presencia de un depurador ("dbg" subcadena) y sale si se encuentra, una técnica clásica de evasión de depuradores (T1622). Dado que la DLL es cargada por rundll32.exe, el evento de creación de proceso registrado por Sysmon contiene los campos ApiSetName para las dos APIs nativas, satisfaciendo la regla de detección.

  • Script de Prueba de Regresión:

    # -------------------------------------------------
    # Paso 1: Crear código fuente C para la DLL maliciosa
    # -------------------------------------------------
    $dllSource = @"
    #include <windows.h>
    #include <tlhelp32.h>
    
    BOOL APIENTRY DllMain(HMODULE hModule,
                          DWORD  ul_reason_for_call,
                          LPVOID lpReserved) {
        if (ul_reason_for_call == DLL_PROCESS_ATTACH) {
            HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
            if (hSnap == INVALID_HANDLE_VALUE) return FALSE;
    
            PROCESSENTRY32 pe = {0};
            pe.dwSize = sizeof(PROCESSENTRY32);
            if (Process32First(hSnap, &pe)) {
                do {
                    // Verificación anti-depuración simple – buscar "dbg" en nombre del proceso
                    if (wcsstr(pe.szExeFile, L"dbg")) {
                        // Depurador detectado; salir del bucle
                        break;
                    }
                } while (Process32Next(hSnap, &pe));
            }
            CloseHandle(hSnap);
        }
        return TRUE;
    }
    "@
    
    $srcPath = "$env:Tempevil.c"
    $dllPath = "$env:Tempevil.dll"
    $srcPath | Out-File -Encoding ascii -FilePath $srcPath -Force
    Set-Content -Path $srcPath -Value $dllSource
    
    # -------------------------------------------------
    # Paso 2: Compilar la DLL con Visual C++ (cl.exe)
    # -------------------------------------------------
    # Asegúrese de que las Herramientas de Construcción de Visual Studio estén instaladas y el entorno esté configurado.
    # Ejemplo usando el símbolo del sistema para desarrolladores:
    #   cl.exe /LD /O2 /MD evil.c /link /OUT:evil.dll
    # Para la automatización dentro de PowerShell, invocar las herramientas de construcción MSVC:
    $vcvars = "${env:ProgramFiles(x86)}Microsoft Visual Studio2019BuildToolsVCAuxiliaryBuildvcvars64.bat"
    & cmd /c "`"$vcvars`" && cl.exe /LD /O2 /MD `"$srcPath`" /link /OUT:`"$dllPath`"" `
        | Out-Null
    
    if (-Not (Test-Path $dllPath)) {
        Write-Error "Falló la compilación de la DLL."
        exit 1
    }
    
    # -------------------------------------------------
    # Paso 3: Ejecutar la DLL maliciosa vía rundll32.exe
    # -------------------------------------------------
    $rundll = "$env:SystemRootSystem32rundll32.exe"
    & $rundll $dllPath,EntryPoint
    
    # -------------------------------------------------
    # Paso 4: Pausar para permitir que Sysmon registre el evento
    # -------------------------------------------------
    Start-Sleep -Seconds 5

    El script compila una DLL mínima que realiza las llamadas a las APIs objetivo y luego la carga con rundll32.exe. El breve retraso asegura que Sysmon tenga tiempo para registrar el evento de creación del proceso.

  • Comandos de Limpieza:

    # Eliminar artefactos compilados
    Remove-Item -Force -ErrorAction SilentlyContinue $env:Tempevil.c
    Remove-Item -Force -ErrorAction SilentlyContinue $env:Tempevil.dll
    
    # Opcional: Reiniciar Sysmon para limpiar cualquier manejador atascado (no requerido en la mayoría de los casos)
    Stop-Service -Name Sysmon -Force
    Start-Service -Name Sysmon