Sécurité sur le web
Attention, petite interruption dans la série d’articles autour des audits d’écoconception web. Ayant besoin d’un support à destination de mes apprenants autour des notions de sécurités pour le web, voici un article sur le sujet.
J’avais annoncé une série de billets suite à celui sur les valeurs du développeur.
Vous pouvez les retrouver sur la page dédiée au Numérique Responsable.
Voici maintenant un topo aussi détaillé que possible sur la sécurité appliquée au web. Le but ici n’est pas de faire de vous des experts en sécurité mais de vous fournir les ressources pour découvrir le sujet et monter en compétences rapidement.
La sécurité sur le web, comment? Pourquoi?
Les plus courageux peuvent se lancer avec mon raindrop dédié à cette thématique mais c’est plutôt dense et bordélique. Reprenons plutôt depuis le début.
L’enjeu de la sécurité sur le web est de se protéger mais aussi, en tant que développeur, de protéger les internautes. On est donc en plein dans le numérique responsable (qui consiste, pour rappel, à développer des outils numériques respectueux des internautes ainsi qu’à veiller à l’inclusion de tous). Voici un article détaillant les tendances et stats autour de la cybersécurité pour 2020.
Même si c’est un peu déprimant, il faut bien comprendre que la cyber-sécurité repose sur un antagonisme très déséquilibré. En tant que développeur, vous allez essayer de vous protéger le plus possible mais il est impossible de penser à tout. En tant qu’attaquant, une seule faille peut suffire pour parvenir à ses fins.
Dans ce qui va suivre, je vais souvent me concentrer sur des trucs très simples mais pas aussi répandus qu’il le faudrait.
Pour finir, une chouette explication de pourquoi nos outils numériques restent faillibles et un survol du sujet.
Commencer par se protéger
La première étape est de se protéger sur le web. Être vigilant au https, reconnaître une tentative de phishing, ne pas laisser traîner ses mots de passe, etc.
Pour bien commencer, je vous recommanderais de passer par un gestionnaire de mots de passe. Personnellement, j’utilise LastPass mais il en existe d’autres. Le but est de stocker dans un lieu sécurisé (pas un post-it) vos mots de passe. Ainsi, vous n’aurez plus d’excuse pour ne pas avoir un mot de passe différent par compte ainsi que des mots de passe vraiment solides. LastPass peut les générer pour vous et, sur certains services, peut même s’assurer de les modifier régulièrement (ce qui est très important aussi). A noter que Firefox vous propose un service similaire (et aussi gratuit) avec Lockwise.
Mine de rien, c’est la base mais ça reste ce qui pêche le plus souvent.
Dites-vous qu’avec un peu de bon sens et un bon gestionnaire de mot de passe, ça ira déjà mieux.
Plus généralement, le MOOC de l’ANSSI vaut le détour (même si c’est un peu verbeux à mon goût).
Jetez aussi un oeil à malveillance.gouv.fr.
Les bonnes pratiques du développeur web
Là, on aborde le vif du sujet.
La bonne nouvelle, c’est que vous trouverez des infos partout sur le web.
La mauvaise nouvelle, c’est qu’il reste difficile de savoir par où commencer.
PagerDuty propose là aussi un support pas mal détaillé sur le sujet. Attention, c’est dense.
On va essayer d’y voir plus clair.
Comprendre les failles
La première façon de faire sera de commencer par les failles : les comprendre et s’en prémunir.
OWASP reste la référence internationale pour la sécurité.
Ils proposent régulièrement leur top 10 des failles les plus fréquentes.
On voit ce classement mentionné un peu partout dès qu’on s’intéresse au sujet et ça donne un bon aperçu de ce dont il faut se méfier en priorité.
En revanche, pour comprendre comment ça marche et s’en prémunir, ça se complique.
Vous pouvez accéder aux fiches OWASP de chaque faille directement depuis le top 10 mais ça ne suffira pas pour tout le monde. Je vous propose donc quelques sites avec des appproches différentes :
- Hacksplaining reprend les vulnérabilités avec un peu de manip pour leur mise en oeuvre, un topo sur leur fonctionnement et des ressources pour aller plus loin. Kontra présente un fonctionnement similaire mais se base sur des cas réels
- Hacker101 se base sur des vidéos avec pas mal d’exemples concrets
- OpenClassrooms propose un cours en français sur le sujet
Si vous voulez faire un peu de veille sur le sujet, n’oubliez pas de jeter un oeil à Exploit Database. Qui recense des tonnes et des tonnes de failles (tellement que c’est un peu vertigineux).
Partir des besoins
La seconde approche n’exclut bien sûr pas de comprendre les failles de sécurité. En revanche, elle cherche à se baser sur les usages (ce qu’on veut faire avec notre outil/appli et avec quelles technos). Par exemple, on va se demander comment gérer l’authentification proprement ou comment protéger son site Wordpress.
OWASP propose une série de cheat sheets. Pas toujours évident de s’y retrouver, ceci dit.
En partant des technos que vous comptez utiliser, vous pouvez commencer par fouiller leur documentation afin de voir ce qui est mis en place de leur côté (token CSRF, cryptage des mots de passe, etc). Ou jeter un oeil, une fois de plus, à Exploit Database. Plus généralement, gardez un oeil sur la Google Hacking Database afin d’éviter quelques mauvaises surprises. Une simple requête google bien paramétrée peut ramener beaucoup d’informations, entre autres des fichiers de configuration qui attendent bien sagement sur un repo Github, Gitlab ou autres.
Les bonnes pratiques du développeur
La dernière approche consiste à se prémunir en appliquant des bonnes pratiques. On pourra citer par exemple :
- Le Secure Coding
- Ne pas faire confiance à l’utilisateur (toujours vérifier ce qu’il saisit avant d’en faire quoi que ce soit, pareil pour ce qu’il uploade)
- Etre vigilant sur la gestion de l’authentification : encodage des mots de passe en base de données (bcrypt est votre ami), limiter le nombre d’essais et (en cas d’erreur) ne pas préciser quel champ est erroné (identifiant ou mot de passe). Enfin, imposez à vos utilisateurs de choisir des mots de passe solides et (dans l’idéal) de les changer souvent. Méfiez-vous aussi des sessions et vérifiez bien qui a accès à quelles pages/fonctionnalités (gestion des rôles)
- Ne réinventez pas la roue (surtout pour l’authentification)
- Ne partez pas du principe que les outils que vous utilisez (CMS, frameworks ou autres) sont sécurisés par défaut. Essayez de comprendre ce qu’ils mettent déjà en place et ajoutez ce qui vous semble essentiel
- Limitez la surface d’attaque (ce qui est un autre avantage de l’écoconception, soit dit en passant)
- Vous avez plus à gagner en partageant votre code (open source, par exemple) qu’en le cachant
- Si vous utilisez des repositories publics (Github, Gitlab ou autres), attention à ne pas y placer vos fichiers de configuration et mots de passe. Rappel : ça arrive plus souvent que vous ne le pensez et une simple requête Google permet de les dénicher
- Maintenez vos outils à jour et faites de la veille pour ne pas être pris de court
Apprendre par la pratique
Rien de tel pour mieux comprendre le sujet. Pour cela, vous trouverez (une fois n’est pas coutume) quantité de ressources sur le net.
- OWASP propose le Juice Shop, un site volontairement vulnérable proposant plein de petits challenges de sécurité.
- Dans le même registre, vous trouverez Google Gruyere
- Il y a également de quoi s’exercer sur HackerOne, Root-me et autres. Si vous commencez à chercher des sites pour se lancer dans le Capture the Flag, vous trouverez vite votre bonheur
- Pour découvrir les possibilités qui s’offrent à vous (et aux attaquants), installez Kali Linux ou épluchez juste la liste des outils disponibles.
Quelques ressources pour la fin
Voici pour finir quelques articles qui pourront vous faire gagner du temps ou élucider certaines notions :
- La sécurité s’applique aussi en front-end : pour (entre autres) mieux comprendre le rôle des headers dans le HTML
- Vérifiez le code que vous récupérez sur StackOverflow
- Des livres sur le sujet et d’autres qui sont gratuits
- Des tonnes de lien sur le sujet mais aussi là
- Des cours gratuits
- Plein de ressources et tutos
- Des cours en ligne
- Tester la vulnérabilité de son JS, voir aussi Snyk
- Se lancer dans les pentests, un site dédié à ça
- Un listing plutôt complet de vulnérabilités
- De quoi faire de la veille et là aussi
Conclusion
Tout ce qui a trait à la sécurité sur le web est un très vaste sujet mais d’une importance capitale. Les ressources ne manquent pas et j’espère que cet article vous aidera à y voir un peu plus clair.
Un dernier conseil pour la route : si vous pensez que le fait que votre site est trop petit ou trop pointu pour intéresser les personnes malveillantes, vous vous plantez.