Sécurité des logiciels

Description

Ce cours est une introduction à la sécurité des logiciels programmés en C/C++ sous Linux. Il présente les deux familles principales de langages asssembleur utilisés dans la vie courante (x86, ARM) et leurs ABI (Application Binary Interface) sous Linux, puis quelques techniques d’exploitation sur les dépassement de tampons, les bugs de format et d’autres.

Le but est de donner les clés nécessaires pour:

  • Comprendre les articles de recherche du domaine;
  • Réaliser un petit audit de sécurité sur du code C/C++;
  • Concevoir une preuve de concept sur une faille;
  • Faire de petits travaux de rétro-ingénierie logicielle sur des cas concrets.

Plan du cours

  1. Introduction to Software Security
  2. Usual Programming Flaws
  3. x86 Assembly
  4. ARM Assembly
  5. Executable File Formats
  6. Shellcodes
  7. Stack Buffer-overflows
  8. Heap Buffer-overflows
  9. Format Strings Bugs
  10. Software Obfuscation and Reverse-engineering

Références

  • Secure Coding in C and C++ (2nd edition), by Robert C. Seacord, 2013.
  • The Shellcoder’s Handbook: Discovering and Exploiting Security Holes (2nd edition), by Chris Anley, John Heasman, Felix Lindner, and Gerardo Richarte, 2007.
  • Learning Linux Binary Analysis, by Ryan O’Neill, 2016.
  • Hacking: The Art of Exploitation (2nd edition), by Jon Erickson, 2008.
  • Reversing: Secrets of Reverse Engineering, by Eldad Eilam, 2005.
  • Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation, by Bruce Dang, Alexandre Gazet, Elias Bachaalany, and Sébastien Josse, 2014.
  • Practical Malware Analysis: A Hands-On Guide to Dissecting Malicious Software, by Michael Sikorski and Andrew Honig, 2012.

Enseignants