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
O mais completo curso de Pentest e Hacking existente no Brasil, ministrado por instrutores de referência no mercado. Oferece embasamento sólido em computação, redes, Linux e programação. Passe por todas as fases de um Pentest utilizando ambientes realísticos. Se prepare para o mercado através da certificação SYCP. Saiba mais...