banner
Centro de notícias
entrega instantânea

Os invasores usam o bytecode compilado pelo Python para evitar a detecção

May 26, 2023

Por Lucian Constantin

CSO Escritor Sênior, CSO |

Os invasores que visam repositórios de pacotes de código aberto como o PyPI (Python Package Index) criaram uma nova técnica para ocultar seu código malicioso de verificadores de segurança, revisões manuais e outras formas de análise de segurança. Em um incidente, os pesquisadores encontraram um código de malware oculto dentro de um arquivo Python bytecode (PYC) que pode ser executado diretamente em oposição aos arquivos de código-fonte que são interpretados pelo tempo de execução do Python.

“Pode ser o primeiro ataque à cadeia de suprimentos a tirar proveito do fato de que os arquivos de bytecode do Python podem ser executados diretamente e ocorre em meio a um aumento nas submissões maliciosas ao Python Package Index”, disseram pesquisadores da empresa de segurança ReversingLabs em um relatório. “Se assim for, isso representa mais um risco para a cadeia de suprimentos daqui para frente, uma vez que esse tipo de ataque provavelmente passará despercebido pela maioria das ferramentas de segurança, que verificam apenas arquivos de código-fonte (PY) Python”.

A grande maioria dos pacotes encontrados em repositórios públicos como npm para JavaScript, PyPI para Python e RubyGems para Ruby consistem em arquivos de código-fonte aberto empacotados em arquivos. Eles são fáceis de descompactar e ler e, como resultado, os scanners de segurança para esses repositórios foram criados para lidar com esse tipo de empacotamento.

Os invasores estão em uma batalha constante com as empresas de segurança para evitar a detecção, e a técnica de evasão mais comum quando se trata de código de texto sem formatação é ofuscação. Isso consiste em usar recursos da própria linguagem de programação, como codificação, decodificação ou avaliação, para tornar o código ilegível, mas funcional. Por exemplo, a codificação de código malicioso em base64 é uma técnica comumente usada, mas as ferramentas de segurança podem lidar com essa codificação.

No ecossistema PyPI, os cibercriminosos por trás do malware W4SP Stealer são conhecidos por empregar técnicas como codificação base64, compactação LZMA e minificação – a remoção de espaços e comentários do código para torná-lo mais compacto, mas também mais difícil de ler. O grupo usa algumas ferramentas de código aberto de terceiros para conseguir isso, como pyminifier, Kramer ou Hyperion. Em uma variação dos ataques W4SP, o código malicioso ofuscado nos arquivos foi deslocado além das bordas da tela padrão, para que alguém revisando manualmente o arquivo de código-fonte não o visse.

No entanto, os arquivos PYC são diferentes. Eles não são legíveis por humanos como os scripts PY de texto simples. Os arquivos PYC são gerados quando o interpretador Python importa ou executa um script Python. Como eles já são códigos interpretados (compilados), eles podem ser executados posteriormente diretamente pelo interpretador Python sem reinterpretar o script original. Isso ajuda no desempenho porque tem tempos de execução mais rápidos, e o uso mais comum desses arquivos é na distribuição de módulos Python.

Na maioria dos casos de malware PyPI, o código ofuscado malicioso destina-se a acessar um URL externo e baixar o malware - geralmente um ladrão de informações - que é outra oportunidade para as ferramentas de segurança detectarem comportamentos suspeitos. Neste último incidente, com um pacote chamado fshec2 que continha um arquivo PYC malicioso, toda a carga maliciosa pode ser ocultada no arquivo e é muito mais difícil detectá-la se a ferramenta de segurança não for projetada para descompilá-la.

“Os scripts do carregador, como os descobertos no pacote fshec2, contêm uma quantidade mínima de código Python e executam uma ação simples: carregar um módulo Python compilado”, disseram os pesquisadores do ReversingLabs. "Acontece de ser um módulo malicioso. Inspector, a ferramenta padrão fornecida pela equipe de segurança PyPI para analisar pacotes PyPI, não fornece, no momento, nenhuma maneira de analisar arquivos binários para detectar comportamentos maliciosos. Código compilado do O arquivo .PYC precisava ser descompilado para analisar seu conteúdo."