Comment nous avons préparé l'étape de qualification de CTFZone-2020

Du 30 novembre au 1er décembre, la phase de qualification du tournoi CTFZone a enregistré 1043 équipes du monde entier. Selon nos données, les problèmes ont été résolus même au Zimbabwe (26 adresses IP uniques). Pour creuser plus profondément, il s'agissait d'une équipe universitaire de la ville de Bulawayo.


Cette année, la CTFZone est devenue la phase de qualification de la DEF CON CTF , donc l'équipe qui remportera la finale (qui se tiendra à OFFZONE du 16 au 17 avril 2020) ira au tournoi de Las Vegas. Afin que les chanceux aient le temps d'obtenir des visas, les dates de la conférence ont même été reportées à une date antérieure.


DEF CON CTF est la compétition de sécurité la plus ancienne et la plus respectée pour de nombreuses équipes. Les gagnants ne reçoivent pas de branche de palmier, mais même sans elle, tout se passe bien. Maintenant dans le monde, il n'y a que 6 tournois à travers lesquels vous pouvez vous qualifier pour DEF CON CTF.





Géographie des participants CTFZone

À propos du concept


Dans le mouvement international de la FCE, il est arrivé que des équipes de différentes régions se spécialisent dans certains domaines. Par exemple, historiquement, les Russes sont meilleurs dans la résolution du Web, tandis que les équipes asiatiques et américaines sont plus fortes chez PWN. Sur le même DEF CON, presque toutes les tâches sont des binaires. C'est peut-être la raison pour laquelle récemment les équipes américaines et asiatiques ont mieux performé là-bas. Chez CTFZone, nous essayons de montrer que CTF n'est pas seulement PWN, mais aussi de nombreuses autres catégories intéressantes: web, cryptographie, reverse, OSINT, criminalistique, PPC.


Web


Dans les missions basées sur le Web, les auteurs - des experts en tests de pénétration pendant les heures de travail - ont tenté de transférer les vulnérabilités de projets réels. Par exemple, dans la tâche Web-Shop , nous avons utilisé la bibliothèque python-markdown2 populaire, où notre expert a trouvé une vulnérabilité de jour zéro pour contourner le filtre XSS quelques semaines avant la compétition. Pendant le CTF, cependant, chacune des quatre équipes décisives a trouvé sa propre version de cette vulnérabilité, ce qui nous fait réfléchir à la qualité du filtrage dans la bibliothèque.


Pour le travail de carte Web , nous avons utilisé la vulnérabilité zero-day dans la classe de validation Java XML standard. Il a été découvert lors du test d'un véritable pare-feu d'application Web, nous avons donc invité les participants à contourner WAF, que nous avons développé spécifiquement pour la tâche. La version détaillée de wrightup sera publiée plus tard.


