Pwn2Win CTF 2017 – Bastidores

No começo do ano, mais especificamente em fevereiro, logo após o Pwn2Win PTE, decidimos fazer mais uma edição do Pwn2Win CTF, e então começamos a saga que durou 10 meses para criar uma experiência única em termos de CTFs, com infraestrutura própria e diferenciada, plataforma segura sem riscos de ser ownada (ou dos resultados serem contestados, como aconteceu recentemente em uma competição internacional), além de muitos challenges originais e únicos.

Essa edição contou com muitas novidades, como a plataforma NIZKCTF, o provisionamento de instâncias exclusivas por meio de containers LXC, e uma rede VPN para os times que se qualificassem fazendo no mínimo 8 desafios.

Apoio Institucional

Este ano, tivemos apoio institucional da Pró-Reitoria de Extensão da UFSCar, por meio do processo ProEx nº 23112.003615/2017-82.

Equipe

Com uma equipe multidisciplinar, composta por membros do ELT e alguns convidados, foi possível concretizar com maestria esse evento épico! Abaixo, os responsáveis e suas funções:

Álisson “gnx” Bertochi (ELT) – gerenciamento geral da equipe, divulgação, criação da estória e de challenges nas categorias PPC, Forensics, Networking, Web, Misc, Exploitation e Attack Step;

Anderson “DarkShymia” Tomkelski (ELT) – criação de challenge de Eletrônica;

André “andre_smaira” Smaira (ELT) – criação de challenges de Forensics, PPC-M e Physics;

Antônio Carlos Falcão Petri (convidado) – backend da Plataforma;

Bruno “v3ntur4” Ventura (convidado) frontend da Plataforma;

Caio Lüders (ELT) – colaboração na homologação de alguns challenges;

Éderson “edtsz” Szlachta (convidado) – confecção dos certificados dos times vencedores;

eremitah (convidado) – ideias e revisão da estória;

Fernando “feroso” Dantas (ELT) – criação de challenges de Exploitation;

Gabriel “spooks” Alves (convidado) – tradução e revisão das descrições, Provisionador do game;

Luan “herrera” Herrera (ELT) – criação de challenges Web e homologação de desafios;

Luca “C4ndy” Otoni (convidado) – contribuição com traduções;

Lucas “whoisroot” Magalhães (convidado) – Provisionador do game;

Manoel “Manoel” Netto (ELT) – criação de challenge Web;

Paulo “thotypous” Matias (ELT) – criação de challenges de Forensics, Reversing e Eletrônica. Gerenciamento da Infraestrutura, da Equipe da Plataforma e Plataforma PPC-M;

Pedro “pedroysb” Barbosa (ELT) – criação de challenges de Crypto e Exploitation, backend da plataforma;

Rodolfo “rodolfoams” Marinho (convidado) – criação do challenge “Intel SGX”, juntamente com o pedroysb;

Thiago “thnc” Cardoso (ELT) – criação de challenges de Reversing e Misc, backend da plataforma;

Thiago Mosqueiro (convidado) – traduções iniciais das descrições e auxílio em um challenge Misc;

Venício “arkadio” Santos (convidado) – auxílio na homologação de um challenge de Forensics;

Principais desafios

Gerenciamento da Equipe

Gerenciar uma equipe composta por tantas pessoas é um desafio complexo e extremamente desgastante. Utilizamos o Trello, com checklists e todas as outras informações importantes pertinentes ao evento, e fizemos reuniões mensais no IRC (sempre na primeira segunda-feira, com agenda predefinida) para acompanhar o andamento das atividades. Também utilizamos um grupo no whatsapp para contato em realtime, além de um repositório SFTP para centralizar os arquivos e informações dos desafios, quando finalizados. O Google Docs foi utilizado na reta final para organizar informações dos challenges e máquinas que seriam utilizadas.

Infraestrutura

A Infraestrutura sempre é um dos maiores desafios de qualquer competição Capture the Flag. Dessa vez, por utilizarmos o GitHub com nossa nova plataforma do game, atrás da CloudFlare, foi um problema a menos para nos preocupar. Utilizamos infraestrutura pública, sem gastar um centavo, e tivemos um dashboard rodando 100% estável (fora alguns problemas no começo da competição, que foram resolvidos com ajustes na configuração da AWS Lambda). O carro-chefe na nossa infra, além do GitHub, foi a Nuvem UFSCar (OpenStack).

