Pesquisadores de segurança desenvolveram um rootkit sofisticado para Linux chamado Singularity que contorna os mecanismos de detecção e resposta em endpoints da Elastic Security. A ferramenta demonstra vulnerabilidades em sistemas de detecção estática e comportamental por meio de técnicas avançadas de ofuscação. Revelado no GitHub pelo pesquisador 0xMatheuZ, ele destaca os desafios contínuos na identificação de ameaças em nível de kernel.
Pesquisadores de segurança, liderados pelo pseudônimo 0xMatheuZ, lançaram o Singularity, um rootkit de kernel Linux no GitHub, projetado para evadir a detecção pela solução EDR da Elastic Security, conhecida como Elastic Defend. Tipicamente, a Elastic Security aciona mais de 26 alertas para implementações padrão de rootkits, incluindo quarentenas de arquivos e terminações de processos, mas o Singularity os contorna por meio de quatro estratégias principais de evasão.
A primeira técnica envolve ofuscação de strings em tempo de compilação, onde strings sensíveis como “GPL” e “kallsyms_lookup_name” são fragmentadas em constantes separadas, como MODULE_LICENSE(“G” “P” “L”), que o compilador C concatena. Isso impede que varredores de assinaturas YARA identifiquem strings maliciosas contíguas no binário enquanto preserva a funcionalidade.
Segundo, a randomização de nomes de símbolos substitui padrões previsíveis, como “hook_getdents,” “fake_tcp4_seq_show” e “hide_module,” por nomes genéricos semelhantes ao kernel prefixados por “sys,” “kern” ou “dev.” Uma lista branca protege APIs essenciais do kernel, e padrões regex garantem renomeação consistente sem erros.
Terceiro, a fragmentação de módulos divide o arquivo .ko compilado em segmentos de 64KB codificados com XOR usando uma chave aleatória de 16 bytes. Esses são reensamblados na memória via um carregador personalizado e memfd_create, evitando artefatos em disco para análise estática. O carregamento ocorre por meio de syscalls diretos com assembly inline, contornando wrappers de libc monitorados, suportando sistemas de 64 bits e 32 bits via int $0x80.
Quarto, funções auxiliares de ftrace como “fh_install_hook” e “fh_remove_hook” são renomeadas para identificadores aleatórios, evadindo regras que sinalizam múltiplas ocorrências desse tipo.
O Singularity também inclui funcionalidades para ocultar processos do sistema de arquivos /proc, ofuscar arquivos e diretórios que correspondem a “singularity” ou “matheuz,” mascarar conexões TCP na porta 8081 e habilitar escalada de privilégios via sinais personalizados ou variáveis de ambiente. Ele apresenta uma backdoor baseada em ICMP para shells reversos acionados por sequências específicas de pacotes, com medidas anti-análise que obstruem o rastreamento e sanitizam logs.
Para evasão comportamental, ele implanta um script bash em etapas para /singularity, executado com linhas de comando limpas para evitar detecção de shells reversos. O script usa kill -59 para ocultação de PID e escalada, compilando carregadores em /tmp em vez de diretórios monitorados. Em testes, o Singularity carregou sem alertas, ocultou processos e estabeleceu shells root.
Esta pesquisa expõe fraquezas na detecção baseada em assinaturas e comportamental para ameaças de kernel, enfatizando a necessidade de atualizações contínuas, monitoramento de integridade do kernel, forense de memória e estratégias de defesa em profundidade que combinam múltiplas abordagens.