Aller au contenu principal

Rencontre 12.2 - Chiffrement symétrique

Ne pas coder de la crypto soi-même

Vous n'avez sans doute pas le temps ni le niveau pour coder correctement de la crypto symétrique.

Le problème peut être l'algo qui est parfois naïf. Ou alors la mise en oeuvre qui plante.

TODO

  • faire un exercice pour illustrer une clé et un IV codés en dur dans le code
    • faire passer à travers tous les NAS possibles et avoir une table de décodage complète
    • attaque exhaustive sur 1 milliard de possibilités
    • regarder si on voit des ressemblances

Implanter un algo classique via une librairie

Implanter le code C# pour faire la crypto symétrique est assez simple, on peut:

  • chercher un peu dans la doc officielle : lien
  • chercher sur Google et sauter sur le premier StackOverflow qui a de l'allure
  • demander à ChatGPT « comment chiffrer avec AES en .NET »
  • demander à Github Copilot direct dans mon VisualStudio

Il nous reste à choisir une clé de chiffrement pour la plupart des algorithmes:

  • il faut que la clé soit difficile à deviner (un pirate pourrait essayer des clés comme il essaie des mots de passe)
  • il faut s'assurer qu'on stocke la clé dans un endroit peu accessible

Décompiler le .exe et trouver la clé

Les solutions de cybersec, Jean-Louis et fils propose une solution de cybersécurité ultra sophistiquée de cybersécurité qui se présente en 2 applications ultra sécures

  1. Notre application utilisateur permet de chiffrer avec une clé de 256 bits (ça fait beaucoup) vos mots de passe afin de les stocker de façon sécuritaire. Même si un pirate accède à votre ordi il ne pourra pas décoder les mots de passe stockés. Nous utilisons un algo à la pointe du progrès AES (Advanced Encryption Standard), le standard mondial!

  2. Notre application gardée dans un lieu hyper sécuritaire nous permet si vous oubliez un mot de passe de le retrouver en nous contactant par courriel.

Décrypter les données

C'est la même clé pour chiffrer et déchiffrer. Donc si on connaît la clé qui permet de chiffrer, on a tout ce qu'il faut pour déchiffrer.

On peut alors essayer de programmer un outil servant à décrypter les données avec le même algorithme, la même clé et les mêmes paramètres.

  • programmer une application qui Decrypt avec AES et la clé qu'on a trouvée
  • passer à travers le fichier ligne par ligne et décrypter les mots de passe
astuce

Au lieu de programmer un décrypteur vous-mêmes, vous pouvez utiliser un outil déjà fait. Il suffit de ressortir tous les paramètres. Dans le cas de AES, on a:

  • La clé symétrique (256 bits = 32 caractères ou 64 hex)
  • Le vecteur d'initialisation (IV) (128 bits = 16 bytes)
  • Le mode de chiffrement (CBC, CTR, ECB...)
  • La méthode de remplissage (padding)

Voici un site qui permet de paramétrer l'algorithme: https://www.toolhelper.cn/en/SymmetricEncryption/AES

Quelles solutions pour cacher la clé

  1. Principe #1, la clé ne doit pas être accessible aux utilisateurs. Il faut donc que la partie de la plateforme qui chiffre se trouve dans les infrastructures de l'entreprise, pas chez les utilisateurs
  2. Principe #2, moins il y a de gens qui ont la clé, moins il y a de chances de fuites.
  3. On peut donc imaginer que seul le responsable du système en prod a accès à la clé de prod. Les dév peuvent avoir accès à une clé différente sur leur environnement de développement.

Exercices et CTF

Exercice: Décompiler JeanLouisEtFils

Nous avons acheté la super appli et nous avons chiffré quelques mots de passe pour s'en souvenir.

L'appli se trouve dans le dossier sym JeanLouisEtFils du repo. Vous pouvez télécharger les fichiers exécutables dans la section Releases.

  • Essayez avec la commande strings pour trouver une chaîne dans un exécutable
  • Essayez dotPeek pour décompiler l'appli
  • La clé doit se trouver dans le code quelque part, explorez l'application pour trouver où se trouve la clé de chiffrement. La bonne nouvelle c'est que comme AES est un algo symétrique, c'est aussi la clé de déchiffrement

Pour valider tu peux utiliser l'application corpoDecryptor dans le dossier sym.


