L'obfuscation de la saisie automatique à deux canaux

Description de la fonction d'obfuscation de la saisie automatique à deux canaux dans KeePass 2.x.


Introduction : qu'est-ce que l'obfuscation de la saisie automatique à deux canaux ?

La fonction de saisie automatique de KeePass est très puissante : elle envoie des touches pressées simulées aux autres applications. Cela fonctionne avec toutes les applications Windows et pour les applications cibles, il est impossible de faire la distinction entre des touches réellement pressées et celles simulées par la saisie automatique. C'est en même temps le principal inconvénient de la saisie automatique, car les enregistreurs de frappe peuvent écouter les touches simulées. C'est à ce moment qu'entre en jeu l'obfuscation de la saisie automatique à deux canaux.

L'obfuscation de la saisie automatique à deux canaux rend les standards d'enregistreurs de frappe inutiles. Ils utilisent le presse-papiers de Windows pour transférer des parties de texte saisies automatiquement dans l'application cible. Les enregistreurs de frappe peuvent voir les touches Ctrl+V pressées, mais n'enregistrent pas le contenu actuellement copié depuis le presse-papiers.

L'espionnage du presse-papiers ne fonctionne plus non plus, parce que seulement les parties de l'information sensible sont transférées de cette manière.

Qu'importe, ils ne sont pas parfaitement sécurisés (et malheureusement ils ne peuvent l'être en théorie). Aucun des enregistreurs de frappe actuels ou espions de presse-papiers actuellement disponible ne peut écouter un processus de saisie automatique obfusquée, mais il est théoriquement possible d'écrire une application d'espionnage dédiée à la journalisation de la saisie automatique obfusquée.


Quand peut-on utiliser l'obfuscation de la saisie automatique à deux canaux ?

L'obfuscation de la saisie automatique à deux canaux ne peut pas être utilisée avec toutes les fenêtres. La/les fenêtre(s) cible(s) doivent prendre en charge les opérations du presse-papiers et la navigation à l'intérieur des contrôles d'édition en utilisant les touches fléchées. De plus, l'interface de l'utilisateur cible ne doit pas contenir de fonctionnalités d'automatisation comme sauter le focus lorsque la longueur maximale d'une zone de texte est atteinte (par exemple : comme cela a été vu dans les boîtes de dialogue d'enregistrement des numéros).

Les règles de base :

  • Peut être utilisée dans :
    • Les navigateurs.
    • Les programmes Windows avec des zones de texte standardes.
  • Ne peux pas être utilisée dans :
    • Les applications basées sur la console (terminaux interactifs, etc.).
    • Jeux.

Parce qu'elle ne fonctionne pas avec toutes les fenêtres, c'est une fonction qui adhère à chaque entrée. Vous devez l'activer explicitement sur la page de l'onglet 'Saisie automatique' de la boîte de dialogue 'Modifier l'entrée...'.


Comment activer/configurer l'obfuscation de la saisie automatique à deux canaux

Tout ce dont vous avez besoin c'est de cocher la case "Obfuscation de la saisie automatique à deux canaux" d'une entrée (onglet 'Saisie automatique' de la fenêtre d'édition d'une entrée) ; KeePass fera le reste.


Aperçu technique

Plutôt que de simplement envoyer des touches pressées simulées vers l'application cible (comme le fait normalement la saisie automatique), la saisie automatique obfusquée fait ceci :

  • Elle sauvegarde le contenu actuel du presse-papiers.
  • Elle divise intelligemment le texte en plusieurs parties.
  • Pour chaque partie : elle vérifie si le presse-papiers peut être utilisé.
    • Si oui : alors elle le divise en deux sous-parties (par caractère, comme deux peignes entrelacés à plat). Copie/colle la première partie, fusionne le reste en envoyant des touches pressées.
    • Si non : alors, elle l'envoie normalement en utilisant des touches pressées simulées.
  • Elle restaure le précédent contenu du presse-papiers.

