Uma destas investigações revelou o uso do serviço de mensagens criptografadas Telegram como uma infraestrutura de Command and Control (C2) para malware
Por Abel Toro
No Forcepoint Security Labs estamos sempre observando os métodos utilizados pelos agentes de ameaças para contornar as proteções existentes.
O malware que usa o Telegram como um canal C2 normalmente usa a API Telegram Bot para a comunicação. No decorrer de uma investigação sobre um malware, descobrimos uma falha significativa na forma como o Telegram trata as mensagens enviadas através de sua API Bot.
Devido à forma como a API Bot funciona, todas as mensagens passadas do bot podem ser reproduzidas por um adversário que seja capaz de interceptar e descriptografar o tráfego HTTPS.
Em termos práticos, isso pode fornecer ao adversário o histórico completo de todas as mensagens enviadas ou recebidas pelo bot de destino.
Isso muitas vezes inclui mensagens entre usuários regulares, pois os bots frequentemente compartilham um grupo de bate-papo com eles.
Obtendo acesso às mensagens C2 do Telegram
O Telegram usa sua criptografia MTProto criada internamente dentro do tráfego TLS para proteger as mensagens entre usuários regulares, pois a empresa (justificadamente) considera o TLS como não seguro o suficiente para um aplicativo de mensagens criptografadas.
Infelizmente, isso não se aplica ao caso de programas que usam a API Bot do Telegram, e as mensagens enviadas desta forma só são protegidas pela camada HTTPS.
Para piorar as coisas, qualquer adversário capaz de obter informações importantes transmitidas em cada mensagem pode não apenas acessar as mensagens em trânsito, como também recuperar o histórico completo de mensagens do bot de destino.
Uma das principais informações é o token da API Bot, que é incorporado em todas as mensagens (bem como no binário de qualquer programa – malware ou legítimo – usando a API Bot do Telegram). Torna-se, portanto, trivial para um adversário realizar ataques MiTM na conexão HTTPS de destino para obter esses dados.
A outra parte crucial do quebra-cabeça é o chat_id gerado aleatoriamente pelo Telegram. No caso de chats individuais, este é o próprio ID exclusivo do usuário, enquanto os chats em grupo têm seus próprios chat_id gerados durante a criação.
No entanto, esta informação também é enviada para qualquer solicitação da API Bot, quando o Bot precisa saber para qual usuário e/ou grupo de bate-papo enviar as informações.
De posse dessas informações, existem vários métodos que podem ser chamados a partir da API Bot do Telegram. No nosso caso, o método forwardMessage() é particularmente útil, uma vez que permite que qualquer mensagem de qualquer bate-papo que um determinado bot tenha acesso seja encaminhada para um usuário arbitrário do Telegram.
Para fazer isso, precisamos do token da API e do chat_id (extraído de mensagens anteriores enviadas pelo bot ou, no caso do malware, extraída do próprio binário) – junto com o chat_id alvo (que é o nosso próprio ID de usuário) e, finalmente, o ID da mensagem que gostaríamos de encaminhar.
Felizmente para nós, o atributo message_id cresce de forma incremental a partir de 0, de modo que um script simples em Python pode encaminhar todas as mensagens que já foram enviadas para um chat do Telegram que o bot faça parte.
O malware em questão representa um excelente estudo de caso sobre os perigos envolvidos, com o responsável pela ameaça claramente não possuindo a separação necessária entre os seus ambientes de testes/desenvolvimento e operacionais. Isso significava que poderíamos rastrear seus primeiros passos para criar e implantar o malware (veja a Linha do Tempo de Atividades abaixo) até as campanhas atuais na forma de comunicações de e para as vítimas e máquinas de teste.
Em uma exposição extraordinariamente fraca de segurança operacional, uma dessas máquinas de teste parece ter sido do próprio agente revelando tanto o seu endereço IP como outras informações pessoais críticas.
Not-so-GoodSender
O malware em questão é bastante simples, criado em .NET, com o operador apelidado de ‘GoodSender ‘ e que utiliza o Telegram como C2.
Ele opera de forma bastante simples: uma vez que o malware é instalado, ele cria um novo usuário administrador e habilita a área de trabalho remota, certificando-se de que o recurso não está bloqueado pelo firewall. O nome de usuário do novo administrador é estático, mas a senha é gerada aleatoriamente.
Todas essas informações (o nome de usuário, a senha e o endereço IP da vítima) são enviadas ao operador através da rede Telegram, proporcionando ao operador acesso ao computador da vítima através do protocolo RDP.
Linha do Tempo das Atividades, Agente da Ameaça e Vítimas
O agente inicialmente usou o bot do Telegram em questão para um malware diferente que ele estava desenvolvendo. Este malware anterior foi chamado de ‘RTLBot’, e durante alguns meses ele acrescentou vários recursos adicionais antes de abandonar o desenvolvimento em favor do ‘GoodSender’, o malware descrito acima.
Os detalhes da linha do tempo abaixo e as capturas de tela incluídas foram recuperadas das comunicações C2 passadas do malware e demonstram a capacidade de usar o método descrito para recuperar as mensagens do histórico de um canal Telegram.
- 4 de fevereiro de 2018 – O bot do Telegram entra em operação.
- 18 de fevereiro de 2018 – O agente começa a incorporar a funcionalidade do Telegram C2 ao RTLBot e transfere o desenvolvimento para o Telegram.
- 20 de fevereiro de 2018 – O agente transfere a infraestrutura de seu computador pessoal para o AWS (Amazon Web Services).
- 1 de abril de 2018 – A GoodSender está ativa e envia suas primeiras informações sobre a vítima.
- 6 de junho de 2018 – A primeira indicação de que o agente alugou outro VPS para usar como proxy do Telegram.
- 5 de julho de 2018 – O GoodSender envia suas últimas informações reais da vítima até o momento.
- 29 de setembro de 2018 – O GoodSender envia as informações da sua última vítima de teste até o momento.
Em 23 de novembro de 2018, o agente incorporou a mesma chave de API do bot e o canal C2 em uma ferramenta que parece coletar imagens de contas do Instagram.
Dada a nomenclatura freqüente de elementos como teste (por exemplo, testbot na figura abaixo), parece provável que esse canal seja usado para testar bots antes de alterar a chave da API e o canal para valores de ‘produção’.
Apesar de não encontrarmos nenhuma resposta definitiva para qual vetor de ataque o agente utilizou para soltar seu malware, indícios indicam que ele usou o exploit EternalBlue para aplicá-lo em máquinas desatualizadas.
- Ele faz usado pesado do scanner de vulnerabilidades gratuito ‘EternalBlue’.
- Ele possui uma lista dos IPs varridos nos EUA e Vietnam que eram vulneráveis ao EternalBlue, que ele usou para infectar algumas vítimas.
Com base em nossa telemetria, GoodSender infectou pelo menos 120 vítimas, a maioria nos EUA.
Resumo
Em nosso estudo de caso, essa técnica específica para reproduzir mensagens foi usada para descobrir um agente de ameaça, mas pode muito bem ser usada contra aplicativos legítimos que usam a API do Telegram Bot.
Apesar do Telegram ser anunciado como um “aplicativo de mensagens seguras” e utilizar um esquema de criptografia com garantias mais elevadas do que o TLS (pelo menos, em teoria) durante os chats regulares, os bots utilizam TLS tradicional para criptografar dados em trânsito.
Assim, um atacante na posição de MitM com capacidade de descriptografar TLS poderia obter acesso ao token do bot, bem como ao chat_id, levando ao comprometimento total não apenas da comunicação atual, mas de todas as comunicações anteriores.
Desta forma, o Forcepoint Security Labs recomenda a todos os usuários evitarem o uso de bots do Telegram, bem como canais e grupos que tenham um bot.
A Forcepoint informou a Telegram sobre esta vulnerabilidade.
Os clientes da Forcepoint estão protegidos contra o malware GoodSender de nosso estudo de caso nos seguintes estágios de ataque:
- Fase 5 (Arquivo Dropper) – Arquivos maliciosos são impedidos de serem baixados.
IOCs (GoodSender)
943eceb00ea52948c30deab1d5824ffcf2fd1cec