🚩 CTF-cle-exe (1 point)

📄 Fichier de remise: ctf-cle-exe.md

Objectif: Extraire la clé de chiffrement et les paramètres de l'algorithme depuis l'exécutable JeanLouisEtFils.

Votre mission:

  1. Téléchargez l'application JeanLouisEtFils.exe
  2. Utilisez un décompilateur .NET (dotPeek, ILSpy) pour analyser le code
  3. Trouvez tous les paramètres nécessaires au déchiffrement:
    • L'algorithme utilisé
    • La clé de chiffrement
    • Le vecteur d'initialisation (IV)
    • Le mode de chiffrement
Où chercher?

Dans une application .NET, les classes de cryptographie contiennent généralement les clés et paramètres. Cherchez des fichiers comme *Crypto.cs ou des classes qui font du chiffrement/déchiffrement.

Récompense: 1 point au tableau des scores si vous trouvez la clé et l'algorithme.

À noter dans votre rapport:

  • Nom de l'algorithme
  • Clé en clair
  • Vecteur d'initialisation (IV)
  • Mode de chiffrement (CBC, CTR, ECB...)

🚩 CTF-decrypt (5 points)

📄 Fichier de remise: ctf-decrypt.md

Objectif: Utiliser les informations trouvées dans CTF-cle-exe pour déchiffrer des données réelles.

Prérequis: Avoir complété CTF-cle-exe et trouvé tous les paramètres.

Votre mission:

  1. Lancez l'application JeanLouisEtFils et créez quelques mots de passe
  2. Localisez le fichier encrypted-passwords.txt dans votre profil utilisateur
  3. Utilisez un outil de déchiffrement en ligne avec les paramètres trouvés pour décrypter les mots de passe

Outil recommandé: https://www.toolhelper.cn/en/SymmetricEncryption/AES

Paramètres à configurer:

  • Algorithm: AES
  • Key: La clé trouvée dans le code (32 caractères)
  • IV: Le vecteur d'initialisation trouvé (en hex: 17382d434e595a0c22384e5a0c22384e)
  • Mode: CBC
  • Padding: PKCS7
  • Input format: Base64 (les données sont encodées en Base64)
Attention aux formats
  • La clé est en texte (32 caractères = 256 bits)
  • L'IV est en hexadécimal dans le code (32 caractères hex = 16 bytes = 128 bits)
  • Les données chiffrées sont en Base64

Récompense: 5 points au tableau des scores si vous arrivez à déchiffrer les mots de passe.

À inclure dans votre rapport:

  • Screenshot de l'outil avec les paramètres configurés
  • Le contenu déchiffré du fichier
  • Explication de la méthode utilisée

🚩 CTF-decrypt-sans-decryptor (3 points)

📄 Fichier de remise: ctf-decrypt-sans-decryptor.md

Objectif: Déchiffrer le fichier encrypted-passwords.txt du dossier stock sans utiliser corpoDecryptor, uniquement avec un service en ligne.

Prérequis: Avoir trouvé la clé et les paramètres dans CTF-cle-exe.

Votre mission:

  1. Récupérez le fichier encrypted-passwords.txt du dossier stock du repo
  2. Utilisez un outil de déchiffrement AES en ligne avec les paramètres trouvés précédemment
  3. Déchiffrez tous les mots de passe du fichier

Outil recommandé: https://www.toolhelper.cn/en/SymmetricEncryption/AES

Paramètres à utiliser:

  • Algorithm: AES
  • Key: La clé trouvée dans CTF-cle-exe (32 caractères)
  • IV: Le vecteur d'initialisation en hex (17382d434e595a0c22384e5a0c22384e)
  • Mode: CBC
  • Padding: PKCS7
  • Input format: Base64

Format du fichier: Chaque ligne du fichier est au format <texte_chiffré_base64> @ <description>

Exemple:

QXX2vYdUmkswb23GbEvdHw== @ quebec.ca
Astuce

Vous devez déchiffrer uniquement la partie avant le @. La partie après le @ est la description en clair.

Récompense: 3 points au tableau des scores si vous déchiffrez tous les mots de passe.

À inclure dans votre rapport:

  • Screenshot de l'outil avec un exemple de déchiffrement
  • La liste complète des mots de passe déchiffrés avec leur description
  • Explication de votre méthode

Temps pour le TP

Continuez à travailler sur votre TP3.