Malware de roubo de informações em Python usa Unicode para evitar detecção
24 de Março de 2023

Um pacote malicioso em Python no PyPI usa Unicode como técnica de ofuscação para evitar detecção enquanto rouba e exfiltra credenciais de conta de desenvolvedores e outros dados sensíveis de dispositivos comprometidos.

O pacote malicioso, chamado "onyxproxy", usa uma combinação de diferentes fontes Unicode no código-fonte para ajudar a evitar varreduras automatizadas e defesas que identificam funções potencialmente maliciosas com base na correspondência de strings.

A descoberta do onyxproxy vem de especialistas em segurança cibernética da Phylum, que publicaram um relatório explicando a técnica.

O pacote não está mais disponível no PyPI, tendo sido removido da plataforma ontem.

No entanto, desde sua publicação na plataforma em 15 de março, o pacote malicioso acumulou 183 downloads.

Unicode é um padrão abrangente de codificação de caracteres que abrange uma ampla gama de scripts e idiomas, unificando vários conjuntos/esquemas sob um padrão comum que cobre mais de 100.000 caracteres.

Foi criado para ajudar a manter a interoperabilidade e a representação consistente de texto em diferentes idiomas e plataformas e eliminar conflitos de codificação e problemas de corrupção de dados.

O pacote "onyxproxy" contém um pacote "setup.py" com milhares de strings de código suspeitas que usam uma mistura de caracteres Unicode.

Embora o texto nessas strings, além das diferentes fontes, pareça quase normal em inspeções visuais, isso faz uma grande diferença para os interpretadores Python que analisarão e reconhecerão esses caracteres como fundamentalmente diferentes.

Por exemplo, a Phylum explica que o Unicode tem cinco variantes para a letra "n" e 19 para a letra "s" para uso em diferentes idiomas, matemática, etc.

Por exemplo, o identificador "self" tem 122.740 (19x19x20x17) maneiras de ser representado em Unicode.

O suporte do Python para o uso de caracteres Unicode para identificadores, ou seja, variáveis de código, funções, classes, módulos e outros objetos, permite que os codificadores criem identificadores que parecem idênticos, mas apontam para funções diferentes.

No caso do onyxproxy, os autores usaram os identificadores "__import__", "subprocess" e "CryptUnprotectData", que são maiores e têm um grande número de variantes, facilmente superando defesas baseadas em correspondência de strings.

O suporte do Python ao Unicode pode ser facilmente abusado para ocultar correspondências de strings maliciosas, fazendo com que o código pareça inofensivo enquanto executa comportamentos maliciosos.

Neste caso, o roubo de dados sensíveis e tokens de autenticação de desenvolvedores.

Embora esse método de ofuscação não seja particularmente sofisticado, é preocupante vê-lo empregado em campo e pode ser um sinal de abuso mais amplo do Unicode para ofuscação em Python.

"Mas, quem quer que tenha copiado esse código ofuscado é inteligente o suficiente para saber como usar os internos do interpretador Python para gerar um tipo novo de código ofuscado, um tipo que é um tanto legível sem revelar muito exatamente o que o código está tentando roubar", conclui a Phylum.

Os riscos do Unicode no Python foram extensamente discutidos na comunidade de desenvolvimento do Python no passado.

Outros pesquisadores e desenvolvedores também já alertaram que o suporte ao Unicode no Python tornará a linguagem de programação vulnerável a uma nova classe de explorações de segurança, tornando os patches e o código submetido mais difíceis de inspecionar.

Em novembro de 2021, pesquisadores acadêmicos apresentaram um ataque teórico chamado "Trojan Source" que usava caracteres de controle Unicode para injetar vulnerabilidades no código-fonte, tornando mais difícil para os revisores humanos detectar essas injeções maliciosas.

Em conclusão, esses ataques agora foram confirmados, e os defensores devem implementar mecanismos de detecção mais robustos contra essas ameaças emergentes.

Publicidade

Curso gratuito de Python

O curso Python Básico da Solyd oferece uma rápida aproximação à linguagem Python com diversos projetos práticos. Indo do zero absoluto até a construção de suas primeiras ferramentas. Tenha também suporte e certificado gratuitos. Saiba mais...