Durée : 4 jours - 28 heures
Tarif : Nous contacter pour une formation INTER – INTRA ou en COURS PARTICULIER
La formation est délivrée en présentiel ou distanciel (e-learning, classe virtuelle, présentiel et à distance). Le formateur alterne entre méthodes démonstrative, interrogative et active (via des travaux pratiques et/ou des mises en situation). La validation des acquis peut se faire via des études de cas, des quiz et/ou une certification.
Cette formation est animée par un consultant-formateur dont les compétences techniques, professionnelles et pédagogiques ont été validées par des diplômes et/ou testées et approuvées par l’éditeur et/ou par Audit Conseil Formation.
Développeurs en C/C++
Connaissance en assembleur est souhaitée
- Evaluation des besoins et objectifs en pré et post formation
- Evaluation technique des connaissances en pré et post formation
- Evaluation générale du stage
C et C++ des langages peu sécurisés ?
Connaitre les risques liés à la programmation
Les traces laissées par les développeurs
Différents acteurs : CERT, PCI, CWE, OWASP, MISRA, etc.
Codage sécurisé d’une application
Classification des risques selon CERT
Guides pour le codage sécurisé
Travaux pratiques : Consulter les guides de codage sécurisé, et déterminer les règles pertinentes du codage sécurisé à travers l’appréhension du calcul des risques
Modèle mémoire d’un programme exécutable
Compilation
Appels des fonctions
Les tableaux et les chaines de caractères
Les pointeurs
Gestion de la mémoire dynamique
Sécurité des entiers
Sorties formatées
Gestion des fichiers
Travail pratique 1: Exploration de certaines failles de sécurité : buffer overflow, stack smashing, pointer subterfuge, exécution d’un code arbitraire, return-to-libc et ROP attaques, etc.
Travail pratique 2 :Mettre des solutions pour remédier à chaque type d’attaque.
Macro et inline
Gestion de la mémoire
Gestion des erreurs et des exceptions
Structures des classes
Passer à C++14 et C++17 : conversions, pointeurs intelligents, espaces de noms, etc.
Le multithreading : Gestion sécurisée des threads et des données partagées
Travaux pratiques : Divers exercice pour mettre en œuvre des concepts modernes de C++14/17 afin d’écrire un code sécurisé
La cryptographie en C/C++ : les fonctions de hachage, le chiffrement symétrique et asymétrique, les bibliothèques cryptographiques.
La sécurité des communications : les protocoles SSL/TLS, gesttion des certificats numériques.
Travaux pratiques : Mise en œuvre de protocoles sécurisés dans les applications C/C++.
Concepts de base de la rétroconception (reverse engineering)
Outils de rétroconception : Introduction à IDA Pro et Ghidra
Comprendre et naviguer dans les appels de fonction et les conventions d'appel (cdecl, stdcall, fastcall)
Analyse des tables de dispatch virtuelles (vtables) pour le C++ orienté objet
Décomposition des binaires : Analyse des segments de code et reconstruction du flux de contrôle
Mise en place de protections contre la rétroconception
Recommandations pour sécuriser le code et prévenir la rétroconception
Travaux pratiques : Rétroconception d’un binaire simple avec IDA Pro/Ghidra
Outils d’analyse syntaxique
Utilisation de valgrind : identifier les fuites de mémoire
Techniques de mitigation des vulnérabilités (ASLR, DEP, canaries, etc.).
Mécanismes de protection offerts par les systèmes d’exploitation
Mécanismes de protection offerts par GCC
Les options de sécurité de GCC
Validation du Hardening.
Travail pratique 1 : Utiliser un analyseur syntaxique pour identifier les failles
Travail pratique 2 :Identifier les fuites de mémoire avec Valgrind
Travail pratique 3 :Tester plusieurs configurations de compilation avec gcc en appliquant le hardening. Valider et évaluer des configurations gcc.