segunda-feira, 20 de maio de 2013

O Metasploit é um framework que auxilia o profissional de segurança da informação a desenvolver e executar exploits. Ele é figurinha carimbada em testes de invasão atualmente, sendo até meio que mal utilizado pelos testers (executar odb_autopwn e mostrar que conseguiu shell *não* é penetration testing!). Se você trabalha com segurança da informação ou mesmo se você é um administrador de redes que gosta de verificar a segurança dos seus servidores (parabéns pra você!), com certeza já usou o Metasploit Framework.

Mas, mesmo usando tanto o Metasploit, você já parou pra pensar nas diferenças entre os tipos de payloads que ele oferece? Você sabe o que é um payload? Então vamos aprender isso hoje! :)

O que é um payload?


A definição da SecurityFocus.com:


The part of the packet, message or code that carries the data. In information security, the term payload generally refers to the part of malicious code that performs the destructive operation.

Em tradução livre:


A parte do pacote, mensagem ou código que contém os dados. Em segurança da informação, o termo payload geralmente se refere à parte do código malicioso que executa alguma operação destrutiva.

No caso de um exploit, o payload é a parte do código injetada na vítima que vai executar alguma ação: criar um usuário, iniciar um processo, apagar arquivos, etc. Ou seja lá o que for que o atacante quer que seja executado quando a vulnerabilidade for explorada com sucesso pelo seu exploit.

A maioria dos tutoriais que você encontra na Internet raramente abordam payloads em detalhes. “Seleciona o exploit X para isso e um payload à sua escolha” (ficou parecendo objetivo do War, mas deu pra entender! heheh), chegando ao ponto de simplesmente falar para você escolher o Meterpreter em casos onde ele simplesmente não é a melhor escolha ou onde ele vai apenas levar mais tempo pra fazer o que um outro payload faz. A seleção do payload correto é tão importante quanto a seleção do exploit.


NOTA: Aqui vai mais um aviso para os iniciantes: quando você encontra um exploit na Internet, não saia apenas compilando e executando. São inúmeros os casos de exploits que têm payloads que ao serem executados simplesmente apagam todo o conteúdo da máquina local (não da vítima). Por isso, é importante que você analise e entenda o que o payload do exploit que você pegou vai fazer e que você execute este exploit antes em um ambiente de testes para não arriscar perder dados.

Se você digitar “show payloads” no “root” do msfconsole vai ver que ele vai te mostrar todos os 251 payloads disponíveis (este é o número atual enquanto escrevo este texto). Se você digitar o “show payloads” depois de selecionar um módulo específico, ele irá mostrar apenas os payloads compatíveis com aquele exploit. Isso acontece por que se você selecionar o payload errado, você pode acabar travando o seu alvo e tendo uma dor de cabeça bem grande se estiver fazendo um penetration test em um sistema crítico. Existe um payload adequado para cada situação e para entender qual deles escolher, você precisa entender que eles são separados em diferentes categorias: stagers, stages e singles (ou inline).

Geralmente você consegue descobrir o tipo de um payload lendo a descrição dele. Lá é muito frequente estar dizendo claramente o tipo do payload. Alguns exemplos:
windows/shell/reverse_ord_tcp: Windows Command Shell, Reverse Ordinal TCP Stager (No NX or Win7). Pela descrição, já sabemos que este é um stager.
windows/x64/shell_reverse_tcp: Windows x64 Command Shell, Reverse TCP Inline. Este, por outro lado, é um payload do tipo single (note o uso da palavra “inline” no final da descrição).

No resto deste post vamos discutir cada um dos tipos de payloads e também mostrar exemplos.

Stagers e stages


Vou discutir stagers e stages no mesmo tópico pois eles são complementares. Payloads do tipo stage usam payloads stagers para completar uma tarefa.
Em alguns casos, o pesquisador precisa lidar com tão pouco espaço em memória que não é possível usar um payload single para fazer o que ele quer. Nestes casos, ele precisa de stagers para conseguir fazer com que a vítima execute alguma ação.

