Aptitude informatique 2018 : systèmes, réseau et sécurité

Aller à un exercice ou une partie

Proposition de corrigé — non officielle. Examen professionnel de vérification d’aptitude aux fonctions de programmeur système d’exploitation, session 2018, sujet n° 1 : quatre parties, durée 2 h, coefficient 2.

Ouvrir le sujet officiel · Télécharger une copie du sujet · Retrouver les annales

1. Systèmes d’exploitation

A. Quatre mécanismes de communication entre processus

Tube, ou pipe. Un processus écrit un flux d’octets qu’un autre lit. Un tube classique est unidirectionnel. Exemple : une commande produit une liste de fichiers, transmise à une commande de filtrage.

Socket. Deux extrémités échangent des données ; les sockets locales fonctionnent sur une même machine, les sockets réseau entre machines. Exemple : un client interroge un service local ou un serveur distant.

Mémoire partagée. Plusieurs processus accèdent à une même zone mémoire. La synchronisation exige des mécanismes adaptés, par exemple des sémaphores. Exemple : des processus de calcul échangent de grands tableaux sans les recopier à chaque message.

File de messages. Des messages sont déposés puis récupérés, éventuellement selon leur type ou leur priorité. Exemple : un processus envoie des tâches à des processus de traitement indépendants.

Une mémoire partagée ne dispense pas de synchronisation : deux écritures concurrentes peuvent rendre les données incohérentes. Un sémaphore coordonne les accès ; il ne transporte pas, à lui seul, le contenu d’un tableau.

B. Processus, threads et navigateurs

Un processus dispose d’un espace d’adressage et de ressources gérés par le système d’exploitation. Un thread est un fil d’exécution à l’intérieur d’un processus : il partage notamment la mémoire du processus avec ses autres threads, mais possède son propre état d’exécution, dont sa pile et ses registres.

Le dessin du sujet compare deux modèles de 2018. Dans le modèle Chromium représenté, les dix onglets sont répartis dans dix processus de rendu. Dans le modèle Firefox représenté, ils sont regroupés dans quatre processus, contenant respectivement trois, trois, deux et deux threads d’onglets. L’interface utilisateur est séparée dans les deux schémas. Il ne faut pas confondre ces dessins avec une description de toutes les versions actuelles des navigateurs.

Une architecture à plusieurs processus permet de mieux isoler les incidents : la défaillance d’un processus de rendu peut laisser l’interface et les autres processus utilisables. Elle facilite aussi le cloisonnement des droits par des bacs à sable et l’exploitation de plusieurs cœurs. Cette isolation dépend toutefois de l’implémentation ; elle ne garantit ni une sécurité absolue ni une accélération de chaque opération.

Un processus par onglet limite davantage les effets d’un incident à cet onglet, mais multiplie les ressources et les communications entre processus. Le regroupement réduit certains coûts de création et de mémoire ; en contrepartie, plusieurs onglets peuvent être touchés par la panne du processus qu’ils partagent. Les threads partagent facilement leurs données, mais exigent une synchronisation rigoureuse.

2. Définitions

CSRF — Cross-Site Request Forgery. Attaque qui conduit le navigateur d’un utilisateur authentifié à envoyer à un site une requête qu’il n’a pas voulue. Le site ne doit pas traiter la présence d’une session comme une preuve suffisante de l’intention de l’utilisateur.

SDN — Software-Defined Networking. Organisation d’un réseau où le contrôle des communications est séparé de leur acheminement et pilotable par logiciel.

CLI — Command-Line Interface. Interface permettant d’interagir avec un programme par des commandes textuelles.

API — Application Programming Interface. Ensemble de règles et de points d’accès par lesquels des logiciels utilisent les fonctions ou les données d’autres logiciels.

DevOps. Démarche rapprochant développement et exploitation : coopération, automatisation des livraisons, supervision et retour d’expérience. Ce terme n’est pas le nom d’un logiciel unique.

Social engineering. Ingénierie sociale : manipulation d’une personne pour obtenir une information ou provoquer une action compromettant la sécurité.

SPF — Sender Policy Framework. Mécanisme reposant sur le DNS pour indiquer quels serveurs sont autorisés à émettre du courrier pour un domaine utilisé dans l’enveloppe SMTP. Il ne signe pas le contenu du message.

CAA — Certification Authority Authorization. Enregistrement DNS indiquant quelles autorités de certification sont autorisées à émettre des certificats pour le domaine, selon les règles du protocole.

Pour CAA, la référence disponible à la session est la RFC 6844 de 2013, et non sa révision de 2019.

3. Réseau

1 à 3. Sigles, objectif et exemples

SSL signifie Secure Sockets Layer et TLS, Transport Layer Security. TLS protège les échanges contre leur lecture et leur modification par un tiers. Il permet l’authentification du serveur, généralement par certificat ; l’authentification du client est possible mais n’est pas systématique. Il ne corrige pas les vulnérabilités de l’application transportée.

