Vous êtes sur la page 1sur 35

Les Sessions

Messaoud Rahim
Université de MEDEA
messaoud.rahim@gmail.com

M.RAHIM 2019
Introduction
• Le développement web a passé par plusieurs
étapes :
Sites statiques,
Sites dynamiques
Sites fournissant des espaces avec préférences
Applications avec authentification (espace
personnalisés)
• Parmi les mécanismes qui ont permis de
réaliser ces améliorations :
Les « SESSIONS ».
M.RAHIM 2019
Introduction
• C’est quoi une session ?

M.RAHIM 2019
Définition de Session
• En informatique et en télécommunication:
Une session est une:
– période délimitée pendant laquelle un appareil
informatique est en communication et réalise des
opérations au service d'un client (un usager), un
logiciel ou un autre appareil [1].

M.RAHIM 2019
Définition de Session
• Pour une application web
 Une session est une connexion, limitée dans le temps, entre
un client et un serveur. Elle est définie par un jeton de
session (ou identifiant de session) qui est généré
aléatoirement et souvent enregistré du côté client dans un
cookie [2].

 Une session est un mécanisme qui permet à un serveur web


de garder "en mémoire" des valeurs partagées entre plusieurs
requêtes (http) d'un même utilisateur [3].

 Les sessions sont des données, mémorisées sur le serveur, qui


peuvent rester accessible d’un script (une page) à l’autre [4].

M.RAHIM 2019
stocké

Stocke
valeur
Caractères, chaînes
s internaute SessionID
Entières,
flottantes U en

tableaux RL
Cook
ie
Les Sessions Hidden input
field
M.RAHIM 2019 User browser
A quoi servent les sessions ?
•Le protocole http :
 Un protocole sans état (déconnecté), ce qui
signifie que la connexion entre le navigateur et
le serveur est perdue une fois la transaction
(requête-réponse) est terminée.
Cela veut dire :
Aucune trace des requêtes traitées par le
serveur.
 impossible de conserver le contexte en
cours !
M.RAHIM 2019
A quoi servent les sessions ?
 Contourner la déconnexion du protocole http.
Une session est un moyen permettant à une
application web de se souvenir de l’utilisateur
lorsqu’il visite plusieurs pages.

 Transporter aisément des variables de page en page.


 Gérer l’authentification (éviter la nécessité de
s’authentifier à chaque page)
 Complément de cookies.
M.RAHIM 2019
Principe des sessions ?

M.RAHIM 2019
Principe des sessions ?
Création
Un visiteur arrive sur un site. On crée une session
pour lui.
ID de session :
• Un numéro unique, souvent très gros et écrit en
hexadécimal, par exemple :
a02bbffc6198e6e0cc2715047bc3766f
Le serveur web transmet automatiquement cet ID de
session de page en page.
Via des cookies
Via l’URL.
M.RAHIM 2019
Principe des sessions ?

M.RAHIM 2019
Principe des sessions ?
Utilisation
Une fois la session générée,
Créer des variables de session selon les besoins.

 Par exemple: Cas PHP


La variable $_session ['nom'] qui contient le nom du visiteur,
$_session ['prenom'] qui contient le prénom.

Le serveur conserve ces variables même lorsque la page PHP a fini


d'être générée. cela veut dire que, quelle que soit la page de votre
site, vous pourrez récupérer par exemple le nom et le prénom du
visiteur via la superglobale $_session .
M.RAHIM 2019
Principe des sessions ?
Destruction
Lorsque le visiteur se déconnecte de votre site,
 La session est fermée (détruite).
Toutes les variables de session ne sont plus accessibles.

Mais, il est difficile de savoir quand un visiteur se déconnecte !

Le visiteur fait une « déconnexion »,


Programmer un timeout.
• N.B: Le plus souvent, le visiteur est déconnecté par
un timeout

M.RAHIM 2019
Principe des sessions ?

