WeScale DevSecOps Summer Party
WeScale

WeScale Summer Party CTF 2023 🚩

Cet été, WeScale a organisé un CTF (Capture The Flag, jeu de challenges orienté sécurité) sur le temps long de l'été et sur le thème du DevOps. C'était bien cool. Voici un petit compte rendu de comment ça c'est passé. 

Le principe d'un CTF est de résoudre un challenge, de trouver un "drapeau" qui se présente sous la forme d'un bout de texte et de soumettre ce bout de texte pour indiquer qu'on a réussi à résoudre l'énigme. Pour les curieus·e·s du logiciel libre qui pilote ce type de challenge c'est CTFd

Le résultat final avec tous les challenges au vert 🎉 (indiquant qu'ils sont faits) : 

 

Comme on peut le voir ci-dessous, ma barre de progression a été très progressive tout entre juillet et fin septembre 🐢 : 

 

🔐 Challenges 

Le CTF était découpé en quatres sections : apéro (pour commencer), web, misc, et devops.

🍻 Apéro

Pour commencer (et pas que), les challenges portaient sur du DNS, des explorations dans HTML, de la  stenographie dans les images, du décorticage d'animations javascript et css dans des pages web.

🕸 Web

Côté web, il y avait un peu d'énumeration avec gobuster, feroxbuster, consoles d'admin à exploiter, du fuzzing de headers http, des résultats de pages web différents en cas de bruteforce, des vol de token par XSS, sqlmap pour l'injection sql, des dépots git ou configurations laissés sur le serveur web, certificats ssl de multiples noms de domaines (merci https://crt.sh/), des flags cachés derrière certaines requêtes http... 

Outils pratiqués : nmap, burp, humble (chouette découverte). 

📦 Misc

Là, il y avait un peu de tout, des metadonnées dans des images, des PDFs avec éléments à extraire, etc.

Mais aussi des choses plus spécifiques au métier DevOps. J'ai pu jouer avec des secrets cachés dans des images docker (skopeo, dive, docker inspect, etc), manipulations de SBOM "Software Bill of Materials" (bon, là j'ai sorti un ensemble d'outils de vérifications de sbom genre cyclonedx, générations de sbom, install de dependencytrack etc. pour rien... en fait c'était "just of bunch of json") : 

Capture d'écran d'une conférence avec une diapo "SBOM primer"

Vue que c'était vraiment prise de tête, j'ai pris une copie d'écran un peu halluciné du résultat, je vous laisse interpréter (ou pas) : 

Capture d'écran avec des commandes shell

Dans le challenge sur les logs falco générés (en partie avec falco event-generator) je me suis aussi perdu dans plein de pistes non utiles, par exemple en sortant un elastic search pour analyser le chemin pris par un potentiel attaquant alors que finalement c'était de la manipulation de données des logs pour extraire du code morse et pouf 🔮, du texte. 

Copie d'écran avec des commandes qui comptes les items en fonction du niveau de log

🚀 DevOps

Dans la section DevOps on trouvais de l'exploration web, des infos dans un image docker, des  linters terraform avec tfsec (sympa sur le coté spécifique, mais un peu tordu sur la question), des provider terraform aws avec un backend.tf terraform qui pointe sur un bucket s3 (là c'était bien prise de tête). 

J'ai bien aimé le challenge sur ansible-vault où il fallait jouer avec ansible2john et cracker un mot de passe basique. 

Copie d'écran d'un transformation de ASCII numérique en texte

Il y avait encore des images docker, des challenge AWS avec des bouts de lambda, des assume role et des policy et leur versionnement (dommage que la partie crypto au tout début était aussi frustrante 😉), ou à partir d'un dépot pour trouver des informations supprimées sur des comptes aws (et la fausse piste des chaines de caractères dans l'historique git 🤦), log4shell (où tester que c'est vulnerable est simple, mais exploiter avec 3 serveurs temporaires segfault qui ont chacun un seul port exposé en public m'a fait des noeuds au cerveau, le tout avec log4j-shell-poc), et un excellent challenge de github action où les informations ont fuité dans les logs. 

👥 Pratique collective

Sur quelques pauses déjeuner on a pu en discuter et se creuser la tête avec d'autres personnes de chez Zenika à l'agence de Nantes, mais aussi avec les membres de mon équipe chez mon client actuel. C'était des chouettes moments d'émulation collective, d'exploration d'outils ou de concepts du DevSecOps. J'ai même entendu un collègue dire "ah oui, ansible-vault je vois comment ça marche, on a du jouer avec sur le CTF" lors d'une réunion où on discutais des pistes sealed-secrets, ansible-vault et d'autres KMS. J'en profite pour dire que je n'ai donc que le mérite de la persévérance pour avoir réalisé tous les challenges et finir premier dans le nombre de points. 

🏆 Top 3 

Les challenges qui m'on le plus marqués sont les suivants : 

  • log4shell - j'avais lu des choses, mais jamais pratiqué,
  • AWS - j'ai appris plein de choses,
  • github action - cas interressant où des traces sont oubliées dans l'historique.

Mention spéciale pour SBOM et falco car ce sont ceux-là qui m'on donné le plus de fil à tordre🤯 🤕. 

Dans un esprit de partage et d'apprentisage, je salue le fait que WeScale a publié un writeup avec un certain nombre des solutions : https://blog.wescale.fr/writeup-ctf-devsecops-summer-challenge ce qui a du être sympa pour les personne n'ayant pas tout résolu. 

WeScale a aussi décrit dans un article les coulisses de l'infrastructure nécessaire pour faire tourner cet évenement :  https://blog.wescale.fr/ctf-wescale-les-coulisses-dun-ctf-devops 👏 à eux d'avoir maintenu une infrastructure comme ça sur le temps long pour que des personnes puisse se former et jouer avec les challenges, c'est rare dans le milieu.

En tout cas, cela conforte ma pratique d'apprentisage des sujets de sécurité avec ce format sympatique et ludique du CTF. Je continue d'en faire sur https://tryhackme.com/ mais ça, je vous en parlerais à une autre occasion. 👋