Abaixo, um resumo das tecnologias e serviços utilizados no evento:

  • AWS Lambda: utilizado para CI (Continuous Integration) da plataforma;
  • Azure: os challenges Windows (algo não tão convencional em CTFs) do feroso utilizaram instâncias na Azure;
  • Bitbucket: utilizamos um repositório privado no Bitbucket para armazenarmos códigos de challenges mais complexos;
  • Containers LXC: essa tecnologia foi usada para os challengesisolated“, onde foram provisionadas máquinas únicas, exclusivas e isoladas para cada time que resolvesse 8 desafios, recebendo assim as credenciais para a rede VPN;
  • CloudFlare: gerenciamento de DNS, proteção, cache e certificado SSL para o dashboard:

  • DreamHost: utilizamos a DH como mirror para nossos files estáticos;
  • GitLab: deixamos o GitLab de prontidão, caso ocorresse algum problema no GitHub e precisássemos migrar “on the fly“;
  • GitHub: plataforma do game e dashboard no github.io;
  • Nuvem UFSCar (OpenStack): utilizamos para todas instâncias (máquinas para os challenges), repositório principal dos files estáticos (via Swift) e load balancer para challenges que sofreriam diversas conexões simultâneas. Segue uma imagem com o total de recursos utilizados na Nuvem UFSCar (OpenStack):

  • Rede Backup: Contamos com endpoints de backup no IFSC-USP, gentilmente cedidos pelo Prof. Carlos Antônio “Totó” Ruggiero, para eventuais emergências. Agradecemos ao Aparecido Luciano Breviglieri Joioso, Marcelo Fernando Camargo Sirbone, Fábio Rogério da Silva e Fabiano Losilla de Carvalho por configurarem um enlace L2 pela Rede Metropolitana de São Carlos conectando esses endpoints à Nuvem UFSCar;
  • Vultr: alugamos na Vultr a VPS do challenge “Blackbox Pentesting”.

Plataforma e Provisionamento

A plataforma utilizada foi criada “from scratch”, e é baseada em provas não-interativas de conhecimento zero. Mais informações podem ser encontradas no nosso artigo arXiv:1708.05844. Apesar de ser um pouco mais “complexa” para instalação e utilização, levando em conta as plataformas baseadas em web tradicionalmente utilizadas, que são totalmente user-friendly, a nossa proporciona segurança e auditoria que as outras não proporcionam.

O Provisionamento da VPN para os desafios isolados foi integrado com a plataforma, que monitorava a quantidade de desafios resolvidos pelas equipes, e quando atingisse o limiar de 8 desafios, subia os containers para o time e mandava as informações para configurar a VPN com o script “setup-vpn” através de news privadas e encriptadas. Mais detalhes podem ser encontrados no artigo que publicamos na Trilha de Ferramentas da SBSeg 2017, e que será apresentado em Brasília pelo Gabriel Alves no dia 7 de novembro.

Segue uma imagem da infraestrutura utilizada para os desafios isolados:

Bons challenges

Ter bastante tempo para trabalhar e lapidar bons challenges é essencial, por isso utilizamos os 10 meses disponíveis para essa missão. Obviamente, nem todos membros da equipe aproveitaram todo o tempo, mas quem conseguiu aproveitar, fez muitos challenges de altíssimo nível.

Ranking Geral

Primeiramente, gostaríamos de parabenizar o FireShell, time brasileiro melhor colocado, figurando no Top 11. Os poloneses do p4 e Dragon Sector, que venceram ano passado, não é nenhuma novidade estarem no topo, mas quem realmente surpreendeu, destruindo a competição jogando com apenas 3 players (WTF!), foi o ESPR. Estamos realmente impressionados com o desempenho esmagador desse Dream Team. Além disso, ao invés de ficarem com a premiação de R$ 1000,00, eles decidiram doá-la para o Hospital de Câncer de Barretos. Uma nobre atitude de um grande time!

Gráfico Top 10

A evolução do Top 10 pode ser vista abaixo:

Estatísticas

Número de times

  • Times inscritos: 283
  • Times pontuantes (ao menos uma submissão correta): 207
  • Times provisionados na VPN (resolveram ao menos 8 desafios): 31
  • Evolução ao longo do tempo:

Países participantes (com base nos times que disponibilizaram essa informação)

  • Total de países: 43
  • Países com mais times inscritos:
    1. US – 43
    2. BR – 30
    3. CN – 15
    4. KR – 14
    5. JP – 12
  • Países com mais times pontuantes (ao menos uma submissão correta):
    1. US – 36
    2. BR – 21
    3. CN – 11
    4. KR – 9
    5. JP – 9
  • Máximo de pontos por time/país
    1. DE – 7522
    2. PL – 5646
    3. GB – 3452
    4. SE – 3445
    5. CN – 2557
  • Média de pontos por time/país
    1. PL – 1919
    2. DE – 1423
    3. GB – 1274
    4. SE – 1150
    5. SG – 1150

Submissões corretas (agregado de todos os times)

  • Total de submissões corretas: 964
  • Submissões corretas por hora:
  • Taxa de submissões corretas:
    • Máxima: 1 submissão a cada 2 segundos
    • Média: 1 submissão a cada 3 minutos
    • Mínima: 1 submissão a cada 64 minutos
    • Histograma:

Total de challenges: 32 avulsos + 5 que compõem a Attack Step

