Capturar a bandeira – CTF (Capture the Flag)
As competições de Capture The Flag (CTF) existem há muitos anos e são muito populares na área de segurança. Em geral os desafios envolvem invasão de redes ou servidores, análise forense, engenharia reversa e desafios de criptografia. Como essa brincadeira é uma ótima oportunidade de aprendizagem e de treinamento, baixei uma máquina virtual projetada para esse fim e resolvi documentar o passo a passo do meu progresso rumo ao comprometimento do sistema.

Objetivo do jogo :
– Encontrar as 8 bandeiras escondidas dentro do servidor hackeando a rede, seus serviços e suas aplicações.
Bandeiras :
As bandeiras estão no formato HASH MD5 tipo flag{1a79a4d60de6718e8e5b326e338ae533}

Meu passo a passo :

Bandeira#1 – “Não vá pra casa Frank! Tem um Hex lá”

Como não sei nada sobre o endereço IP da máquina alvo, começo procurando por qualquer sinal dela dentro da rede virtual. Utilizo o netdiscover para isso.

O servidor DHCP do meu laboratório é o 192.168.250.150, logo a máquina alvo que estou procurando é 192.168.250.101. O próximo passo foi rodar um scanner bem simples com o nmap procurando apenas pelas portas mais comuns. O resultado me mostrou as portas 80 (HTTP) e 443 (HTTPS) abertas.

Sabendo disso fui logo acessando a porta 80 para ver o que tinha naquele servidor web. Me deparei com um site simples mostrando as regras do jogo e nada mais. Nenhuma dica, nenhuma bandeira até agora. Apenas sei que “catch me if you can” é o nome original do filme “Pegue-me se for capaz”.

Vamos começar a procurar dentro do código fonte dessa página para ver se achamos algo interessante. Talvez achemos algum email de contato, algum nome de programador ou algum comentário feito no código. Como não sabemos nada, temos que procurar em tudo.

Achei algo realmente interessante aqui. Um javascript que faz alguma coisa apenas quando o navegador for o IE4 (Internet Explorer 4).
O mais interessante é que o programador aqui deixa um comentário, “Certifique-se de remover isso quando for para produção”. Vou explicar brevemente.
Quando estamos desenvolvendo algum aplicativo, dividimos seus estágios em 2 etapas. DESENVOLVIMENTO e PRODUÇÃO.
Quando ainda estamos testando, dentro de um ambiente seguro na rede interna, fazemos certas gambiarras para que as coisas funcionem até entrarmos em produção. Não precisamos nos preocupar com a segurança da aplicação visto que ela será acessada apenas pelo pessoal interno da empresa.
Uma vez que entramos para o modo de PRODUÇÃO, entramos no mundo real, na parte selvagem da internet. Todos são inimigos potenciais e por isso temos que levar a seguraça a sério. Não foi feito isso aqui, infelizmente para a empresa e felizmente para o invasor.
Vamos ver o que tem dentro desse javascript…

Aqui você tem que ter uma certa experiência com criptografia. Uma pessoa leiga não perceberia que na primeira linha, aquele monte de números e letras, é na verdade uma sequência hexadecimal. Vamos usar o conversor hexadecimal xxd para confirmar isso…

Pronto, nossa primeira bandeira –> flag{7c0132070a0ef71d542663e9dc1f5dee}
Como sabemos que todas as bandeiras são hashs MD5, usei um serviço online para descobrir o que estava ali escondido e me retornou a palavra NMAP… humm

Bandeira#2 – “Segurança ou Obscuridade? Essa é a questão”

Eu já havia utilizado o nmap e agora a dica para a próxima bandeira é de novo o NMAP ? Demorei um pouco mas entendi que era para eu rever essa parte. Foi quando me lembrei que havia usado o scanner simples do nmap. APENAS AS PORTAS MAIS COMUNS. Dessa vez vou fazer um scanner completo procurando por TODAS as portas…

