Nous avons travaillé récemment sur les principales caractéristiques de sécurité de Canaille, dans le cadre de notre subvention NLNet.
Sécurité
Au cours de ce sprint, nous nous sommes concentrés sur la mise en œuvre des recommandations de sécurité conseillées par l'agence publique française de cybersécurité "ANSSI".
Authentification multifactorielle
Autrefois, il suffisait de demander un mot de passe pour vérifier l'identité d'une personne sur l'internet. Cependant, il existe de multiples façons de deviner un mot de passe ou de le voler à quelqu'un, et les utilisateurs ont rapidement commencé à prendre des habitudes peu recommandables à leur égard, comme l'utilisation du même mot de passe sur tous les sites web. Mais il n'y a pas que les mots de passe. Les développeurs de logiciels se sont rendu compte que, surtout pour les applications sensibles, il n'est pas possible d'utiliser une seule méthode d'authentification : chacune d'entre elles présente des faiblesses et peut éventuellement être piratée.
La solution a consisté à demander aux utilisateurs de s'authentifier à l'aide d'au moins deux méthodes d'authentification, ou facteurs - d'où le nom d'authentification multifactorielle.
Pour un logiciel de gestion de l'identité comme Canaille, il s'agissait d'une fonctionnalité essentielle, et nous l'avons mise en œuvre pour quatre méthodes différentes :
- Mot de passe à usage unique basé sur HMAC (HOTP)
- Mot de passe à usage unique basé sur le temps (TOTP)
- Code envoyé par e-mail
- Code envoyé par SMS
Les méthodes HOTP/TOTP exigent que l'utilisateur télécharge et configure une application mobile ou un logiciel d'authentification (comme FreeOTP), qui produira à son tour des mots de passe à usage unique. Ces mots de passe changent périodiquement (chaque fois que vous appuyez sur le bouton de votre authentificateur pour HOTP, ou après une période fixe pour TOTP), ce qui rend plus difficile pour les attaquants de mettre la main sur un mot de passe et de l'utiliser à temps. Ce sont probablement les facteurs d'authentification les plus sûrs actuellement disponibles pour Canaille.
Les deux autres facteurs (codes par e-mail ou SMS) sont plus basiques mais offrent une meilleure sécurité lorsqu'ils sont combinés au mot de passe. Ils pourraient être adaptés à des cas d'utilisation où la facilité d'utilisation semble plus importante que la sécurité. La méthode du e-mail exige que les administrateurs de l'instance Canaille aient configuré un serveur SMTP. De même, un serveur SMPP fonctionnel est nécessaire pour la méthode SMS.
Ces facteurs peuvent être cumulés, jusqu'à 3 facteurs différents (HOTP et TOTP, en utilisant la même application d'authentification, s'excluent mutuellement) en plus du mot de passe traditionnel. L'utilisateur devra alors remplir tous les codes requis pour se connecter à son compte. La fonction MFA peut également être complètement désactivée - dans ce cas, l'utilisateur n'aura besoin que de son mot de passe pour se connecter.
Verrouillage anti-intrusion
Pour empêcher les attaques par force brute sur les comptes Canaille, nous avons ajouté un délai entre chaque tentative de connexion échouée. Ce délai est doublé chaque fois qu'un utilisateur saisit un mot de passe erroné. Nous avons également envisagé de verrouiller les comptes après un certain nombre de tentatives infructueuses, mais cela aurait permis aux attaquants de verrouiller trop facilement tous les comptes d'utilisateurs.
Journalisation des événements de sécurité
Afin de faciliter la détection d'une attaque potentielle sur une instance de Canaille, nous avons ajouté la journalisation des événements sensibles. Ces journaux sont marqués d'une étiquette spéciale "sécurité" pour faciliter leur récupération.
Les événements de sécurité enregistrés comprennent les tentatives d'authentification, les mises à jour de mot de passe ou d'e-mail, l'émission ou la révocation de jetons OAuth, etc.
Vérification de la compromission du mot de passe
Comme les utilisateurs ont tendance à réutiliser les mêmes mots de passe (avec quelques petites variations dans le meilleur des cas), il est désormais possible de vérifier si chaque nouveau mot de passe ne se trouve pas dans une base de données de mots de passe compromis, grâce à l'API de Have I Been Pwned.
HIBP offre un point de terminaison API gratuit qui peut être consulté pour les mots de passe compromis.
Politique d'expiration des mots de passe
Afin d'accroître la sécurité des comptes d'utilisateurs, il est désormais possible de déterminer une durée de vie pour les mots de passe. Lorsqu'un mot de passe expire, les utilisateurs sont obligés de le mettre à jour lors de leur prochaine connexion, ou pendant leur session s'ils sont déjà connectés.
Approvisionnement avec SCIM
Canaille fournit une implémentation de serveur SCIM, qui peut être utilisée par les applications clientes pour gérer les utilisateurs et les groupes directement dans Canaille (avec les droits d'autorisation). À l'avenir, nous aimerions créer une petite application de gestion d'abonnements à des services, et SCIM est un protocole bien adapté pour qu'une telle application puisse communiquer avec Canaille.
Grâce à nos récents travaux sur SCIM, nous avions presque tout prêt pour ajouter une implémentation côté serveur de SCIM. C'était aussi un moyen de tester nos bibliothèques SCIM en situation réelle. Au final, cette intégration nous a fait corriger beaucoup de choses aussi bien dans notre boîte à outils SCIM que dans Canaille.
Documentation
Internationalisation
Pour rendre Canaille plus accessible, nous avons passé du temps à rendre notre documentation traduisible. L'interface de traduction est disponible sur Weblate. Nous avons également traduit la documentation en français pour valider le mécanisme. Ce fut également l’occasion pour nous de revoir toute la documentation existante et de corriger les erreurs de formulation et les fautes de frappe.
Habillage
Nous avons également travaillé sur la documentation sur la personnalisation de l'habillage de Canaille pour aider les utilisateurs à personnaliser l'apparence de leur instance Canaille. Nous souhaitions référencer et documenter tous nos patrons, pour aider les designers à les modifier. Pour y parvenir, nous avons dû transformer une ancienne bibliothèque non maintenue en une nouvelle bibliothèque jinja-autodoc pour la génération automatique de documentation de patrons. Nous l'avons nettoyé, apporté quelques améliorations et l'avons placé sous l' organisation sphinx-contrib.