Daniel Boteanu
INF8420: Éléments de Sécurité InformatiqueINF8420: Éléments de Sécurité Informatique
Sécurité des applications web
INF8420Sécurité Informatique
INF8420Sécurité Informatique
2
Architecture des applications webArchitecture des applications web
Client légitime
Internet Server Web
HTTP
HTML
INF8420Sécurité Informatique
INF8420Sécurité Informatique
3
Architecture des applications webArchitecture des applications web
Client légitime
Internet Server Web Server BD
HTTP
HTML
SQL
INF8420Sécurité Informatique
INF8420Sécurité Informatique
4
Architecture des applications webArchitecture des applications web
Client légitime
Internet Server Web Server BD
Serveur
d’application
HTTP
HTML
SQLXML
INF8420Sécurité Informatique
INF8420Sécurité Informatique
5
Architecture des applications webArchitecture des applications web
Client légitime
Internet Server Web Server BD
Serveur
d’application
Serveur
d’authentification
HTTP
HTML
SQLXML
Kerberos
LDAP
INF8420Sécurité Informatique
INF8420Sécurité Informatique
6
Architecture des applications webArchitecture des applications web
Client légitime
Client malicieux
Internet Server Web Server BD
Serveur
d’application
Serveur
d’authentification
HTTP
HTML
SQLXML
Kerberos
LDAP
INF8420Sécurité Informatique
INF8420Sécurité Informatique
7
Architecture des applications webArchitecture des applications web
Client légitime
Client malicieux
Internet Server Web Server BD
Pare-feuServeur
d’application
Serveur
d’authentification
HTTP
HTML SQLXMLHTTP
HTML
Kerberos
LDAP
INF8420Sécurité Informatique
INF8420Sécurité Informatique Problèmes de sécuritéProblèmes de sécurité
Authentification Vérification des données usager
SQL injection Cross site scripting Parameter tampering
Phishing (hameçonnage) Logique application
8
INF8420Sécurité Informatique
INF8420Sécurité Informatique
AUTHENTIFICATIONAUTHENTIFICATION
9
INF8420Sécurité Informatique
INF8420Sécurité Informatique
10
AuthentificationAuthentification
Composantes impliquées
Client légitime
Client malicieux
Internet Server Web Server BD
Pare-feuServeur
d’application
Serveur
d’authentification
INF8420Sécurité Informatique
INF8420Sécurité Informatique AuthentificationAuthentification
Canal de communication sécurisé (https) Challenge – response (NTLM, Kerberos) Réauthentification à des intervalles sécurisés Permission des usagers Tester Authentifier le client Authentifier le serveur
11
INF8420Sécurité Informatique
INF8420Sécurité Informatique AuthentificationAuthentification
Authentification du serveur Certificat SSL
12
INF8420Sécurité Informatique
INF8420Sécurité Informatique AuthentificationAuthentification
Authentification du serveur Certificat SSL Autre
13
INF8420Sécurité Informatique
INF8420Sécurité Informatique
VÉRIFICATION DES DONNÉES USAGER VÉRIFICATION DES DONNÉES USAGER
(Input validation)
14
INF8420Sécurité Informatique
INF8420Sécurité Informatique
15
Vérification des données usager (Input validation)
Vérification des données usager (Input validation)
Ce qu’on fait
Client légitime
Client malicieux
Internet Server Web Server BD
Pare-feuServeur
d’application
Serveur
d’authentification
INF8420Sécurité Informatique
INF8420Sécurité Informatique Vérification des données usager
(Input validation)Vérification des données usager
(Input validation)
Code source html
16
<form action="mailto:[email protected]" method="post" onsubmit="return
checkform(this);">
<script language="JavaScript" type="text/javascript">
<!--
function checkform ( form )
{
// see http://www.thesitewizard.com/archive/validation.shtml
// for an explanation of this script and how to use it on your
// own website
// ** START **
if (form.email.value == "") {
alert( "Please enter your email address." );
form.email.focus();
return false ;
}
// ** END **
return true ;
}
//-->
</script>
INF8420Sécurité Informatique
INF8420Sécurité Informatique
17
Vérification des données usager (Input validation)
Vérification des données usager (Input validation)
Ce qu’on devrais faire
Client légitime
Client malicieux
Internet Server Web Server BD
Pare-feuServeur
d’application
Serveur
d’authentification
INF8420Sécurité Informatique
INF8420Sécurité Informatique Vérification des données usager
(Input validation)Vérification des données usager
(Input validation)
Attaques Injection SQL (SQL Injection) Cross Site Scripting (XSS) Variable tampering
18
INF8420Sécurité Informatique
INF8420Sécurité Informatique
SQL INJECTIONSQL INJECTIONVérification des données usager
19
INF8420Sécurité Informatique
INF8420Sécurité Informatique Vérification des données usager
(Input validation)Vérification des données usager
(Input validation)
Injection SQL (SQL Injection)
20
extract($_POST);
$req = "select mem_code from MEMBRES
where mem_login = '$login'
and mem_pwd = '$pass'";
$result = mysql_query($req) or
die ("Error : the SQL request <br><br>".$req."<br><br> is not valid: ".mysql_error());
list($mem_code) = mysql_fetch_array($result);
if (empty($mem_code)) { //verifier que la requette a retourne une reponse positive
Client légitime
Server Web
Server BD
INF8420Sécurité Informatique
INF8420Sécurité Informatique Vérification des données usager
(Input validation)Vérification des données usager
(Input validation)
Injection SQL (SQL Injection)
21
extract($_POST);
$req = "select mem_code from MEMBRES
where mem_login = 'daniel'
and mem_pwd = 'Xa4!dfga'";
$result = mysql_query($req) or
die ("Error : the SQL request <br><br>".$req."<br><br> is not valid: ".mysql_error());
list($mem_code) = mysql_fetch_array($result);
if (empty($mem_code)) { //verifier que la requette a retourne une reponse positive
Client légitime
Server Web
Server BD
danielXa4!dfga
select mem_code from MEMBRES
where mem_login = 'daniel'
and mem_pwd = 'Xa4!dfga'
INF8420Sécurité Informatique
INF8420Sécurité Informatique Vérification des données usager
(Input validation)Vérification des données usager
(Input validation)
Injection SQL (SQL Injection)
22
extract($_POST);
$req = "select mem_code from MEMBRES
where mem_login = 'daniel'
and mem_pwd = '' or '1'='1'";
$result = mysql_query($req) or
die ("Error : the SQL request <br><br>".$req."<br><br> is not valid: ".mysql_error());
list($mem_code) = mysql_fetch_array($result);
if (empty($mem_code)) { //verifier que la requette a retourne une reponse positive
Server Web
Server BD
daniel' or '1'='1
select mem_code from MEMBRES
where mem_login = 'daniel'
and mem_pwd = '' or '1'='1'Client malicieux
INF8420Sécurité Informatique
INF8420Sécurité Informatique Vérification des données usager
(Input validation)Vérification des données usager
(Input validation)
Injection SQL (SQL Injection)
23
daniel
x'; INSERT INTO members
('email','passwd','login_id','full_name') VALUES
('[email protected]','hello','steve','Steve Friedl');--
Client malicieux
INF8420Sécurité Informatique
INF8420Sécurité Informatique
CROSS SITE SCRIPTINGCROSS SITE SCRIPTINGVérification des données usager
24
INF8420Sécurité Informatique
INF8420Sécurité Informatique Vérification des données usager
(Input validation)Vérification des données usager
(Input validation)
Cross site scripting (XSS)
25
extract($_POST);
$req = "select * from POSTS
where title = '$stitle'
Client légitime
Server Web
Search
Gagner de l’argent
Search results for Gagner de
l’argent:Comment gagner de l'argent facile et des
cadeaux sur internet…L' objectif du blog est de présenter toutes les
idées qui permettent d' économiser …
<html>
<head></head>
<body>
<h1>Search results for Gagner de l’argent :</h1>
<itemize>
<item>Comment gagner deacile et des cadeaux
sur internet…</item>
<item>L' objectif du blog est de présenter
toutes les idées qui permettent d' économiser …</item>
</itemize>
</body>
</html>
INF8420Sécurité Informatique
INF8420Sécurité Informatique Vérification des données usager
(Input validation)Vérification des données usager
(Input validation)
Cross site scripting (XSS)
26
extract($_POST);
$req = "select * from POSTS
where title = '$stitle'
Server Web
Search
<b>Super</b>
Search results for Super:
No results found
<html>
<head></head>
<body>
<h1>Search results for <b>Super</b> :</h1>
No results found
</itemize>
</body>
</html>
Client malicieux
INF8420Sécurité Informatique
INF8420Sécurité Informatique Vérification des données usager
(Input validation)Vérification des données usager
(Input validation)
Cross site scripting (XSS)
27
Post
Your message has been posted
Client malicieux
<script type="text/javascript">document.location.href=“http://boteanu.com"</script>
id message
1 Hello
2 Bien fait ...
Server BD
3 <script type="text/javascript">document.location.href=“http://boteanu.com"</script>
INF8420Sécurité Informatique
INF8420Sécurité Informatique Vérification des données usager
(Input validation)Vérification des données usager
(Input validation)
Cross site scripting (XSS)
28
<h1>Guestbook messages:</h1>
Hello<br>
Bien fait<br>
<script
type="text/javascript">document.location.hr
ef=“http://boteanu.com"</script><br>
...
Guestbook messages:Hello
Bien fait ...
id message
1 Hello
2 Bien fait ...
3 <script type="text/javascript">document.location.href=“http://b
oteanu.com"</script>
Server BD
Client légitime
INF8420Sécurité Informatique
INF8420Sécurité Informatique Vérification des données usager
(Input validation)Vérification des données usager
(Input validation)
Comment se protéger ? Valider les données de l’usager
sur le serveur Web et/ou sur le serveur d’applications limiter la taille de l’entrée refuser les caractères spéciaux ‘ “ \ / ; - < > accepter seulement les caractères nécessaires
Utiliser les SQL Stored Procedures Gérer les permissions sur la basé de données
usagers, rôles, permissions
Messages d’erreur Vérifications
29
INF8420Sécurité Informatique
INF8420Sécurité Informatique Vérification des données usager
(Input validation)Vérification des données usager
(Input validation)
Comment vérifier si un site est vulnérable ?
Rien fait pour protéger -> probablement vulnérable Développé sans gestion de projet -> probablement vulnérable
Outils automatiques Nikto Acunetix ($$) WebScarab
Autres (http://sectools.org/web-scanners.html)
30
INF8420Sécurité Informatique
INF8420Sécurité Informatique
HAMEÇONNAGE HAMEÇONNAGE Phishing
31
INF8420Sécurité Informatique
INF8420Sécurité Informatique
32
Hameçonnage(Phishing)
Hameçonnage(Phishing)
Client légitime
Client malicieux
Internet Server Web Server BD
Pare-feuServeur
d’application
Server Web Faux
Vous avez gagné 1 million.
Connectez vous sur le site de la banque en cliquant sur
https://www.desjard1ns .com
INF8420Sécurité Informatique
INF8420Sécurité Informatique Hameçonnage
(Phishing)Hameçonnage
(Phishing)
Comment se protéger ?
Filtrer le spam Authentification du serveur Eduquer les utilisateurs
33
INF8420Sécurité Informatique
INF8420Sécurité Informatique
LOGIQUE DE L’APPLICATIONLOGIQUE DE L’APPLICATION
34
INF8420Sécurité Informatique
INF8420Sécurité Informatique Logique de l’applicationLogique de l’application
Chaque attaque est différente
Exploite la logique de l’application
Difficile à détecter
Exemples: Acheter un livre de -20$ Créer un million d’usagers et écrire des messages Enlever le câble réseau au milieu d’une partie d’échec
35
INF8420Sécurité Informatique
INF8420Sécurité Informatique
CONCLUSIONSCONCLUSIONS
36
INF8420Sécurité Informatique
INF8420Sécurité Informatique ConclusionsConclusions
Attaques web très populaires
Facile de créer une application vulnérable
Validation des données usager
Éducation des usagers
Principe de sécurité de l’oignon (layered security)
37