Développement dapplications web Initiation à la sécurité 1.

27
S Développement d’applications web Initiation à la sécurité 1

Transcript of Développement dapplications web Initiation à la sécurité 1.

Page 1: Développement dapplications web Initiation à la sécurité 1.

1

S

Développement d’applications web

Initiation à la sécurité

Page 2: Développement dapplications web Initiation à la sécurité 1.

2

Problématique / Enjeux

Système constamment soumis à des tentatives d’attaques

Protection du système

Protection des données personnelles des utilisateurs

Protection des données de notre application

Page 3: Développement dapplications web Initiation à la sécurité 1.

3

Attaque sur le système

Attaques les plus graves

Mettent en jeu L’intégrité du système L’intégrité de toutes les données stockées sur le

système

Page 4: Développement dapplications web Initiation à la sécurité 1.

4

Type d’attaques les plus courantes

Attaque sur le serveur web

Attaque sur d’autres services SSH FTP …

=> Exécution de code arbitraire en tant qu’un certain utilisateur

Page 5: Développement dapplications web Initiation à la sécurité 1.

5

Éléments de protection

Exécuter les serveurs web et ftp sous des utilisateurs n’ayant accès qu’aux fichiers qu’ils doivent servir

Sécuriser les connexions SSH Privilégier la connexion par clé public/privé Utiliser des utilitaires bannissant les personnes

tentant de se connecter trop de fois sans succès (failtoban, iptoban, …)

Possibilité de n’accepter les connexions que de certaines IP/plages d’IP

Page 6: Développement dapplications web Initiation à la sécurité 1.

6

Prévention et détection

Mettre à jour régulièrement les programmes installés Bugfixes Security issues

Se tenir au courant des failles potentielles existantes Les failles connues sont souvent listées sur les sites

dédiés

Consulter les logs ou utiliser un utilitaire le faisant pour détecter les tentatives d’exploitation de certaines failles

Page 7: Développement dapplications web Initiation à la sécurité 1.

7

Attaques sur des applications web

Attaques cherchant à: Exécuter une requête arbitraire en base de donnée Insérer un code javascript dans une page Détourner des sécurités pour accéder à des parties

sécurisées d’une application …

Page 8: Développement dapplications web Initiation à la sécurité 1.

8

Importance

Moins d’impact qu’une attaque sur le système

A peu de risque de nuire à l’intégrité du système entier

Peut cependant: Accéder à des données confidentielles Accéder à des parties d’administration Éviter un paiement Récupérer des données personnelles d’utilisateurs Effacer des données …

Page 9: Développement dapplications web Initiation à la sécurité 1.

9

Comment s’en protéger ?

Cela dépend du type d’attaque

Se tenir informer des dernières attaques effectués sur les applications que nous utilisons

Surveiller les logs

Page 10: Développement dapplications web Initiation à la sécurité 1.

10

SQL injection

Principe: Exécuter une requête arbitraire en base de données

Réalisation: Utilisation d’un défaut de sécurité lors de l’insertion d’un

élément en base de donné (un commentaire par exemple) pour exécuter la requête voulu

Risques: Récupération des données utilisateur Connexion en tant que n’importe que utilisateur …

Page 11: Développement dapplications web Initiation à la sécurité 1.

11

Exemple

<?phpmysql_query(“SELECT id FROM users WHERE name= ’“.$login. “ ‘ AND password=‘ “ .$password. “ ‘;“);?>

SELECT id FROM users WHERE name= ’dupont‘ AND password=‘ dupontpasswd ‘;

SELECT id FROM users WHERE name= ’dupont ‘ -- ‘ AND password=‘ ‘;

Page 12: Développement dapplications web Initiation à la sécurité 1.

12

Comment s’en protéger ?

Il faut échapper tous les caractères spéciaux avant de les insérer dans une requête Des fonctions existent pour le faire Se renseigner pour savoir si ce que l’on utilise nous protège

Utiliser des requêtes SQL paramétrées

Vérifier l’ensemble des informations fournies par l’utilisateur

Page 13: Développement dapplications web Initiation à la sécurité 1.

13

XSS

XSS= cross site scripting

Principe: Exécution d’un script (javascript, flash, java, …) dans le navigateur des

clients

Réalisation: Détourne l’utilisation de l’ajout de commentaire, d’un module de recherche

ou autre pour insérer un script arbitraire dans une page

Risques: Vol de cookie/session des utilisateurs Récupération de données personnelles des utilisateurs Infection des machines des utilisateurs par un code malin

Page 14: Développement dapplications web Initiation à la sécurité 1.

14

Exemple

