sexta-feira, 29 de agosto de 2014

Segurança: Se protegendo contra um Shell Reverso

Um dos ataques mais perigosos é quando uma vulnerabilidade permite o atacante abrir um shell-reverso. Com isso o atacante ganha acesso à máquina invadida e consegue executar comandos no shell (terminal, prompt). A técnica é chamada de shell-reverso pois o atacante faz com que a máquina-alvo abra uma conexão para sua máquina. Logo, o firewall (que normalmente é configurado para barrar conexões de entrada em portas "desconhecidas") não consegue impedir a conexão.

Primeiramente vamos entender o conceito de firewall de host. O objetivo dele é aplicar regras para impedir ou bloquear conexões de serem estabelecidas com a máquina em que ele está instalado. Por padrão, o firewall do WINDOWS bloqueia as conexões de entrada que não estiverem liberadas por nenhuma regra e libera as conexões de saída que não casarem com nenhuma regra. Ou seja, conexões de entrada são bloqueadas e de saída (onde se encaixa o shell-reverso) são liberadas.



OBS.:

  • Conexões de entrada: conexões chegando na máquina onde o firewall está instalado
  • Conexões de saída: conexões saindo da máquina onde o firewall está instalado


Vamos supor que temos um servidor windows com um IIS rodando disponibilizando um portal web. Quando um cliente acessa o endereço desse servidor, é estabelecida uma conexão na porta 80 com o servidor. Ocorre o three-way handshake, a conexão é estabelecida e o servidor escreve o index do portal web para o cliente. A conexão então é fechada. E vamos supor que exista uma falha no nosso servidor que possibilite esse tipo de ataque.

Então como impedir essa conexão do shell-reverso de ser estabelecida ? É simples. Basta barrar todas as conexões de saída da máquina (Teoricamente, nosso servidor não faz requisições em nenhum lugar. Ele só atende requisições na porta 80). Para isso, basta ir no Painel de Controles, acessar a parte de Segurança e então o Firewall. Clicar na opção avançada do firewall. Irá abrir a tela com as regras de entrada e saída para o firewall.


Ao clicar com o botão direito em cima de "Windows Firewall with Advanced Security on Local Computer" (nú! que nome foi esse ?) e acessar propriedades, aparecerá a tela acima na qual está definida as regras padrão para conexões de entrada e de saída. Basta mudarmos Outbound connections para Block. Agora nosso firewall irá bloquear todas conexões de entrada que não casarem com alguma regra de liberação. 

Dessa forma, se sofrermos algum ataque que possibilite o shell-reverso, a conexão será barrada pelo firewall e falhará. Simples assim. Pra quem usa linux como servidor (99%), essas regras são definidas pelo iptables. Depois faço uma publicação explicando. 

Abraço. E qualquer dúvida, ja sabem...


Alias lembrei de uma coisa interessante. Já viu quando você acessa uma rede wireless e o windows te pergunta se é uma rede residencial, de trabalho ou pública ? Já parou pra pensar porque aquela tela chata sempre aparece ? É justamente para uma configuração automática do firewall. Quando você diz que é uma rede residencial (rede da sua casa), o windows entende que há pouca chance de ocorrer um ataque e configura o firewall para ser mais maleável. Quando você diz que está acessando uma rede pública (Wifi Grátis), o windows entende que há uma maior chance de ocorrer um ataque à sua máquina e configura o firewall com mais regras para tentar barrar ataques. E pensar que a maioria da galera clica sempre em rede residencial e deixa o firewall sem barrar quase nada heim ??? Te falar...