Pass the SALT est une conférence combinant deux domaines : la sécurité informatique et le logiciel libre. La première édition a vu le jour en 2018, et après deux années en mode online, l’évènement revient sur site à Polytech Lille en 2022. Les conférences sont gratuites et anglophones.
Il est important de souligner que l’ensemble des logiciels présentés lors de la conférence sont des logiciels libres. Voici une sélection des présentations auxquelles nous avons assisté.
Mattermost End-to-End Encryption plugin par Adrien Guinet et Angèle Bossuat - Quarkslab
L’évènement commence par une présentation sur un plugin pour Mattermost proposant du chiffrement de bout en bout (End to End Encryption - E2EE). Mattermost est un logiciel de messagerie instantanée. Le modèle traditionnel client-serveur veut que le chiffrement s’opère entre ces deux entités. Le serveur a donc toujours une vision en clair des messages échangés sur la plateforme. Le but de l’E2EE est d’empêcher le serveur de voir ces échanges en clair. Pour cela on opère le chiffrement directement entre deux clients (utilisateurs) de la plateforme. Ainsi le serveur ne voit transiter que des échanges chiffrés.
La présentation explique l’implémentation cryptographique du plugin, et présente les avantages ainsi que les limites de l’outil.
Concernant les avantages, on peut citer une utilisation de clés privées non exportables du navigateur, protégeant par exemple ces dernières d’une faille de type Cross-Site Scripting (XSS). Pour les limites, la plus critique est celle où un attaquant actif a le contrôle du serveur Mattermost. Ce dernier ne peut évidemment pas lire directement les échanges de messages à cause de l’E2EE. Cependant, il est important de rappeler que Mattermost reste une application Web, et en ce sens c’est le serveur Mattermost qui délivre à ses utilisateurs le code à exécuter côté client (HTML, JavaScript, etc.). L’attaquant, ayant le contrôle du serveur, peut donc envoyer du code JavaScript vérolé aux utilisateurs, pour faire fuiter les messages échangés avant chiffrement, contournant ainsi l’E2EE. Quarkslab travaille sur une solution sur ce point, qui concerne en réalité toutes les applications utilisant de l’E2EE : la confiance accordée au code client de l’application. L’application Whatsapp de Facebook, proposant également de l’E2EE, utilise par exemple un plugin navigateur externe, qui vient vérifier que le code JavaScript de l’application n’est pas vérolé.
Vous pouvez retrouver un blogpost de Quarkslab présentant le plugin à cette adresse, ainsi que la page Github du projet ici.
CryptPad : a zero knowledge collaboration platform par Ludovic Dubost - XWiki
Ludovic Dubost est le CEO de XWiki, une plateforme de Wiki très utilisée dans le monde. CryptPad est un logiciel édité par la maison-mère de XWiki. Il propose un service de travail collaboratif en temps réel, pour écrire des documents, des rapports, entre plusieurs membres du serveur. Son principal avantage est qu’il met en place du chiffrement de bout en bout (E2EE) comme le plugin de Mattermost.
Ludovic présente l’outil et ses fonctionnalités, insistant sur le fait que pour que des logiciels comme CryptPad se démarquent des concurrents, il faut qu’ils proposent un service au moins équivalent à ces derniers. C’est pour cela que CryptPad prend en charge de nombreux formats de fichier, comme Word, Excel, et également des plus classiques comme Markdown.
Le site internet de CryptPad est accessible ici.
sslh – an applicative-level protocol multiplexer par Yves Rutschle - Airbus
La présentation commence par expliquer les origines de sslh. Dans les entreprises, il est courant d’avoir un pare-feu qui filtre les flux en sortie. Yves voulait utiliser son client mail Mutt avec SSH, mais le port 22 était bloqué par son entreprise. Il a donc placé son service SSH sur le port 443, qui lui était autorisé. Cependant, il souhaitait également mettre un service web sur le port 443. C’est pour répondre à ce problème que sslh est né. Ce programme se place devant plusieurs autres services et écoute sur le port 443. En fonction de la requête envoyée par le client, il va transmettre cette dernière à un service ou à l’autre. Comment fait-il pour distinguer à quel service est destiné la requête ? Il se base sur les différences des protocoles. Dans le cadre d’une requête HTTP, après l’initiation de la connexion TCP, c’est le client qui va envoyer en premier une requête HTTP. À l’inverse pour SSH, une fois la connexion TCP établie, le client attend une bannière de la part du serveur. sslh écoute donc les connexions entrantes sur le port 443, et en fonction du comportement du client (envoie une requête après la connexion TCP ou bien attend), sslh redirige la requête vers le service SSH ou web.
Le projet sslh est disponible sur les principales distributions Linux, et sur Github à cette adresse.
Building on top of Scapy: what could possibly go wrong? par Claire Vacherot - Orange Cyberdefense
Dans cette présentation, Claire présente un outil développé en interne pour faire du fuzzing de protocoles réseau industriel : BOF. Après une première tentative de développement de zéro, elle explique le cheminement du processus qui l’a amenée à intégrer Scapy dans l’outil. Scapy est un logiciel de gestion de paquets réseau (création, inspection, sniffing, etc.). Il ne permet cependant pas de créer des paquets malformés (pour faire du fuzzing), par exemple en plaçant une chaîne de caractère là où un entier est attendu. Ainsi l’outil BOF apporte une surcouche à Scapy, se basant sur sa syntaxe tout en l’enrichissant, permettant par exemple de changer les types de champ attendus pour un paquet. Elle présente les problèmes rencontrés lors du développement de l’outil.
Le projet est disponible sur Github à cette adresse.
Binbloom reloaded par Damien Cauquil - Quarkslab
Cette présentation s’intéresse aux moyens de trouver l’adresse de base (base address) d’un firmware, sur lequel on manque d’information (architecture, structure, etc.). Cette adresse sert de point d’entrée du firmware pour savoir à quel endroit se situe le code à lancer. Damien commence par présenter des outils existants utilisant une méthode de brute force : ils testent chaque adresse possible et attribuent un score de probabilité via une heuristique. Cette méthode fonctionne relativement bien pour des firmwares avec une architecture 32 bits, mais est moins efficace sur des architectures 64 bits, sur lesquels l’espace d’adressage est beaucoup plus grand. L’outil Binbloom, développé par Quarkslab, fonctionne d’une manière similaire. Damien souhaitait l’améliorer pour, entre autres, supporter les firmware 64 bits. Son idée utilise un calcul d’entropie sur le firmware, permettant d’identifier approximativement (mais surtout rapidement) les zones où se situe le code. Il fait ensuite une démonstration de l’outil, et le compare aux autres outils pour montrer ses performances.
L’outil Binbloom se trouve sur Github à cette adresse.
GNU poke, the extensible editor for structured binary data par Jose E. Marchesi
GNU poke est un éditeur interactif de binaire. Là où des outils Linux comme objdump et hexdump permettent d’afficher la représentation binaire d’un fichier (objet pour objdump), poke permet également de le modifier à la volée, et ce même pour un processus déjà lancé. Il intègre un langage de programmation procédural permettant de définir des structures de données. Un utilisateur peut ainsi définir la structure d’un fichier binaire arbitraire (par exemple MP3 ou JPG) pour le modifier efficacement avec l’outil. Jose présente un cas où un binaire contient une section de code avec un programme BPF. Il présente comment poke permet d’extraire ce programme BPF du binaire, et de le modifier directement.
Plus d’information sur GNU poke se trouvent à cette adresse.
The Poor Man’s Obfuscator par Romain Thomas
Romain présente ici plusieurs techniques sur lesquelles il a travaillé, pour obfusquer des exécutables ELF et Mach-O. Pour cela, il utilise le programme LIEF dont il est l’auteur. Cet outil permet de modifier plusieurs formats de fichier exécutable. Son idée n’est pas d’utiliser des techniques d’obfuscation classiques, comme le control flow flattening, ou l’ajout de junk code, mais de faire des modifications dans la structure des fichiers. Voici certaines techniques présentées :
- Créer des noms de symbole factices
- Mélanger aléatoirement les noms de fonction existante
- Créer des fonctions exportées avec des adresses non alignées en ajoutant un delta
- Inverser les attributs de la table des sections ELF
Un whitepaper sur le sujet est accessible sur le site de Romain ici.