Fact Check : le MFA rendu obsolète par des hackers chinois, vraiment ?

Temps de lecture : 5 minutes

Si vous suivez l’actualité informatique, vous êtes sans doute au courant d’une des dernières nouvelles en matière de sécurité : le MFA est mort, abattu par des hackers chinois, rien que ça. C’est le très sérieux ZDNet qui nous livre cette information dans un article titré “Des hackers chinois contournent l’authentification à deux facteurs”.

Allons donc, après des années à se faire rebattre les oreilles par nos équipes sécurité sur l’importance du MFA, après en avoir mis partout, sur tous nos comptes, pros comme persos, voilà qu’il se révèle inutile ! Mais est-ce vraiment le cas ? Avant de désinstaller Google Authenticator de nos smartphones, voyons un peu ce qu’il en est…

Authentification à deux facteurs ?

En premier lieu, notons que le titre est saugrenu. Si je vous affirmais que “les hackers chinois ont réussi à craquer les programmes”, vous auriez sans doute envie de me demander “mais… lesquels ?”. En effet, il est assez improbable qu’un hacker ait réussi à craquer un concept abstrait tel que “programme”. De la même manière, l’authentification à deux facteurs est un concept, il est donc farfelu d’affirmer qu’il a été contourné. Derrière ce concept, il existe plein d’implémentations différentes, et on doit donc se demander laquelle de ces implémentations a été contournée.

En lisant l’article, on se rend compte qu’on parle spécifiquement de RSA SecurID. A ce stade, ça reste une énorme news car c’est un des principaux fournisseurs de MFA, connu et utilisé partout dans le monde. On veut donc comprendre l’ampleur de la faille et à cet effet l’article donne une explication de la manière (probable) dont les fameux hackers chinois s’y sont pris pour contourner l’authentification à deux facteurs. Personnellement je n’ai pas réussi à comprendre ce que le journaliste a écrit. L’article semble être une traduction automatique de l’article original en anglais. Ce passage est emblématique, voyez plutôt :

[…]

Le pirate n’a en fait pas forcément besoin de récupérer toutes les variables spécifiques au système de la victime, car ces variables ne sont utilisées que lors de l’importation de la racine (Seed) du jeton SecurID, et ne sont pas liées à la racine utilisée pour générer les jetons d’authentification à deux facteurs. Il peut alors simplement modifier le contrôle qui vérifie si le jeton SecurID a été généré pour ce système, et n’a pas besoin de récupérer toutes les variables du système.

[…]

Dans la version anglaise de l’article c’est à peine mieux, mais heureusement on devine que la source de tout ça est un rapport de la société Fox-IT sur l’Opération Wocao. Avant d’en venir à l’explication, un peu de rappel sur le fonctionnement du MFA me semble utile.

Le MFA, ça marche comment ?

Le “Multi-Factor Authentication” est un concept, comme je l’ai déjà souligné. La déclinaison la plus connue de ce concept est l’OTP (One Time Password), dont fait partie RSA SecurID ainsi que Google Authenticator (et d’autres). Je ne connais pas toutes les implémentations d’OTP, mais c’est toujours la même chose dans le principe. On a deux composantes:

  • Un algorithme, il est parfois OpenSource mais de toute façon il peut toujours être connu via reverse-engineering (en particulier dans le cas d’implémentation software).
  • Un secret partagé entre le client et le serveur, utilisé par l’algorithme pour générer les codes à usage unique. Ce secret peut être nommé “seed”, “variable”, “clé” ou autre, peu importe le principe est le même. Je vais l’appeler “secret”.

Par exemple, dans le cas de Google Authenticator, l’algorithme utilisé s’appelle TOTP (Time-based One Time Password), il est complètement connu et facile à implémenter. 

Le secret quant à lui est généralement transmis via le QRCode que nous sommes habitué à scanner. C’est simplement un grand nombre, souvent encodé en Base32.

Figure 1 : Exemple du QRCode véhiculant le secret pour un utilisateur AWS

En utilisant ce secret et l’heure actuelle (UNIX Timestamp), l’algorithme permet de calculer un code. Comme l’heure est prise en compte dans le calcul, le code change au cours du temps (toutes les 30 secondes pour Google Authenticator).

Chaque fois que vous vous connectez, vous envoyez votre code, le service va alors calculer le code de son côté (il connaît l’heure et le secret, c’est lui qui vous l’a donné) et si c’est bien le même, bingo, vous êtes admis. Notez que vous devez être à peu près à l’heure pour que ça fonctionne.

Ce qu’on doit retenir, c’est que n’importe qui connaissant le secret peut générer des codes valides en utilisant l’algorithme. Il est donc important de garder ce secret… secret. Et ceci est valable aussi pour RSA SecurID.

Maintenant que vous avez en tête le fonctionnement, revenons à ce qu’ont fait nos hackers chinois.

La réalité derrière le titre

On trouve la réponse à la section 6.3.2 du rapport sur l’opération Wocao. La situation est celle d’un poste déjà compromis, sur lequel l’utilisateur a la version software de RSA SecurID (pas le petit porte clé hardware). Donc bien entendu, si c’est votre PC qui génère les codes et que je deviens admin de votre PC, vous ne serez pas étonné d’apprendre que je peux générer les codes.

Mais puisque votre PC génère les codes, c’est que le “secret” est stocké dessus : je peux donc récupérer ce secret pour générer les codes sur mon PC. Fox-IT a voulu démontrer ce scénario : installer le logiciel RSA SecurID sur une machine et importer le secret d’une autre machine. Ils se sont alors heurté à une erreur d’importation : le logiciel détecte que le secret vient d’une autre machine. En effet il semble que le “secret” utilisé par RSA SecurID soit dérivé d’une valeur spécifique au PC (ça pourrait être, par exemple, le numéro de série de la carte mère) ce qui permet au logiciel de détecter que le secret n’est pas à sa place.

Il serait alors possible de prendre le temps de trouver la valeur spécifique utilisée, la voler et “faire croire” au logiciel qu’il est sur la bonne machine, mais il y a encore plus simple: modifier le logiciel. La vérification lors de l’import dans RSA SecurID n’est qu’une instruction, un “if” dans le code. Il suffit de retirer cette instruction, l’import du secret volé se fait alors sans problème, et le logiciel se met à générer des codes.

Donc, pour résumer, derrière un titre racoleur : “Des hackers chinois contournent l’authentification à deux facteurs” on trouve en fait deux informations assez banales:

  1. On peut voler les données contenues dans un ordinateur compromis ;
  2. On peut modifier un programme.

Grosses news, les bras m’en tombent.

Donc gardez votre Google Authenticator, le MFA a encore de beaux jours devant lui !

Commentaires :

A lire également sur le sujet :