J'essaie d'améliorer la sécurité d'une application Web. L'application a un site d'administration et les enregistreurs de frappe sont une préoccupation que j'essaie de résoudre. L'application peut-elle faire quelque chose qui peut empêcher les enregistreurs de frappe de fonctionner correctement? J'ai lu sur le logiciel d'interférence de frappe (pour chaque frappe d'utilisateur, ils ajoutent au hasard plus de frappes sans interférer avec la saisie de l'utilisateur), quelque chose comme ça peut-il être fait en javascript?
De nombreuses applications tentent vainement de déjouer les enregistreurs de frappe et les logiciels espions en utilisant des méthodes de saisie de mot de passe compliquées (et lourdes). Aucun ne fonctionne contre les enregistreurs de frappe et nombreux sont ceux qui rendent les utilisateurs MOINS sûrs car ils rendent difficile l'utilisation des gestionnaires de mots de passe.
La meilleure façon de gérer ce genre de choses est d'utiliser des mots de passe à usage unique. Il y a plusieurs façons de procéder, alors laissez-moi vous en suggérer deux: TOTP ( RFC 6238 ) fonctionne avec de nombreux authentificateurs de logiciels (authentificateur Google, par exemple), il est donc à la fois pratique, bon marché à mettre en œuvre et gratuit à utiliser . Cependant, cela nécessite que l'utilisateur configure les choses et dispose d'un smartphone.
Une autre approche consiste à envoyer un mot de passe unique par SMS. C'est un peu plus cher (car il faut envoyer le message) mais c'est aussi plus simple pour l'utilisateur (qui n'a besoin que d'un téléphone portable et d'aucune configuration).
Si vous traitez les enregistreurs de frappe de manière isolée, il pourrait être possible d'atténuer le risque (par exemple en utilisant des claviers à l'écran, 2FA ou similaire), mais si un attaquant a la possibilité d'installer un enregistreur de frappe sur le système, il est très probable (à l'exception des enregistreurs de frappe physiques) qu'ils ont un accès privilégié au système en question et qu'ils pourraient ainsi contourner toutes les autres protections que vous mettez en place (en supposant qu'ils sont motivés à le faire)
Par exemple, comme il s'agit d'une application Web, disons que vous implémentez 2FA, une fois que l'utilisateur s'est authentifié, un jeton de session est émis et reste en général valide jusqu'à ce qu'un délai d'inactivité se produise ou que l'utilisateur se déconnecte explicitement. Si un attaquant a un accès privilégié au système, il lui serait possible d'émettre des requêtes "keep-alive" pour empêcher le verrouillage inactif et utiliser l'injection du navigateur pour annuler la déconnexion.
Si vous craignez que les utilisateurs accèdent à un système privilégié à partir de clients compromis, la meilleure solution consiste à utiliser des appareils dédiés/verrouillés et à restreindre l'accès à ces appareils uniquement.
JavaScript ne peut pas contrôler les appels système bas et les modifier pour obtenir cette interférence de frappe. Même les protections logicielles en mode utilisateur sont annulées par le keylogging en mode noyau.
Vous pouvez vous protéger contre les enregistreurs de frappe matériels en ayant un clavier à l'écran , qui peut être facilement implémenté .
Les enregistreurs de frappe logiciels sont plus puissants. Les chevaux de Troie Smart Banking capturent également les requêtes HTTP et les captures d'écran lorsque vous cliquez sur la souris sur le site Web bancaire. Certains aussi volent des mots de passe à usage unique ou contournez-les .
Si vous êtes préoccupé par les enregistreurs de frappe qui enregistrent les frappes de touches (saisie manuelle du mot de passe) ou le copier/coller (gestionnaire de mots de passe), vous devez utiliser la souris:
ou un autre appareil (périphérique):