Obscura: nova variante de ransomware
25 de Setembro de 2025

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

Traçamos um caminho para você ir do zero ao avançado em hacking

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...