A CloudGuard Spectralops, plataforma de segurança centrada no desenvolvimento de códigos da Check Point Software, empresa especializada em soluções de segurança cibernética, detetou uma conta de phishing maliciosa no PyPI, que é o principal índice de pacotes Python.
PyPI (Python Package Index) é o repositório oficial de pacotes de software para a linguagem de programação Python. Uma plataforma centralizada onde os programadores Python podem encontrar, instalar, e partilhar pacotes Python de código aberto com outros. PyPI é operado pela Python Software Foundation (PSF), e é acessível através do programa de instalação de pacotes pip, que está incluído na maioria das instalações Python.
Os utilizadores podem procurar pacotes pelo nome ou por uma palavra-chave, e podem descarregar e instalar pacotes com um único comando. O PyPI acolhe milhares de pacotes Python de código aberto, desde bibliotecas para computação científica e análise de dados, a estruturas para desenvolvimento web e machine learning. Qualquer pessoa pode carregar um pacote em PyPI, desde que este cumpra certos requisitos e orientações estabelecidos pela PSF.
O PyPI tornou-se uma ferramenta essencial para a comunidade Python, permitindo aos programadores descobrir e utilizar facilmente pacotes de terceiros, e encorajando a colaboração e partilha entre programadores Python de todo o mundo. Muitas estruturas e ferramentas Python populares, tais como Django, Flask, e Pandas, estão disponíveis no PyPI, juntamente com uma vasta gama de outros pacotes para vários fins, tornando-o um recurso crítico para os desenvolvedores no ecossistema Python.
O Ataque
É importante notar que os atores maliciosos não estão à espera, e continuamos a ver novas técnicas e estratégias com as quais eles tentam esconder a sua intenção maliciosa (de utilizar a esteganografia, em direção aos crypto-jackers que se apropriam do sistema instalador para extrair a moeda criptográfica para seu lucro). Os pacotes maliciosos que detetámos demonstram como o phishing é outra ferramenta em uso pelos criminosos para esconder a sua intenção. Utilizando os nossos modelos de machine learning, conseguimos detetar estes pacotes maliciosos em PyPI. Enquanto pretendíamos ser ajudantes relacionados com a assimetria, estes pacotes acabaram por ser agentes maliciosos; descarregando e executando ocultamente código ofuscado como parte do seu processo de instalação.
Os Ataques em Detalhe
O primeiro pacote que chamou a nossa atenção foi o aiotoolsbox; embora parecendo benigno à primeira vista, acabou por ser uma réplica exata do pacote legítimo do aiotools. É importante notar que enquanto a tipografia (utilizando nomes de pacotes que se assemelham aos benignos populares para enganar os utilizadores na instalação dos maliciosos) é um ataque bastante comum ao mundo da cadeia de abastecimento, a cópia de identidade do pacote benigno é uma prática menos comum (para a maioria dos casos imitar o nome do pacote é apenas o suficiente) e é de um modo geral aquilo a que assistimos no mundo do phishing. Tal esforço pode indicar uma campanha mais sofisticada, tendo em conta que os responsáveis pela instalação podem ter uma segunda visão dos pacotes que estão prestes a instalar (curiosamente, uma campanha maliciosa semelhante foi previamente identificada pelos nossos modelos de machine learning).
O pacote benigno aiotools ao lado da caixa maliciosa de aiotools
Olhando para os metadata dos pacotes; ambos partilham o mesmo autor enquanto têm um administrador diferente. Confiando no facto que, de acordo com o protocolo de publicação de pacotes PyPI, os campos de autor serem texto livre enquanto o administrador é um utilizador autenticado, o atacante poderia facilmente imitar o campo de autor enquanto que para os campos do administrador precisavam de depender de outra coisa.
O pacote benigno de aiotools ao lado da caixa maliciosa de aiotools
De acordo com os detalhes do administrador da aiotoolsbox, eles são contribuintes do PyPI desde 2019. Dado que os dois únicos pacotes que foram publicados recentemente, é justo assumir que esta conta foi violada recentemente.
página de manutenção do aiotoolsbox PyPI
Olhando para o código de configuração da aiotoolsbox inclui um estranho fragmento que, como parte do processo de instalação, descarrega um zip da web, extrai, executa e por fim apaga o seu conteúdo.
código aiotoolsbox setup.py
O primeiro ponto interessante aqui é o facto de o zip estar a ser descarregado de um servidor que é suposto ser ‘files.pythonhosted.org’. Isto acaba por ser a segunda camada de phishing do ataque, enquanto o servidor tenta esconder-se como o site oficial de alojamento de pacotes PyPI.
Os ficheiros benignos.pythonhosted.org junto ao servidor malicioso aiotoolsbox em uso
Outro ponto interessante é que o nome do ficheiro descarregado corresponde à versão python em uso, também conhecido por python 3.9, que receberá um zip chamado 39.zip. Isto parece ser outro nível de phishing, fazendo o utilizador comum assumir que se trata de algo legítimo que está a ver, provavelmente algum tipo de fluxo interno pip.
Olhando para o zip descarregado, incluía um código pyArmor oculto, o que torna difícil compreender a sua intenção maliciosa. No entanto, olhando para os nomes dos ficheiros descarregados, é justo assumir que o pacote é um ladrão de PII, com a intenção de recolher e roubar os segredos do instalador. Dado o facto de este zip ter sido descarregado de forma oculta durante o processo de instalação, podemos concluir que este não é um caso benigno.
Os conteúdos zip descarregados
O conteúdo do guião de entrada principal.py
Olhando para a estrutura do pacote aiotoolsbox; além do referido setup.py, o resto dos ficheiros parece ter sido retirado do pacote benigno aiotools, fazendo com que o utilizador comum obtenha as funcionalidades de base que procurava, sem saber que acabou de instalar um pacote malicioso.
A estrutura benigna do pacote de aiotools junto da caixa maliciosa de aiotools
Procurando por versões anteriores da aiotoolsbox, podemos notar que foi carregada algumas vezes com versões diferentes (primeiro 1.4.7 e só depois 1.4.5 e 1.4.6).
Procura de versões anteriores da aiotoolsbox
Olhando para a diferença entre essas versões, verifica-se que tinham a mesma estrutura, e a única diferença estava no ficheiro setup.py, mais especificamente no IP do servidor que utilizam. Verificando os detalhes do IP, a versão inicial era um IP russo, enquanto que a última era da Alemanha. Provavelmente outro nível de ocultação, assumindo que um IP russo será mais alarmante do que um alemão.
Recente versão aiotoolsbox (1.4.6) vs. a anterior (1.4.7)
Finalmente examinando a conta de outro pacote – async-proxy, na sua setup.py menciona aiotoolsbox como o seu único requisito, fazendo com que qualquer pessoa que a instale, instale também a maliciosa aiotoolsbox.
Código async-proxy setup.py
Revelação
Divulgámos a conta à PyPI e pouco depois os pacotes mencionados foram removidos pela equipa da PyPI.
Como o CloudGuard Spectral previne tal risco
Com o aumento da frequência dos ataques na cadeia de abastecimento, é essencial proteger-se, verificando todos os elementos de software que utiliza, especialmente aqueles que não são desenvolvidos por si. Na Check Point, a nossa missão é construir um processo de desenvolvimento seguro, equipando os programadores com as ferramentas certas para o conseguir. Para combater pacotes maliciosos que colocam em risco a cadeia de fornecimento, estamos a monitorizar atentamente o PyPI e o NPM para entidades maliciosas. Após a sua identificação, informamos o NPM, solicitando a sua remoção imediata. Ao aproveitar o CloudGuard Spectral, pode permanecer seguro e alerta, permitindo-lhe identificar rapidamente os agentes maliciosos.