Considere o seguinte caso: quando você consegue explorar a falha você vê que vai ter pouco espaço em memória. Então, você seleciona um stager que será enviado como payload para a vítima quando o exploit tiver sucesso em explorar uma vulnerabilidade. Quando o stager é executado na vítima, ele entra em contato com um host para que este lhe envie o resto do código que deve ser executado. Aí sim acontece a criação de um usuário, execução do NC, etc. É exatamente assim que o Meterpreter funciona: ele é um payload do tipo stage.

Um lado negativo óbvio de stages é que eles precisam manter uma conexão ativa com uma máquina para que esta possa enviar o resto do código a ser executado na vítima para que a invasão seja completada. O lado positivo é que o tamanho de memória não é exatamente um problema já que estes payloads são desenvolvidos para serem minúsculos e ocuparem o mínimo de memória possível.

Alguns exemplos são:

bind_ipv6_tcp (stager para Linux x86)
bind_tcp (stager para Windows)
meterpreter (stage multi-plataforma)
dllinject (stage para Windows)
Singles (ou “Inline”)

Payloads do tipo single são payloads maiores e que não precisam de complemento algum para poderem fazer o seu papel.
Quando uma vulnerabilidade é explorada com sucesso e um payload do tipo single é enviado para a máquina, ele já é capaz de executar todas as tarefas que você requisitou (fazer o download de um arquivo, criar um usuário, iniciar uma aplicação, criar uma chave no registro, etc). Portanto, a máquina do atacante não precisa de um stager dizendo ao módulo inline o que fazer à seguir: ele vai ser entregue à vítima, executado e irá completar a sua tarefa por inteiro, sem precisar receber mais instruções da máquina de origem.

O problema com este tipo de payload é que ele é fisicamente grande e nem sempre você vai ter espaço suficiente na memória da vítima para acomodar um payload single. Portanto, quando o espaço em memória é uma questão a se considerar, é melhor não se utilizar payloads single ou inline. Estes payloads, entretanto, são bastante eficientes em ataques através de dispositivos USB e também quando se quer persistência na máquina invadida (permitindo que algum software que você instalou sempre seja executado mesmo depois de reiniciar a máquina para permitir que você se conecte à ela novamente, por exemplo).

Alguns exemplos de payloads inline são:
windows/x64/shell_bind_tcp
windows/shell_bind_tcp
osx/x86/vforkshell_reverse_tcp

Conclusão


Como tentei deixar claro no texto, existem muitos detalhes que você deve considerar antes de sair executando exploits à torto e à direito por aí. Você precisa analisar a situação e lançar um ataque o mais eficiente possível até para não acabar travando a máquina que você está atacando ou acabar sendo detectado pelo IPS durante o teste (já vi casos onde clientes definem que se o atacante for detectado pelo IPS, o teste acaba na hora). Você precisa verificar quais são os payloads compatíveis com o módulo que você está usando e escolher o que é mais eficiente, considerando a sua finalidade. Não escolha o Meterpreter simplesmente por ele oferecer mais funcionalidades: isso pode acabar sendo um belo tiro no pé e te causando muita dor de cabeça e possivelmente um pouco de vergonha também. :)

Se você quiser uma lista completa de qual o tipo de cada um dos exploits existentes no framework, vá até o diretório /opt/metasploit/msf3/modules/payloads (no Backtrack 5 R2 – no seu sistema este caminho pode variar). Lá você vai encontrar três diretórios: singles, stagers e stages. Basta fazer uma listagem dos arquivos em cada diretório para confirmar o tipo do payload. Como regra geral, você pode simplesmente observar o path completo do payload. Se tiver um “_” quer dizer que ele é um single; se tiver um “/” é um stage/stager. Note que não são todos que obedecem esta nomenclatura e isso pode mudar um pouco, mas são raros os casos.

Agora que você já entende quais são e quais a diferenças entre os tipos de payloads oferecidos pelo Metasploit, passe um tempo planejando e escolhendo qual deles vai te atender melhor. Este tipo de ação é o que mais vai te render frutos, não simplesmente sair executando exploits por aí!

​Creditos:Pedro Pereira

0 comentários:

Postar um comentário

Subscribe to RSS Feed Follow me on Twitter!