10. Sécurité - Iziclock/T304-Projet-Integration_IziClock GitHub Wiki

Analyse de sécurité

Éléments à sécuriser

Dans notre projet nous avons 3 biens à protéger :

  • Le VPS et notre base de données
  • Le raspberry qui est dans notre réveil
  • Notre application front-end

Nous cherchons à respecter les normes CIA, Confidentialité Intégrité et Disponibilité (Availability).

  • Intégrité du code

Il est essentiel de protéger le code contre les modifications non autorisées. Dans le cas contraire, des utilisateurs non habilités pourraient tenter des manipulations pour obtenir des privilèges accrus au sein de l'application.

  • DB confidentialité et intégrité

En matière de bases de données, il est crucial d'assurer la confidentialité et l'intégrité des données :

Confidentialité : Garantir que seules les personnes autorisées peuvent accéder aux données sensibles, en mettant en place des contrôles d'accès stricts, des techniques de chiffrement, et des politiques de gestion des droits. Intégrité : Veiller à ce que les données restent exactes et cohérentes, en empêchant toute modification non autorisée ou accidentelle grâce à des mécanismes comme les audits, les journaux de transactions, et les validations strictes au niveau applicatif. Ces mesures contribuent à protéger les données contre les accès indésirables et les altérations malveillantes ou involontaires.


Risques

Menace Probabilité Impact Estimation du risque Contre-mesure
Faille cryptographique Haute Moyen Elevé Utiliser des protocoles à jour et chiffrer avec TLS
Cross site scripting (XSS) Faible Faible Faible Sanitisation des inputs
SQL injection Faible Elevé Moyen Principe du privilège moindre pour les utilisateurs, restreindre les inputs
Server Side Request Forgery Faible Elevé Moyen Mettre en place CORS
Insecure Direct Object Reference Moyenne Moyen Moyen Validation des entrées, permissions en fonctions de user, sécurisation des routes API
Vulnérabilités liées au système d'exploitation Faible Elevé Moyen Mettre à jour l'OS du VPS
Attaques par déni de service distribué (DDoS) Moyenne Elevé Elevé Configuration du Firewall en bloquant les ports non-utilisés
Brute-force et vol de credentials sur le VPS Moyenne Moyen Moyen Fail2ban, changement de port par défaut pour ssh

Risques et menaces

Web

Faille cryptographique

Selon l'OWASP, cette menace est responsable de l'exposition/la fuite de données sensibles à des personnes mal intentionnées. Elle compromet l'intégralité et l'authenticité des données si on suit le schéma CIA.

Les vulnérabilités possibles sont dus à :

  • Un manque de mise à jour régulière des protocoles d'encryption(chiffrement) tel que TLS
  • Un manque de vérification la présence du chiffrement bout en bout
  • L'usage des clés cryptographiques faibles ou générées par défaut
  • L'utilisation de fonctions de hashage dépassée tel que MD1 ou SHA1

Broken Access Control (code)

Selon l'OWASP le mauvais contrôle d'accès ou Broken Access Control permet à un attaquant d'avoir accès à des fonctionnalités sans en avoir les privilèges. Cette menace laisse une opportunité pour les attaquants d'escalader les privilèges du serveur.