Total de Solves e Autores:

  1. [Bonus] g00d b0y, criado por gnx, 143 solves
  2. [Attack Step] Intermediate, criado por gnx, 2 solves
  3. [Attack Step] Final, criado por gnx, 1 solve
  4. [Story] Great Cybernetic Revolution, criado por gnx, 193 solves
  5. [PPC] p0ng Adventure, criado por gnx e andre_smaira, 3 solves
  6. [Misc] Baby Regex, criado por gnx, 19 solves
  7. [Misc] Biometric Login, criado por thnc, 3 solves
  8. [Forensics] Rootkit, criado por gnx, 5 solves
  9. [Forensics / Networking] Botnet in the Wild, criado por gnx, 5 solves
  10. [Forensics] Executive Order, criado por thotypous, 5 solves
  11. [Exploitation] Tokens v2.0, criado por gnx, 22 solves
  12. [Exploitation] Warehouse, criado por pedroysb, 37 solves
  13. [Exploitation] Wrong User, criado por pedroysb, 8 solves
  14. [Exploitation] ButcherCorp Repository, criado por pedroysb, 5 solves
  15. [Exploitation] SEHLokoD+, criado por feroso, 11 solves
  16. [Exploitation] Hidden Program (Warmup), criado por andre_smaira, 145 solves
  17. [Exploitation] Pretty It All, criado por feroso, 5 solves
  18. [Crypto] Differential Privacy, criado por pedroysb, 64 solves
  19. [Crypto] Asymmetric Encryption, criado por pedroysb, 17 solves
  20. [Physics] People Throwing, criado por andre_smaira, sem solves
  21. [Physics] People Throwing 2, criado por andre_smaira, 1 solve
  22. [PPC-M] Resistance, criado por andre_smaira, 11 solves
  23. [PPC-M] Secure Path, criado por andre_smaira, 13 solves
  24. [PPC-M] Sum (Hello World Platform), criado por thotypous, 171 solves
  25. [Rev / Crypto] Intel SGX, criado por rodolfoams e pedroysb, 1 solve
  26. [Rev / Eletrônica] Shift Register, criado por thotypous, 1 solve
  27. [Rev / Eletrônica] Top Secret, criado por DarkShymia, 40 solves
  28. [Rev] Achievement Unlocked, criado por thnc, 18 solves
  29. [Rev] No BS, criado por thotypous, 1 solve
  30. [Web / Recon] Blackbox Pentesting, criado por herrera e gnx, 4 solves
  31. [Web] Criminals, criado por Manoel, 9 solves
  32. [Web] Netscape, criado por herrera, 1 solve

Agradecimentos

Nossa principal parceira, à qual devemos um agradecimento mais que especial, é a UFSCar, pois sem sua cloud OpenStack, não seria possível fazer a competição com tanta qualidade e estabilidade. A equipe de suporte do GitHub também está de parabéns, por sempre esclarecer dúvidas rapidamente, e ser muito responsável e profissional (de certa forma, eles foram cobaias dessa experiência intensa usando a nova plataforma).

Feedbacks

Quase 100% dos feedbacks estão sendo positivos. A plataforma é nosso “calcanhar de aquiles”, gerando sentimentos de amor e ódio, e quem não gostou, é exclusivamente por já estar acomodado com o “default“, com submissão gráfica e sem nenhum esforço para instalação. Infelizmente, esse é o preço a se pagar para ter algo seguro e confiável, nem tudo são flores!

A sugestão pra próxima edição mais interessante que recebemos foi do time 火车跑的快 , 全靠梅神带:

online international qualifications then on-site final round in brazil ^^~

Se você participou da competição e ainda não deu seu feedback, pode nos ajudar através desse link: https://goo.gl/mBz813.

Conclusão

Sem sombra de dúvidas fizemos uma das melhores e mais originais competições que já passaram pelo CTFTime. Infelizmente, com o rating atual, que não deve chegar a 30 na média da votação (já que existe uma limitação que impede novas competições de crescerem rapidamente sua pontuação), e sabendo que o evento vale muito mais que isso, não estamos 100% motivados para pensar em uma nova edição no momento. Mas isso só o tempo dirá!

Assim como na edição passada, desbloqueamos alguns Achievements em termos de originalidade e brutalidade, com challs como Shift Register (Eletrônica), Intel SGX (Rev/Crypto), Netscape (Web), No BS (Rev), Attack Step, Biometric Login (Adversarial Machine Learning) entre outros. 🙂

Avante #CTF-BR, rumo ao topo do mundo!!

4 respostas para “Pwn2Win CTF 2017 – Bastidores”

  1. Parabéns pelo CTF. Alto nível de complexidade e diversão.

    Ano que vem FireShell Security Team espera por outra sessão de lágrimas.

  2. Não se pode tirar o mérito do evento pelos problemas que aconteceram devido a plataforma. E de fato a pontuação no CTFtime não condiz com a realidade. Vocês estão de parabéns pelo evento de alto nível. Espero que próximo ano possa ter novamente, certamente terei muito prazer em jogar.

Deixe um comentário para Daniel Felipe Reis Apolinario Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *