INF889A - Analyse de programmes pour la sécurité logicielle - Hiver 2020

Documents

Échéancier approximatif

  • 7 janvier: cours annulé
  • 14 janvier: Introduction diapos / notes
  • 21 janvier: Analyse statique diapos / notes
  • 28 janvier: Analyse par flux de données (Dataflow) / diapos notes
  • 4 février: Plus de dataflow
  • 11 février: Exercices de dataflow diapos / notes
  • 18 février: Plus d'exercices
  • 25 février: Relâche
  • 3 mars: Examen intra
  • 10 mars: Correction examen
  • 17 mars: Covid19
  • 24 mars: Covid19
  • 31 mars: Articles
  • 7 avril: Articles
  • 14 avril: Articles
  • 21 avril: Projets (première partie)
  • 22 avril: Projets (seconde partie)

Bonus : 05 analyses inter-procédurales

Étude d'un outil

Choix de l'outil: avant le 28 janvier

  • 21 janvier. Pépos-Petitclerc, Philippe. angr pour binaires
  • 21 janvier. Arteau, Olivier. Security Code Scan pour C#
  • 28 janvier. Côté Cyr, Alexandre. SLEIGH de Ghidra pour binaire
  • 28 janvier. Jean-Philippe Caissy. dingo-hunter pour Go
  • 4 février. Lamoureux, Nicolas. IDA pour binaires
  • 4 février. Froidevaux, Pierre Thomas. bandit pour Python
  • 11 février. Lakhdar, Rayan. Flow pour JS
  • 11 février. Vuillaume, Gautier. SpotBugs pour Java
  • 11 février. Laurent, Lou-Théo Marc Barnabé. phan pour PHP
  • 18 février. Bouderbala, Merouane. ESLint pour JS
  • 18 février. Aubret, Camille. DLint pour Python
  • 18 février. Djellouli, Mourad. SonarQube multi-langage.
  • 10 mars. Thérien, Charles. Valgrind analyse dynamique pour binaire
  • 10 mars. Luciani, Petru-Ghjuvanni. Programming mistake detector pour Java.
  • 10 mars. Ragiot, Hugo. Find sec bugs pour Java.

Étude d'un article

Objectif, lire et comprendre un article scientifique.

  • Présentation de 15 minutes (+ 15 minutes de question et discussion) pour vous initier à la présentation de résultats scientifiques. Il vous est demandé de présenter: les auteurs, le sujet, le contexte de publication (date, domaine, problématique...), la proposition, la validation, les limites, la contribution du texte à la connaissance dans son domaine, votre compréhension, votre analyse critique.
  • Production écrite: un résumé de 250 mots mettant en avant la problématique, la proposition, la contribution, la validation et les limites.

Vous pouvez vous baser sur « How To Read a Paper de S. Keshav

Articles et dates de passage:

Mardi 31 mars

de 10h à 12h30 sur zoom. https://uqam.zoom.us/j/958366027

Mardi 7 avril

de 10h à 12h30 sur zoom. https://uqam.zoom.us/j/958366027

Mardi 14 avril

de 10h à 12h30 sur zoom. https://uqam.zoom.us/j/958366027

Projet de session

Objectif, lire et comprendre un article scientifique.

  • Choix du sujet (5%): avant le 11 février
  • Rencontre d'étape (5%): 17 mars
  • Présentation (10%) et mini-rapport (10%): 21 et 22 avril
  • Présentation (10%): 20 minutes (+ 5 minutes de question).
  • mini-rapport(10%): un rapport de 3 à 5 pages (pdf). S'il y a du code, tout mettre dans un depot github ou gitlab.

Sujets et ordre de passage:

Mardi 21 avril

de 9h30 à 12h30 sur zoom. https://uqam.zoom.us/j/958366027

Thèmes : logiciels malveillants, systèmes et assembleurs

  • Bouderbala, Merouane. Comparatif des utilisations de l’analyse statique de code pour la détection de malware.

  • Côté Cyr, Alexandre. Décompilateur de PEP/8 vers le langage SLEIGH pour pouvoir intégrer PEP/8 dans Ghidra.

  • Aubret, Camille. Recherche des bugs liés aux accès concurrents dans le système d'exploitation FreeBSD en utilisant l'outil RAZZER qui utilise l'analyse statique pour détecter ces bugs sur Linux. Des changements sont à faire dans le modèle d'appel système qui a été spécifiquement développé pour Linux.

  • Pépos-Petitclerc, Philippe. Analyse de shellcodes packés.

  • Laurent, Lou-Théo Marc Barnabé. Développement d'un plugin de taint-analysis pour l'outil Phan.

  • Arteau, Olivier. Développement d'un cadre d'analyse dataflow pour l'analyse le malware en JavaScript.

Mercredi 22 avril

de 10h00 à 12h30 sur zoom. https://uqam.zoom.us/j/958366027

Thèmes : qualité logicielle

  • Jean-Philippe Caissy. Outil d'analyse statique de code source Go pour des API graphql. L'objectif est de détecter dans une application go (package) les appels fait à l'une des librairies graphql les plus populaires (e.g. https://github.com/graphql-go/graphql), de récupérer le schéma distant et de faire une validation des types du code source. Si le temps le permet par la suite, j'aimerais rajouter quelques analyses qu'on a vu en classe, tel que les variables vivantes afin de valider que toutes les requêtes demandées à l'API distant ont été utilisé.

  • Lakhdar, Rayan. Analyse de code pour les évènements (et callbacks) en JavaScript.

  • Djellouli, Mourad. Comparatif des outils d'analyse des contrats intelligents pour le langage Solidity d'Etherium.

  • Froidevaux, Pierre Thomas. Intégrer le linter Bandit au sein de l'IDE Atom: zone sélectionné, document et projet entier, analyse en tache de fond.

  • Vuillaume, Gautier. Implémenter un diff d'AST dans l'algorithme SZZ (SSZ unleashed.

Bibliographie

Conférences, workshop et journaux

Sécu, tests et analyses

Langages et GL