Metasploit Framework de cabo a rabo – Parte 1
Fala galera, no post de hoje eu vou começar uma série de uns 3 ou 4 posts específicos sobre o Metasploit, onde vou tentar fazer uma abordagem desde da área mais básica possível até questões mais avançadas, a ideia é que ao invés de você ficar seguindo receitas de bolo de explorações de determinadas vulnerabilidades, onde muitas vezes a pessoa nem sabe o que é o Metasploit, essa série possa ser um guia explicativo da ferramenta como um todo. É como eu sempre tento fazer não só aqui no blog, mas em qualquer lugar, mostrar a importância de ter o conceito/conhecimento técnico por trás da atividade que está sendo realizada.
Essa não é a primeira vez que eu falo sobre o Metasploit aqui no blog, mas vai ser a primeira vez que vou fazer uma abordagem estruturada e aprofundada. Mas caso você queira dar uma olhada no que já foi falado aqui é só checar os links abaixo. Se o tema Metasploit não for novo pra você, eu recomendo o post sobre o plugin pentest.rb do Metasploit 😉
Instalação e configurações básicas do Metasploit – Windows
Pentest.rb – O plugin externo para Metasploit
Um pouco de História
O Metasploit não é apenas uma ferramenta, ele é um framework completo que provê a infraestrutura necessária para automatizar rotinas e tarefas complexas. Isso permite que você se concentre em aspectos específicos do pentest.
O Metasploit foi originalmente desenvolvido por HD Moore enquanto ele trabalhava para uma empresa de segurança. Quando HD percebeu que ele estava perdendo a maior parte do tempo dele validando e sanitizando códigos de exploit públicos, ele começou a criar um framework flexível e sustentável para criação e desenvolvimento de exploits. Ele lançou a primeira edição do Metasploit (Perl-based) em outubro de 2003 com um total de 11 exploits.
Em abril de 2004, com a ajuda do Spoonm, HD lançou a versão 2.0 com o projeto totalmente reescrito. Essa versão incluía 19 exploits e mais de 27 tipos de payloads. Brevemente depois do lançamento dessa versão Matt Miller se juntou ao time de desenvolvimento, e como o projeto ganhou popularidade, ele recebeu total suporte da comunidade de segurança da informação e rapidamente se tornou uma ferramenta obrigatória para pentest e exploitation.
Em 2007 o Metasploit foi migrado da linguagem Perl para a linguagem Ruby e foi lançado a versão 3.0 da ferramenta. Em 2009 o Metasploit foi adquirido pela Rapid7, o que permitiu que HD montasse um time focado totalmente no desenvolvimento do Metasploit Framework. Desde essa aquisição a quantidade de atualizações ocorreram mais frequentemente do que qualquer um poderia esperar. A Rapid7 lançou duas versões da ferramenta, Express e Pro. Hoje, no ano de 2018, o Metasploit está na versão 4.x.
Terminologias
Caso esse seja seu primeiro contado com esse tema, você pode ficar sobrecarregado pela quantidade de termos, interfaces, opções, utilitários e variáveis do Metasploit. Por isso irei começar com algumas terminologias básicas para te ambientalizar no aspecto geral.
Exploit – Um exploit é o meio pelo qual um atacante tira vantagem de uma falha dentro de um sistema, aplicação ou serviço. Um atacante usa um exploit para atacar um sistema de maneira que isso resulte em um comportamento particular jamais imaginado pelo desenvolvedor. Explorações comuns incluem buffer overflow, vulnerabilidades web e erros de configuração em geral.
Payload – Um payload é o código que nós queremos que o sistema execute e que é selecionado e entregue pelo Framework. Por exemplo, um shell reverso é um payload que cria a conexão da máquina alvo para o host do atacante com o prompt de comando do Windows. Já um bind shell é um payload que faz com que a máquina alvo fique ouvindo em uma determinada porta, onde o atacante por sua vez pode se conectar. Além desses exemplos, um payload pode ser algo tão simples quanto um punhado de comandos a serem executados no sistema operacional do alvo.
Shellcode – Shellcode é um conjunto de instruções usadas como um payload quando a exploração ocorre. O shellcode é tipicamente escrito em linguagem assembly. Na maioria dos casos, um command shell ou um meterpreter shell será disponibilizado depois que uma série de instruções forem realizadas pela máquina alvo, daí o nome.
Module – Um módulo é um pequeno software que pode ser usado pelo Metasploit. Às vezes, você pode precisar usar um módulo de exploit, um componente de software que conduz o ataque. Em outras ocasiões, você pode precisar usar um módulo auxiliar para realizar ações como scanning ou enumeração de sistemas e serviços. Esses módulos são o que tornam o Metasploit tão poderoso.
Interfaces do Metasploit
O Metasploit oferece mais de uma interface ao usuário, incluindo console, linha de comando e interface gráfica. Além dessas interfaces, utilitários fornecem acesso direto a funções que são normalmente internas ao Metasploit. Esses utilitários podem ser inestimáveis para o desenvolvimento do exploit e situações que você não precisa da total flexibilidade do Framework.
MSFconsole – O msfconsole é de longe a parte mais famosa do Metasploit Framework, mas por uma boa razão. Ele é a ferramenta mais flexível, rica em recursos e melhor suportado dentro do projeto. O msfconsole fornece uma interface manual all-in-one para quase todas as opções e configurações disponíveis no Metasploit. Você pode usar o msfconsole para fazer tudo, incluindo executar exploits, carregar módulos auxiliares, fazer enumeração ou executar uma exploração em massa em uma rede inteira.
Para carregar essa interface basta digitar msfconsole no terminal, essa é uma parte de conhecimento obrigatório dentro do Framework e nós vamos utilizá-la bastante aqui. Para acessar o help do msfconsole basta digitar o comando help no terminal do msfconsole para ver as diversas opções disponíveis.
MSFcli – O msfcli e o msfconsole tem abordagens bem diferentes para dar acesso ao Framework. Enquanto o msfconsole fornece uma maneira interativa de acessar todas as funcionalidades de uma maneira amigável, o msfcli dá prioridade a “compatibilidade” com outras ferramentas console-based para desenvolvimento de script. Ao invés de fornecer um único interpretador do Framework, o msfcli é executado diretamente do terminal, o que permite utilizar a saída de outras ferramentas como input para o msfcli e vice-versa. Em junho de 2015 o executável msfcli foi descontinuado (por isso o nome está riscado), mas suas funções foram incorporadas ao msfconsole utilizando o parâmetro -x:
Armitage – O armitage é um componente do Metasploit que é totalmente gráfico e interativo, ele foi criado por Raphael Mudge. Essa interface é cheia de recursos, intuitiva e gratuita. Eu não vou ficar abordando o armitage nessa série de posts do Metasploit, até porque, para poder usar o armitage de forma ampla tu precisa ter o conhecimento do Metasploit como um todo. Particularmente eu não curto usar o armitage, prefiro o msfconsole e msfcli.
Utilitários do Metasploit
Agora que você já conheceu as três interfaces do Metasploit, está na hora de conhecer alguns utilitários. Os utilitários do Metasploit são interfaces diretas a funcionalidades específicas da arquitetura do Framework que podem ser bastante úteis em algumas situações.
MSFpayload – O msfpayload é um componente do Metasploit que permite gerar shellcode, executáveis e mais algumas coisas para serem usadas em explorações fora do Framework. O shellcode pode ser gerado em diversas linguagens, incluindo C, Ruby, JavaScript, Python, PHP, Visual Basic e muitas outros.
MSFencode – O shellcode gerado pelo msfpayload é totalmente funcional, porém ele contém caracteres nulos que podem ser interpretados por alguns programas como o final da string e isso pode causar uma interrupção inesperada do código. Em outras palavras os x00s e xffs podem dar pau no seu payload. Além disso, quando esse shellcode passa pela rede em texto claro, ele é facilmente detectado pelos sistemas de IDS e software antivírus. Para tentar resolver esse problema o Metasploit desenvolveu o msfencode, que nos ajudar a bypassar os antivírus e os IDS da vida.
O Metasploit possui uma série de diferentes encoders para diversas situações, algumas irão ser útil quando você utilizar somente caracteres alfanuméricos, enquanto em outras situações encoders genéricos serão de grande ajuda. Mas caso você fique na dúvida, um encoder que tem um alto índice de qualidade e estabilidade é o shikata_ga_nai, nos iremos ver mais sobre ele e outros encoders mais pra frente.
MSFvenom – Você deve estar se perguntando por que os utilitários citados acima estão riscados, é bem simples, eles não existem mais😱! Mas porque eu expliquei o que eram eles? Por que eles foram fundidos por questões de usabilidade para a criação do msfvenom 😍! Essa mudança ocorreu no início de junho de 2015. Tudo o que era feito usando dois utilitários agora é feito em um só 😉
Arquitetura
O Metasploit usa diferentes bibliotecas que detêm a chave para o bom funcionamento do framework. Essas bibliotecas são uma coleção de tarefas, operações e funções predefinidas que podem ser utilizadas por diferentes módulos da estrutura. A parte mais fundamental do framework é a biblioteca Ruby Extension (Rex). Alguns dos componentes fornecidos pelo Rex incluem um subsistema wrapper socket, implementações de protocolo cliente/servidor, um subsistema de logging, classes de utilitários de exploração e várias outras classes úteis. O próprio Rex foi projetado para não ter dependências, a não ser as que vem com a instalação padrão do Ruby.
Em seguida temos o MSF Core, o Core é responsável por implementar todas as interfaces necessárias que permitem interagir com módulos de exploração, sessões e plugins. Essa biblioteca principal é estendida pela biblioteca de base do framework que é projetada para fornecer rotinas de wrapper mais simples para lidar com o núcleo do framework, além de fornecer classes utilitárias para lidar com diferentes aspectos do framework, como serializar um estado de um módulo para diferentes formatos de saída. Na sequência temos a interface de usuário da estrutura que implementa suporte para os diferentes tipos de interfaces de usuário, como o console e a interface web por exemplo. Por último temos os módulos, sendo eles:
Exploits – É o módulo que executa a sequência de comandos tendo como alvo uma vulnerabilidade específica encontrada em um sistema ou aplicação. Esse módulo fornece acesso ao sistema alvo após a exploração. Exemplos desse módulo são buffer overflow, code injection e web application exploits.
Payload – Esse módulo é responsável por selecionar e configurar o shellcode que será executado após a exploração da vulnerabilidade. Ele também permite definir como se conectar a shell e o que você deseja fazer no sistema depois de ter controle sobre ele. (Ex. Meterpreter).
Encoders – É o módulo responsável por fazer o encoding do código que será executado remotamente (payload) de modo que os sistemas de detecção de intrusão e/ou antivírus não o detecte.
Nops – Esse módulo mantêm o tamanho do payload consistente. Ele produz uma série de bytes randômicos que você pode usar para fazer o bypass de IDS e IPS.
Auxiliary – Esse módulo não executa um payload. Ele pode ser usado para realizar ações diversas que podem não estar diretamente ligadas a exploração. Exemplos de módulos auxiliares incluem scanners, fuzzers e ataques de DoS.
Bem pessoal é isso ai, espero que tenham curtido. No próximo post da série iremos começar a ver a parte de coleta de informação com o Metasploit, scanning de rede e vulnerabilidade e muito mais. Não preciso dizer que esse post tem fins educacionais apenas, não utilize esse conhecimento para fins maliciosos. Não esqueçam de curtir nossas páginas nas redes sociais, Facebook, G+ e seguir o Guia do Ti no Twitter. Compartilhem e comentem esse artigo, isso é muito importante para divulgação do nosso trabalho.
Referências
Book: Metasploit - The Penetration Tester's Guide https://blog.rapid7.com/2011/05/24/introducing-msfvenom/ https://www.peerlyst.com/posts/metasploit-quick-tips-for-security-professionals-abhinav-singh https://metasploit.help.rapid7.com/docs https://www.offensive-security.com/metasploit-unleashed/
- Metasploit Framework de cabo a rabo – Parte 6 - 4 de junho de 2018
- Metasploit Framework de cabo a rabo – Parte 5 - 28 de maio de 2018
- CEH – Scanning Networks – Parte 2 - 24 de maio de 2018
Começo a ler sua série de artigos em razão de uma Pós que estou fazendo, realmente muito esclarecedor. Obrigado por compartilhar!