Craqué ! Faits saillants de KringleCon 5 : les anneaux d'or

Craqué ! Faits saillants de KringleCon 5 : les anneaux d'or

L'apprentissage rencontre le plaisir au SANS Holiday Hack Challenge 2022 - attachez-vous pour une balade en crackerjack au pôle Nord pendant que je déjoue le plan déloyal de Grinchum et récupère les cinq anneaux d'or

C'est ma première année de participation au Défi de piratage des fêtes SANS Et c'était une explosion. À travers une série de 16 défis allant de facile à difficile, je me suis entraîné à analyser le trafic réseau suspect et les journaux PowerShell, à écrire Règles de la suricate, sortir d'un Conteneur Docker, trouver des clés divulguées pour exploiter un Pipeline CI/CD GitLab et le Utilisateur AWS, conduisant Attaques d'entités externes XML, et pirater un contrat intelligent pour acheter un jeton non fongible.

La meilleure partie de cette expérience est qu'elle m'a fait découvrir de nouveaux outils et technologies, étendant ainsi encore plus mes connaissances en cybersécurité. Ici, je partage quelques points saillants de la résolution des défis.

Orientation

Chaque participant reçoit un avatar pour naviguer dans un environnement de jeu vidéo intégré au pôle Nord :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Pendant l'orientation, vous recevez un portefeuille de crypto-monnaie que le jeu utilise pour attribuer des KringleCoins pour avoir relevé des défis et que vous utilisez dans le dernier défi pour pirater un contrat intelligent. Fait intéressant, le jeu garde une trace de toutes les transactions KringleCoin dans une blockchain Ethereum, ce qui signifie qu'un enregistrement complet de votre progression est également stocké dans cette blockchain.

Au premier anneau du jeu.

1. Anneau de Tolkien

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Pour trouver l'anneau de Tolkien, il a fallu faire travailler mes muscles d'analyse des journaux.

Hameçonnage Wireshark

Tout d'abord, j'ai utilisé Wireshark pour analyser le .pcap fichier qui a révélé un serveur à adv.epostoday[.]uk téléchargement du fichier Réf_24septembre-2020.zip à un ordinateur :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

En regardant à l'intérieur du fichier ZIP, j'ai trouvé un exécutable appelé Réf_24Sept-2020.scr qui a déclenché deux détections dans ESET Endpoint Security : BAT/Runner.ES ainsi que Generik.TAGTBG. Ce logiciel malveillant a finalement conduit à un exécutable malveillant s'exécutant en mémoire appelé config.dll et détecté par ESET Analyseur de mémoire avancé as Win32/Dridex.DD.

Journaux d'événements Windows

Ensuite, j'ai analysé les informations fournies .evtx fichier contenant les journaux PowerShell avec l'Observateur d'événements. Bien qu'il existe d'autres outils pour analyser les journaux PowerShell, si les attaquants savent comment utiliser des binaires vivant hors du terrain pour rester sous le radar, les défenseurs doivent également bien connaître les outils natifs fournis par un système d'exploitation.

Étant donné que les journaux contenaient 10,434 XNUMX événements, j'ai regroupé les événements par date, puis j'ai exécuté l'action Rechercher pour rechercher tous les événements contenant le $ personnage. Dans PowerShell, $ est utilisé pour créer et référencer les variables. J'ai découvert qu'une attaque se produisait le 24 décembre 2022, lorsque l'attaquant a exécuté le script suivant :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Il semble que l'agresseur ait trouvé une recette secrète, éteint l'ingrédient secret de miel en l'huile de poisson, puis créé un nouveau fichier de recette. Cela a déclenché un événement avec un ID de 4104, qui représente l'exécution de commandes PowerShell à distance. J'ai donc filtré les événements par cet ID, ce qui m'a aidé à trouver plus rapidement d'autres événements malveillants.

Régate de Suricata

Le dernier exercice pour le Tolkien Ring consistait à écrire quatre règles Suricata pour surveiller le trafic réseau en cas d'infestation de Dridex :

