WhatsApp manipule des conversations et plus encore par le déchiffrement du protocole – Black Hat 2019

0
138

Selon certaines sources, WhatsApp, l’application de messagerie appartenant à Facebook, compte plus de 1,5 milliard d’utilisateurs dans plus de 180 pays. L’utilisateur moyen consulte WhatsApp plus de 23 fois par jour. Le nombre d’utilisateurs de WhatsApp aux États-Unis devrait par ailleurs atteindre 25,6 millions d’ici 2021.

Une étude menée par : Dikla Barda, Roman Zaikin et Oded Vanun – Le potentiel d’escroqueries en ligne, de rumeurs et de fausses informations est énorme. Les pirates disposent d’une arme supplémentaire dans leur arsenal pour exploiter la plate-forme de messagerie à leur avantage.

Fin 2018, Check Point Research a informé WhatsApp de nouvelles vulnérabilités dans son application de messagerie, qui permettraient à des pirates d’intercepter et de manipuler les messages envoyés lors de conversations privées ou de groupe. Elles fournissent ainsi aux pirates la possibilité de créer et diffuser de fausses informations semblant provenir de sources apparemment fiables.

L’équipe de chercheurs de Check Point a observé trois méthodes d’attaque possibles exploitant cette vulnérabilité, qui impliquent toutes des tactiques d’ingénierie sociale visant à tromper les utilisateurs finaux. Un pirate peut :

  1. Utiliser la fonction « citer » dans une conversation de groupe pour modifier l’identité de l’expéditeur, même si cette personne n’est pas membre du groupe.
  2. Modifier le texte de la réponse de quelqu’un d’autre, lui faisant ainsi dire ce qu’elle n’a pas dit.
  3. Envoyer un message privé à un autre participant du groupe, déguisé en message public adressé à tous. Ainsi, lorsque la personne ciblée répond, sa réponse est visible à tous les participants à la conversation.

WhatsApp a corrigé la 3ème vulnérabilité qui permettait aux pirates d’envoyer un message privé à un autre participant du groupe, déguisé en message public adressé à tous. Nous avons cependant constaté qu’il est toujours possible de manipuler les messages cités et de répandre de fausses informations semblant provenir de sources apparemment fiables.

Dans le cadre de sa politique de communication responsable, Check Point Research a informé WhatsApp de ses conclusions. Du point de vue de Check Point Research, nous pensons que ces vulnérabilités sont de la plus haute importance et nécessitent une attention particulière.

Pour démontrer la gravité de cette vulnérabilité dans WhatsApp, nous avons créé un outil qui nous permet de déchiffrer les communications WhatsApp et d’en usurper les messages.

WhatsApp chiffre chaque message, image, appel, vidéo et tout autre type de contenu que vous envoyez, de sorte que seul le destinataire puisse le voir. WhatsApp n’est pas en mesure de voir ces messages.

Figure 1 : Conversation WhatsApp chiffrée

Ces processus de chiffrement ont attiré notre attention, et nous avons décidé d’essayer d’inverser l’algorithme de WhatsApp pour déchiffrer les données. Ainsi, après avoir déchiffré la communication WhatsApp, nous avons constaté l’utilisation du « protocole de chiffrement protobuf2 ».

En convertissant ces données protobuf2 en Json, nous avons pu voir les paramètres réellement envoyés et les manipuler afin de vérifier la sécurité de WhatsApp.

Le résultat de notre étude est une extension Burp Suite et 3 méthodes de manipulation (la 3ème ayant été corrigée après communication de la vulnérabilité à WhatsApp)

Pour commencer la manipulation, nous devons cependant d’abord obtenir la clé privée et la clé publique de notre session et les renseigner dans notre extension Burp Suite.

Si vous souhaitez une explication détaillée de la manière dont le chiffrement fonctionne en arrière-plan, veuillez consulter les détails techniques dans un article de 2018.

Accès aux clés

Les clés peuvent être obtenues à partir de la phase de génération de clés dans WhatsApp Web avant la génération du code QR :

Figure 2 : Clé publique et clé privée de la communication

Après obtention de ces clés, nous devons obtenir le paramètre « secret » qui est envoyé via le téléphone mobile à WhatsApp Web pendant que l’utilisateur scanne le code QR :

Figure 3 : La clé secrète du WebSocket

Notre extension ressemblera à cela :

Figure 4 : Extension Burp Suite de déchiffrement de WhatsApp

Après avoir cliqué sur « Connecter », l’extension se connecte au serveur local de l’extension, qui effectue toutes les tâches requises pour l’extension.