Ces étapes sont décrites en détail ci-dessous.


Divisant le texte intelligemment

Le texte à envoyer doit tout d'abord être divisé intelligemment. Toutes les parties de la chaîne ne peuvent pas être envoyées en utilisant le presse-papiers : des codes de touche spéciale et des modifications de clé doivent être transmis inchangés à la fonction SendInput. Par exemple : regardez la chaîne suivante :

mymail@myprovider.com{TAB}MyTopSecretPassword{TAB} {TAB}{ENTER}

Ceci est un exemple de chaîne typique envoyée par KeePass vers une autre application. Premièrement, il saisit l'adresse de messagerie électronique de l'utilisateur, puis une tabulation, puis le mot de passe, une tabulation, bascule la case à cocher, une autre tabulation et finalement, appuie sur la touche Entrée. Cette séquence peut être divisée en les parties suivantes :

mymail@myprovider.com {TAB} MyTopSecretPassword {TAB} ' ' (space) {TAB} {ENTER}

Pour chaque ligne, il est vérifié si le presse-papiers peut être utilisé. Si la ligne contient un '{', '}', '(', ')', '+', '^', '%' ou un whitespace (espace), elle peut seulement être directement envoyée que par la fonction SendInput. '+' par exemple presse la touche Maj, il ne devrait pas être copier/coller en tant que caractère '+'. Les espaces ne peuvent pas non plus être copiés/collés, parce qu'ils sont habituellement utilisés pour cocher les cases.

Dans l'exemple ci-dessus, "mymail@myprovider.com" et "MyTopSecretPassword" peuvent être envoyés en utilisant le presse-papiers.


En divisant les secrets

Transférons "mymail@myprovider.com" à l'application cible en utilisant de l'obfuscation de la saisie automatique à deux canaux.

Premièrement, la chaîne secrète "mymail@myprovider.com" est aléatoirement divisée en caractères dans deux parties comme deux peignes qui s'entrelacent à plat  :

 y  il m   o  d  .c m ma  @ ypr vi er  om

La première chaîne "yilmod.c" est maintenant copiée vers le presse-papiers. La chaîne qui doit être envoyée par la fonction SendInput est maintenant assemblée comme suit :

  • Elle commence par coller depuis le presse-papiers : ^v.
  • Elle appuie la touche n fois, avec n = longueur de la chaîne du presse-papiers.
  • Elle envoie les caractères restants et appuie la touche pour garder ceux qui sont déjà collés depuis le presse-papiers.

Dans notre exemple ci-dessus, la séquence de touches serait assemblée pour :

^v{LEFT 8}m{RIGHT}ma{RIGHT}{RIGHT}@{RIGHT}ypr{RIGHT}vi{RIGHT}er{RIGHT}{RIGHT}om

Ceci collera premièrement le contenu du presse-papiers, ira à son début et remplira les caractères restants, reconstruisant la chaîne d'origine "mymail@myprovider.com".

Le temps de rétention dans le presse-papiers pour la première partie de chaîne est minimal. Il est copié vers le presse-papiers, collé dans l'application cible et immédiatement effacé. Ce processus prend habituellement que quelques millisecondes au maximum.

En savoir plus sur la division de chaîne secrète :
Dans l'exemple ci-dessus, la chaîne "mymail@myprovider.com" a été divisée et envoyée. Si la chaîne était divisée différemment à chaque fois, alors une application malveillante pourrait rassembler la chaîne en capturant plusieurs saisies automatiques en les combinant. Afin d'éviter cela, KeePass initialise le générateur de nombre aléatoire pour la division basée sur un hachage de la chaîne. Ceci signifie que chaque chaîne est divisée différemment, mais les parties de la chaîne sont déterminées de manière unique. Donc, en invoquant plusieurs fois la saisie automatique, un attaquant ne peut pas rassembler la chaîne d'origine, parce qu'il capture toujours la même moitié.