Eh bien, la tâche EmeraldRush a montré à quoi ressemblaient GitLab et Github au cours de l'année dernière - les vulnérabilités associées à Ruby, sur lesquelles elles sont toutes les deux écrites. L'un d'eux est basé sur CVE-2018-18649 (il n'y a cependant pas d'exploit d'accès libre pour celui-ci), le second a récemment été découvert et publié sur la plateforme HackerOne (pour une description, voir l' article ). Bien sûr, les développeurs ont été informés de ces vulnérabilités Web et de toutes les autres avant la compétition, conformément aux principes de divulgation responsable.


Crypto



À son tour, l'équipe de développement de la crypto-tâche a pris comme base non seulement les bogues constamment rencontrés dans CTF liés à la mise en œuvre de RSA, mais également les attaques sensationnelles de ces dernières années. Par exemple, la tâche OCB2 a dû faire face à une attaque contre le système de cryptage symétrique du même nom, pour la découverte de laquelle lors de la conférence Crypto, ils ont décerné le Best Paper Award.


Et dans la tâche NTRU , il était nécessaire d'étudier l'attaque d'un système de réseau asymétrique. Elle a été décrite en septembre, mais trouver et lire l'article correspondant ne suffisait pas. L'auteur du problème lui-même a rencontré des problèmes lorsqu'il s'est avéré que la publication prenait le cas le plus pratique pour la description, ce qui ne fonctionnait pas avec les paramètres sélectionnés dans la tâche finale. J'ai dû refaire l'algorithme! Il est intéressant qu'un des participants (Alexey Udovenko de l'équipe LC / BC) ait résolu le problème sans article, ayant trouvé une méthode de solution légèrement différente basée sur le même principe.

Médecine légale


Eh bien, la catégorie la plus délicate de notre FCT était la médecine légale. Tout le monde est habitué à penser que ces tâches sont résolues à l'aide de trois utilitaires: avant tout, la volatilité et les chaînes. Mais nous avons eu différentes tâches - par exemple, une tâche In-The-Shadows inhabituelle, pour laquelle il était nécessaire de traiter la technique décrite ici . Les détails seront également communiqués ultérieurement au comité de district.


À propos de la formation


La préparation directe aux qualifications de la CTFZone comprenait plusieurs étapes principales (rassembler une équipe de projet, développer des tâches, tester et déployer une infrastructure, lancer une fusée dans l'espace) et de nombreuses auxiliaires (rechercher l'inspiration, établir la communication, tourmenter et douter, la dépression, surmonter la crise existentielle).


Trois mois avant le début de l'assemblée générale, les dates ont été choisies - 7 et 8 décembre. L'équipe est parvenue à la conclusion que rien n'aurait le temps, mais elle s'est quand même mise au travail. Et sept jours plus tard, ces délais irréalistes ont été décalés une semaine plus tôt, car les dates sélectionnées et toutes les suivantes ont déjà pris d'autres CTF. Il ne restait plus qu'à sourire, à serrer les dents et à travailler avec une énergie triplée. Il n'y avait pas de retour en arrière; développement du startanul.





En conséquence, la tâche était plus que d'habitude - 30 pièces. Chaque tâche est unique, mais ne dure pas très longtemps: 3 mois de préparation et seulement 36 heures de vol. Mais quoi! Les boutons que vous avez soigneusement peints à l'avant seront touchés par les meilleurs CTF au monde - ils se plongeront dans votre idée et vous donneront un retour personnel. C'est une grande expérience et une occasion de parler de votre travail avec une grande communauté. Après tout, souvent avec les vulnérabilités qui se trouvent dans les tâches, une sorte d'histoire est liée. Certaines tâches étaient si difficiles que personne ne pouvait les comprendre. À la fin de la qualification des problèmes non résolus, il en restait deux: la médecine légale populaire et la carte Web .


À propos de l'infrastructure


L'organisation de l'infrastructure du tournoi pourrait être abordée de différentes manières. Par exemple, à l'ancienne, coupez les machines virtuelles pour les développeurs de tâches et donnez-leur accès. Dans cette situation, chaque développeur devient un administrateur satisfait de l'hôte local, tout fonctionne comme il le souhaite, et il ne reste plus qu'à fournir la connectivité réseau. Il est clair, cependant, qu'il n'est pas question de réplication et de tolérance aux pannes dans ce cas. Le responsable de notre infrastructure vient d'échouer à l'un des FFC à ZeroNights en 2016, et cette fois, enseigné par une expérience amère, a décidé de faire les choses différemment.


Nous avons décidé longtemps où nous habiterons, et finalement nous avons décidé de faire demi-tour dans le cloud. Les raisons sont claires: des compétitions pour les pirates, donc il vaut mieux casser Google, et il y avait déjà des développements tout faits dans la zashnik. Le principal outil de création de la plateforme a été Terraform, qui permet de décrire l'infrastructure sous forme de code dans un format déclaratif, et prend en charge tous les autres gestes. Autrement dit, vous n'avez pas besoin de réfléchir à la manière d'accéder à l'API Google et de lui indiquer le nombre et les machines virtuelles que vous souhaitez déployer.
Il fallait également décider comment lancer les tâches. Nous avons eu beaucoup de chance que tous les développeurs aient déjà pu écrire des tâches dans Docker. C'est un tel conteneuriseur hype qui vous permet de compresser un service avec toutes les dépendances dans un environnement isolé qui ne change pas entre les redémarrages. Il n'y a pas beaucoup de façons de travailler avec Docker: ce sont principalement des orchestrateurs comme Compose et k8s. Pour tout faire magnifiquement, c'est-à-dire pour implémenter Wishlist avec équilibrage, repères, tolérance aux pannes et autres entreprises, le choix de l'orchestre était évident - Kubernetes.




Ici, cependant, il y a eu un malentendu entre le créateur de l'infrastructure et les développeurs. Les pentesters sont une caste spéciale du monde informatique: ils sont en partie comme des administrateurs, des networkers et savent comment créer des bases de données, et sont orientés dans la programmation. En général, pas des gens, mais des couteaux suisses. Ils sont extrêmement extraordinaires et ambitieux, mais, malheureusement, quand il a été décidé d'écrire Helm pour chaque tâche, on a en quelque sorte oublié que les pentesters ne sont toujours pas des administrateurs professionnels. Cela a conduit à une petite guerre, au cours de laquelle il a fallu expliquer pourquoi certaines décisions sont prises de force et des restrictions sont fixées.


Les gars n'avaient aucune expérience de l'écriture de Helm, mais ils savaient tous comment écrire Compose. Vous comprenez vous-même qu'entre le Compose local et le Helm-chart, il y a un écart en quelques semaines, voire quelques mois, pour étudier le matériel. Ce fut la première cloche qui a laissé entendre qu'il y avait des problèmes (où la FCE serait-elle sans eux, surtout lorsque l'équipe et l'administrateur sont nouveaux presque à chaque fois).


Par manque de temps, il n'a pas été possible d'automatiser tout - certaines choses ont dû être transmises aux épaules des développeurs eux-mêmes. Les pentesters ont dû s'asseoir dans des réunions où on leur a dit comment écrire des casques, alors qu'eux-mêmes, apparemment, ont maudit ce dévopage sur ce qu'est la lumière. Mais, malgré tout, nous avons réussi - toutes les tâches ont été décrites et regroupées dans des graphiques Helm, la surveillance a été configurée sous la forme de Grafana et Prometheus. Le moment de vérité est arrivé.


Et ici, au grand soulagement de tous, il s'est avéré que l'infrastructure résultante est très facile à gérer. Lorsque tout a été décrit et déployé sur Google, nous avons organisé un briefing pour les personnes en service. Il y en avait dix, et tout le monde a fait un excellent travail: ils ont soulevé les tombés, collecté et déployé la version corrigée dans un cube.


À propos des finalistes


En conséquence, 10 équipes étoiles ont été sélectionnées pour la finale. Pourquoi stellaire? Le fait est que 6 équipes sur 10 sont dans les dix premiers championnats du monde à CTFtime, et les quatre autres sont un peu derrière le top dix, mais aussi dans le top.


La caractéristique principale du tournoi était que la lutte la plus acharnée n'était pas pour une place dans les trois premiers, mais pour la dixième ligne. Il était important pour les participants de se qualifier pour la finale, et là, la situation est réinitialisée, et la répartition des sièges que nous avons basée sur les résultats des compétitions de qualification peut changer considérablement.




Classement final des finalistes des qualifications de la CTFZone 2019

Et ensuite?


De plus, il sera possible d'expirer un peu, puis de reprendre une profonde inspiration et de commencer les préparatifs de la finale. Il se tiendra au format Attaque / Défense, et c'est une histoire complètement différente. Quelqu'un peut demander: pourquoi tout cela? La question est bonne, mais il n'y a probablement pas de réponse logique. C’est juste que si au moins pendant 5 secondes vous pouvez vraiment vous défoncer, vous sentir en vie et voir de quelle équipe vous faites partie, alors ce n’est pas en vain!

Source: https://habr.com/ru/post/fr481280/


All Articles