M.RAHIM 2019
Où peut-on stocker/trouver un
identifiant session ?
Coté Client :
Cookies :
L’ID de Session est stocké chez le client dans les
cookies.
Lorsqu’il demande une page, le client envoie son
cookie contenant son identifiant (dans sa requête
http).
Exemple:
set-cookie: sessionid = “abcde123f”;
domain=“www.univ-medea.dz”
M.RAHIM 2019
Où peut-on stocker/trouver
un identifiant session ?
 Cookies :

M.RAHIM 2019
Où peut-on stocker/trouver un
identifiant session ?
Coté Client :
URL:
L’ID de session transite dans l’URL.
 on appelle ça le trans-id (?phpsessid=une-chaine-
aléatoire).

Ce mode de transfert ne sera utilisé que lorsque le


client refuse les cookies.
Exemple :
http://univ-medea.dz/?phpsessid=abcde123f
M.RAHIM 2019
Où peut-on stocker/trouver un
identifiant session ?
Coté Client :
 Champs cachés de formulaire:
Des champs cachés contenant l’identifiant de
session.

Exemple:
<form METHOD= “POST” ACTION= “http://univ-
medea.dz/” >
<input type=”hidden” name=”sessionID”
value=”abcde123f” />
</form>
M.RAHIM 2019
Où peut-on stocker/trouver un
identifiant session ?
Coté serveur :
 Le serveur stocke les informations de session
liées à chaque client.
 En utilisant l’identifiant session reçu, le
serveur peut reconnaître quel client est en train
de servir.
N.B: Le répertoire /tmp est généralement
utilisé.

M.RAHIM 2019
Attaques sur les sessions

Interception
Prédiction
Fixation
Exposition de session
Force brute
.

M.RAHIM 2019
Les attaques sur sessions :
L'interception (Session Sniffing) :
Consiste à intercepter un cookie par écoute du réseau
entre le serveur et le client.
Une sonde réseau (sniffer) permet au pirate d'écouter
le trafic et d'intercepter les informations échangées.
Le pirate possédant le cookie stockant l'identifiant de
session pourra l'installer dans son navigateur et utiliser
l'application web sous l'identité de l'utilisateur dont il a
volé le cookie et avec ses droits d'accès [11].

M.RAHIM 2019
Les attaques sur sessions :
Interception (Session Sniffing) :
Solution :
Il n'y a qu'une solution possible pour se protéger de ce
type d'attaque. C'est de protéger son serveur en utilisant
SSL/TLS.

M.RAHIM 2019
Attaques sur les sessions
Interception (Session Sniffing) :

M.RAHIM 2019
Attaques sur les sessions
La prédiction (Session Prediction):
Est l'art de deviner un identifiant de session valide.
Cette attaque concerne les serveurs dont l'algorithme de
génération de cet identifiant permet sa prédictibilité.
Ainsi, avec un peu d'analyse, en fonction de certaines
informations connues (un login courant ou obtenu de façon
légitime, la date, et autres informations que l'on peut obtenir
facilement...), Le pirate peut forger un identifiant rattaché à une
session en cours. Cette attaque est d'autant plus facile à réaliser
que l'application possède un grand nombre d'utilisateurs [11].
LA FORCE BRUTE:
Permet de trouver un identifiant valide par des tentatives
massives en générant un grand nombre d'identifiants et en
exploitant sa prédictibilité [11].

M.RAHIM 2019
Attaques sur les sessions
La prédiction & LA FORCE BRUTE:
Solution :
La seule solution consiste à modifier quelques directives de
configuration dans le fichier php.ini.
Ces directives sont les suivantes :
Session.entropy_length = 0
Session.entropy_file =
Session.entropy_length = 16
Session.entropy_file = /dev/urandom
Session.hash_function = 1
Session.hash_bits_per_character = 6
N.B: Il est bien au minimum de généré les identifiants de
sessions avec SHA1 et non plus MD5 (session.hash_function)
[12].
M.RAHIM 2019
Attaques sur les sessions

Image significative sur les attaques prédiction et force brute


M.RAHIM 2019
Attaques sur les sessions
La fixation:
Cherche à imposer un identifiant arbitraire à un utilisateur
donné. Pour réaliser cette attaque:

 le pirate doit créer cette session sur l'application,


 pousser un utilisateur à se connecter à l'application
