sécurité des applications - arsouyes.org · sécurité des applications gestion des ressources...
TRANSCRIPT
![Page 1: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/1.jpg)
Sécurité des applicationsGestion des ressources
Thibaut et Corinne HENIN
www.arsouyes.org@arsouyes
![Page 2: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/2.jpg)
Sommaire
• Accès concurrents• Base de donnée• Système de fichiers• Gestionnaire de signaux• Mutexes
• Épuisement des ressources• Complexité• Divers
![Page 3: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/3.jpg)
Accès concurrentsSituation de compétition
![Page 4: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/4.jpg)
Principe
• Accès concurrents• Ordre des opérations change le résultat
• « TOCTTO »• Time Of Check To Time Of Use
![Page 5: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/5.jpg)
Base de donnée
![Page 6: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/6.jpg)
Code vulnérable<?php
$a = User::retrieve($_GET["a"]) ;
$b = User::retrieve($_GET["b"]) ;
$price = intval($_GET["price"]) ;
if ( $price <= 0
|| $a->money < $price
|| $a->id == $b->id) {
throw new \Exception("Not allowed") ;
}
$a->money -= $price ;
$b->money += $price ;
$a->persists() ;
$b->persists() ;
![Page 7: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/7.jpg)
Protection
• Exclusion mutuelle :• Utiliser des « transactions »• Utiliser des « locks »
• Attention :• Dépend des bases• Impact sur les performances
• DBA, c’est un métier
![Page 8: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/8.jpg)
Fichiers
![Page 9: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/9.jpg)
Algorithme vulnérable
<?php
if (is_file($filename)) {
$content = file_get_contents($filename) ;
}
<?php
while (true) {
touch($filename) ;
unlink($filename) ;
symlink("/etc/passwd", $filename) ;
unlink($filename)
}
![Page 10: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/10.jpg)
Protection
• Préférer les « file handlers » aux noms de fichiers• i.e. (f)open, fstat, fchmod, …
• Verrouiller les fichiers• i.e. open(O_EXCL), flock()
• Fonctions atomiques• i.e. mv
![Page 11: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/11.jpg)
Sig Handlers
![Page 12: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/12.jpg)
Non atomicité
#include <stdio.h>
#include <signal.h>
void sighndlr() {
printf("UID: %d\n", getuid());
/* other cleanup code... */
}
int main() {
int origuid = getuid();
signal(SIGINT, sighndlr);
setuid(0);
sleep(5);
setuid(origuid);
return(0);
}
![Page 13: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/13.jpg)
Code non réentrant#include <stdio.h>
#include <signal.h>
char * buffer = NULL ;
void sighndlr() {
free(buffer) ;
sleep(10) ;
buffer = NULL ;
}
int main() {
int origuid = getuid();
signal(SIGINT, sighndlr);
buffer = (char*) malloc(512) ;
sleep(10);
return(0);
}
![Page 14: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/14.jpg)
Protection
• Uniquement des fonction ré-entrantes
• Bloquer les signaux dans le gestionnaire
• Bloquer les signaux dans les phases critiques
![Page 15: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/15.jpg)
Portée des variables
![Page 16: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/16.jpg)
Singletonspublic class GuestBook extends HttpServlet { String name ;
protected void doPost( HttpServletRequest req, HttpServletResponse res) { name = req.getParameter("name") ; // ... out.println( name + ", thanks for visiting !") ; }}
![Page 17: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/17.jpg)
Sessions
SomeView.php<?php
session_start() ;
$_SESSION["current"] =
$_SERVER["REQUEST_URI"] ;
SomeForm.php<?php
session_start() ;
doStuff($_GET, $_POST) ;
header(
"Location: "
. $_SESSION["current"]) ;
![Page 18: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/18.jpg)
Sessions bisLogin() {
Session["Username"] = Username.Text ;
Session["Password"] = Password.Text ;
If CheckLogin() {
Session["Authed"]=TRUE;
} else {
Session["Username"] = "";
Session["Password"] = "";
}
}
LoadUserData() {
If !(Session["Authed"]=TRUE)
return FALSE;
GetUserDataFromDB(
Session["Username"]
);
//Display user data
Return TRUE;
}
Source : https://www.owasp.org/images/8/8e/OWASP_NZDay_2011_BrettMoore_ConcurrencyVulnerabilities.pdf
![Page 19: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/19.jpg)
Protection
• Maîtriser la portée des variables• « Et si deux threads sont en parallèles ? »
• Principe des Singletons :• « Coupable jusqu’à preuve du contraire »
• Et si vraiment …• Thread safety : mutexes
![Page 20: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/20.jpg)
Gestion des mutex
![Page 21: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/21.jpg)
Éviter le problème
• Objets immuables• Ne changent pas de valeur• Manipuler des copies
• Fonctions et objets « thread safe »• Peuvent être appelées en parallèle
![Page 22: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/22.jpg)
Mutexes
• Niveau « threads » (même processus)• E.g. pthread_mutex, pthread_cond
• Niveau processus (même système)• Généralement associé à la ressource• E.g. les fichiers via « flock »
• Niveau réseau• Fournis par la gestion des messages entre agents• i.e. Elasticsearch (lol)
![Page 23: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/23.jpg)
Dead Lock 1/2<?php
function someCriticalStuff() {$file = fopen("/tmp/someFile", "c") ;
while (! flock($file, LOCK_EXCL)) {;
}
// Do critical stuffs}
![Page 24: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/24.jpg)
Dead Lock 2/2 (with RAII)<?php
class MyLock {
private $fp ;
public function __construct($filename) {
$this->fp = fopen("/tmp/$name", "c") ;
flock($this->fp, LOCK_EXCL) ;
}
public function __destruct() {
fclose($this->fp) ;
}
}
<?php
function critical_one() {
$first = new MyLock("first") ;
$second = new MyLock("second") ;
// do stuffs
}
function critical_two() {
$second = new MyLock("second") ;
$first = new MyLock("first") ;
// do stuffs
}
![Page 25: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/25.jpg)
Épuisement des ressources
![Page 26: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/26.jpg)
Complexité
![Page 27: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/27.jpg)
Complexité des algorithmesClasse Problème
O(1) Opération de base, Accès tableau
O(log n) Recherche dichotomique, accès dans un indexe
O(n) Parcours d’une liste (naïve)
O(n log n) Tri fusion (ksort)
O(n2) la plupart des tris, jointure naïve
O(n3) Multiplication de matrices
O(2poly(n)) Sac a dos (force brute)
O(n!) Voyageur de commerce (naïve)
Source : https://fr.wikipedia.org/wiki/Analyse_de_la_complexit%C3%A9_des_algorithmes
![Page 28: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/28.jpg)
Complexité et sécurité
• Structure + algorithme• complexité
• Maîtrise des entrées• Déni de service
![Page 29: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/29.jpg)
ReDoSRegular expression Deny of Service
• Principe :• Certaines expression ont une complexité exponentielle
• (a+)+, (a|aa)+, …
• Si l’application utilise une expression de ce genre• E.g. OWASP, java classname : ^(([a-z])+.)+[A-Z]([a-z])+$
• Des entrées choisies peuvent ralentir fortement l’application
Source : https://en.wikipedia.org/wiki/ReDoS
![Page 30: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/30.jpg)
Divers
![Page 31: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/31.jpg)
Mémoire - Malloc
• Cas classique• Oubli de libération => fuite
• Protection• Ulimit –v (protéger les autres)• Valgrind (pour détecter les fuites)
• Ne pas oublier le « long terme »
![Page 32: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/32.jpg)
File Handlers
• Similaire à la mémoire• Oubli de fermeture des descripteurs
• Protection :• Ulimit –n• /proc/sys/fs/file-max
![Page 33: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/33.jpg)
Processus – fork bomb
• Naïf :• Bash « :(){ :|:& };: »• Mais il y a généralement mieux à faire ;-)
• Bug :• Fork + pipe/dup + execve
• Oubli du « exit »
• Commande erronée => fork bomb• Il y a souvent mieux à faire aussi ;-)
![Page 34: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/34.jpg)
Processus – Bad Design
• Principe :• Serveur avec N threads• Chaque thread gère une connexion
• Attaque « slowloris »• Établir des connexions HTTP partielles• Les threads attendent la suite (qui vient lentement)
• Protection :• Un thread ne traite qu’une tâche prête• Sinon … système de timeout, de nettoyage, …
![Page 35: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/35.jpg)
Zip Bomb
• Archive de petite taille• Décompression de très grande taille
• 42.zip• 42,374 bytes• Contient 5 niveau de compression• Chaque niveau contient 16 fichiers• Le fichier de base fait 4,3 GB• Total décompressé : 4,5 PB
![Page 36: Sécurité des Applications - Arsouyes.org · Sécurité des applications Gestion des ressources Thibaut et Corinne HENIN @arsouyes](https://reader034.vdocuments.pub/reader034/viewer/2022050208/5f5adf8a56f4044bbf712bab/html5/thumbnails/36.jpg)
Divers
• Débit réseau
• Espace disque• E.g. fichiers journaux, base de données
• Identifiants• SQL int max = 2^31 – 1• IPv4 ;-)