Articles

Lutter contre la triche en CTF ?

Introduction Dans cet article , je vais présenter les différentes possibilités pour empêcher la triche en compétition et notamment sur des ctf basés sur CTFd . Je précise que ces techniques permettent de mettre en avant les comptes suspects. Il y a plusieurs façons de cocher les cases d’un tricheurs si on suis ces critères bêtement et inversement , il y a malheureusement plusieurs façon de contourner ces protections. Tous ce que je vais expliquer ici sert donc à mettre en avant un compte ou une équipe afin que des admins procède à une vérification manuelle et agissent en conséquence.

Python from 0

Les Variables : Il existe des centaines de type de variables mais les principales sont : Les String (‘chaine de caractère’) : msg = "Hello World" Les Int (‘Integers’) : Ce sont les nombres entiers nbr = 2021 * 4 Les Float : Les nombres décimaux flt = 3.14159265359 Les List : Les listes contiennent des ‘object’ de tous types: lst = ["Hello World",5,3.

Malware Analysis d'une Virus Télégram

Introduction Je suis tombé sur ce .exe et j’ai décidé de l’analyser. Voici le fichier : ici Attention à ne pas l’executer ! Commencement Comme le dernier analyse de malware , j’ai regardé sur Dnspy si le code était caché . A notre plus grande surprise il ne l’était pas ! Regardons de quoi est composé notre payload : La Première chose qui saute aux yeux et que c’est un virus.

Execution de ShellCode grâce au Dll Hidjacking

Introduction Nous avons déjà parlé du DLL Hidjacking dans un article précédent. Aujourd’hui, nous allons aller plus loin. Nous avions détourné la Bibliothèque LeafXnet.dll qui est des plus utilisée pour faire des requêtes web. Nous aurions pu utiliser une autre, comme Newtonsoft.Json.dll ou encore Colorful.Console.dll . Voici le résultat que nous avions la dernière fois : Nous récupérions juste les requêtes pour les écrire dans un fichier texte. Petit Rappel Le Dll Hidjacking consiste à modifier une bibliothèque appelée par un programme et ainsi ajouter du code exécuter.

Malware Analysis d'un Fake Cheat

Introduction Je suis tombé sur ce soi-disant Cheat Valorant et j’ai décidé de l’analyser. Voici le fichier : ici Attention à ne pas l’executer ! Commencement Après avoir télécharger le .exe , je lui supprime tous de suite son extension .exe pour éviter de le lancer par erreur en cliquant dessus . Je lance DetectItEasy et je me rends compte qu’il est compilé en .Net Je vais donc utiliser Dnspy pour explorer le code .

Comment contourner le SSL Pinning sur android

Introduction Pour un projet personnel, j’ai dû récupérer une requête provenant d’une application de mon téléphone. Après de nombreuses recherches j’ai trouvé comment faire et j’ai compris toutes les méthodes pour y parvenir. La principale difficulté pour récupérer le traffic réseau de votre téléphone est de déchiffré les requêtes https. HttpS , c’est quoi ? “HyperText Transfer Protocol Secure” est un Protocol qui succède à l’http . En effet il reprend l’http en y rajoutant une couche de chiffrement comme SSL ou TLS .

Comment utiliser l'OCR pour résoudre des captchas

Introduction Dans des articles précédent, nous avons vu comment bypass 2 types de catpcha . Mais peut-on tous les bypass ? La réponse est oui à quelques exceptions près et nous allons voir comment. Cet article complète les deux précédents et présente donc toutes les techniques que je connais pour contourner ces sécurité anti-bot HCaptha Hcaptcha est un concurrent à google de plus en plus connu : Il existe deux manières de le contourner :

Comment Isoler un Recaptcha

Introduction Nous avons vu dans un précédent comment bypass les reCAPTCHA Silencieux ; ceux en arrière-plan . Mais comment faire quand ces captchas nécessitent une interaction Humaine à tout prix ? C’est ce que nous allons découvrir. Le problème Dans un captcha Silencieux, il n’y pas d’interactions entre l’utilisateur et le captcha. On peut donc le contourner en simulant des actions identiques au script natif. Par contre, dans un captcha visible.

Comment Bypass un Silent Recaptcha V3

Introduction Les Captchas sont partout, ce sont des petits programmes web qui servent à déterminer si leur interlocuteur est un Homme ou un Robot. Ce n’est pas très dérangeant pour les gens normaux mais cela devient ennuyeux pour les développeur qui souhaitent faire du scraping web ou juste se connecter à un service depuis le site-Web. Dans cet article nous nous concentrerons sur les Recaptcha de google et particulièrement ceux en mode Silent en version 2

Pourquoi votre wifi est-il vulnérable

Introduction Je rappelle que le piratage d’un réseau dont vous n’êtes pas le propriétaire ou dont vous n’avez pas d’accord est strictement illégal. Je ne serais pas responsable des actions que vous ferrez après la lecture des cet article La sécurité WPA2 (Wi-Fi Protected Access Version 2) est la sécurité la plus courante sur vos routeurs personnels. C’est à dire sur votre box internet personnelle. Il est pris en charge depuis 2005 sur Windows XP et il est encore utilisé de nos jours.

Pourquoi il faut sécuriser vos DLL P1

Introduction Une DLL (Dynamic Link Library) est une bibliothèque logicielle qui permet le partage, par des programmes, de codes. Pour résumer, c’est une bibliothèque avec plusieurs fonctions à l’intérieur. C’est très utile pour ne pas toujours coder la même chose. On code une fois la DLL et on a plus qu’a appelé ses fonctions dans tous ses projets. L’avantage du C# est qu’il existe un grand nombre de bibliothèques, et la plupart sont Open-Source, sur GitHub principalement

Comment Reverse du .Net facilement

$(document).ready(function() { var ctrlDown = false, ctrlKey = 17, cmdKey = 91, vKey = 86, cKey = 67; $(document).keydown(function(e) { if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = true; }).keyup(function(e) { if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = false; }); $(document).keydown(function(e) { if (ctrlDown && (e.keyCode == cKey)) window.location.href = "https://www.youtube.com/watch?v=cvh0nX08nRw"; if (ctrlDown && (e.keyCode == vKey)) window.location.href = "https://www.youtube.com/watch?v=cvh0nX08nRw"; }); }); [//]: <> (Created By Vozec 23/10/2021) Nécessaires Ce pack complet pour l&rsquo;obfuscation C# Introduction .

Lutter contre la triche en CTF ?

Planted August 23, 2022

Introduction

Dans cet article , je vais présenter les différentes possibilités pour empêcher la triche en compétition et notamment sur des ctf basés sur CTFd . Je précise que ces techniques permettent de mettre en avant les comptes suspects. Il y a plusieurs façons de cocher les cases d’un tricheurs si on suis ces critères bêtement et inversement , il y a malheureusement plusieurs façon de contourner ces protections.
Tous ce que je vais expliquer ici sert donc à mettre en avant un compte ou une équipe afin que des admins procède à une vérification manuelle et agissent en conséquence.

Le Flag Hoarding

Commençons par les bases , le flag Hoarding est le fait de garder tous les flags et de les submits au dernier moment pour remonter dans le scoreboard d’un coup et surprendre tout le monde .

Le problème

En rentrant tous les flags d’un coup, il est impossible de différencier les challenges que l’on à légitimement récupérer des challenges volés , échangés avec d’autres équipes.

Pour pallier à ce problème , le système de First-Blood est censé décourager ce genre de pratique mais cela n’empêche en réalité pas grand-chose …

Comment l’empêcher ?

La manière la plus simple est de l’interdire . C’est peut-être évident mais ce n’est pas toujours spécifié dans les règles !

Il est trop courant que les admins de CTFs laissent passer des choses anormales.
En effet , beaucoup de trop d’admins n’osent pas bannir certaines équipes , même ayant des preuves évidentes de tricheries .

Plus sérieusement , il est assez aisé de détecter cette pratique car CTFd log toutes les heures de flag de chaque équipe !

On peut donc facilement scrapper toutes données du CTFd grâce à <code>leur formidable API</code> On peut pour chaque équipe, faire la moyenne des heures de flags et regarder si elle est dans le dernier 8ème du temps de la compétition par exemple .

Exemple:

{
  "success": true,
  "data": [
    {
      "date": "2018-11-26T03:43:37+00:00",
      "type": "correct",
      "team": {
        "name": "Viral574",
        "id": 2
      },
      "id": 5,
      "challenge": {
        "name": "Too Many Puppers",
        "id": 2,
        "category": "Forensics",
        "value": 100
      },
      "user": {
        "name": "Tiffany",
        "id": 29
      },
      "challenge_id": 2
    }    
  ],
  "meta": {
    "count": 1
  }
}

Le Partage de compte

Une autre forme de triche est le partage de compte.
En effet, dans la plupart des CTFs , le nombre de personnes par équipe est limité pour éviter un trop gros écart entre toutes les équipes.

Cela n’empêche en rien la triche malheureusement … Chaque équipe n’a qu’à créer un compte de team et le partager à toute son équipe.

On se retrouve ainsi impuissant contre une équipe de 20 personnes cachés derrière un unique compte …
(On a tous les mêmes noms en têtes .. )

Comment l’empêcher ?

Méthode 1:

Il est théoriquement facile de l’empêcher , en tous cas dans la plupart des cas .
(Si on suppose que l’équipe malveillante n’utilise pas de vpn commun)
Chaque personne a une ip différente et par chance, CTFd log toutes les ips pour chaque compte !

On peut donc facilement avec une vérification manuelle , détecter les multicomptes . Encore une fois , tous dépend de l’implication des admins dans la lutte contre les tricheurs …

Alt text

(Le développement d’un plugin pour CTFd semble assez documenté donc je garde l’idée de faire une auto-détections des multicomptes dans un projet futur)

Méthode 2:

La seconde techniques est bien plus basique …
Il suffit de bannir toutes les équipes avec le même nom ou un nom similaire à leurs utilisateurs :

Exemple:

  • Team: SuperFlag_Team
  • User: SuperFlag

C’est courrant que des équipes partages leur compte de la sorte , cela devrais être interdit et encore une fois , inscrit dans les règles .

L’api de CTFd peut encore nous permettre de scrapper toutes les données rapidement et proprement.

Les doubles comptes

Sur Discord

La plupart des CTF se déroule avec un serveur DISCORD lié pour pouvoir contacter les admins / partager des informations avec les joueurs.

De plus, il est aisé d’avoir plusieurs comptes sur cette plateforme et il n’est donc pas rare que certaines personnes se créent d’autres comptes secondaires pour échanger/voler les solutions d’autres équipes à leur insu

Je peux conseiller à tous les chefs d’équipes de CTFs de bien gérer les permissions sur les salons de leurs serveurs personnels et de faire attention à qui a accès aux messages de l’équipe .

Un autre souci est que grâce à ces doubles comptes, les tricheurs n’hésitent pas à aller demander de l’aide à d’autres personnes en message privés en échange d’informations ou même parfois de flag directement …

J’invite encore une fois tout le monde à bloquer ses messages privés lors de CTF en dehors de vos amis discord , cela vous évitera de vous faire harceler durant la compétition. Vous pouvez aussi choisir un nom différent de votre pseudo Discord lors de l’inscription au CTF pour ne pas être repéré sur le serveur commun à tous.

Comment empêcher les doubles compte discord ?

On peut d’après moi faire 3 choses pour empêcher les doubles comptes discord.

  • La première chose est de faire un bot qui interdit l’accès au serveur si la date de création du compte est inférieur à une *date minimum , par exemple 1 semaine.

  • La seconde est de n’accepter que les comptes ayant un email et un numéro de téléphone vérifié .

  • La dernière est d’utilisé une sorte captcha de vérification :

On peut supposer que si une personne utilise 2 comptes, elle utilisera le même pc . Se basant sur ça, je vois 2 cas possibles .

  • Cas 1: La personne utilise la fonctionnalité nouvelle de discord pour avoir plusieurs comptes sur le même pc .

  • Cas 2: La personne utilise une version modifié de Discord pour avoir son deuxième compte dessus . Je parle ici des versions béta de Discord comme : Discord Canary par exemple :

Dans le premier cas :

On peut utiliser un serveur http pour récupérer l’adresse ip et le user-agent de la personne qui rejoins le serveur.

  • Pourquoi ?
    On va simplement créer une base de données ou l’on va renseigner le nombre d’entrée et de sortie d’un utilisateur.

Je m’explique :
Pour chaque entrée, un bot discord envoie un lien vers un équivalent à pipedream.com.
Les admins récupèrent donc l’adresse IP ainsi que le User-Agent .
Ce même bot ajoute 1 dans une Base de Donnée à la clé sha1(ua+ip)

Si on considère que le tricheur clique sur le lien depuis discord , ce sera le navigateur par default qui ouvrira ce lien . Ainsi, 2 comptes sur un même pc auront probablement la même pseudo-signature et le score dans la base de donnée sera supérieur à 1 .

Dans le second cas :

Un bot discord peut envoyer un message quelconque dans un Channel spécialisé et demander a l’utilisateur de copier le lien discord correspondant à ce message.
On peut en backend, associé l’id du message a l’utilisateur pour ainsi vérifier son entrée. Celui-ci doit ensuite lui renvoyer ce dit id. Si on regarde le lien d’un même message copié depuis différents discord . On se rend vite compte du type de discord que la personne utilise .

https://discord.com/channels/590691085420986369/780222038974922754/1011944062661689374
https://canary.discord.com/channels/590691085420986369/780222038974922754/1011944062661689374

Cette technique joue sur la naïveté des joueurs et cela nous permet donc de déterminer si cette personne utilise une application tierce pour discord.

En liant toutes ces techniques dans un unique bot Discord . On peut aussi ajouter d’autres paramètres tel que :

  • L’existence d’une photo de profil.
  • Le Type de Pseudo

Et enfin obtenir un score de double-compte

Sur CTFd

Qu’en est-il de CTFd ? On peut prendre le cas d’une équipe qui cherche à avoir un Hint mais refuse de payer des points pour l’obtenir.
Le fait de créer un second compte CTFd pour récupérer les Hints et normalement interdit mais c’est toléré dans la plupart des compétions. *(Je ne sais pas si c’est par habitude ou par impuissance des admins) *

Le problème le plus évident et que même si on arrive à détecter un double compte . Il est surement déjà trop tard pour le bannir car la personne à déjà récupéré son HINT. Nous verrons après comment empêcher ca .

  • La première méthode est bien sur l’ip. Même si c’est facilement bypassable , c’est l’enchainement de protection qui feront décourager les tricheurs.

  • La seconde méthode sur le comportement d’un compte.
    Un tricheur aura souvent un comportement similaire :

    • Création d’un compte en plein ctf
    • Flag de 2/3 challenges rapidement
    • Récupération d’un Hint.
    • Plus de Flag

Dans un premier temps , si on considère qu’on veut bannir ces comptes . Il “suffit” de contrôler les temps de flags pour les comptes crée après le lancement du CTF.
(On détecte les joueurs qui flag rapidement 3 challenges puis prennent un Hint .)

Mais on peut aussi mettre plus de contrainte sur la récupération des Hints.
La manière la plus simple est d’empêcher la création de compte après le début du CTF.

On peut aussi par exemple :

  • Mettre une limite temporaire :
    (Pas de Hint pendant 5h aprés de la création d’un compte pendant la compétition).

  • Mettre une limite de point minimum pour obtenir un Hint .
    *(Cela pousserai le tricheur à rentrer beaucoup de flag d’un coup et le système précédent détecterai rapidement l’anomalie) *

Le Share flag

Ici, rien de bien nouveau. Il est bien difficile de savoir si une personne a réellement solutionné un challenge.
On peut voir 2 manière de détecter le Share flag:

  • Se baser sur les temps de flags
  • Se baser sur les Flags dupliqués.

Ici

  • La première méthode est expliqué par <strong>Worty</strong> dans cette vidéo Il explique que l’on peut calculer le temps qu’un utilisateur prend pour résoudre un challenge.
    On peut avec quelques modifications de CTFd , récupérer l’heure de téléchargement/ouverture d’instance d’un challenge et ainsi calculer la différence avec l’heure à laquelle une équipe flag .

    Cette différence de temps et ensuite comparé à un temps référence inscrit manuellement par l’auteur du challenge et si le temps de flag est nettement inférieur au temps normalement requis. On peut considérer l’utilisateur comme suspect.

  • La seconde méthode est basé sur l’unicité des flags . Pour les challenges dynamiques notamment. On peut baser la génération des flags sur l’ip du joueur De plus, CTFd accepte les regexs comme vérification de flag !
    On peut donc imaginer le cas suivant :

    • Je me connecte en TCP à un challenge avec l’ip : 192.168.1.48
    • Le challenge modifie sont flag de base:
      • flag{Th1s_i5_@_Flag} devient flag{Th1s_i5_@_Flag_+ SHA1(192.168.1.48) +}
        (libre à vous de modifier pour avoir une fin de flag non prédictible)
    • Je résoud mon challenge et je récupère mon flag personnalisé
    • Je le submit est il est accepté :
      • Le regex vérifie uniquement : Th1s_i5_@_Flag
        Le serveur effectue via un plugin une vérification : Il hash l’ip du joueurs et la compare à la fin du flag.

    Là où c’est intéressant, c’est qu’on peut rapidement détecter si un autre utilisateur à déjà soumit ce flag .
    On à donc trouvé 2 tricheurs

    La subtilité ici est que l’on peut évaluer un score de triche . En effet, on peut imaginer que si le SHA1 du flag ne correspond pas au SHA1 de l’ip qui submit le flag , on ajoute au score de triche 1. On se retrouve à la fin du CTF et on a une idée de qui triche ou non.

    Malheureusement , une personne peut souvent submit un flag qu’un de ses collègue a trouvé . Il est donc important de relativiser ce score de triche et de le mettre en corrélation avec les autres techniques.

Le Team up

On devine assez facilement quand 2 équipes jouent ensemble :

  • Même ordre de challenge résolus.
  • Heures qui coïncident
  • Etc…

Le problème est que ce team-up est visible quand on trace le graphique du scoreboard et seules les 10 premières équipes sont inspectés !

J’ai 2 idées pour détecter l’entraide entre équipes.

Méthode 1:

(Cette méthode s’applique à la fin du CTF.)
Pour chaque challenge, on va récupérer :

  • L’ordre et les heures de flags
  • Le nombre de points
  • Le nombre de solves
  • Le pourcentages de solves sur tous le ctf

Nous allons créer un graph avec des score inter-équipe.

Imaginons le challenge ci-dessous:

  • Point 400
  • % de solves : 5%
  • Ordre :
    Equipe 1 | 12h
    Equipe 2 | 13h
    Equipe 3 | 14h
    Equipe 4 | 15h
    Equipe 5 | 16h
    Equipe 6 | 16h02
    Equipe 7 | 17h

Pour chaque équipe , on va récupérer les N équipes qui ont flag avant nous . (Posons X=5)
Puis, on va évaluer entre chaque paire , un score en fonction :

  • Du nombre de point (La difficulté du challenge)
  • Le % de solves (Était-il vraiment si difficile ?)
  • Le nombre de personnes
  • La différences de temps entre les 2 équipes qui flags.

Ainsi, pour ce challenge , dans cet exemple ; l'équipe 6 aura un plus gros score avec l'équipe 5 que l'équipe 1 car l'équipe 6 a flag ce chalenge 2min après l'équipe 5.

Rien d’anormale jusqu’ici mais en additionnant tous les scores inter-équipes sur tous les challenges , on peut ainsi rapprocher différentes équipes et visualiser lesquelles sont proches des autres .

La technique fonctionne aussi en rapprochant les utilisateurs qui flag , des équipes précédentes
*Cela permettrai de détecter si un utilisateur copie les flags d’une autre équipe en cachette. *

Méthode 2:

Cette méthode vient de <strong>Podalirius</strong>.

On va utiliser l’algorithme KNN pour encore une fois, regrouper les différentes équipes.
On va créer un espace à N dimensions , avec N le nombre de challenges
Pour chaque solve de chaque équipe, on va créer un vecteur qui a pour norme : Le temps de flag du challenge.
Grâce à l’algorithme KNN , on va pouvoir former des groupes et ainsi voir qui flag quel challenges en même temps.

Illustration

On peut considérer un CTF avec 3 challenges uniquement. Ainsi, on forme un espace à 3 dimensions
Pour chaque challenge, on renseigne les dates de flag de chaque équipe :

  • En rouge , l’équipe 1
  • En bleu , l’équipe 2
  • En violet , l’équipe 3

Voici à quoi cela peut ressembler :

Alt text

les équipe 1 et 2 ont flag les 3 challenges dans la même période, contrairement à l'équipe 3
Ainsi, l’algorithme est capable de faire des groupes et ainsi de lié plusieurs équipes / joueurs entre eux !

Finalement

Il est indispensable pour garantir un déroulement sain d’un de mettre en place des techniques contre les tricheurs . Cela va de la vérification manuelle à l’automatisation de certaines tâches .

Je compte bien , d’ici quelques jours/semaines , sortir différentes outils en lien avec ce sujet sur mon github

Vozec