L'exposition des données sensibles est actuellement en troisième position dans la liste des 10 risques les plus critiques pour la sécurité des applications, selon l'OWASP. Mais précisément, quels sont les risques encourus ? Comment protéger ces données ?
Qu’est-ce qu’une donnée personnelle sensible ?
Les mots de passe, les numéros de carte de crédit, les dossiers médicaux, les informations personnelles et les secrets professionnels sont parmi les données sensibles les plus couramment citées. Les numéros de sécurité sociale, les données biométriques, les affiliations professionnelles et les casiers judiciaires peuvent également être considérés comme telles. En revanche, la signification exacte d’une donnée sensible dépend de 2 facteurs principaux :
- Les lois et réglementations sectorielles telles que le règlement général sur la protection des données (RGPD) de l'Union européenne qui régit l'utilisation des "données personnelles",
- les mesures propres aux entreprises. Certaines données utilisateurs créées et stockées sur une application ne sont pas régulées par la loi, alors que la violation de ces données nuirait aux utilisateurs et, par extension, à l’entreprise,
La définition des données sensibles peut enfin varier selon les sources. Cependant, si une entreprise développe une application qui fonctionne sur la base de données utilisateurs, il est dans l’intérêt de chacun de se fier à une interprétation large des « données sensibles » afin d’être certain de les protéger au mieux.
Quelles vulnérabilités peuvent entraîner l'exposition de données sensibles ?
L’origine des failles mettant à nu les données sensibles peut-être diverse et variée, même si certaines d’entre elles restent relativement courantes, et donc facilement identifiables. En voici trois exemples :
- Un contrôle d'accès inadapté : de ce fait, les utilisateurs qui ne sont pas censés voir les données sensibles peuvent y avoir accès, même si les données ne sont pas référencées par l'application. Une attaque appelée « force browsing » tire ainsi profit de cette faiblesse.
- Une mauvaise gestion des sessions : les identifiants des utilisateurs authentifiés peuvent être exposés. Les pirates peuvent alors en profiter pour se faire passer pour n’importe qui. Le détournement de session et la fixation de session sont ainsi les deux opérations les plus courantes et peuvent provoquer des fuites massives de données sensibles.
- Un stockage cryptographique non sécurisé : ce procédé fait référence aux pratiques dangereuses de stockage de données sensibles, principalement les mots de passe des utilisateurs. Il s'agit là d'appliquer un procédé cryptographique erroné ou de substitution (par exemple, un algorithme de hachage obsolète et faible). Une vulnérabilité d'autant plus importante que le stockage cryptographique sécurisé est la dernière ligne de défense : une cryptographie forte permet en effet de sauvegarder les données une fois qu'elles ont été exposées à d'autres risques dans une application.
Comment protéger les données sensibles ?
Quelques pratiques de codage sûres peuvent permettre d’éviter les vulnérabilités telles que celles énumérées ci-dessus, et à minimiser le risque de divulgation des données sensibles.
- Eviter la navigation forcée vers des contenus restreints
- Mettre en œuvre un mécanisme d'autorisation solide, via des contrôles d'autorisation précoces et uniformes qui sont exécutés après chaque authentification.
- Ne pas se contenter de cacher l'interface utilisateur pour seul contrôle des autorisations. En effet, le masquage d'un élément de l'interface utilisateur n'empêchera pas l'accès à la ressource qu'il remplace.
- Recourir à des cadres éprouvés pour l'authentification et l'autorisation. Des dispositifs modernes mettent souvent en œuvre une authentification et une autorisation sécurisées en coulisses, fournissent des valeurs par défaut raisonnables et permettent d'écrire des extensions en fonction des exigences de chaque application.
- Eviter les sessions mal gérées et les fuites d’identifiants
- Ne jamais exposer les identifiants de session dans les URL, puisqu’il s’agit d’un moyen facile de détourner une session via le partage d'URL ou la connexion.
- Au lieu de les utiliser dans les URL, il est essentiel de ne conserver les identifiants de session que dans les cookies. De cette façon, à moins qu'un pirate puisse accéder aux en-têtes des requêtes, les sessions ne seront pas détournées de manière malveillante. De plus, elles ne seront certainement pas détournées involontairement comme effet secondaire du partage d'URL.
- Toujours utiliser le HTTPS dans toute application, sans jamais faire référence aux ressources HTTP des pages qui utilisent HTTPS.
- Maintenir des paramètres de cookies sains.
- Pour sécuriser le stockage cryptographique
- Ne jamais utiliser de cryptage pour le stockage des mots de passe, mais le hachage. Le cryptage est un processus à double sens, alors que le hachage est un processus à sens unique.
- Utiliser un algorithme de hachage moderne et conçu pour le stockage sécurisé des mots de passe.
- Ne jamais créer ses propres algorithmes de hachage pour des applications de production. La conception d'algorithmes de hachage est en effet incroyablement complexe, ce qui accroît les risques de vulnérabilité.
Pas de miracle : protéger ses données sensibles, c’est appliquer un ensemble de pratiques de codage sécurisées dans le contrôle d'accès, la gestion des sessions et le stockage cryptographique, permettant d’éviter un ensemble de vulnérabilités et minimiser le risque de divulgation. Quelles que soient les décisions prises en matière de politique de stockage des données, détecter rapidement les codes vulnérables grâce à des scans fréquents, via des analyses statiques et dynamiques reste incontournable.
Par Nabil Bousselham, Principal Solutions Architect chez Veracode