Chaque saison, des nuées de stagiaires quittent les réconfortants bancs de l'école pour rejoindre le monde sans pitié du travail. Afin de faciliter cette transition, nous, à Quarkslab, proposons des stages avec des sujets pointus, un encadrement sans complaisance mais néanmoins chaleureux, un régime alimentaire digne de sportifs de haut niveau (indispensable pour tenir le rythme), et un humour imperméable aux blagues qui ne font pas toujours un tabac. Si toi aussi tu aimes les défis, engage toi avec nous !
Les stages sont actuellement pourvus. Nous n'acceptons plus de stagiaires jusqu'en septembre 2016.
Comment répondre à une offre de stage selon Quarkslab
Si une offre vous tente, vous devez nous adresser :
un CV ;
une lettre de motivation : pas la « lettre type », mais plutôt une lettre expliquant pourquoi ce(s) sujet(s) vous intéresse(nt) particulièrement.
Le tout par email à stages-AT-quarkslab-POINT-com, avec comme sujet la référence du stage (voir ci-après dans les descriptions des sujets).
N'oubliez pas de mettre en avant les choses que vous avez réalisées et que vous pensez être en rapport avec le sujet, mais pas que ! C'est un des secrets d'une bonne candidature.
Chaque stage vient avec un petit exercice, qui ne doit pas demander trop de temps, mais nous permet de nous faire une idée de vos connaissances, capacités de présentation et surtout de votre ingéniosité. Il servira de base de discussion ensuite pendant l'entretien.
Pour tous ses stages, Quarkslab cherche des personnes motivées, curieuses, autonomes mais aimant le travail en équipe, et créatives mais structurées. Vous évoluerez dans un environnement dynamique où ça fuse dans tous les sens…
Les stages que nous proposons ont vocation à guider le stagiaire dans le monde du travail, et idéalement à l'embaucher ensuite s'il se plaît dans son nouvel environnement et qu'il sait corrompre^W convaincre son maître de stage et ses collègues.
Qui ne tente rien n'a rien, alors, hop hop, engage toi dès maintenant !
Contact : stages-AT-quarkslab-POINT-com
Classification de goodware / malware
Le stage est pourvu.
Description
Les malwares pullulent depuis des années sur nos ordinateurs, et leur nombre ne cesse de croître. Quand un analyste de sécurité se retrouve sur une machine pour déterminer si elle est infectée et par quoi, la première étape est de faire le tri entre ce qui est connu et ce qui ne l’est pas.
Dans ce qui est connu, on retrouvera les fichiers sains (goodware) et ceux malveillants (malware). Dans la mesure où ces fichiers sont déjà connus, peu importe leur salubrité, le tri est déjà fait. Toutefois, la plus grande partie des fichiers seront dans la catégorie des fichiers inconnus. Il est alors critique de déterminer rapidement vers quelle classe (goodware ou malware) tend un fichier donné afin que l’analyste ne perde pas de temps à analyser des fichiers inoffensifs.
Pour répondre à ce problème, un algorithme de classification est souvent utilisé. Toutefois, la classification est utilisée pour faire des rapprochements entre les fichiers exécutables afin que l’analyste ne reverse que les portions de code inconnues. Cela suppose donc que le fichier qu’il analyse est déjà considéré comme malveillant. Nous nous situons, dans notre cas, en amont, pour déterminer si oui ou non un fichier est malveillant. En outre, nous ne nous limitons pas au cas des fichiers binaires, de nombreuses attaques passant par des fichiers PDF, MS Office ou Flash au hasard.
Étant donnée une base de goodware et de malware, l’objectif du stage est de développer une solution pour classer l’appartenance d’un fichier inconnu à ces classes. Pour cela, on s’appuiera sur les caractéristiques propres à chaque format (PE, Office, Pdf, etc.) ou éventuellement des caractéristiques indépendantes (par exemple, la présence d’un shellcode), bien que ces caractéristiques semblent assez improbables. Le choix du modèle statistique retenu sera à justifier, et son développement sera réalisé en C, C++ ou en Python.
L'enjeu se situe avant tout dans la caractérisation des fichiers que dans le classifieur lui-même. Pour cela, le candidat pourra compter sur l'équipe pour tout ce qui concerne le reverse et l'analyse de malware.
Exercice
Prendre un malware récent et fournir une analyse : comportement, mécanisme d'infection, de propagation, méthode de détection, particularités, etc.
Compétences
Machine learning
Modèles statistiques
Python, C ou C++
Reverse Engineering / analyse de malwares
Référence
15-stage-goodware
Durée
6 mois
Ce stage pourra déboucher sur une thèse CIFRE.
Agrégation et visualisation de résultats d'analyses de fichiers dans IRMA
Description
IRMA (http://irma.quarkslab.com) est une plate-forme d'analyse de fichiers, auto-hébergeable et open-source. Lorsqu'un utilisateur soumet des fichiers à la plate-forme, ces derniers sont analysés par un ensemble d'outils tels que des antivirus, mais aussi des analyseurs statiques et dynamiques d’exécutables. Ces résultats sont aujourd'hui stockés dans une base NoSQL et ne peuvent être que consultés par l'utilisateur.
L'objectif du stage est de concevoir, développer et déployer des outils de visualisation de ces données issues des résultats d'analyses.
Un utilisateur de la plate-forme pourra, à l'aide d'une interface dédiée, accéder à un ensemble de tableaux de bord lui permettant de visualiser des statistiques sur les menaces observées et sera capable d'effectuer des recherches poussées dans les résultats des analyseurs de fichiers (virus de la même famille, heuristiques…).
Ce stage comprend donc :
la mise en place d'outils d'analyse, d'agrégation des résultats d'analyses,
le développement du dashboard de visualisation
l'exploitation des résultats via les outils mis en place (tags automatiques, alertes paramétrables…).
Exercice
Créer une probe PEFrame (https://github.com/guelfoweb/peframe) en vous inspirant de l'article de blog http://blog.quarkslab.com/writing-our-own-analyzer-for-the-open-source-multi-scanner-irma.html (l'exercice ne doit pas prendre plus d'une heure).
Profil
Vous avez une bonne connaissance des outils d'analyses de fichiers (AV, sandbox, vérification de format…)
Vous êtes à l'aise avec les workflow de développement open-source (Github, Travis…)
Vous êtes curieux, autonome et force de proposition
Compétences requises
Python
Développement Web
Base de données
(apprécié) connaissance d'un moteur de recherche type ElasticSearch ou Solr
(apprécié) connaissance des outils « DevOps » (Vagrant, Docker, Ansible…)
Référence
15-stage-irma-datamining
Durée
6 mois
Obfuscation : data scattering
Description
L'objectif de ce stage est à focale variable. Il faudrait arriver à implémenter dans l'obfuscateur de code Epona développé en interne à Quarkslab et reposant sur LLVM une obfuscation de donnée construite sur le changement de layout (plus exactement du data scattering). Une première base est décrite dans cet article :
https://hal.inria.fr/hal-00927427/document
Mais l'innovation est une qualité ! Cela coule de source (comme le camembert) mais une attention toute particulière sera mise sur la robustesse de la transformation (validation, fuzzing et cie)
Exercice
Forker le dépôt disponible dans https://github.com/quarkslab/llvm-dev-meeting-tutorial-2015
et écrire une passe qui transforme toutes les constantes 0 en x ^ x où x est un registre entier visible.
Note : c'est une très mauvaise obfuscation qui dégage à la première optimisation. Les enfants, ne faites pas ça chez vous.
Compétences
Compilation
Obfuscation [optionnel]
C++ [moderne]
Appétence pour la validation
Référence
15-stage-epona-flattening
Durée
6 mois
Ce stage pourra déboucher sur une thèse CIFRE.
Sécurité des composants TrustZone
Description
L'objectif du stage sera d'analyser et d'auditer les implémentations de composants TrustZone présents sur différents téléphones mobiles Android. La surface d'attaque des TEE (Trusted Execution Environments) sera évaluée et le stagiaire sera amené à développer des outils (fuzzer, debugger…) afin d'y rechercher des vulnérabilités.
Exercice
Choisir un advisory récent (moins de 2 ans) dans le noyau d'Android et en présenter une analyse détaillée : root cause du bug, exploitation possible, méthodes de détection de tentatives d'exploitation.
Exemple d'une vulnérabilité dans un composant Trustzone : http://theroot.ninja/disclosures/TRUSTNONE_1.0-11282015.pdf
Compétences
Bonnes connaissances de l'architecture ARM
Android (internals de préférence)
Programmation (C, Python…)
Rétro-ingénierie (aussi appelé « ingénierie à rebours » pour certains)
Recherche de vulnérabilités
Référence
15-stage-tz
Durée
4 à 6 mois
Détection d'attaques par virtualisation
Le stage est pourvu.
Description
La virtualisation matérielle est une technologie omniprésente aujourd'hui, et les conséquences de bugs dans les hyperviseurs sont critiques. Des vulnérabilités sont cependant trouvées tous les mois dans Xen et affectent de nombreux projets. Deux exemples sont particulièrement marquants : Amazon a dû redémarrer l'ensemble de son cloud début 2015 et la sécurité du projet Qubes OS est fortement impactée par ces vulnérabilités.
Les objectifs de ce stage sont :
étudier plusieurs vulnérabilités récentes d'un hyperviseur (Xen et/ou Hyper-V) ;
développer une preuve de concept pour une des vulnérabilités étudiées ;
implémenter dans un hyperviseur custom des heuristiques de détection des vulnérabilités d'exploits noyau et/ou hyperviseur.
Compétences
C
Connaissances des internals d'un OS
Asm x86/x64
Programmation noyau
Virtualisation matérielle (méga bonus, mais pas indispensable)
Exercice
Choisir un advisory de sécurité récent (moins de 2 ans) dans un hyperviseur (Xen, Hyper-V, VMWare…) et en présenter une analyse personnelle et détaillée : origine du bug, exploitation possible, et méthodes de détection des tentatives d'exploitation.
Référence
15-stage-virtu
Durée
5 à 6 mois
Du calcul multipartite au chiffrement complètement homomorphe : placer un curseur
Le stage est pourvu.
Description
Le chiffrement complètement homomorphe (FHE pour Fully Homomorphic Encryption), est une notion qui suppose la possibilité de calculer sur des données chiffrées et d'obtenir un résultat chiffré sans jamais avoir à déchiffrer. Il ouvre de nombreuses possibilités puisqu'il rend ainsi possible de confier un calcul sur des données confidentielles chiffrées à un tiers sans confiance. Malheureusement, le chiffrement complètement homomorphe ne possède pas actuellement d'instance efficace qui en permettrait une véritable utilisation répandue.
Le calcul sécurisé multipartie (MPC pour Multi-Party Computation) est une notion qui permet à plusieurs parties d'effectuer un calcul conjoint sur des entrées privées (confidentielles) sans les révéler.
Dans un article paru à ASIACRYPT 2013, intitulé Between a Rock and a Hard Place: Interpolating between MPC and FHE, Choudhury-Loftus-Orisini-Patra-Smart proposent un schéma de MPC qui s'appuie sur un chiffrement partiellement homomorphe (SHE pour Somewhat Homomorphic Encryption) paramétré par une valeur qui permet de se situer entre un schéma MPC (protocole avec des communications) et un schéma FHE (sans communication). Ce paramètre est un curseur entre le nombre de communications et la quantité de calcul.
Le but du stage proposé est de comprendre le continuum entre MPC, SHE et FHE. Il s'agira tout d'abord d'explorer le contexte et les applications visées grâce à la bibliographie proposée (qui sera à compléter). Il sera ensuite possible de proposer un PoC qui implémente le schéma proposé dans l'article après avoir recensé les implémentations disponibles et étudié les possibilités de réutilisation de briques existantes.
Exercice
Compétences
Bon niveau en informatique mathématique
Bonnes connaissances en cryptographie
C, C++ ou Python et notions d'ingénierie logicielle
Capacités (entraînées et disponibles) d'analyse et de synthèse
Référence
15-stage-crypto-mpc-fhe
Durée
6 mois
Sécurité de l'utilisation de courbes elliptiques en cryptographie
Le stage est pourvu.
Description
Les courbes elliptiques sont aujourd'hui très largement utilisées en cryptographie. Des suspicions de manipulation sur certaines courbes ou sur leur utilisation ont été mises en exergue ces dernières années. Un des exemples publics les plus célèbres est la standardisation d'un générateur d'aléa du NIST, Dual_EC_DRBG, backdooré par la NSA.
Le stage proposé consistera dans un premier temps à lister les courbes standardisées par différentes institutions (ANSSI, NIST, BSI, etc.) et de proposer une méthodologie permettant d'évaluer si une courbe a pu être générée de manière à être manipulable à des fins malveillantes. Dans un second temps, le stagiaire devra faire un tour d'horizon des différentes implémentations utilisées, dans les mondes logiciel et matériel. Cette étude se fera tant sur des bibliothèques open source que sur du code propriétaire, nécessitant donc une analyse par rétroconception.
Exercice
Expliquer avec vos propres mots et sur la base de vos connaissances, le sujet de stage proposé et ébaucher un plan de vos premières tâches.
Référence
15-stage-crypto-ecc
Compétences
Bon niveau en informatique mathématique
Bonnes connaissances en cryptographie
C, C++ ou Python et notions d'ingénierie logicielle
Notions de rétroconception
Capacités (entraînées et disponibles) d'analyse et de synthèse
Durée
de 4 à 6 mois
une poursuite en thèse n'est pas envisagée à ce stade