alert dns $HOME_NET any -> any any (msg :"Mauvaise recherche DNS connue, infection Dridex possible" ; dns.query ; content :"adv.epostoday.uk" ; nocase ; sid:1; rev:1 ;)

alert http 192.185.57.242 any <> any any (msg:"Investigate suspect connections, possible Dridex infection"; sid:2; rev:1;)

alert tls any any -> any any (msg :"Investigate bad certificates, possible Dridex infection" ; tls.cert_subject; content:"CN=heardbellith.Icanwepeh.nagoya"; sid:3; rev:1;)

alert http any any -> any any (msg:"Fonction Javascript suspecte, possible infection Dridex"; file_data; content:"let byteCharacters = atob"; sid:4; rev:1;)

Dans l'ordre, ces règles interceptent les recherches DNS pour adv.epostoday[.]uk, connexions à l'adresse IP 192.185.57[.]242, l'utilisation du serveur malveillant entendubellith.Icanwepeh[.]nagoya identifié par le nom commun (CN) dans un certificat TLS, et l'utilisation de JavaScript a à B() pour décoder une chaîne binaire contenant des données encodées en base64 sur le client.

Relever ces trois défis m'a valu le Tolkien Ring :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Passons au deuxième anneau.

2. Anneau des Elfes

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Les défis les plus importants pour le Elfen Ring étaient Prison Escape et Jolly CI / CD.

Prison Escape

Prison Escape était un rappel sévère que l'octroi de privilèges root à un utilisateur dans un conteneur Docker est tout aussi efficace que l'octroi de privilèges root sur le système hôte. Le défi consistait à sortir du conteneur. Eh bien, facilement fait lorsque vous êtes root:

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

En tant qu'utilisateur root, j'ai répertorié les tables de partition du périphérique, puis j'ai monté le système de fichiers hôte, m'accordant un accès complet à l'hôte. Maintenant, je pouvais rechercher la clé, qui devrait se trouver dans le répertoire personnel, comme le révèlent les astuces du jeu :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Joyeux CI/CD

Bien que cela ait été rapide, Jolly CI / CD m'a pris le plus de temps à résoudre. Tout d'abord, on nous a donné un référentiel Git à cloner via HTTP :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

À partir de l'URL, j'ai pu voir que le nom du référentiel était wordpress.flag.net.interne, j'ai donc déménagé dans le référentiel et trouvé un site Web WordPress. J'ai vérifié si le site Web était en ligne :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Oui, le site Web était fonctionnel. J'étais curieux de savoir s'il y avait des clés divulguées dans l'historique du code source. Si oui, je devrais être en mesure d'apporter des modifications au code source. Alors j'ai couru gitlog:

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

D'après les messages de validation, cela ressemble à un commettre a été faite après avoir ajouté des actifs pour corriger un whoops. Il est temps de vérifier le commit pré-whoops :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Excellent, j'ai trouvé un .ssh répertoire avec des clés. Copions ces clés et configurons un agent SSH et un utilisateur Git pour voir si je peux usurper l'identité du propriétaire de ces clés :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Revenons maintenant à la branche principale et testons si nous pouvons apporter une modification triviale au code source (en utilisant nano, j'ai simplement ajouté un espace à l'un des fichiers) :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

J'ai donc réussi la première partie du défi en me faisant passer pour l'un des développeurs WordPress, mais le site Web fonctionnait-il toujours après ma poussée ?

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Ma poussée a changé quelque chose car maintenant le site Web est redirigé vers le port 8080.

Jusqu'à présent, j'avais ignoré la partie CI / CD du défi, qui devrait être la clé pour le terminer. Le référentiel contient un .gitlab-ci.yml fichier, qui fournit la configuration d'un pipeline GitLab CI/CD. Chaque fois que vous poussez vers le référentiel, le système CI/CD démarre et un Exécuteur GitLab exécute les scripts dans ce fichier YML. C'est aussi bon que de réaliser l'exécution de code à distance sur le serveur où GitLab Runner est installé, pensai-je.

