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

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