Em 29 de agosto de 2025, analistas da Huntress identificaram uma variante inédita de ransomware batizada de “Obscura”.
O nome foi extraído da nota de resgate do malware (README_Obscura.txt), que fazia diversas referências a essa designação em seu conteúdo.
Durante as investigações, não houve qualquer menção pública prévia a um ransomware chamado Obscura.
O executável do ransomware foi observado em execução simultânea em vários hosts dentro da rede da organização vítima.
Contudo, a implantação limitada do agente Huntress comprometeu tanto a detecção quanto a resposta, dificultando a atuação eficaz da equipe de SOC (Security Operations Center).
Essa limitação também restringiu a visibilidade sobre alguns aspectos do ataque, como o vetor inicial de infecção.
Uma descoberta importante foi o arquivo executável presente no domain controller, dentro do caminho:
C:\WINDOWS\sysvol\sysvol\[domínio].local\scripts\
No incidente analisado, o nome do executável correspondia ao domínio em que ele foi encontrado, em um claro esforço para se camuflar — por isso, o nome exato não será divulgado publicamente.
Trata-se de um binário escrito em Go (com Go build ID), contendo diversos caminhos de arquivo codificados, como:
/run/media/veracrypt1/Backups/Obscura/Locker/windows/locker/
/run/media/veracrypt1/Locker Deps/go1.15.linux-amd64/go/src/os/exec
A localização do binário dentro da pasta NETLOGON do domain controller, responsável por disponibilizar scripts e group policy objects (GPOs) aos usuários e replicada automaticamente para todos os domain controllers, fez com que o ransomware fosse distribuído por toda a infraestrutura de forma automática.
Além disso, uma tarefa agendada chamada SystemUpdate foi criada em vários hosts da rede, inclusive no domain controller, com o objetivo de executar o ransomware a partir do compartilhamento NETLOGON.
Em uma das máquinas dos usuários, o invasor criou ainda uma tarefa agendada nomeada "iJHcEkAG".
Ela executa o comando cmd.exe /C netsh firewall set service type=remotedesktop mode=enable > \Windows\Temp\SJYfXB 2>&1 para liberar o acesso via Remote Desktop Protocol (RDP) pelo firewall do Windows.
Quando o ransomware é executado, há uma tentativa de desabilitar os pontos de restauração do sistema com o comando embutido:
cmd.exe /c vssadmin delete shadows /all /quiet
A nota de resgate está incorporada no binário como uma string codificada em base64.
Conteúdo da nota de resgate:
Ao iniciar, o binário verifica uma variável de ambiente chamada DAEMON.
Se o valor for 1, ele gera a nota de resgate e prossegue com a criptografia.
Se não existir ou for 0, executa uma sequência de funções para preparar a máquina para a ação.
A função main_run() é ativada em modo daemon (DAEMON=1).
Ela decodifica a chave pública de 32 bytes do atacante, que está embutida no código em base64, e realiza um mapeamento completo dos dispositivos de armazenamento e suas capacidades, com o objetivo de criar um inventário detalhado para a criptografia dos arquivos.
O ransomware decodifica a nota de resgate da string base64 e grava no arquivo C:\README-OBSCURA.txt.
Se essa decodificação falhar, exibe a mensagem “failed to decode note: %s” e encerra a execução.
Outra função importante, main_windows_api_IsRunAsAdmin(), verifica se o processo tem privilégios administrativos por meio de duas chamadas à Windows API.
A primeira, AllocateAndInitializeSid(), cria um SID para o grupo local de Administradores, e a segunda, CheckTokenMembership(), confere se o token do processo pertence a esse grupo.
Se a checagem indicar falta de privilégios administrativos, o ransomware imprime “[!!!] user not admin .exit [!!!]” e termina imediatamente, demonstrando que essa permissão é indispensável para executar ações críticas — como encerrar processos do sistema, excluir cópias de sombra e interagir com APIs de domínio e processos daemon.
Confirmados os privilégios, o malware coleta informações do sistema via GetSystemInfo(), incluindo o número de núcleos de CPU, para otimizar o uso de threads durante a criptografia.
Na fase de preparo, o ransomware inicia uma finalização agressiva de processos que possam interferir na sua ação — principalmente softwares de segurança e bancos de dados.
Por meio da função main_windows_api_KillProcesses(), ele varre uma lista com 120 nomes de processos-alvo (com wildcards * quando necessário) e os encerra utilizando OpenProcess() seguido de TerminateProcess(), reportando sucesso ou falha durante a operação.
Para identificar o papel da máquina na rede, o ransomware usa a função main_windows_api_GetPCRole(), que invoca DsRoleGetPrimaryDomainInformation e traduz os papéis conhecidos do Windows em valores internos.
Independente do papel detectado, são exibidas mensagens específicas:
- Standalone PC: “[+] detect standalone pc.” — sistema isolado, fora de domínio
- PC em Domínio: “[+] detect pc in domain. run transfer to dc.” — sugestão de transferência para domain controllers
- Backup Domain Controller (BDC): “[+] detect BDC. run transfer to PDC.” — tentativa de propagação para o primary domain controller
- Primary Domain Controller (PDC): “[+] detect PDC. run transfer to all pc in domain.” — espalhamento para todos os computadores do domínio
Apesar dessas mensagens, não foram identificadas funcionalidades de movimentação lateral na rede, indicando que esta capacidade estava incompleta ou não implementada.
Quanto à criptografia, o malware adota duas estratégias: EncryptFull e EncryptPart.
A decisão depende do tamanho do arquivo — arquivos de até 1 GB são criptografados por completo, enquanto arquivos maiores têm apenas os primeiros 25% cifrados.
Durante esse processo, o ransomware utiliza criptografia Curve25519 para gerar uma chave efêmera, combinada com a chave pública do atacante, por meio do algoritmo X25519, produzindo um segredo compartilhado de 32 bytes que alimenta a cifra XChaCha20.
Cada arquivo criptografado recebe um rodapé de 64 bytes com as seguintes informações reforçando a possibilidade de decifração pelo invasor:
- A assinatura “OBSCURA!”
- A chave pública de 32 bytes
- Um nonce aleatório de 24 bytes
O mecanismos de filtragem de arquivos, implementado pela função main_hasExcludedExtension(), visa impedir a criptografia de extensões essenciais ao funcionamento do sistema e ao próprio ransomware.
São 15 extensões protegidas, incluindo:
Arquivos executáveis e bibliotecas: .exe, .dll, .msi, .sys
Componentes de boot e firmware: .efi, .boot, .iso, .rom, .bin
Configuração e utilitários do sistema: .ini, .cfg, .lnk, .hosts, .swapfile
Proteção do próprio ransomware: .obscura (extensão das vítimas criptografadas)
O Obscura é uma das várias variantes recentes de ransomware detectadas pela Huntress, como Crux e Cephalus.
Essa frequência maior no surgimento de novas variantes pode estar relacionada às constantes mudanças de nome e novas versões lançadas pelos atacantes, principalmente após ações de autoridades desarticularem operações criminosas.
Além disso, o crescimento da base de clientes da Huntress amplia a visibilidade sobre novos malwares e técnicas.
Independentemente disso, o caso aqui apresentado ilustra apenas uma das formas possíveis de implantação de ransomware em ambientes corporativos.
Por isso, é fundamental que equipes de segurança monitorem atentamente seus domain controllers, observando a adição e alteração de arquivos, bem como modificações em GPOs.
Administradores também devem ficar atentos a acessos incomuns ou suspeitos em domain controllers, servidores e estações de trabalho.
Publicidade
Conheça a Solyd One, e tenha acesso a todos os cursos de segurança ofensiva da Solyd, todas as certificações práticas, incluindo a SYCP, 2 CTFs anuais com prêmios de até 30 mil reais, dezenas de laboratórios realísticos, suporte, comunidade e muito mais. Saiba mais...