– Sensibiliser les développeurs sur la sécurité du code
– Connaître le rôle des acteurs et la classification des risques : CERT, CWE,
OWASP
– Connaître le modèle mémoire d’un programme exécutable et le
fonctionnement de la pile
– Savoir repérer les failles de sécurité dans le code
– Étudier des cas d’attaques contre un code tout en connaissant les
mécanismes pour se protéger
– Connaître les bonnes pratiques à appliquer et les différentes approches
pour produire un code sécurisé
– Étudier les mécanismes de protection offerts au niveau d’un système
d’exploitation et par les compilateurs
– 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, 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 – 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
– Les fichiers
Travaux pratiques
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. 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.
Travaux pratiques
Divers exercices pour mettre en œuvre des concepts modernes de
C++14/17 afin d’écrire un code sécurisé et éviter les fuites de
mémoire
– Utilisation des analyseurs syntaxiques
– Utilisation de valgrind : identifier les fuites de mémoire
– Mécanismes de protection offerts par GCC
– Les options de sécurité de GCC
– Validation du Hardening.
Travaux pratiques
Utiliser un analyseur syntaxique (cppcheck) pour identifier les failles
Identifier les fuites de mémoire avec Valgrind
Tester plusieurs configurations de compilation avec gcc en
appliquant le hardening. Valider et évaluer des configurations gcc.
Référence : DEV010
Type de Stage : Pratique
Durée : 3 jours
Développeurs, chefs de projets
techniques.
Bonnes connaissances du langage
C++. Une expérience pratique de
la programmation avec ce langage
est recommandée