Linux/Rakos: ataques à dispositivos e servidores por meio do SSH (outra vez)

Linux/Rakos: ataques à dispositivos e servidores por meio do SSH (outra vez)

O ataque é realizado por meio de tentativas de login remoto via SSH por força bruta, e funciona de maneira semelhante aos worns para Linux.

O ataque é realizado por meio de tentativas de login remoto via SSH por força bruta, e funciona de maneira semelhante aos worns para Linux.

dalek_skaro-623x410

Aparentemente, cada vez mais é possível observar usuários frustrados que se queixam nos fóruns sobre como seus dispositivos integrados se sobrecarregam com tarefas informáticas e de rede. O que essas reclamações, em particular, têm em comum é o nome do processo que causa o problema. O procedimento se executa por meio de uma unidade temporal, se passando como parte do framework Java, com o nome “.javaxxx”. Além disso, também usa os nomes adicionais: “.swap” ou “kworker”.

Há algumas semanas, analisamos os recentes incidentes de Mirai e os problemas de segurança provocados por essa botnet em nosso artigo “Um exército de zumbis: quando os dispositivos da IoT estão fora de controle”. Tudo o que escrevemos nesse momento ainda continua vigente.

Vetor de ataque

O ataque é realizado por meio de tentativas de login remoto via SSH por força bruta, e funciona de maneira semelhante aos worms para Linux, incluindo Linux/Moose (que atacou os logins da Telnet para se propagar), sobre o que também nos referimos aqui, e ao que a ESET tem estado investigando desde o ano passado. Entre os alvos de ataque se encontram os dispositivos e servidores integrados que tem um protocolo SSH aberto e com uma senha fraca.

O evidente propósito desse trojan é recoletar uma lista de dispositivos desprotegidos e construir uma botnet de equipamentos zumbis que seja de interesse dos atacantes. Desta forma, inscreve a todos em uma lista seletiva, não muito extensa, de alvos. A infecção ocorrem nas máquinas que representam fácil oportunidade desde a perspectiva de segurança.

É interessante notar que as vítimas informaram casos nos quais contam com uma senha segura, mas restauraram a configuração do dispositivo com as configurações de fábrica, utilizando a senha predeterminada, mas esquecendo que o dispositivo estava online. Muitas horas de exposição online é o suficiente para que uma máquina restaurada seja infectada.

Análise

O malware foi criado em GO e normalmente aparece comprimido com a ferramenta UPX original. O estranho é que os desenvolvedores excluem os nomes das funções no arquivo binário, mas mesmo assim continuam presentes em uma seção especial. Com a ajuda de um script criado pela RedNaga Security, que voltou a assignar os símbolos correspondentes às funções no software desmontador IDA Pro, toda a análise foi simplificada e apenas teve que revisar as funcionalidades que sugeriam os nomes das funções, tais como main_loadConfig, main_startLocalHttp, main_Skaro_Upgrade, main_IPTarget_checkSSH, etc. O arquivo binário inclui cadeias de caracteres como “Skaro” e “dalek”. Os autores possivelmente tinham em mente o planeta fictício da série de televisão Doutor Who, da qual se originaram os Daleks.

No primeiro passo, o malware carrega sua configuração através da entrada padrão (stdin) no formato YAML. O arquivo de configuração contém dados como a lista de servidores da C&C, todas as credenciais que experimentam para acessar os alvos e os parâmetros internos:

20-12-2016 12-32-02 p- m-

A configuração completa do Linux/Rakos no texto sem formato está disponível na unidade da ESET, no Github.

Como segundo passo, o malware inicia um serviço HTTP local disponível em http://127.0.0.1:61314. Existem razões pelas quais se instala: a primeira é como um método engenhoso para que as futuras versões do bot encerrem as instâncias em execução (independentemente do nome que tenham) por meio de uma solicitação http://127.0.0.1:61314/et; a segunda é porque tenta analisar os parâmetros “ip”, “u” e “p” em uma busca URL por meio de uma solicitação http://127.0.0.1:61314/ex. O propósito do recurso /ex de HTTP ainda não é claro no momento no qual este relatório foi escrito, sem referências a ele em nenhuma parte do código.

O bot também cria um servidor Web que interpreta em todas as interfaces. Nas primeiras versões, interpretava no protocolo TCP 13666, mas agora é selecionado aleatoriamente dentro do intervalo 20000 a 60000. Ao enviar uma solicitação remota o dispositivo, por meio desse protocolo, é apresenta uma mensagem como se estivesse no navegador:

{“origin”:”192.168.18.1″}

Dessa forma, o endereço IP corresponde ao lado do cliente. A saída está no mesmo formato que o servidor de prova público com a solicitação /ip. No lado que executa Linux/Rakos, é possivel chegar a ver a seguinte linha de registro no stdout:

“{2016/11/21 09:02:03 INFO StartChecker.func1 ▶ 001 check: 192.168.18.1}”