(souvent par phishing),
 puis se connecter lui-même à la session lorsque
l'utilisateur se sera connecté.
[11].

M.RAHIM 2019
Attaques sur les sessions
La fixation:

 Le pirate va typiquement utiliser un outil requêtant l'application


régulièrement jusqu'à ce que le formulaire
d'authentification disparaissent, trahissant alors le succès de la double
attaque par phishing² / session hijacking (l'utilisateur cible s'est
connecté).
 Cet outil permet également d'empêcher l'expiration de la session due à
une période d'inactivité trop longue.

N.B: Ce problème arrive surtout pour les serveurs


dit "permissif" : c'est à dire des serveurs qui
autorisent un Sid quelconque et qui créeront une
nouvelle session avec cet sid (comme le cas de
PHP) [11].
M.RAHIM 2019
Attaques sur les sessions
La fixation:
Solution :
Il existe plusieurs solutions à ce type d'attaque, toutes ont leurs avantages et
inconvénients.
Pour toutes solutions :
Session.use_trans_sid doit bien évidemment être à 0 quel que
soit la solution adoptée (par défaut cette directive est désactivée).
Solution 1 :
La solution plus simple consiste sans doute à modifier deux
directives de configuration qui sont :
Session.use_cookies à mettre à 1
Session.use_only_cookies à mettre à 1

N.B: Les inconvénients de ces solutions sont que si l'utilisateur


n'accepte pas les cookies, il ne pourra pas démarrer une session
et que vous devez avoir accès au fichier de configuration
PHP.ini [12].
M.RAHIM 2019
Attaques sur les sessions
La fixation:
Solution :
Solution 2 :
Une autre solution simple à mettre en place serait de
stocké des informations et vérifier par la suite si elles
ont ou pas changés. Car d'une page à l'autre il est peu
probable qu'une information choisie change.
Mais quelle information choisir ?
On pourrait stocker l‘IP de l'utilisateur mais celle-ci est
de loin fiable à 100%. Si l'utilisateur est derrière un
proxy, il changera sans doute d‘IP assez régulièrement.
L'IP n'est donc pas à stocker.
Par contre, d'une page à l'autre, le navigateur ne risque
pas de changer. Nous pourrons donc utiliser cela [12].

M.RAHIM 2019
Attaques sur les sessions
La fixation:
Solution :
Solution 3:
Sans aucun doute, la meilleure des solutions est
d'utiliser la fonction session_regenerate_id().

M.RAHIM 2019
Attaques sur les sessions

L’ATTAQUE PAR FIXATION


M.RAHIM 2019
Attaques sur les sessions
EXPOSITION DE SESSION
(SESSION EXPOSURE) :
 C’est une vulnérabilité liée à l’hébergement mutualisé.
Dans ce type d'hébergement, un serveur est partagé entre
plusieurs sites. Toutefois, PHP enregistre les sessions dans
le même répertoire (/tmp par défaut).
 PHP crée un fichier de session par session utilisateur
nommé par l'identifiant de session. Ces fichiers sont de
bêtes fichiers texte qu'il suffit d'ouvrir avec votre éditeur de
texte favori et contiennent les variables de session en texte
clair !
 Imaginez alors que l'administrateur du serveur n'a pas bien
fait son travail et qu'un utilisateur puisse remonter dans
l’arborescence des répertoires. Il aurait alors accès à toutes
les sessions des sitesM.RAHIM
[11].2019
Attaques sur les sessions

EXPOSITION DE SESSION
Solution :
Vous sauvegardez vos sessions dans une base de données.
C'est un peu plus lourd à mettre en oeuvre que les autres
solutions mais c'est aussi la meilleures des protections pour ce
genre d'attaques.
Un autre problème mineur survient alors. Si on vous volait
votre login/mot de passe de votre compte pour accéder à la
base de données, cet utilisateur pourrait aussi voir les variables
de sessions. C'est pour cela que j'ai décidé tout simplement de
crypter en plus les données [12].

M.RAHIM 2019
Attaques sur les sessions

SÉCURISATION CONTRE L’EXPOSITION DE SESSIONS


M.RAHIM 2019