Quarkslab propose plusieurs stages, certains sujets pouvant aussi être aussi traités sous forme d'alternance. Ca touche à des tonnes de domaines : recherche de vuln, analyse de code, crypto, compilation, reconnaissance réseau, malware et réponse à incidents. Bref, il y en a pour tous les goûts.
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.
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. C'est un des secrets d'une bonne candidature.
Pour vous y aider, Quarkslab vous propose 3 petits challenges :
1/ La spirale de la R&D : quand on se casse la tête sur un problème, on tourne souvent en rond avant que la lumière ne jaillisse. Le but du défi est de simuler cela en écrivant un programme (langage au choix) qui prend en entrée un entier N, puis remplit la grille de taille N x N en spirale à partir du centre et affiche le résultat. Par exemple, avec N = 5 :
20 21 22 23 24 19 6 7 8 9 18 5 0 1 10 17 4 3 2 11 16 15 14 13 12
2/ La bière : tourner en rond, ça donne soif. Écrire un petit programme (langage au choix) qui va chercher un maximum de noms de bières sur Internet.
3/ Trop de choix tue le choix : chaque jour, on goûte une ou plusieurs des bières tirées au sort parmi 20 bières extraites du résultat du challenge 2/. Pour éviter que ce ne soit trop répétitif, la probabilité qu'une bière soit tirée au sort est inversement proportionnelle au nombre de fois où on a déjà bu ladite bière. Ainsi, pour chaque bière, plus elle aura été tirée au sort, moins elle aura de chance d'être de nouveau sélectionnée pour la dégustation. Écrire un programme (langage au choix) qui dispose d'une liste de 20 bières, et prend en entrée un nombre N, puis sort N bières parmi les 20 (ainsi que la probabilité pour chaque bière d'être tirée au sort la prochaine fois), et ce chaque jour pendant 1 mois.
Il n'est pas forcément nécessaire d'écrire un programme complet avec une belle GUI, mais votre ingéniosité nous intéresse : ça fera une bonne base pour discuter lors de votre 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...
Dans les offres ci-après, les pré-requis indiquent les connaissances à avoir pour le stage, tandis que les compétences indiquent celles que vous allez acquérir et utiliser tout au long de votre mission (donc les avoir, même un peu, c'est bien aussi).
Contact : stages-AT-quarkslab-POINT-com
Surveillance de commits pour la recherche de vulnérabilités
Description
L'objectif de ce stage est de mettre en place une plateforme de surveillance et d'analyse de serveurs de gestion de versions (svn/git/mercurial/...).
Le stagiaire devra développer une interface web permettant d'ajouter des dépôts et d'en gérer la surveillance. Il devra également participer à la recherche d'heuristiques pertinentes pour mettre en oeuvre un système d'alerte sur des commits suspects (modification d'une partie sensible du projet, auteur du commit connu pour ses échecs (cf heartbleed), utilisation de fonctions sensibles (strcpy,...)).
Il sera également possible d'utiliser le/de contribuer au projet interne SCAF : http://blog.quarkslab.com/scaf-source-code-analysis-framework-based-on-clang-pre-alpha-preview.html
Pré-requis
Bonne connaissance des systèmes de versioning
Vraies bases en recherche de vulnérabilités
Compétences
Audit de code
Python
Interface web
Référence
14-stage-commit
Durée
3 à 4 mois
SCAF : contribution à un framework d'analyse de code source
Description
Le but de ce stage est de contribuer au développement d'un framework interne d' analyse de code source C/C++/Objective-C (SCAF) pour la recherche de vulnérabilités.
Le stage est orienté programmation mais nécessite néanmoins des connaissances théoriques dans le domaine de l'analyse de code source. Le stagiaire sera amené à développer de nouvelles classes d'analyses, de développer des model checkers, d'améliorer le design de l'API/infra ou toute autre contribution pouvant enrichir la plateforme déjà existante.
Pré-requis
Program analysis (aliasing, data-flow, model checking, interprétation abstraite, exécution symbolique, ...)
Compétences
Python,
C/C++/Objective-C
Parsing (AST, CFG, ...)
Référence
14-stage-scaf
Durée
4 à 6 mois
Epona : mise à l'épreuve d'un outil d'obfuscation
Description
Epona est un obfuscateur de bytecode LLVM développé en interne à QuarksLab. L'objectif du stage est de fuzzer l'outil, sur deux aspects :
Génération de code correct. Epona est encore en phase de développement, et malgré de gros efforts de validation, le code produit n'est parfois pas équivalent au code d'entrée. Le but de cette partie est de compiler de gros projets avec epona et vérifier quand le code généré n'est pas correct, pour remonter les erreurs aux devs.
Génération de code obfusqué. En inspectant la sortie d'epona, on peut se rendre compte que certaines obfuscations ne sont pas aussi efficaces qu'elles pourraient l'être, par exemple parce que les optimisations appliquées après obfuscation simplifient le code, ou parce que les pré-requis d'une obfuscation sont trop contraignants. Le but de cette partie est de se plonger dans la peau d'un reverser et de regarder les abominations générées par epona.
Pré-requis
Petit bagage en reverse et/ou compilation
Compétences
Rigueur, C/C++, asm, Linux
Référence
14-stage-epona
Durée
2 à 4 mois
Analyse de crypto boîte blanche
Description
Dans certaines conditions, on est obligé de livrer des secrets (clés typiquement) avec les algo crypto supposés les utiliser. Or, il est plus sûr de considérer que l'attaquant dispose d'un contrôle complet sur l'environnement d'exécution de ladite crypto. En conséquence, il faut l'empêcher d'accéder aux secrets. Pour cela, on s'appuie fortement sur de l'obfuscation de code, afin de rendre compliqué l'analyse de la crypto, mais on protège aussi la crypto en la transformant pour que la clé ne soit pas directement visible : on parle de crypto boîte blanche.
L'objet du stage est double. D'une part, il s'agira étudier les propriétés mathématiques autour des boîtes blanches, et en déduire des faiblesses permettant de reconstruire des éléments des secret. D'autre part, il s'agira de transformer un algorithme dans sa version "whiteboxée" dans une version statique puis dynamique.
Pré-requis
Cryptologie, théorie des nombres, structures algébriques
Compétences
Python, C/C++
Compilation / LLVM
Référence
14-stage-wb
Durée
6 mois
Fuzzing pour environnements mobiles
Description
Le stage se découpe en deux phases : tout d'abord la conception de la plateforme matérielle puis le développement d'une interface de contrôle.
Conception d'une plateforme de fuzzing pour environnements mobiles : en accord avec les ingénieurs Quarkslab travaillant sur la problématique, sélection et acquisition des devices (écosystèmes iOS et Android) et des différents éléments matériels requis (câblage, hub, alimentation, etc.), prise en compte des contraintes matérielles (canal de contrôle, gestion de l'énergie, etc.)
Développement d'une interface (web) de contrôle : gestion et interrogation des devices attachés à la plateforme, déploiement et contrôle des campagnes de fuzzing, centralisation de la remontée des résultats.
Pré-requis
Environnements mobiles (Android voire iOS)
Compétences
Principes devops
Développement web (JS)
Python
Référence
14-stage-fuzzmob
Durée
3 à 4 mois minimum ; pour 6 mois, on ajoutera au moins l'intégration d'un fuzzer
Détection d'attaques par virtualisation
Description
L'objectif de ce stage est d'utiliser la virtualisation matérielle pour détecter l'exploitation de vulnérabilités dans un système virtualisé. Les 2 aspects principaux sont les suivants :
Analyse d'exploits pour déterminer les techniques employées pour exécuter un code arbitraire et garder un accès sur le système
Modification d'un hyperviseur pour implémenter la détection de ces attaques.
Pré-requis
Bonnes connaissances de l'architecture x86
Exploitation noyau Linux et/ou Windows
Compétences
C, asm x86, virtualisation
Référence
14-stage-virtu
Durée
3 à 6 mois
Ivy : développement de modules avancés pour un scanner Internet distribué
Description
Quarkslab développe un scanner modulaire et distribué visant à cartographier des réseaux à grande échelle. Les découvertes réseaux sont effectuées par un ensemble de machines réparties dans le monde entier, et une interface web permet de visualiser les résultats a posteriori.
Le but du stage est de développer de nouvelles sondes pour ce scanner. Dans un premier temps, pour se familiariser avec l'outil, des scripts seront à développer pour des protocoles spécifiques (ex : S7, Modbus, TS, RDP). Ensuite, en utilisant un moteur asynchrone développé pour l'occasion, des modules dédiés au niveau 7 comme :
récupération récursive du contenu d'un serveur FTP et/ou HTTP(S)
indexation de contenus de bases NoSQL
identification de serveurs NTP/DNS vulnérables à des attaques d'amplification
détection de C&C de botnets
Le moteur asynchrone fonctionne au layer 7 et doit garantir des performances élevées. Suivant les compétences du candidat, l'amélioration du moteur asynchrone pourra aussi être abordé.
Pré-requis
Compréhension des réseaux IP aux niveaux 3 et 4
Notions de routage dynamique
Concepts de programmation asynchrone et principe des coroutines
Compétences
Python hardcore
Programmation bas niveau C
Notions solides de C++ (STL, gestion mémoire, boost, meta-programmation)
Notions de base de données
Référence
14-stage-ivy
Durée
6 mois
Alternance possible autour de la reconnaissance réseau
IRMA : développement de plugins d'analyse en python
Description
IRMA est un projet open-source d'analyse de malwares qui permet de lancer le même fichier sur plusieurs plugins d'analyse et ensuite de présenter les résultats via une interface web.
Le stage consistera principalement au développement de nouveaux plugins d'analyse :
support de nouveaux antivirus (8 supportés pour l'instant)
support de probe comportementale (type Cuckoo sandbox)
plugin de metadata (détection de type, strings...)
Suivant les compétences du stagiaire, la partie représentation en AngularJS peut aussi être abordée.
Pré-requis
Python avancé
Maîtrise de git
Compétences
Bonnes connaissances de l'analyse de malwares et des informations intéressantes associées
Technologies devops (vagrant, ansible)
Celery
Référence
14-stage-irma
Durée
3 à 6 mois pour un stage
Alternance possible