Manipulation de WhatsApp

En déchiffrant la communication WhatsApp, nous avons pu voir tous les paramètres réellement envoyés entre la version mobile de WhatsApp et la version web. Cela nous a ensuite permis de les manipuler et de commencer à chercher des failles de sécurité.

Nous avons mené les différents types d’attaques décrits ci-dessous :

Attaque 1 : Modification de l’identité d’un expéditeur dans une conversation de groupe, même s’il n’est pas membre du groupe

Dans cette attaque, il est possible d’usurper un message de réponse pour emprunter l’identité d’un autre membre du groupe, et même d’un membre inexistant dans le groupe, par exemple, « Mickey Mouse ».

Pour usurper l’identité d’une personne du groupe, il suffit au pirate de capturer le  trafic chiffré :

Figure 5 : Communication WhatsApp chiffrée

Une fois le trafic capturé, il peut simplement l’envoyer à une extension qui le déchiffrera ensuite :

Figure 6 : Déchiffrement du message WhatsApp à l’aide de notre extension

Les paramètres intéressants à noter ici sont :

  • conversation – Le contenu réellement envoyé.
  • participant – Le participant qui a réellement envoyé le contenu.
  • fromMe – Ce paramètre indique si j’ai envoyé les données ou si quelqu’un d’autre dans le groupe les a envoyées.
  • remoteJid – Ce paramètre indique à quel groupe/contact les données sont envoyées.
  • id – L’identifiant des données. Le même identifiant apparaîtra dans les bases de données des téléphones.

C’est ici que le plus intéressant commence…

Par exemple, nous pouvons modifier la conversation. Par exemple, le message avec le contenu « Great! » envoyé par un membre du groupe pourrait être remplacé par autre chose : « I’m going to die in a hospital right now » et le paramètre participant pourraient également être remplacés par une autre personne du groupe :

Figure 7 : Un message de réponse usurpé

Notez que nous devons modifier la valeur de id car il est déjà envoyé et apparaît dans la base de données.

Pour que tout le monde voie le nouveau message usurpé, le pirate doit répondre au faux message, en citant et en modifiant ce message (« Great! ») afin qu’il soit envoyé à tous les membres du groupe.

Comme vous pouvez le voir dans la capture d’écran ci-dessous, nous avons créé un nouveau groupe dans lequel aucun message n’a précédemment été envoyé. En utilisant la méthode ci-dessus, nous avons pu créer une fausse réponse.

Figure 8 : La conversation d’origine

Le paramètre participant peut également être un texte ou un numéro de téléphone d’une personne ne faisant pas partie du groupe, ce qui ferait croire à tous les membres du groupe que le message a bien été envoyé par ce participant.

Par exemple :

Figure 9 : Modification du contenu du message à l’aide de notre outil de débogage

…et le résultat ressemblera à ceci :

Ce serait à nouveau envoyé à tous les membres du groupe comme auparavant.

Figure 10 : Réponse à un message envoyé par quelqu’un en dehors du groupe

Attaque 2 : Modification de la réponse d’un correspondant pour lui faire dire ce qu’il n’a pas dit

Lors de cette attaque, le pirate est en mesure de manipuler la conversation en envoyant un message de la part d’une autre personne, comme si le message venait d’elle. Ce faisant, il serait par exemple possible d’incriminer une personne ou de conclure un accord frauduleux.

Pour usurper les messages, nous devons manipuler le paramètre fromMe dans le message, qui indique qui a envoyé le message dans la conversation personnelle.

Cette fois, nous allons capturer le message sortant de WhatsApp Web avant même qu’il ne soit envoyé à Burp Suite. Pour ce faire, nous pouvons mettre un point d’arrêt sur la fonction aesCbcEncrypt et prendre les données du paramètre « a » :

Figure 11 : Manipulation de message sortant

Nous copions ensuite ces données dans notre extension Burp Suite et sélectionnons le sens sortie. En appuyant sur « Déchiffrer », notre extension déchiffre les données :

Figure 12 : Déchiffrement du message sortant

Après modification et chiffrement du message, nous obtenons le résultat ci-dessous :

Figure 13 : Chiffrement du message sortant

Nous devons ensuite modifier le paramètre « a » dans notre navigateur, et le résultat est une notification push avec le contenu. De cette façon, il est même possible d’usurper la totalité de la conversation.

Figure 14 : Envoi de messages à mon attention au nom de quelqu’un d’autre.

La totalité de la conversation ressemblera alors à ceci :

Figure 15 : Envoi de messages à mon attention au nom de quelqu’un d’autre.