Acquis d'apprentissage

À la fin de ce cours, l’étudiant·e sera capable de :

  • Décrire et expliquer les principes des différentes méthodes d'analyse statiques de programmes.
  • Décrire et expliquer les principes des différentes méthodes d'analyse dynamiques de programmes.
  • Choisir une stratégie d’analyse statique de programme adéquate en fonctions des objectifs de cybersécurité visés.
  • Réaliser une analyse dynamique de programme en appliquant une approche de fuzzing adéquate.

Objectifs

L’objectif de ce cours est d’introduire l’étudiant·e aux principales méthodes d’analyse statiques et dynamiques de programmes en vue d’identifier des problèmes potentiels liés à la cybersécurité.

Contenu

Le cours vise à introduire les différents aspects de l’analyse statique et de l’analyse dynamique pour la cybersécurité et le développement de logiciels sûrs. Le contenu comprendd’une part les différents types d’analyse statique : l’analyse data-flow et l’interprétation abstraite (framework, terminaison, correction, concept de widening,  ...), l’analyse interprocédurale et l’analyse control-flow et l’analyse en présence de pointeurs. Ces types d’analyses seront illustrés au travers de deux applications pratiques : l’analyse de mauvais usages d’APIs et l’analyse de dépendances. D’autre part, le cours comprend une introduction à l’analyse dynamique au travers du fuzzing : fuzzing lexical, fuzzing syntaxique et fuzzing sémantique. Enfin, il s’agira de voir comment mettre en œuvre ces différents types d’analyse au sein d’un cycle de développement applicatif.

Méthodes d'enseignement

Le cours se compose de séances magistrales et de séances de travaux pratiques.

Méthode d'évaluation

L’évaluation repose sur la réalisation d’un projet.

Sources, références et supports éventuels

  • Nielson, Flemming, Hanne R. Nielson, and Chris Hankin. "Principles of program analysis." Springer Science & Business Media, 2004.
  • Zeller, Andreas, Rahul Gopinath, Marcel Böhme, Gordon Fraser, and Christian Holler. "The fuzzing book." 2019.
  • Takanen, Ari, Demott, Jared D., Miller, Charles, and Kettunen, Atte. "Fuzzing for software security testing and quality assurance." Artech House, 2018.

Langue d'instruction