En regardant de plus près, j'ai vu un rsync script copiant tous les fichiers du référentiel Git dans le répertoire du serveur Web à partir duquel le site Web était servi. Au début, j'ai essayé d'utiliser rsync pour inverser le flux de données en copiant tous les fichiers du serveur Web vers le référentiel Git, mais sans succès.

Après de nombreux tests d'hypothèses, j'ai finalement eu un aperçu décisif : au lieu d'essayer de "réparer" le site Web WordPress ou d'exécuter des scripts malveillants via le système de construction, servez un site Web qui divulgue des informations à partir du serveur Web. À l'intérieur index.php (situé au niveau supérieur du référentiel), je peux commenter le code qui charge le site Web WordPress et exécuter des commandes PHP qui sondent le serveur Web.

En effet, je peux même exécuter des commandes shell avec PHP. Je l'ai trouvé passer à travers() travaillé facilement.

In index.php, J'ai utilisé // pour commenter deux lignes et j'ai ajouté passthru('ls -la /'); sur la dernière ligne. Cela crée un site Web qui répertorie tous les fichiers dans le répertoire racine du serveur Web :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Ensuite, j'ai poussé ce changement vers le référentiel Git et le système GitLab CI/CD s'est chargé de mettre à jour le site Web pour moi :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Ah, l'Elfen Ring doit être dans drapeau.txt! J'ai répété les étapes précédentes, mais cette fois en utilisant passthru('cat /flag.txt'); révélant l'Elfen Ring la prochaine fois que j'ai demandé le site Web :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Passons au troisième anneau.

3. Anneau Web

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Le défi le plus amusant pour moi était Open Boria Mine Door, bien que la fontaine de Glamtariel était intéressante tout en présentant des énigmes.

Ouvrir la porte de la mine Boria

Dans Open Boria Mine Door, on nous a présenté six épingles ou mini-défis pour contourner la validation des entrées ou un Politique de sécurité du contenu pour connecter les tuyaux d'entrée et de sortie entre les broches, y compris en faisant correspondre les couleurs des tuyaux. Pour la plupart des épingles, j'ai utilisé HTML pour écrire une liste de lettres de connexion 'o'. Voici ma solution finale :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Broche 1

Il n'y avait pas de validation pour la broche 1, c'était donc une simple question de HTML et de CSS en ligne :

Broche 2

La broche 2 avait une politique de sécurité du contenu qui interdisait JavaScript mais autorisait le CSS en ligne, donc ce n'était pas un problème pour ma méthode :

Broche 3

La broche 3 avait une politique de sécurité du contenu qui interdisait le CSS mais autorisait le JavaScript en ligne, j'ai donc utilisé JavaScript pour modifier les styles à la place :

Broche 4

La broche 4 n'avait pas de politique de sécurité du contenu, mais elle avait une fonction sanitizeInput côté client qui supprimait les guillemets doubles, les guillemets simples, les crochets angulaires gauches et les crochets angulaires droits. L'astuce ici était de réaliser que cette fonction n'était pas déclenchée par la soumission du formulaire, mais par le le flou un événement. En d'autres termes, éloigner la souris du champ de saisie déclenchait le le flou événement, assainissant toute entrée. La solution était de soumettre le formulaire en appuyant sur le Entrer en prenant soin de ne pas déplacer le curseur de la souris en dehors des limites du champ de saisie :

Broche 5

La broche 5 avait le même désinfecterEntrée fonction et contournement avec une politique de sécurité du contenu interdisant le CSS en ligne, mais autorisant le JavaScript en ligne :

Broche 6

Enfin, la broche 6 n'a pas nettoyé l'entrée, mais elle a utilisé une politique de sécurité du contenu plus stricte interdisant à la fois le CSS et le JavaScript en ligne. Ma solution consistait à utiliser du code HTML obsolète pour obtenir les styles dont j'avais besoin et à utiliser un tableau au lieu d'une liste :