Deux exemples : HTTPS, qui transporte HTTP sur TLS, et SMTP avec STARTTLS, qui fait évoluer une connexion de courrier vers un transport protégé. IMAPS constitue un autre exemple possible.

4. Lire la suite de chiffrement

Dans TLS_DH_RSA_WITH_AES_128_CBC_SHA :

  • TLS désigne le protocole ;
  • DH indique un échange de clés Diffie-Hellman statique ; il ne faut pas le confondre avec DHE, sa forme éphémère ;
  • RSA concerne l’authentification du certificat associé aux paramètres DH ; il ne désigne pas ici un transport de clé RSA ;
  • AES_128 indique AES avec une clé de 128 bits ;
  • CBC désigne le mode de chaînage des blocs ;
  • SHA désigne ici le mécanisme HMAC utilisant SHA-1 pour l’intégrité des enregistrements.

Cette décomposition correspond à la RFC 5246, TLS 1.2. Une suite contenant DH statique ne permet pas de conclure à la confidentialité persistante offerte par un échange éphémère.

5. AES ou 3DES ?

La seule capacité du serveur à utiliser les deux suites ne permet pas de déterminer son choix. Il faut connaître les suites proposées par le client et l’ordre de préférence réellement appliqué par le serveur. Si les deux sont disponibles et que la préférence de sécurité privilégie AES, la suite AES peut être retenue.

AES constitue le choix à privilégier entre les deux dans cette comparaison : 3DES est un algorithme ancien à blocs de 64 bits, présentant notamment des limites pour de grands volumes de données. Cela n’autorise pas à déduire automatiquement la configuration d’un serveur. Il s’agit d’une explication du sujet de 2018, pas d’une recommandation de déployer aujourd’hui ces suites historiques.

6. SNI

Avec SNI, Server Name Indication, le client indique dans son message initial le nom du serveur qu’il souhaite joindre. Le serveur peut ainsi sélectionner le certificat correspondant au site demandé, même si plusieurs sites HTTPS partagent une adresse IP. Sans cette indication, le choix du certificat intervient avant que le serveur puisse lire la requête HTTP protégée. Dans le mécanisme décrit à la session, cette indication de nom n’est pas chiffrée. Voir la RFC 6066.

4. Sécurité

A. Canaux auxiliaires

Une attaque par canal auxiliaire exploite une information liée au fonctionnement du système plutôt qu’une faiblesse directe de l’algorithme : durée d’exécution, consommation électrique, activité du cache, par exemple. Des différences de temps d’accès à des données en cache peuvent révéler indirectement une opération effectuée sur une donnée secrète.

Une injection SQL est un exemple d’attaque qui ne repose pas sur un canal auxiliaire : elle exploite le traitement incorrect d’une entrée dans une requête. Elle vise la logique de l’application, et non la mesure d’un effet physique ou temporel de son exécution.

B. Spectre et Meltdown

Les processeurs peuvent exécuter des instructions de façon spéculative avant de savoir si elles seront réellement nécessaires. Même lorsque le résultat est ensuite abandonné, certains effets sur le cache peuvent subsister et être mesurés.

Spectre détourne notamment la prédiction pour provoquer une exécution transitoire révélant des données par ces effets. Meltdown exploite, sur des processeurs vulnérables, l’usage transitoire de données protégées avant que la violation d’accès ne bloque architecturalement l’opération. Les deux familles ne sont pas une même faille ayant simplement deux noms.

La vulnérabilité dépend du processeur et de la variante d’attaque : tous les processeurs d’une famille ne sont pas affectés de façon identique. Les systèmes d’exploitation, le microcode, les compilateurs et les navigateurs participent aux mesures de réduction du risque. L’isolation des tables de pages du noyau, ou KPTI, concerne notamment Meltdown ; les barrières de spéculation et les techniques telles que retpoline répondent à certaines variantes de Spectre.

Aucun correctif unique ne permet de garantir la protection contre toutes les variantes. Il faut appliquer les mises à jour adaptées au matériel et aux logiciels, puis vérifier les protections effectivement actives. La présentation des chercheurs sur Spectre et Meltdown distingue les attaques et leurs contre-mesures.

C. Blockchain

Une blockchain est un registre dont les enregistrements sont regroupés en blocs liés par des empreintes cryptographiques. Dans un système distribué, un mécanisme de consensus détermine la version du registre acceptée par les participants. La modification d’un ancien bloc change les empreintes suivantes et peut être détectée.

Cette résistance dépend du protocole, des droits des participants et des hypothèses de sécurité. Une blockchain ne rend pas vraie une donnée fausse saisie à l’origine ; elle n’assure pas automatiquement sa confidentialité. Elle peut être publique ou à accès restreint et n’est pas nécessairement associée à une monnaie.