O Laboratório de Pesquisa da ESET América Latina analisou um código malicioso que afeta os sistemas operacionais Windows, detectado por nossas soluções de segurança como Python/PSW.Agent.BHH.
A equipe de pesquisa da ESET observou que existe a tentativa por parte de cibercriminosos de comprometer os sistemas que utilizam versões antigas do sistema operacional Windows Server, como o Windows Server 2008 ou Windows Server 2012, versões que já não recebem atualizações de segurança da Microsoft, o que representa um risco potencial para seus usuários.
Além disso, os cibercriminosos podem verificar e comprometer outros computadores na rede interna explorando a vulnerabilidade ZeroLogon. Um binário malicioso programado em Python é usado para fazer capturas de tela da máquina da vítima e enviá-las aos cibercriminosos por meio de um bot para um canal do Telegram.
Outra de suas funções é ler as informações contidas na área de transferência da vítima para detectar dados de uma carteira virtual e, em seguida, modificá-los para uma carteira pertencente aos cibercriminosos.
Os acessos, nesse caso, foram usados para executar criptomineradores, ou seja, códigos maliciosos que substituem a carteira da vítima por outra pertencente aos atacantes, deixando em aberto a possibilidade de ataques mais complexos.
Os cibercriminosos tendem a visar vítimas em setores como construção e educação e, embora os ataques detectados tenham sido globais, eles se concentraram particularmente na América Latina, especialmente no México, Argentina, Colômbia e Peru. De acordo com a pesquisa, é muito provável que os cibercriminosos obtenham acesso não autorizado às suas vítimas por meio da exploração de vulnerabilidades ou de ataques de força bruta.
O diagrama a seguir ilustra o processo de infecção desse código malicioso, que começa com o acesso não autorizado a um servidor Windows e termina com a execução de um arquivo Python malicioso, que baixa e executa outros componentes, como as ferramentas mimikatz ou nmap, bem como arquivos de extração automática que finalmente executam criptomineradores no dispositivo da vítima.
Atividades maliciosas
Esse código malicioso possui características de downloader e infostealer. Por um lado, essa ameaça é capaz de fazer a varredura da rede interna da vítima e, ao explorar uma vulnerabilidade chamada ZeroLogon, comprometer e se instalar em outros computadores da rede.
Por sua vez, ele é capaz de fazer o download de diferentes ferramentas e outros códigos maliciosos para a vítima, a fim de atingir seu objetivo.
Durante o processo de varredura da rede interna da vítima ou durante a execução de qualquer uma das ferramentas usadas, o código malicioso coleta informações desses processos para enviá-las aos cibercriminosos usando um canal do Telegram, aproveitando um bot criado para o aplicativo mencionado acima.
Acesso inicial
Conforme mencionado acima, a ameaça parece afetar suas vítimas explorando vulnerabilidades conhecidas, que podem ser explorações hospedadas em repositórios públicos na Internet ou por meio de ataques de força bruta.
Essa suposição é baseada em detecções observadas nos sistemas de telemetria da ESET, que estão relacionadas à exploração da vulnerabilidade EternalBlue ou da vulnerabilidade CVE-2021-31166. Ao analisar informações de sites públicos, como Shodan ou Censys, identificamos que os servidores onde a ameaça foi encontrada tinham serviços sensíveis expostos à Internet, como as portas 88 (Kerberos), 389 (LDAP), 445 (SMB) e 3389 (RDP).
A exploração de qualquer um desses serviços por cibercriminosos poderia facilitar ataques de força bruta ou a exploração de vulnerabilidades, permitindo, assim, o acesso não autorizado ao servidor da vítima e seu posterior comprometimento por meio da execução de comandos ou da instalação de códigos maliciosos adicionais.
Quando os cibercriminosos obtêm acesso ao servidor da vítima, eles fazem o download e executam o código malicioso Python/PSW.Agent.BHH. Seu comportamento malicioso será detalhado a seguir. Python/PSW.Agent.BHH.
Esse código malicioso é um binário compilado especificamente para sistemas operacionais Windows e programado em Python. Sua funcionalidade inclui a capacidade de baixar e executar códigos ou ferramentas maliciosas adicionais de um servidor controlado por cibercriminosos. Além disso, ele pode fazer a varredura da rede da vítima em busca de outros computadores ativos, explorar vulnerabilidades conhecidas nesses computadores, receber atualizações do servidor de comando e controle, entre outras ações.
Com base na análise da amostra 1D3BB7A9F5F9E59C93A4B3A2D52BC7964AE99326, verificou-se que, para ser executado, esse código malicioso precisa de uma das seguintes cadeias de caracteres como argumento:
- ping_s
- zero
- rych
Dependendo da cadeia de caracteres fornecida ao código malicioso, ele executará algumas das ações maliciosas mencionadas acima. A captura de tela a seguir mostra a lógica usada pelos cibercriminosos para executar determinadas ações maliciosas, dependendo da cadeia de caracteres fornecida.
A seguir, detalhamos a atividade maliciosa que é executada por esse código malicioso quando fornecido com uma dessas cadeias de caracteres.
ping_s
Basicamente, os cibercriminosos usam essa lógica para confirmar se um endereço IP da rede interna da vítima está ativo ou não. Para fazer isso, ele itera sobre um arquivo de texto chamado dump.txt hospedado no mesmo caminho em que esse código malicioso persiste, C:\ProgramaData\Universal_map, obtendo endereços IP a partir dele. Para verificar se um IP está ativo, ele usa o método ping da biblioteca ping3 do Python.
Se o endereço IP estiver ativo, ele será adicionado a uma lista juntamente com o nome do computador associado a esse endereço IP e essa lista será enviada, por meio de um bot, a um grupo do Telegram controlado pelos cibercriminosos. Por sua vez, ele também envia o endereço IP com o qual a vítima fica on-line e o nome da cidade onde a vítima está localizada. Essas informações são obtidas por meio de uma solicitação feita pelo código malicioso à seguinte URL legítima: https://ipinfo.io/ip.
Observação: o arquivo dump.txt é criado durante a execução do método explicado abaixo.
zero
Nesse caso, você executará primeiro uma rotina encarregada de atualizar o código malicioso. Basicamente, o código malicioso se conecta ao servidor 2.57.122[.]159 controlado pelos cibercriminosos e obtém um número de versão. Em seguida, esse número é comparado com outro número codificado no código malicioso e, se forem diferentes, ele cria um arquivo batch que se conecta ao mesmo endereço IP e baixa a versão mais recente do código malicioso. Quando a atualização é concluída, ele exclui o arquivo de lote criado anteriormente.
Quando a parte da atualização é concluída, ele verifica se diferentes ferramentas e códigos maliciosos estão instalados na mesma pasta em que esse código malicioso é executado. Na ausência de qualquer um deles ou de todos, o código malicioso continua a baixá-los do endereço IP mencionado acima.
Veja algumas das ferramentas que foram baixadas pelo código malicioso:
- nmap
- masscan
- mimikatz (compilado em diferentes versões, arquivo executável, biblioteca ou driver)
- secretsdump
- wmiexec
- SharpGPOAbuse
- Um instalador de arquivo removível chamado "mig.exe"
Depois de fazer o download dessas ferramentas, a ameaça cria um intervalo de endereços IP usando dois valores aleatórios para os primeiros valores do endereço IP e, para os dois últimos valores, usa 0,0 e 255,255. Nesse intervalo de endereços IP, o malware executa a ferramenta masscan na porta 389 e salva em uma lista os endereços IP que contêm essa porta aberta. A captura de tela a seguir mostra a lógica usada pelos cibercriminosos para gerar aleatoriamente um intervalo de endereços IP.
Para cada endereço IP dessa lista, o código malicioso executará as seguintes ações:
- Examina novamente o endereço IP na porta 389 para confirmar se a porta está ativa.
- Se o host estiver ativo, ele executará o script secretsdump para realizar um despejo de hashes de uma máquina remota ou obter credenciais de hash hospedadas no Security Account Manager (SAM) ou no LSA secrets.
- Se o secretsdumps não obtiver resultados, ele tentará explorar a vulnerabilidade CVE-2020-1472, também conhecida como ZeroLogon, no host.
- Ao conseguir obter algum resultado usando o secretsdump ou explorando a vulnerabilidade ZeroLogon, o cibercriminoso continuará usando a ferramenta wmiexec para se autenticar no computador.
- Se a autenticação for bem-sucedida, ele executará as seguintes ações maliciosas no novo computador:
5.1. Executar um comando do PowerShell para adicionar um novo usuário de perfil de administrador no computador:
-
- Nome de usuário: krbrtgt
- Senha: Pass32552!!!!
5.2. Executar um comando do PowerShell para obter informações sobre o novo computador da vítima: nome do computador, número de processadores, BIOS, configurações de endereço IP do computador, lista de grupos de controladores de domínio e assim por diante.
5.3. Criar a pasta universal_map no caminho C:\ProgramData\.
5.4. Instalar no universal_map todo o conjunto de ferramentas mencionado acima.
5.5. Fazer download e execute um binário chamado mig.exe no novo computador. Esse binário será explicado na próxima seção deste documento.
5.6. Enviar todas as informações coletadas da execução dos pontos anteriores com as informações coletadas da nova vítima para os atacantes por meio de um bot do Telegram.
rych
Executa a atividade listada no ponto anterior, mas, em vez de usar um intervalo de endereços IP, usa um único IP fornecido pelo atacante como parâmetro.
Evolução do malware, exploits e Telegram
Durante a fase de análise, foram identificados vários métodos e funcionalidades que não são invocados por esse código malicioso, embora a lógica resida nele. Um exemplo disso é um método chamado brut_local, que tem uma lógica semelhante à mencionada acima, mas com a adição da execução de ataques de força bruta no protocolo SMB na porta 445 em intervalos de IP predefinidos no código malicioso. Alguns desses intervalos são:
- 192.168.0.0 - 192.168.255.255
- 172.16.0.0 - 172.16.255.255
- 10.10.0.0 - 10.10.255.255
Isso é uma indicação de que os cibercriminosos por trás desse código malicioso fizeram modificações nele em uma tentativa de encontrar a melhor maneira de infectar suas vítimas.
Por outro lado, como mencionado acima, eles tentam explorar a vulnerabilidade ZeroLogon no dispositivo da vítima. Essa vulnerabilidade descoberta em 2020 tem várias provas de conceito que podem ser encontradas em repositórios públicos.
Esse é um indicador de que os cibercriminosos não estão interessados na descoberta e na exploração de vulnerabilidades novas ou desconhecidas, mas sim em encontrar vítimas que não tenham computadores atualizados ou corrigidos.
Com relação à exfiltração de dados, isso é feito usando um bot do Telegram. Os cibercriminosos criam um bot usando um token que é codificado no código, 6822550062:AAEmTB3wsREcKnsg9x4Zt7VTlIP9rw7qx4Y.
Por outro lado, o identificador do grupo do Telegram para o qual o bot envia as informações, -1002087927440, também foi encontrado no código malicioso. A seguinte captura de tela mostra as informações oficiais obtidas do bot usado pelos cibercriminosos por meio da API oficial do Telegram.
A captura de tela a seguir mostra as informações oficiais relacionadas ao grupo usado pelo bot para enviar as informações da vítima por meio da API oficial do Telegram.
O arquivo malicioso mig.exe, usado para ações relacionadas à criptomineração, é explicado a seguir.
Arquivo SFX autoextraível
O binário chamado mig.exe, 559686155E5672F81CC12B9473F1C3D2C9713D77, corresponde a um arquivo de extração automática que, quando executado na máquina da vítima, executa quatro arquivos diferentes. A captura de tela a seguir mostra os arquivos contidos nesse binário de extração automática e a pasta onde eles serão instalados.
Na captura de tela acima, podemos ver algumas palavras em russo, o que pode indicar que os atacantes são de países do Leste Europeu ou usam dispositivos desenvolvidos nessa região.
Uma vez executado, ele invoca os arquivos ru.bat e st.bat, nessa ordem. Esses arquivos instalam os arquivos MicrosoftPrt.exe e migrate.exe na máquina da vítima.
Antes de instalar os arquivos, o arquivo ru.bat invoca o binário icacls legítimo do Windows para modificar as permissões das pastas C:\Windows\Tasks e C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\, dando a ele acesso apenas de leitura para todos os usuários na máquina da vítima.
O arquivo migrate.exe, 77EDD32104AE8622E568DD1BF401EA24365A672E4, é outro arquivo de extração automática, protegido com a senha 4432, que se destina a instalar e executar aplicativos que abusam dos recursos da máquina vítima para minerar criptomoedas. A captura de tela a seguir mostra esse arquivo:
Por sua vez, foi identificado que esse arquivo possui um script em lote chamado run.bat, que cria um serviço do Windows chamado WMService, utilizado para que os criptomineradores persistam na máquina da vítima.
Por outro lado, o arquivo MicrosoftPtr.exe, D855E2C9338B1508577B3E831CC89838C2768647, um binário malicioso programado em Python, é utilizado para tirar screenshots da máquina da vítima e enviá-las aos cibercriminosos por meio de um bot para um canal do Telegram. Outra de suas funções é ler as informações contidas na área de transferência da vítima para detectar quando ela copiou uma carteira virtual para ser modificada por uma pertencente aos cibercriminosos.
As carteiras encontradas no código malicioso estão listadas abaixo:
- BTC: bc1qnk3kx4at30gtm0v8jfc8egdu4flmn4txtth5gy
- ETH: 0x59Bc7A9B7e8bcE676EEE2ABE8A75fE99c40d0C17
- ETHBEP2: bnb15r7jdgnurw0qrlxhxypqy0key8957wxpv95ze7
- LTC: ltc1qr7d5ge4fh9klt9d8nygj66rve0yxytxf6ma2mz
- DOGE: DTX9xhTdQGRnHPfPobqRTdD8fy4XY2MYkF
- TRON: TNwZyt9U5EYVrQoed5mxYDWvkcfAoXjcGj
Finalmente, um token usado para criar o bot do Telegram que envia as capturas de tela para os cibercriminosos foi encontrado no código malicioso: 6114976417:AAELsO_lvdyvXRwFwj5RmwJFc81WkgJOYI
A captura de tela a seguir mostra as informações relacionadas ao bot por meio da API oficial do Telegram:
Esse bot envia as informações para um chat que tinha seu ID configurado no código malicioso, que era 552691400.
A captura de tela a seguir mostra informações pertencentes ao grupo do Telegram com o ID 552691400.
Combinando todas as informações coletadas de tokens e grupos de bate-papo do Telegram, foi possível determinar um usuário não bot por trás dessa campanha.
Conselhos sobre como você pode se proteger
Como vimos que essa ameaça é distribuída em servidores Windows e em outros computadores que estão localizados na mesma rede, listamos várias recomendações que podem ser úteis para evitar se tornar uma vítima em potencial:
- Mantenha os computadores e aplicativos atualizados com a versão mais recente;
- Mantenha as soluções de segurança instaladas no(s) dispositivo(s) atualizadas;
- Monitore a rede em busca de anomalias:
- Várias tentativas de login em um serviço específico;
- Várias tentativas de login com o mesmo usuário.
- Evite usar senhas triviais, como: password, p@ssw0rd, etc.
Caso existam determinados computadores que não possam ser atualizados para a versão mais recente do Windows Server, recomendamos que você garanta que a proteção contra ataques de rede esteja ativada no ESET Server Security (disponível no produto a partir da versão 8), pois nas versões mais antigas do Windows Server esse componente não é fornecido por padrão. Para obter mais informações sobre como ativar essa camada de proteção, veja as etapas para instalar o ESET Server Security.
Conclusão
O arquivo malicioso detectado pelas soluções de segurança da ESET como Python/PSW.Agent.BHH é outro exemplo de como as ferramentas legítimas, frequentemente utilizadas para pentesting ou escaneamento de redes, também são utilizadas para fins maliciosos pelos cibercriminosos. Ao mesmo tempo, foram encontradas evidências de cibercriminosos usando exploits públicos para obter acesso privilegiado às redes de suas vítimas, o que levanta questões sobre o estado da infraestrutura na América Latina e as possibilidades disponíveis para os invasores.
Nesse caso específico, os acessos foram usados para executar criptomineradores, ou códigos maliciosos que substituem as carteiras eletrônicas das vítimas por outras pertencentes aos cibercriminosos, mas também expõe a possibilidade de ataques mais complexos.
O uso do aplicativo Telegram para a exfiltração de informações confidenciais das vítimas nos mostra outra alternativa que pode ser usada por cibercriminosos que talvez não tenham interesse ou recursos para criar suas próprias infraestruturas maliciosas.
Por fim, com base no que foi encontrado e explicado nos pontos anteriores deste documento, suspeitamos que a(s) pessoa(s) por trás dessa atividade cibercriminosa seja(m) de grupos de língua russa ou esteja(m) relacionada(s) a eles.
Indicadores de comprometimento
Persistência
Abaixo estão listados os caminhos criados pela ameaça para persistir no computador da vítima:
- C:\ProgramData\Universal_map\
Hashes, URLs e C&C
Hashes de amostras encontradas durante a análise:
‒ 1D3BB7A9F5F9E59C93A4B3A2D52BC7964AE99326
- Python/PSW.Agent.BHH - 4ECFA3B988CB51C13A229EA3AA9469A2652FAB98
- MSIL/Riskware.SharpGPOAbuse.A
‒ B82787DC098EEFA8BF917F76CFB294AC3F8349F0
- Win64/Riskware.Mimikatz.U
‒ 70DF765F554ED7392200422C18776B8992C09231
- Win64/Riskware.Mimikatz.G
‒ C66A1C6FBEACAF2DB288BFF8C064DFE775FD1508
- Win64/Riskware.Mimikatz.I
‒ 559686155E5672F81CC12B9473F1C3D2C9713D77
- RAR/KillAV.A
‒ C1D8DD5AFCBDAFEEC10BF82E1A570855076910E2
- Python/Riskware.WMIExec.B
‒ AF7C73C47C62D70C546B62C8E1CC707841EC10E3
- Python/Impacket.A
‒ D855E2C9338B1508577B3E831CC89838C2768647
- Python/ClipBanker.GP
‒ C15CDEC3288769F43CE5BEB0B830B8CBEA2D5E4D
- BAT/Agent.QCM
‒ 77EDD32104AE8622E568D1BF401EA24365A672E4
- Win64/CoinMiner.RK
Domínios e IPs detectados nas amostras analisadas:
- 2[.]57.122.159
Técnicas do MITRE ATT&CK
As técnicas MITRE ATT&CK observadas nas amostras analisadas estão listadas abaixo: