---
title: "Sécurité logicielle : introduction"
date: 2023-01-13
tags: ["vulnérabilité", "logiciel", "CVE"]
categories: ["Sécurité logicielle", "Cours"]
---

L'attaque de système informatique est aujourd'hui considérée comme courante, Il
suffit de brancher un ordinateur sur Internet pour qu'il soit systématiquement
attaquée.

La première attaque d'ampleur sur APRANET - MILNET fut le [ver de
Morris][l_morris] qui en 1988 le premier vers à utiliser le réseau pour se
propager. Les autorités en tirèrent alors plusieurs leçons:

 * les réseaux d'informations sont vitaux;
 * Internet est sensible aux attaques;
 * sa sécurité est un **problème mondial**;
 * il y a un réel besoin **d'expert en sécurité** que se soit pour patcher ou
   mettre en place des contre-mesures.

À la suite de cette attaque, le CERT (computer emergency response team ) fut
créé.

## Qu'est ce que la sécurité logicielle

Elle se compose de 4 parties :

 * la sécurité des données : concerne les donnés des utilisateurs
   (cryptographie);
 * la sécurité des protocoles : concerne les échanges de données;
 * la sécurité des logiciels : concerne les logiciels, système d'exploitation
   compris;
 * l'ingénierie sociale : concerne les humains

## Sécurité des logiciels : les buts

Pour un attaquant, le principe est de pénétrer au cœur du système. Il est tout
de même bon de préciser que **même root n'a pas forcément tous les droits sur le
noyau**.

Pour un défenseur, le but est de protéger le système d'exploitation et les
logiciels d'éventuelles failles -- et aussi de combler celles déjà existantes.

## Les failles

Elles sont induites **par la complexité de plus en plus fortes des logiciels**,
Un constat aussi : il y a plus de mauvais développeur que d'expert en sécurité.

Les failles peuvent aussi résulter de conditions particulières d'exécution lors
d'interactions avec d'autres programmes ou encore suite à la montée en charge du
système.

Il faut aussi garder à l'esprit que les sorties d'un programme ne reflètent pas
forcément ce qu'il exécute.

## Les modèle d'architecture

Deux modèles d'architectures existent:

 * **le modèle d'Harvard** implémenté en 1944 dans le *Mark I*. Ici, les données
   et le programme sont dans des espaces mémoires séparés reliés à l'unité de
   calcul par des bus dédiés.
 * **le modèle de Princeton** implémenté dans l'ENIAC en 1946, Les données et
   le programme partage le même espace mémoire. Le programme devient alors
   auto-modifiable.

Le développement se fait en suivant le modèle de *Harvard* mais s'exécute en
suivant le modèle de *Princeton*. Le compilateur est changé de traduire le code
d'une architecture vers l'autre. Mais cette traduction **ne se fait pas sans
perte...*

## Les vulnérabilités

Les étapes pour la mise au jour des vulnérabilités sont:

 1. découverte d'un éventuel problème dans un programme
 2. soumission du problème
 3. tri : le problème est-il déjà référencé? Concerne-t-il bien ce logiciel?
 4. enregistrement de la faille avec nom et numéro d'identification
 5. analyse de la faille pour en comprendre tous les tenants
 6. patch du programme
 7. déploiement du correctif

### CVE -- Common Vulnerabilities and Exposure

C'est une autorité de numérotation utilisée par les grand nom de l'informatique
(Debian, Google, Apple etc.). Les vulnérabilités référencées ne sont pas
forcément publiques. 

Ce n'est pas la seule base de données existante sur le sujet, il en existe bien
d'autre(CERT, Debian DSA ...).

### Les différents types

#### Les menaces

C'est un potentiel chemin vers une attaque. Elle ne se transforme pas forcément
en attaque.

#### la vulnérabilité

C'est une menace pouvant être utilisée pour en tirer avantage, Elle s'accompagne
un *PoC -- Proof of Concept* et éventuellement d'un *exploit*

#### Exploit

C'est l'exploitation malveillante d'une vulnérabilité.

### Exploitation

Un attaquant se focalisera toujours sur la partie la plus faible du système
d'information :

 * **le flux de données** : injecter un jeu de donnés spécialement forgées afin
   d'obtenir des conditions d'exécutions particulières
 * **le flux d'exécution** : modifier ou contrôler les processus en cours
   d'exécution
 * **les ressources** : accaparer les ressources afin d'en privé les processus :
   déni de service par exemple
 * **les utilisateur** : forcer les utilisateur à réaliser des action par
   l'ingénierie sociale.

[l_morris]:https://fr.wikipedia.org/wiki/Morris_(ver_informatique)