Les vulnérabilités possibles sont dus à :

  • Au non respect du principe de privilèges moindres pour un utilisateur
  • La modification de l'URL permet de bypass certaines restrictions
  • La Manipulation des metadatas, comme la falsification d'un JSON Web Token (JWT), ou un cookie ou un champ caché manipulé pour élever les privilèges ou abuser de l'invalidation du JWT. (Selon l'OWASP)
  • De mauvaises configurations CORS qui permet d'accéder à l'API même si les sources ne sont pas vérifiées.

Cross Site Scripting (XSS) (code)

Le Cross-Site Scripting (XSS) est une vulnérabilité de sécurité qui permet à un attaquant d'exécuter des scripts du côté client. Selon l'OWASP, les attaquants exploitent souvent les XSS pour voler des informations sensibles, comme les cookies de session, ou pour effectuer des actions malveillantes au nom de l'utilisateur, comme le vol de sessions ou la redirection vers des sites malveillants.

Les vulnérabilités possibles sont dus à :

  • Manque de vérification des inputs de l'utilisateur

SQL injection (DB)

Selon l'OWASP l'injection SQL consiste à insérer ou "injecter" du code SQL malveillant dans une entrée utilisateur non filtrée. L'injection SQL peut permettre à un attaquant de manipuler la base de données, d'accéder à des données sensibles, de modifier ou de supprimer des données, ou même d'exécuter des commandes système sur le serveur. Cette vulnérabilité est l'une des plus dangereuses, car elle peut entraîner des compromissions complètes de la sécurité des applications et des bases de données.

Les vulnérabilités possibles sont dus à :

  • Des données fournies par l'utilisateur qui ne sont pas validées, filtrées ou refusées par l'application.
  • Des données malveillantes sont utilisées dans les paramètres de recherche de l'objet de mappage relationnel (ORM) pour extraire des enregistrements sensibles supplémentaires. (selon l'OWASP)
  • Des données malveillantes sont utilisées directement ou concaténées. Le SQL ou la commande contient la structure et les données malveillantes dans des requêtes dynamiques, des commandes ou des procédures stockées. (selon l'OWASP)

Server Side Request Forgery (SSRF)

Server Side Request Forgery (SSRF) est une vulnérabilité qui permet à un attaquant de forcer le serveur à effectuer des requêtes HTTP vers des ressources arbitraires, souvent à l'insu de l'utilisateur. Les attaquants exploitent généralement SSRF pour contourner les restrictions de réseau, accéder à des ressources internes, ou effectuer des attaques en utilisant l'identité du serveur vulnérable.

Les vulnérabilités possibles sont dus à :

  • Récupération d'une ressource distante sans valider l'URL utilisateur (selon l'OWASP)

Contres-mesures Web

Faille cryptographique

Pour parer cette éventualité il est important de :

  • Ne pas utiliser de protocoles d'encryption obsolètes
  • Chiffrer le contenu transitant par HTTP avec du TLS (HTTPS)

Broken Access Control

Pour parer cette éventualité il est important de :

  • Retirer les opérations CRUD des utilisateurs par défaut
  • Bloquer l'accès aux routes (privatiser les routes) sauf celles des routes publiques
  • Alerter les admins lorsqu'il y'a des tentatives suspectes dans les logs
  • Invalider les identifiants de session côté serveur après la déconnexion.
  • Utiliser des tokens JWT à durée de vie courte pour minimiser les risques.

Cross Site Scripting (XSS)

Pour parer cette éventualité il est important de :

  • Vérifier les inputs des utilisateurs et ne pas accepter(filtrer) les balises HTML.

SQL injection

Pour parer cette éventualité il est important de :

  • Retirer les opérations CRUD des utilisateurs par défaut
  • L'utilisation des Object Relational Mapping Tools (ORMs)

Server Side Request Forgery (SSRF)

Pour parer cette éventualité il est important de :

  • Vérifier et sanitiser les inputs des utilisateurs.
  • Désactiver les redirections (nous avons une SPA, le problème est réglé)

Insecure Direct Object Reference

  • Sécuriser les routes en les rendant privées par défaut (* Mise en place des Web Application Firewalls)

VPS

Vulnérabilités liées au système d'exploitation

Les systèmes d'exploitation (OS) contiennent parfois des failles de sécurité exploitées par des attaquants pour accéder illégalement au système. Ces vulnérabilités peuvent être dues à :

  • Des erreurs dans le code.
  • Des configurations par défaut peu sécurisées.
  • L'absence de mises à jour pour combler les failles connues.

Exemple : Un attaquant pourrait exploiter une vulnérabilité connue dans une ancienne version du noyau Linux pour obtenir des droits administrateurs.

Attaques par déni de service distribué (DDoS)

Une attaque DDoS (Distributed Denial of Service) consiste à submerger un serveur ou une infrastructure réseau avec un volume massif de requêtes. Cela rend le service indisponible pour les utilisateurs légitimes. Ces attaques utilisent souvent un réseau d'ordinateurs infectés, appelés "botnets".

Exemple : Des millions de requêtes malveillantes sont envoyées simultanément à votre VPS, saturant ses ressources et rendant impossible l'accès au site ou à l'application.

Pourquoi est-ce une menace pour un VPS ? Un VPS a des ressources limitées (CPU, RAM, bande passante). Une attaque DDoS peut épuiser ces ressources, impactant ses performances.

Attaques par force brute et vol d'identifiants

Une attaque par force brute consiste à essayer toutes les combinaisons possibles d'identifiants (nom d'utilisateur et mot de passe) jusqu'à trouver les bonnes. Ces attaques sont souvent automatisées grâce à des scripts ou des outils spécialisés.

Exemple : Un attaquant tente des milliers de mots de passe pour se connecter au serveur via SSH en utilisant un script automatisé.

Conséquences potentielles : Si l'attaquant réussit à obtenir un accès, il peut exécuter des commandes, installer des logiciels malveillants ou voler des données sensibles.


Contre-mesures VPS

Vulnérabilités liées au système d'exploitation

  • Mise à jour régulière du système d'exploitation : Appliquez les correctifs de sécurité dès leur disponibilité pour combler les failles potentielles.
  • Configuration sécurisée : Désactivez les services inutiles et appliquez les principes du moindre privilège.

Attaques par déni de service distribué (DDoS)

  • Configuration du pare-feu : Bloquez les ports non utilisés pour réduire la surface d'attaque.
  • Services d'atténuation DDoS : Envisagez l'utilisation de services spécialisés pour filtrer le trafic malveillant.
  • Surveillance proactive : Mettez en place des systèmes de détection pour identifier rapidement les attaques en cours.

Attaques par force brute et vol d'identifiants

  • Installation de Fail2ban : Cet outil surveille les tentatives de connexion et bloque les adresses IP suspectes après un certain nombre d'échecs.
  • Changement du port par défaut pour SSH : Modifiez le port 22 vers un port non standard pour réduire les tentatives automatisées.