Em seguida, envia uma solicitação HTTP inicial que contém informação importante da vítima a https://{cnc_server}/ping. Os dados enviados podem ser os seguintes (alguns campos foram alterados oficialmente):

20-12-2016 12-40-07 p- m-

A principal funcionalidade desse bot é explorar o serviço SSH em diversos endereços IP, que se obtém pelo servidor do C&C ao solicitar a lista localizada em https://{cnc_server}/scan. Aparentemente, essa lista se modifica com frequência. As versões anteriores do trojan também analisavam o serviço SMTP, mas os atacantes têm silenciado essa funcionalidade (possivelmente a estejam desenvolvendo para melhorá-la).

O principal ataque é realizado da seguinte forma: caso a conexão com o alvo ocorre corretamente, se executam dois comandos de maneira remota (id, uname -m). Fazem outras comprovações e informam seus resultados. Finalmente, o binário verifica se pode carregar-se ao dispositivo da nova vítima e o faz caso a resposta seja afirmativa. Para nossa análise, selecionamos dois alvos (127.0.0.1 e 127.0.0.100) e simulados um ataque (originalmente, os atacantes tentam com 200 alvos simultaneamente a cada 10 segundos). No caso que o bot não alcance se conectar com o primeiro alvo, o etiquetará com a palavra “FORGET” (esquecer). Se, em seguida, se conecta corretamente ao segundo alvo, o marcará com a palavra “INSTALL” (instalar). Quando se estabelece uma conexão SSH com os dados de login corretos shipping:shipping; também é importante notar que o arquivo executável que foi baixado automaticamente elimina-se depois da execução.

1_skaro_logs

Além disso, o backdoor é capaz de:

  • Atualizar o arquivo de configuração (https://{cnc_server}/upgrade/vars.yaml)
  • Melhorar a si mesmo

Não é implementa nenhuma atividade maliciosa evidente das que poderiam esperar, como ataques de DDoS ou propagação de spam (ao menos até este momento). No entanto, o fato de que se enviem ao endereço IP, o nome do usuário e a senha significa que os atacantes podem fazer o que querem com a máquina mais tarde. Acreditamos que é pouco provável que apenas se trata de um experimento invasivo, mas inocente, ou de um exercício ou uma pesquisa acadêmica que saiu mal.

Existem vários relatórios online sobre as infecções. Por exemplo, é possível encontrar um do dia 23 de agosto de 2016 no Pastebin. A seguinte tabela contém o resultado ao executar “lsof –n” no processo culpável. É necessário lembrar que os intervalos de endereços IP testados pelo SSH parecem aleatórios:

20-12-2016 12-46-58 p- m-

Mitigação e desinfecção

O trojan não é capaz de manter sua persistência após reiniciar o sistema. Portanto, os dispositivos disponíveis podem ser infectados repetidamente.

Os passos necessários para desinfetar são os seguintes:

  • Conecte-se ao seu dispositivo por meio do SSH/Telnet
  • Busque um processo chamado .javaxxx
  • Execute comandos como netstat o lsof com o conmutador –n para confirmar que é o responsável de estabelecer as conexões não desejadas.
  • (Ação voluntária) recolhimento de evidencia forense gcore). Também é possível recuperar a amostra excluída por meio /proc con cp /proc/{pid}/exe {output_file}
  • Finalize o processo com o parâmetro –KILL

Naturalmente, é imprescindível que as vítimas protejam suas credenciais SSH e lembre de voltar a fazer o mesmo depois de cada restabelecimento dos valores de fábrica.

Também preparamos um complemento para Volatility Framework llamado vf_ioc_linux_rakos_a.py que detecta os indicadores de sistemas comprometidos caso conte com um espaço de memória completo que admita esse marco. Além disso, esse complemente extrai dados do processo malicioso como a configuração ou a informação enviada ao servidor do C&C. Está disponível aqui.

Conclusão

Nesta ocasião, apresentamos outro exemplo de um backdoor para Linux que se propaga por meio de um canal muito conhecido. Parece que é interessante para os atacantes criarem novas mostras de software malicioso para aproveitar as atuais vulnerabilidades da segurança da rede.

Nossa dica é a seguinte: não construa muros de palha para guardar seus dispositivos; melhor mesmo é usar pedras. A Internet é um lugar com muito vento…

Um agradecimento especial a Marc-Étienne Léveillé.

Indicadores dos sistemas comprometidos

Amostras

Como o malware elimina-se depois de ser executado com êxito, não dispomos de muitas amostras coletadas.

20-12-2016 12-33-28 p- m-

Servidores do C&C

217.12.208.28
217.12.203.31
193.169.245.68
46.8.44.55
195.123.210.100
5.34.183.231
5.34.180.64
185.82.216.125
185.14.30.78
185.14.29.65
185.20.184.117

and

Discussão