BINGO ! Esconderam o serviço SSH verdadeiro na porta 22222, que por padrão utiliza a porta 22, e deixaram a porta 22 padrão fechada. Segurança por obscuridade. A maioria dos administradores fazem isso para fugir de scripts automatizados que varrem a internet procurando pelas portas padrões. É muito eficaz contra ataques automatizados, mas não contra um ataque manual.
Vamos tentar logar no shell. Tentei logar usando as credenciais “desenv” pois sabia que se tratava de um sistema que já teve seu estágio em DESENVOLVIMENTO. Tentei “desenv” com  a senha “desenv”. Não deu certo, mas pelo menos consegui a minha segunda bandeira no banner do servidor SSH.

Vamos lá decifrar o hash MD5 em busca da próxima dica. 53c82eba31f6d416f331de9162ebe997 retornou “encrypt”.

Bandeira#3 – “Durante sua viagem, Frank manjava interceptar mensagens”

Fiquei 4 dias quebrando a cabeça aqui. “Criptografar”… Foi quando em casa, navegando no Amazon para fazer umas compras, olhei para o cadeado de segurança (certificado SSL) e tive um estalo… Voltei para o laboratório e fui inspecionar o certificado do servidor alvo…

Decifrando o hash MD5, obtive “personnel”. Pode ser uma senha ? Pode ser um diretório não listado no servidor web ? A única forma de descobrir é tentando…

Bandeira#4 – “Um bom agente é difícil de encontrar”

Tentei /personnel na barra de endereço e…

O diretório realmente existe, mas a mensagem dizendo que minha conexão não parecia vir de um computador do FBI. Qual mecanismo foi usado para diferenciar a minha máquina de uma máquina interna deles ? Como o servidor WEB saberia disso ? Até agora só tenho as dicas das bandeiras que eu consegui e o arquivo javascript. Voltei minha atenção para o arquivo javascript…

/* maindev – 6/7/02 Adding temporary support for IE4 FBI Workstations */
/* newmaindev – 5/22/16 Last maindev was and idoit and IE4 is still Gold image -@Support doug.perterson@fbi.gov */
Pelo visto o FBI ainda utiliza muitas estações de trabalho com o Internet Explorer 4. Por isso fizeram esse esquema do javascript. Entendemos bem aqui a importância de mantermos os sistemas atualizados ?. Utilizei um plugin do firefox que me permite mudar o user agent do meu navegador e….

No rodapé da página encontrei mais uma bandeira, flag{14e10d570047667f904261e6d08f520f} , que decifrei e obtive “evidence”. A dica era a palavra new+flag, logo “newevidence”

Bandeira#5 – “O demônio está nos detalhes– ou nas conversas? Simples, fácil de adivinhar ou pessoal ? Vai contra as boas práticas de segurança”

Pode ser uma senha, um nome de usuário ou um diretório oculto. Comecei pelo mais fácil e tentei /newevidence na barra de endereços.

Novamente um diretório oculto! Mas dessa vez pede usuário e senha.
Para termos sucesso em um hacking precisamos de conhecimento, instinto de detetive e contar com a sorte. Vocês vão entender.
Quando acessei o portal, fui recebido com a frase “Bem vindo agente Hanratty”

Deduzo que o usuário é o senhor Hanratty. Mas qual será o seu login ?
Volto para minhas anotações e vejo que o esquema de criação de nomes de usuários utilizados pelo FBI é nome.sobrenome. Aposto que sim pois eu vi “doug.perterson@fbi.gov” comentado no código fonte da pagina web.
Como eu assisti o filme “Pegue-me se for capaz”, eu sei que o agente Hanratty, estrelado por Tom Hanks, se chama Carl. Então eu apostaria que o login dele é carl.hanratty
O interessante desse detalhe do filme é que ilustra bem o fator sorte. Eu poderia não ter assistido e teria que usar uma wordlist com vários nomes e ir tentando um por um até encontrar o correto. Em um ataque real, o fator sorte é muito presente. Essa máquina CTF de treinamento conseguiu um nível de simulação da realidade bem alto aqui.
Bom já sei o nome de usuário… e a senha ? Bom, sabendo que se trata do agente Hanratty, entra agora o senso de detetive. Geralmente as pessoas tendem a escolher senhas simples e fáceis de lembrar. Datas de aniversários, números de telefones, nomes dos filhos, nome do cachorro etc… Lembrei que o nome da filha dele se chamava “Grace”. Não custa tentar.

