Complétude et Commodité


Jour et nuit
Maurits Cornelis Escher, 1938

Au cœur de tout système, qu’il soit conceptuel ou technologique, réside un défi fondamental : la gestion de deux objectifs qui semblent, à première vue, incompatibles. Cette dichotomie, profondément ancrée dans la nature même des systèmes, ne concerne pas uniquement leurs faiblesses apparentes mais découle de leur tentative de concilier deux ambitions contradictoires de manière simultanée.

Prenons d’abord l’exemple de quelqu’un cherchant à atteindre deux buts opposés l’un après l’autre. Bien que cela présente certaines difficultés, c’est une tâche réalisable. Cependant, l’ambition de satisfaire deux objectifs antithétique dans le même temps introduit un niveau de complexité bien plus élevé, transformant l’effort en une faillite.

Ces deux objectifs sont, d’une part, la recherche d’une couverture exhaustive. Un système qui n’aspire pas à être complet risque de devenir simplement un élément parmi d’autres au sein d’une structure plus vaste, perdant ainsi son autonomie et sa pertinence. Cette aspiration à l’exhaustivité se manifeste dans le désir d’inclure un éventail toujours plus large de cas, visant une intégralité absolue.

D’autre part, il y a la quête de simplicité d’utilisation. Un système doit rester facile à manipuler pour éviter de décourager ses utilisateurs, une complexité excessive pouvant mener à son abandon. Cette simplicité, bien qu’essentielle, entre souvent en conflit avec le désir d’exhaustivité. En effet, rendre un système plus simple peut réduire sa capacité à couvrir tous les cas envisageables.

Dans le domaine de la sécurité des systèmes d’information, une stratégie particulièrement efficace pour déceler et exploiter les vulnérabilités réside dans l’examen attentif du système d’information afin d’identifier les points où se manifestent des tensions entre l’objectif d’exhaustivité et le besoin de simplicité d’utilisation. En mettant en lumière les zones où les compromis entre ces deux exigences fondamentales ont été faits, souvent de manière implicite, il est possible de révéler et d’exploiter des faiblesses structurelles inhérentes au système.

lesquelles résultent de la définition même d’un système, par définition toujours a mi chemin entre impératif de complétude et impératif d’accessibilité. Par cette démarche, on cherche à comprendre non seulement les failles déjà présentes mais aussi à anticiper de nouvelles faiblesses qui pourraient être introduites par les évolutions futures du système sous l’angle de cette dichotomie essentielle.

Voici quelques exemples techniques pouvant servir à illustrer notre propos :

  • Exploitation des Mécanismes de Sérialisation pour Injecter des Objets Malveillants :

Dans le contexte de la tension entre exhaustivité et simplicité, l’exploitation des mécanismes de sérialisation/désérialisation illustre parfaitement cette dichotomie. Pour assurer une couverture exhaustive, les systèmes doivent être capables de sérialiser et désérialiser une large gamme d’objets complexes. Cependant, la simplicité d’utilisation pousse souvent à adopter des méthodes de désérialisation qui ne nécessitent pas de validation stricte des données entrantes, ouvrant la porte à des attaques. Un exemple technique de haut niveau pourrait être la création d’objets sérialisés exploitant des vulnérabilités spécifiques dans des bibliothèques populaires, comme certaines versions de la bibliothèque Java Apache Commons Collections, qui, lorsqu’elles sont désérialisées, peuvent exécuter du code arbitraire sur le serveur cible. Cet exemple montre comment la tension entre la nécessité d’une prise en charge complète des fonctionnalités de sérialisation et la facilité d’utilisation peut conduire à des compromis de sécurité.

  • Détournement de Sous-systèmes de Nettoyage de Code via des Constructions Polyglottes :

L’exploitation des mécanismes de nettoyage de code à travers des constructions polyglottes incarne également la dichotomie entre exhaustivité et simplicité. Pour être exhaustifs, les systèmes doivent reconnaître et neutraliser une gamme étendue de vecteurs d’attaque potentiels dans divers langages et contextes d’exécution. Or, la complexité de cette tâche est souvent simplifiée à des mécanismes de nettoyage génériques qui peuvent échouer face à des constructions polyglottes spécifiquement conçues pour passer à travers ces filtres. Un cas d’usage atypique pourrait être une charge utile qui combine des éléments de syntaxe SQL et JavaScript de manière à être interprétée comme un commentaire inoffensif par le nettoyeur SQL, mais qui s’exécute côté client comme du JavaScript malveillant. Cela démontre la difficulté de créer des systèmes à la fois exhaustifs dans leur protection et simples dans leur mise en œuvre.

  • Utilisation de Canaux Cachés dans les Protocoles de Communication pour Exfiltrer des Données

L’utilisation de canaux cachés pour l’exfiltration de données illustre une autre facette de notre dichotomie. La conception des protocoles de communication cherche à équilibrer la nécessité d’une transmission de données efficace et complète avec la simplicité et la performance. Les attaquants peuvent exploiter cette tension en identifiant des aspects du protocole négligés par les mesures de sécurité standard, tels que les champs d’en-tête sous-utilisés ou les variations de timing, pour créer des canaux d’exfiltration de données discrets. Un exemple sophistiqué pourrait impliquer l’utilisation de la stéganographie dans les paquets de données transmis sur un protocole sécurisé comme HTTPS, où des données sensibles sont dissimulées dans des parties du paquet normalement considérées comme non critiques pour la sécurité. Cet exemple révèle comment la quête de simplicité et d’efficacité dans la conception des protocoles peut ouvrir des failles subtiles lorsque confrontée à l’exigence d’une sécurité exhaustive.

Mouchoir de Schémas, DALL-E 2 Open AI

Le dilemme de Buridan, évoqué par la légende de l’âne équidistant entre deux tas de foin et mourant de faim faute de pouvoir choisir, illustre une facette de cette tension. Cet exemple symbolise le paradoxe décisionnel au cœur des systèmes visant à maximiser l’utilité tout en demeurant accessibles et intuitifs. L’incapacité à résoudre cette contradiction conduit à l’inertie ou à la défaillance du système, mettant en lumière les limites d’une démarche exclusivement rationnelle et exhaustive face au besoin de simplicité.

Ce dilemme trouve un écho dans les systèmes d’information contemporains, où la dichotomie entre exhaustivité et simplicité d’utilisation engendre des vulnérabilités et paradoxes systémiques :

  • L’exemple de l’authentification multifacteurs (MFA) illustre ce conflit dans les systèmes d’information : d’une part, la quête de sécurité exhaustive incite à l’adoption de protocoles MFA complexes, intégrant mots de passe, tokens physiques, et biométrie pour renforcer l’authentification. D’autre part, chaque strate supplémentaire complexifie l’expérience utilisateur, risquant de décourager l’utilisation du système ou d’inciter à la recherche de raccourcis qui compromettent la sécurité.
  • La tension entre personnalisation de l’expérience utilisateur et protection de la confidentialité, dans le contexte du big data et de l’intelligence artificielle, met en scène un autre aspect de ce dilemme. Les entreprises, en quête d’amélioration de l’expérience utilisateur par la personnalisation, se heurtent à la nécessité d’une protection exhaustive de la vie privée. Ce paradoxe souligne la faille systémique créée par la confrontation entre la simplicité d’utilisation, via la personnalisation, et l’exhaustivité en termes de protection de la confidentialité.