Quelqu’un ajoute sur notre blog un commentaire contenant:<Script language=“javascript“>…</script>

Lors de l’affichage du commentaire, le script javascript sera exécuter par le navigateur ayant chargé la page.

N’importe quel autre type de script client aurait pu être inséré (java, flash, etc.)

Page 15: Développement dapplications web Initiation à la sécurité 1.

15

Solution

Toujours encoder les caractères utilisés dans les balises html avant d’affiché un texte fourni par un utilisateur. Ceci se fait via l’utilisation de fonctions spécifique

dans la plupart des langages Vérifier que les bibliothèques, modules, framework

que vous utilisez mettent en place des sécurités contre ces attaques

Page 16: Développement dapplications web Initiation à la sécurité 1.

16

Modification de cookie

Qu’est-ce qu’un cookie ? Un fichier stockant des données pour un site web Ce fichier est renvoyé à chaque requête Il peut contenir n’importe quel type d’information

Page 17: Développement dapplications web Initiation à la sécurité 1.

17

Modification de cookie

Principe: Modifier les informations contenu dans un cookie pour

obtenir plus de droit ou éviter une sécurité ou un paiement

Réalisation: Le cookie est un fichier texte s’il n’a pas été encodé, il suffit

donc de l’éditer

Risques: Le pirate peut obtenir le rôle d’administrateur ou éviter

certaines sécurités (vérification de paiement, etc.)

Page 18: Développement dapplications web Initiation à la sécurité 1.

18

Solution

Première solution: Crypter le cookie

Quelqu’un sera toujours capable de trouver comment décrypter et pourra modifier les informations

Deuxième solution: Fournir dans le cookie une clé d’identification

Les informations de session sont conservés sur le serveur La clé permet de dire au serveur quelles informations

regarder

Page 19: Développement dapplications web Initiation à la sécurité 1.

19

url jumping

Principe: Rentrer l’url d’une page dans la barre d’adresse sans

suivre la progression imposée par le site

Réalisation: Taper l’adresse dans la barre d’adresse de son

navigateur

Risque: Éviter un paiement ou une procédure

d’authentification

Page 20: Développement dapplications web Initiation à la sécurité 1.

20

Exemple

Une personne accède à l’url: Monsite.com/administration/adminpanel.php

Si cette page ne vérifie pas que la personne est bien authentifiée, elle pourra avoir accès à cette page sans même s’être connectée.

Page 21: Développement dapplications web Initiation à la sécurité 1.

21

Autre exemple

Dans une procédure d’achat en ligne: La personne est à la page:

Monsite/achat/step3.php Elle rentre directement l’adresse

Monsite/achat/step5.php Si aucune vérification n’est faite, elle est peut-être

passée de l’étape de paiement à l’étape de validation et d’envoie sans avoir payé.

Page 22: Développement dapplications web Initiation à la sécurité 1.

22

Solution

Chaque page faisant partie d’une zone sécurisée ou d’une chaîne d’action est responsable de vérifier: Que la personne accédant à la page est bien

authentifiée Que la personne accédant à la page a bien suivi

toute la chaîne d’action

Attention, le stockage d’information directement dans le cookie n’est pas sûr (comme vu précédemment), une combinaison d’attaques reste possible

Page 23: Développement dapplications web Initiation à la sécurité 1.

23

Déni de service

Principe: Rendre inaccessible l’application

Réalisation: Requêtes multiples, boucle « infini », …

But: Rendre le site ou le service inaccessible

Page 24: Développement dapplications web Initiation à la sécurité 1.

24

Exemple

Grand nombre de requêtes envoyées sur l’application

Remplissage de la mémoire:

String TotalObjects = request.getParameter(“numberofobjects”);int NumOfObjects = Integer.parseInt(TotalObjects);ComplexObject[] anArray = new ComplexObject[NumOfObjects];

Page 25: Développement dapplications web Initiation à la sécurité 1.

25

Solution

Limiter le nombre de requête provenant d’une même source

Ne pas utiliser de données fournies par l’utilisateur pour des boucles ou des allocations sans mettre des limites

Page 26: Développement dapplications web Initiation à la sécurité 1.

26

Bonnes pratiques

Ne jamais croire une information entrée par un utilisateur Formulaire, paramètre url, etc.

Toujours vérifier les informations passées d’une page à l’autre Si une information est passée chez l’utilisateur, il

faut supposer qu’elle a pu être altéré et la vérifier avant de l’utiliser

Page 27: Développement dapplications web Initiation à la sécurité 1.

27

Plus d’informations ?

www.owasp.org Open Web Application Security Project