DevSecOps

25 nov, 2008

Metasploit Framework – Parte 02

Publicidade

História do desenvolvimento do MSF

A primeira versão estável do MSF foi lançada em meados de 2004. Originalmente escrito em Perl, Assembler e C. Seus desenvolvedores (veja a lista no endereço) resolveram quebrar o paradigma de como os exploits eram desenvolvidos até então. Escrever um exploit anteriormente era uma tarefa complexa, e a exploração de uma vulnerabilidade exigia conhecimentos profundos em programação especifica para cada plataforma. O MSF veio para diminuir essa complexidade e fazer intenso re-uso de código, assim como faz a concepção da programação orientada a objetos. Digamos que antes do MSF o desenvolvimento dos exploits era feito no melhor estilo da programação procedural tradicional, e depois do MSF a pesquisa começou a se basear na programação orientada a objetos.

A versão 2.x foi substituída pela versão 3.x, totalmente reescrita na linguagem Ruby que é uma linguagem O-O real, com características únicas, como: alto nível de introspecção, recriação automatizada de classes, suporte a threading com plataforma independente e, finalmente, porque é uma linguagem que os desenvolvedores realmente sentem prazer em usar. Como resultado do uso do Ruby, o código original foi enxugado em quase 40, entretanto algumas partes do código ainda estão em Assembler e C.

Com a versão 3.x, a licença passou da GPL 2 para a Metasploit Framework License v1.2 (http://metasploit.com/svn/framework3/trunk/documentation/LICENSE) mais parecida com a GPL 3. O Objetivo da nova licença é proteger o núcleo do projeto do uso comercial, mas, ao mesmo tempo, autorizar a integração com módulos comerciais agregados, desde que estes módulos não modifiquem o framework. Em suma, o Metasploit continua sendo open source, e não acontecerá com ele, segundo os desenvolvedores, o que aconteceu com o scanner de vulnerabilidades Nessus.

Tecnologia

O núcleo do Metasploit reside no REX (Ruby Extension Library) que é uma coleção de classes e métodos. A descrição completa das classes e métodos pode ser acessada no endereço:

http://framework.metasploit.com/documents/developers_guide.pdf

E a documentação da API REX:

http://framework.metasploit.com/documents/api/rex/index.html

Para exemplificar algumas entre as muitas funcionalidades dessas classes do REX, durante o desenvolvimento do exploit precisamos ajustar o stack pointer, muitas vezes isso significa chamar determinado operador, que são específicos para cada plataforma, como por exemplo: jmp opcode na arquitetura x86. Então invocamos a classe Rex::Arch:: para ajustar o stack pointer e depois especificarmos a plataforma com Rex::Arch::X86 com os métodos jmp, mov, sub, pack, add, call, clear, etc.

Outro exemplo famoso e infame é a classe Rex::Exploration::Seh. O Structured Exception Handling, SEH, é uma proteção usada para checar o controle do fluxo cada vez que uma exceção acontece. Um estouro de buffer modifica o fluxo comum do programa e o SEH trata desses erros. A classe Rex::Exploration::Seh pode ser usada para evadir o SEH.

Para maiores informações consulte:

http://www.eeye.com/html/resources/newsletters/vice/VI20060830.html

Ou ainda:

http://freeworld.thc.org/download.php?t=pf=Practical-SEH-exploitation.pdf

Framework Core: É formado de vários sub-sistemas como gerenciamento de módulos, sessões, despacho de eventos, etc.

Framework Base: Provê a interface para interagir com o Framework Core provendo configurações, registro de logs e sessões.

Interfaces: Provê a interface com o usuário, atualmente são: msfconsole, msfcli, msfgui, msfweb, msfd.

Módulos: São compostos pelos exploits, payloads, encoders, NOP generators e módulos auxiliares, como por exemplo, scanners, conexão com base de dados (MS-SQL), fuzzers de protocolo, etc. A lista completa pode ser acessada com o comando show all na interface msfconsole e informações específicas do módulo com o comando info <module_name>.

Plugins: Podem ser comparados aos módulos no sentido de trazer funções extras ao framework.

Para o iniciante é importante saber a diferença entre exploit e payload. Exploit é a exploração da falha em si, que permite ao explorador fazer alguma coisa. O payload é a coisa que será feita. Um comando a ser executado, um shell, etc.

O Metasploit conta ainda com outras tecnologias, como por exemplo, a evasão de Intrusion Detection Systems (IDS) e Intrusion Prevention Systems (IPS), tornando a vida dos detectores de intrusão mais difícil. Atualmente os IDSs e IPSs ainda têm muitos problemas, e certamente ainda estão longe de uma funcionalidade considerada ideal e robusta.

O Metasploit pode servir para auditar essas ferramentas. Existem varias classes que podem ser usadas para evadir os detectores de intrusão, TCP::max_send_size, TCP::send_delay, HTTP::chunked, HTTP::compression, SMB::pipe_evasion, DCERPC::bind_multi, DCERPC::alter_context, entre outros.

Outra tecnologia que merece destaque é o Metasploit anti-forensics chamada de MAFIA (Metasploit Anti-Forensic Investigation Arsenal). O MAFIA é constituído basicamente das ferramentas:

Timestomp: Usado para modificar os arquivos do sistema de arquivo New Technology File System (NTFS). Pode-se modificar os valores de quando os arquivos foram criados, deletados, etc.

Slacker: Usado para esconder arquivos em partições NTFS.

Sam Juicer: Um módulo do Meterpreter usado pra extrair hashes dos arquivos SAM sem acessar o disco rígido.

Transmogrify: Ferramenta usada pra passar pelo EnCases file-signaturing.

Tecnologia do Meterpreter Payload

A fase chamada pós-exploração foi significantemente melhorada na versão três. Um dos principais payloads do MSF é o Meterpreter. O Meterpreter tenta ser invisível ao sistema atacado. Para ilustrar, vamos ao exemplo de problemas: Host Intrusion Detection Systems podem soar um alarme assim que você digitar seu primeiro comando no shell ou mesmo deixar rastros para que o perito forense descubra o que foi feito durante o ataque.

Para finalizar esse capitulo introdutório, que não tem por objetivo ser exaustivo com relação à tecnologia do framework, lembre-se de que, como todo projeto open source, é muito dinâmico e novidades são incorporadas da noite para o dia. Esperamos que todos possam aprendam muito mais sobre segurança com o uso do Metasploit Framework.