Fontaine de Glamtariel

Fontaine de Glamtariel a été l'occasion de pratiquer Attaques d'entités externes XML (XXE). Comprendre comment définir une entité XML personnalisée, définir une entité qui demande un fichier au serveur et ajouter cette entité en tant que charge utile à une requête HTTP n'était pas difficile. La partie la plus difficile a été de résoudre les énigmes du jeu pour deviner le chemin vers les fichiers que le serveur fuirait. Voici la demande révolutionnaire révélant l'emplacement de l'anneau en or :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Je proposerais deux leçons tirées de ce défi. Tout d'abord, utilisez le Convertisseur de type de contenu prolongation dans Rot pour convertir les charges utiles JSON en XML. Deuxièmement, essayez de placer la charge utile XXE dans différentes balises - il m'a fallu beaucoup de temps pour comprendre que tout ce que j'avais à faire était de placer le &xx; charge utile dans le Type de demande balise au lieu de la imgDrop Étiquette.

Passons à la quatrième sonnerie.

4. Anneau de nuage

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Jouer pour le Cloud Ring était l'incursion d'un débutant dans l'interface de ligne de commande (CLI) d'Amazon Web Services (AWS).

Le point culminant de cet ensemble de défis consistait à utiliser truffier pour trouver les informations d'identification AWS dans un référentiel Git, puis les exploiter pour s'authentifier en tant qu'utilisateur AWS. Un attaquant qui arrive à cette position peut utiliser aws je suis commandes pour interroger les politiques qui s'appliquent à l'utilisateur, et donc quels actifs cloud peuvent être consultés et abusés.

Au cinquième anneau.

5. Anneau de feu brûlant

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

La partie la plus instructive de cet ensemble de défis a été d'apprendre Arbres Merkle pour exploiter un contrat intelligent et inscrivez-vous sur la liste de prévente pour l'achat d'un jeton non fongible (NFT). Ici, le défi était de découvrir les valeurs de preuve qui, avec l'adresse de mon portefeuille et la valeur racine d'un arbre Merkle, prouvaient mon inclusion sur la liste de prévente.

Après quelques tentatives infructueuses pour fournir des valeurs de preuve, j'ai réalisé que je ne serais jamais capable de déterminer les valeurs de preuve pour la valeur racine fournie car il n'y avait aucun moyen de connaître toutes les valeurs de feuille utilisées pour la calculer. J'avais besoin de changer la valeur racine pour pouvoir fournir un arbre Merkle valide.

En utilisant L'outil du professeur QPetabyte, j'ai créé un Merkle Tree à partir de deux feuilles composées de l'adresse de mon portefeuille et de l'adresse du BSRS_nft contrat intelligent, que j'ai trouvé en utilisant le Blockchain Explorer dans le jeu dans le bloc deux de la blockchain Ethereum du jeu. L'outil a généré la valeur racine de cet arbre et la valeur de preuve pour mon adresse de portefeuille. Ensuite, j'ai utilisé Burp pour intercepter la demande au serveur et modifié la valeur racine par défaut afin de pouvoir soumettre un arbre Merkle valide. Voici mon NFT sport acheté au prix fixe de 100 KringleCoins :

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Un vilain spécimen en effet.

Finale

Je l'ai craqué ! Points forts de la KringleCon 5 : Golden Rings PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Un grand merci aux organisateurs du SANS Holiday Hack Challenge pour avoir élargi mon esprit de nouvelles façons et aidé à approfondir mes connaissances en cybersécurité. Non seulement j'ai hâte de relever le défi de l'année prochaine, mais je vais même essayer les éditions 2020 et 2021 de ce défi. Et si vous n'avez jamais participé à ce défi auparavant, j'espère que ces faits saillants ont piqué votre intérêt.

Horodatage:

Plus de Nous vivons la sécurité