Solutions pour la sécurité
Comment ne pas perdre tous les efforts de création du site ?
24/04/2021
Sommaire du dossier
Pourquoi parler de sécurité ?
La performance ou l'accessibilité sont directement liées au Numérique Responsable car elles ont des impacts directs sur le niveau de maturité.
Mais qu'en est-il de la sécurité ? Elle est liée de deux manières avec le Numérique Responsable.
Le Numérique Responsable influe sur la sécurité
En effet, un des objectifs du Numérique Responsable est de se
concentrer sur les fonctionnalités utiles, utilisables et
utilisées et sur la gestion en fin de vie. Or en faisant cela, la
surface d'exposition aux menaces est non seulement réduite, mais
les bugs divers sont également remontés plus fréquemment car les
fonctionnalités sont toutes utilisées par le plus grand nombre. De
plus les fonctionnalités et données en fin de vie soit par
évolution soit par abandon sont intégralement supprimées ne
laissant donc aucun code mort qui pourrait être mis à profit par
des hackers.
La sécurité impacte indirectement le Numérique Responsable
Si aucun investissement sur la sécurité n'est réalisé lors de la conception d'un site ou de toute application, toute attaque nécessitera une réaction pour corriger non seulement l'origine de la brèche de sécurité mais aussi ses impacts. Et il est bien connu que la correction de tout bug, quel qu'il soit, est beaucoup plus onéreuse (en euros, en charge) que de le prévenir.
Mais en plus, tout le travail qui a été réalisé pour que les internautes viennent grâce à un contenu de qualité, un bon référencement, un bon réseau de liens, peut tomber à l'eau si l'impact touche par exemple des données personnelles ou immobilise le site trop longtemps.
Par où commencer ?
Quelques rappels
Il est possible d'avoir une vision complète sur la sécurisation d'un site Web en recherchant sur Internet(1); toutefois, ces quelques notions seront intéressantes à (re)voir pour pour mieux apréhender la suite de l'article.
Pare-feu ou firewall
Un pare-feu (ou firewall en anglais) protège simplement un ordinateur
ou un réseau d’ordinateurs des intrusions en provenance d’un réseau
tiers ou externe.
Source et information complémentaire : Le pare-feu matériel : le système de sécurité externe ⎋(2)
Web Application Firewall
Un Web Application Firewall (WAF) est un type de pare-feu qui
protège le serveur d'applications Web dans le backend contre
diverses attaques. Le WAF garantit que la sécurité du serveur Web
n'est pas compromise en examinant les paquets de requête HTTP / HTTPS
et les modèles de trafic Web.
Source et information complémentaire : Web Application Firewall ⎋(3)
Quelques types d'attaque
Une cyberattaque est tout type d’action offensive qui vise
des systèmes, des infrastructures ou des réseaux informatiques,
ou encore des ordinateurs personnels, en s’appuyant sur diverses
méthodes pour voler, modifier ou détruire des données ou des
systèmes informatiques.
Les 10 types de cyberattaques les plus courants :
- Attaques par déni de service (DoS) et par déni de service distribué (DDoS)
- Attaque de l’homme au milieu (MitM)
- Hameçonnage (phishing) et harponnage (spear phishing)
- Téléchargement furtif (drive-by download)
- Cassage de mot de passe
- Injection SQL
- Cross-site scripting (XSS)
- Écoute clandestine
- Attaque des anniversaires
- Logiciel malveillant (malware)
Source et information complémentaire : Les 10 types de cyberattaques les plus courants ⎋(4)
Et donc, pour mon site ?
De base, mon site n'en a pas. Ni de JavaScript. Voilà donc des sources potentielles de vulnérabilités éliminées.(5)
Mais comme je fais mon site moi-même, je dois être vigilant ; je n'ai pas de culture de développement et donc je ne bénéficie ni de l'expérience ni du fait que le code est testé par d'autres développeurs. Mais j'ai des connaissances générales issues de mon long passé de production.
On ferme tout !
Et la base est de tout interdire et de n'ouvrir que ce qui est nécessaire. Tiens, cela ne vous rappelle pas l'esprit du Numérique Responsable ? Seules les fonctionnalités utiles sont à implémenter. Il en est de même pour la sécurité.
On met à jour !
Une autre base de la sécurité est d'avoir un système à jour pour toutes ses composantes. La moindre obsolescence se transforme en potentielle vulnérabilité. Les pirates sont inventifs et plein de ressources et sont à la recherche permanente de nouvelles failles à exploiter.
Et l'être humain dans tout ça ?
La dernière base de la sécurité est la plus importante en terme de probabilité.
Il en va de même pour la détection des bugs d'une application.
Le plus grand risque se trouve toujours entre la chaise et le clavier,
donc vous ou moi. C'est pour cela que les bases précédentes sont vitales,
car on ne maîtrise pas ce qu'une personne peut faire. Malgré les
formations, les présentations de bonnes pratiques, nous faisons toujours
une erreur et sans une politique stricte pour protéger le site, la
catastrophe est à notre porte, prête à frapper.
La sécurité comme un oignon
En effet, la sécurité va s'appliquer couche par couche et on va
les éplucher une après l'autre pour passer en revue tous les axes
de sécurisation.
Côté box
Pour rappel, j'héberge mon site chez moi sur un Raspberry Pi sous Raspberry Pi OS ⎋(6)
à jour en permanence. Il est donc connecté derrière ma
box qui n'autorise à entrer que les protocoles http (80) et https
(443) vers le serveur. Tout le reste concernant les connexions
entrantes d'internet vers mon réseau interne est bloqué sur la box
si elles ne sont pas issues d'une connexion sortante.
Côté serveur
Système d'exploitation
Il s'agit d'un système Debian adapté au Raspberry Pi. Il est systématiquement à jour afin que toutes les corrections de sécurité soient prises en charge dès que possible.
Afin de limiter les accès au serveur, un firewall basé sur iptables ⎋(7) est mis en place pour tout bloquer et n'ouvrir que ce qui est nécessaire pour que je puisse utiliser les fonctionnalités de mon serveur et l'administrer.
À ce firewall, s'ajoute une couche de bannissement basée sur les
adresses IP ayant généré des erreurs répétées d'accès au site Web
: erreur 404 notamment. Il s'agit de fail2ban ⎋(8).
Toute adresse IP ayant généré des erreurs
se voir bannir pendant quelques heures et en cas de récidive, la
durée est portée à plusieurs jours.
Serveur Apache
Le serveur Apache ⎋(9) est protégé avec un Web Application Firewall ; il s'agit du module mod_security ⎋(10) qui a pour objectif de bloquer les flux lorsque ceux-ci correspondent à des règles identifiées d'attaque.
Côté site Web lui-même
La sécurité est déclinée à deux niveaux.
Le premier est réalisé avec un fichier .htaccess ⎋(11) dont les règles que j'ai mises en place sont issues de bonnes pratiques que l'on retrouve par exemple avec des extensions de sécurité associées à WordPress.
Le deuxième est lié aussi au fichier .htaccess mais pourrait être mis en directive dans le serveur Apache ou dans les headers des pages. Il s'agit de la Content Security Policy ⎋(12) qui permet de restreindre l'origine du contenu dans une page web à certains sites autorisés. Dans mon cas, les restrictions sont maximales vu que je n'ai pas de Javascript ni de feuilles de styles externes.
Comment contrôler ?
Les outils que j'utilise se déclinent à trois niveaux :
- Extension de chrome : CSP Scanner: Test, Analyze and Evaluate CSP ⎋(13) qui permet d'identifier les écarts de sécurité liés à la Content Security Policy
- Sites Web :
- SSL Labs de Qualys ⎋(14) vérifie la bonne configuration de SSL sur le site
- Immuniweb ⎋(15) contrôle plusieurs domaines et donne des conseils pour corriger les défauts
- Mozilla Observatory ⎋(16) accompagne les concepteurs de site à les réaliser avec le maximum de sécurité ; il est très complémentaire avec Immuniweb
- Commande en ligne : wfuzz ⎋(17)
qui permet de simuler de multiples attaques en force brute
contre le site
Cet ensemble d'outils est un exemple de ce qui peut se faire, sachant que les meilleurs audits se feront avec des outils payants qui se basent sur des bases de données bien plus complètes que celles disponibles avec les outils basiques.
En conclusion
Je n'ai parlé ici que des problèmes de sécurité liés aux vulnérabilités et non à la sécurisation du site qui passe aussi par des sauvegardes. Pensez-y et ayez toujours la capacité à revenir en arrière lorsque cela est nécessaire.
Tout est en place, les notes sont très bonnes pour tous les
outils de mesure (entre A et A+).
Faut-il se reposer sur ses lauriers ? Loin s'en faut ! La sécurité
est un processus continu car les menaces évoluent, se renouvellent,
se diversifient et le site va aussi évoluer. Il faut toujours contrôler
le site, mettre à jour les logiciels avec leur configuration et
prendre en compte les dernières menaces lorsque la protection est dépendante
d'une configuration comme le fichier .htaccess.
Un dernier point avant de finir cet article. Mon site n'a aucune
raison de répondre au Réglement Général de la Protection des Données ⎋(18).
En effet, aucune donnée personnelle n'est collectée. Toutefois, si
le sujet vous intéresse vous pouvez utiliser le logiciel open source PIA ⎋(19) ; il facilite la conduite et la formalisation
d’analyses d’impact relatives à la protection des données
(AIPD) telles que prévues par le RGPD.
Notes et renvois
(1) : Voir l'excellent document très technique Sécuriser un site Web, de l'ANSSI dans un autre onglet. Il permet de se faire une idée assez exhaustive de tout ce qu'il faut entreprendre. ┃ retour au texte, note (1) ䷀
(2) : lien envoyant dans un autre onglet sur le site de IONOS ┃ retour au texte, note (2) ䷀
(3) : lien envoyant dans un autre onglet sur le site de WikiPedia ┃ retour au texte, note (3) ䷀
(4) : lien envoyant dans un autre onglet sur le site de NetWrix ┃ retour au texte, note (4) ䷀
(5) : Voir l'article La sécurité d'un site Web, qui fournit des explications techniques sur le sujet sur le site de mozilla, dans un autre onglet ┃ retour au texte, note (5) ䷀
(6) : lien envoyant dans un autre onglet en anglais sur le site de Raspberry ┃ retour au texte, note (6) ䷀
(7) : lien envoyant dans un autre onglet sur le site de WikiPedia ┃ retour au texte, note (7) ䷀
(8) : lien envoyant dans un autre onglet sur le site de IONOS ┃ retour au texte, note (8) ䷀
(9) : lien envoyant dans un autre onglet sur le site de Hostinger ┃ retour au texte, note (9) ䷀
(10) : lien envoyant dans un autre onglet sur le site de Ubuntu FR ┃ retour au texte, note (10) ䷀
(11) : lien envoyant dans un autre onglet sur le site de IONOS ┃ retour au texte, note (11) ䷀
(12) : lien envoyant dans un autre onglet sur le site de WikiPedia ┃ retour au texte, note (12) ䷀
(13) : lien envoyant dans un autre onglet sur le store en anglais des extensions de Chrome ┃ retour au texte, note (13) ䷀
(14) : lien envoyant dans un autre onglet sur le site en anglais de Qualys ┃ retour au texte, note (14) ䷀
(15) : lien envoyant dans un autre onglet sur le site en anglais de Immuniweb ┃ retour au texte, note (15) ䷀
(16) : lien envoyant dans un autre onglet sur le site de Mozilla ┃ retour au texte, note (16) ䷀
(17) : lien envoyant dans un autre onglet sur le site en anglais de wfuzz ┃ retour au texte, note (17) ䷀
(18) : lien envoyant dans un autre onglet sur le site de la CNIL ┃ retour au texte, note (18) ䷀
(19) : lien envoyant dans un autre onglet sur le site de la CNIL ┃ retour au texte, note (19) ䷀