Qu’est-ce que 2FA

2FA signifie Two Factor Authentication (authentification à deux facteurs). Il s’agit d’un moyen permettant de renforcer un processus d’authentification.
Un exemple de ce type d’authentification se trouve sur de nombreux sites de banques, sur les fonctionnalités critiques telles que la réalisation de virements bancaires. Suivant votre banque, celle-ci peut vous envoyer un code via SMS, que vous devez recopier sur le site web afin de confirmer le virement.

Le second facteur utilisé peut être un téléphone, un objet physique en votre possession, une caractéristique physique (biométrie) ou un secret que vous seul connaissez.

Un process 2FA comprend quelques inconvénients : il rend le processus d’authentification plus complexe, et le second facteur doit impérativement être “disponible”, ce qui peut constituer un problème avec les téléphones mobiles. Batterie déchargée, mauvaise couverture réseau ou tout autre problème peuvent empêcher le processus de fonctionner correctement.

Pourquoi utiliser une authentification deux facteurs

D’après le récent rapport de Verizon “Data Breach Investigation Report” 2015, 95% des attaques d’applications web impliquées dans des incidents de sécurité sont à un moment donné passées par l’utilisation d’identifiants volés. “95% de ces incidents de sécurité ont nécessité la collecte d’identifiants sur des appareils volés, puis l’authentification sur des applications web avec ces derniers”.
Le chiffre de 95% est assez impressionnant, mais n’oublions pas que ce rapport ne traite que des incidents liés à des fuites de données, et pas des autres risques tels que la dégradation d’image de marque ou la continuité de service. Les autres types d’incidents n’ont certainement pas les mêmes statistiques.

Authentification biométrique

Même si ces statistiques ne donnent pas une vue globale des attaques web, elles nous rappellent que l’authentification est un réel challenge et une cible privilégiée pour les attaquants.
Avec des bases de login/mots de passe en vente sur le marché noir, les attaquants peuvent directement s’identifier sur des applications sans avoir à pirater techniquement le site web.
En considérant ce risque, renforcer la sécurité des processus d’authentification avec un système à deux facteurs apparait comme une bonne solution.

Non seulement un process 2FA permet de sécuriser les données des utilisateurs, mais il est également un moyen de réduire la fraude sur certains sites et autres applications web.

Où utiliser un système 2FA

Un système à deux facteurs d’authentification est par nature plus complexe pour les utilisateurs qu’un simple login / mot de passe.
De manière évidente, implémenter un 2FA de manière généralisée rendrait les authentifications complexes et lourdes. Ce serait un problème pour les sites web où les utilisateurs doivent s’authentifier rapidement et où l’ergonomie doit être la plus simple possible afin d’éviter les abandons.

Sur les applications critiques (banques, back-offices, outils d’administration, etc.), un second facteur peut être implémenté et rendu obligatoire.
Les utilisateurs comprendront le besoin d’une sécurité renforcée sur des fonctionnalités sensibles et accepteront le process.

Sur d’autres fonctionnalités considérées comme “non critiques”, il est nécessaire de peser le pour et le contre, mais un système 2FA peut être proposé de manière optionnelle.
Par exemple, Facebook l’a implémenté sur son processus de login. Vous pouvez l’activer via le menu “Paramètres” -> “Sécurité” -> “Approbations de connexion”. En plus d’être optionnel, le 2FA de Facebook n’est déclenché que si un utilisateur se connecte depuis un navigateur inconnu. Le process est efficace, puisqu’il évite ainsi aux utilisateurs de devoir rentrer un code reçu par SMS ou via une application à chaque connexion, mais uniquement lorsqu’une connexion inhabituelle est détectée.

Comment mettre en place un 2FA

Code

Générer vos propres tokens

Vous pouvez choisir de générer vous-même des tokens aléatoires et temporaires sur votre application, et de les envoyer par SMS à vos utilisateurs.
C’est une solution simple et efficace, mais non recommandée sur des applications très critiques, puisque le réseau mobile n’est pas forcément sécurisé (le token pourrait être intercepté).
Ces tokens peuvent être envoyés via votre service d’envoi de SMS préféré, comme Twilio (API facile à utiliser).
La façon dont vous générez ces tokens et dont vous les invalidez est également très importante. Une faille dans le process de génération de tokens pourrait compromettre le processus de login.

Des modules, packages et librairies sont disponibles dans les différents langages de programmation, afin d’implémenter un 2FA par vous-même.

Exemple avec Django sur Python :
Implémentation : https://pypi.python.org/pypi/django-two-factor-auth
Documentation : http://django-two-factor-auth.readthedocs.org/en/1.2.0/

Exemple sur PHP (code snippets) :
http://www.sitepoint.com/multi-factor-authentication-with-php-and-twilio/

Utiliser TOTP

L’algorithme TOTP (Time-based One-time Password) est un process basé sur la génération de codes temporaires, à partir d’un timestamp.
Nous n’explorerons pas ici les détails de cet algorithme, qui peuvent être facilement trouvés sur le web, mais cet algorithme fiable est utilisé par de nombreux systèmes 2FA.
En savoir plus sur TOTP : http://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm

Contrairement aux simples tokens envoyés par messages, le process TOTP n’envoie pas de messages (ce qui est plus sûr), mais nécessite une application tierce sur l’appareil de l’utilisateur.

De nombreux services sont basés sur cet algorithme, comme Authy, Google Authenticator, Duo Mobile ou encore Amazon MFA.
Les développeurs de ces applications détaillent de manière claire comment implémenter service côté serveur.
Par exemple, Authy précise une solution pour l’implémentation sur les principaux langages et plateformes :
https://github.com/authy

Si vous utilisez WordPress ou un autre CMS populaire comme Joomla, de nombreux plugins existent afin d’implémenter un 2FA avec TOTP. Faites attention à choisir un bon plugin : vérifiez qu’il est régulièrement mis à jour, regardez les avis, et assurez-vous qu’il est maintenu au fil du temps.

En conclusion, un système à deux facteurs d’authentification est un bon moyen de renforcer la sécurité de l’authentification sur vos applications web. Il est également très simple sur le plan technique et de nombreux utilisateurs y sont déjà habitués, sur des fonctionnalités sensibles.