Pronto ! Logado com sucesso. Mas como eu disse, eu poderia não ter assistido o filme. Nesse caso eu teria que recorrer a uma wordlist com milhares de nomes de usuários e senhas e ir tentando força bruta. Essa sorte me economizou algumas semanas.
“Evidence Summary File” me retornou mais uma bandeira flag{117c240d49f54096413dd64280399ea9}, que decifrei e obtive “Panam”

Bandeira#6 – “Em qual lugar do mundo está o Frank?”

Panam é a empresa aérea que foi fraudada no filme pelo Frank. Deixei isso anotado de lado caso precisasse dessa informação depois, nunca se sabe…
“Possible Location” me levou a essa imagem JPG

e “Case Invoices” me levou a um PDF

baixei esses 2 arquivos e comecei a analisar o PDF.

Nada de interessante aqui… vamos analisar o EXIF da imagem.

Talvez eu esteja indo para o caminho errado. Nenhuma informação relevante aqui. Volto para o PDF.
Contrataram um cara para fazer Encryption Consultation Project (projeto de consultoria em criptografia) e o pagamento era para um tal de Stefan Hetzl. Fiz uma pesquisa no google com esse nome e descobri que ele é o autor do steghide (programa de criptografia que esconde dados dentro de imagens). Usei muito essa ferramenta, então daí pra frente foi moleza 😉 Chutei como senha a palavra “panam” para extrair o arquivo flag.txt. Isso porque a encontramos na dica da bandeira anterior.

Tenho agora um txt com o hash MD5 d1e5146b171928731385eb7ea38c37b8, que decifrei e obtive “ILoveFrance” e uma dica “iheartbrenda”

Bandeira#7 – “Frank foi pego gritando – Sou o homem mais rápido que vive!”

Essa dica da bandeira 7 pra mim foi a mais estranha de todas. Bom, comecei fazendo uma pesquisa na net e vi que essa frase é usada por Barry Allen o nome do personagem The Flash. Tentei todos esses nomes procurando diretórios ocultos mas dessa vez não deu em nada. Então isso deve ser um login. O único lugar que eu tinha para fazer isso era o serviço SSH. Tentei “barry.allen” com a senha “iheartbrenda” mas não deu certo. Tentei “barryallen” e novamente a senha “iheartbrenda” e pronto ! Estava dentro !

Achamos a sétima bandeira flag{bd2f6a1d5242c962a05619c56fa47ba6}, que decifrada o hash MD5 me retornou “theflash”, e um arquivo chamado security-system.data.

Bandeira #8 Franks perdeu sua memória. Ele se trancou dentro do prédio. Ache o código para destravar a porta antes que ele se mate!

Fiz o download do arquivo security-system.data e dei um unzip nele. Extraiu um arquivo que mais parecia um dump de memória. Como a dica da oitava bandeira fala que Frank perdeu a memória, presumi estar no caminho certo.
Usei a ferramenta volatility para analizar o dump de memória e descobri que provavelmente é o dump de um windowsxp.

Sabendo disso, vamos mais a fundo e ver o que pode ter no histórico do internet explorer

Um arquivo code.txt no Desktop. Vamos ver o que foi digitado no console

O arquivo code.txt foi digitado em hexadecimal, vamos decifrar isso usando novamente a ferramenta xxd…

E assim consegui a bandeira final ! flag{841dd3db29b0fbbd89c7b5be768cdc81} com o hash MD5 decifrado para “Twolittlemice”
FIM 😉

 

Nota final

Vimos o quanto é importante fazer o footprint do alvo antes de tentar ataca-lo. Todos os invasores de sistemas o fazem muito bem. Quem trabalha com segurança de dados deve estar ciente disso e tentar minimizar o máximo de vazamento de informações da empresa na qual trabalha. Mais da metade do tempo gasto por um invasor será estudando o seu alvo.
Nessa CTF eu demorei 1 semana para conseguir pegar todas as bandeiras. Pode parecer muito mas uma vez, na vida real mesmo, obtive acesso a sistemas de uma multinacional bem conhecida depois de “apenas” 3 meses burlando diversos sistemas de segurança até atingir meu objetivo. Hoje, para não violar nenhuma lei, prefiro fazer esses ataques controlados dentro de laboratórios. Tudo dentro da lei.

Fernando F. Hiagon
IT manager @ Taiyo Corporation