ESET a découvert un banquier BackSwap en utilisant une nouvelle méthode de manipulation de navigateur

Au cours des dernières années, les chevaux de Troie bancaires ont perdu de leur popularité parmi les cybercriminels. L'une des raisons est le développement de technologies de protection pour les fournisseurs d'antivirus et les développeurs de navigateurs Web. Il est difficile de mener une attaque avec l'aide d'un banquier, c'est pourquoi de nombreux auteurs de virus passent à des outils plus simples et plus rentables: chiffreurs, mineurs, logiciels pour voler des crypto-monnaies.

Beaucoup, mais pas tous. Nous avons découvert une nouvelle famille de banquiers utilisant de nouvelles techniques pour manipuler le navigateur. Au lieu d'introduire de façon complexe du code dans le processus du navigateur pour surveiller son activité, le malware intercepte les événements Windows dans le cycle d'attente des messages pour vérifier les valeurs des objets liés aux opérations bancaires.


Après avoir découvert le travail avec les services bancaires en ligne, le logiciel malveillant injecte du JavaScript malveillant dans la page Web - via la console du développeur dans le navigateur ou directement dans la barre d'adresse. Les opérations sont effectuées à l'insu et sans la participation de l'utilisateur. À première vue, un schéma simple vous permet de contourner les mécanismes avancés de protection des navigateurs contre les attaques complexes.

Présentation


Nous avons remarqué ce cyber-groupe pour la première fois en janvier 2018, lorsqu'il a distribué les premiers développements - par exemple, un programme pour voler la crypto-monnaie en modifiant l'adresse du portefeuille dans le presse-papiers. Le groupe a été engagé dans la crypto-monnaie pendant plusieurs mois, après quoi il a publié la première version du banquier - à partir du 13 mars, les produits antivirus ESET le détecteront comme Win32 / BackSwap.A.

Dans le graphique ci-dessous, vous pouvez voir une forte augmentation des détections par rapport aux projets précédents, selon nos statistiques. Les auteurs améliorent le banquier et sortent de nouvelles versions presque tous les jours (avec des pauses pour le week-end).

Figure 1. Découvrez Win32 / BackSwap.A et les projets précédents associés

Distribution et exécution


Win32 / BackSwap.A est distribué dans des courriers indésirables contenant un chargeur JavaScript obscurci de la famille Nemucod dans la pièce jointe. Actuellement, ces newsletters sont destinées aux utilisateurs polonais.

Nous avons souvent trouvé sur les machines victimes un autre chargeur de démarrage Win32 / TrojanDownloader.Nymaim bien connu , se propageant probablement de la même manière. À l'heure actuelle, nous ne savons pas si cette coïncidence ou les familles sont liées les unes aux autres.

La charge utile est fournie comme une version modifiée d'une application légitime, partiellement réécrite par un composant malveillant. L'application utilisée pour la modification change régulièrement - nous avons observé TPVCGateway, SQLMon, DbgView, WinRAR Uninstaller, 7Zip, OllyDbg et FileZilla Server dans cette qualité.

L'application est modifiée de telle manière qu'elle passe au code malveillant après son initialisation. Pour ce faire, les auteurs ajoutent un pointeur sur un composant malveillant dans la table de fonction _initterm() , à l'intérieur du runtime de la bibliothèque C, qui initialise les variables globales et d'autres parties du programme avant d'appeler la fonction main ().


Figure 2. Tableau de pointeurs _initterm d'une application légitime, à la fin duquel un pointeur vers le shellcode du banquier est ajouté

La méthode ressemble à la trojanisation; la différence est que dans notre cas, l'application d'origine cesse de fonctionner après l'initialisation du malvari. Le but de la méthode n'est pas de masquer l'utilisateur, mais plutôt de contrecarrer la détection et la recherche. Les analystes trouvent qu'il est plus difficile de détecter ce banquier, car de nombreux outils de rétro-ingénierie, tels que IDA Pro, montrent la fonction main () d'origine comme le début légitime du code d'application. Pas le fait que l'analyste au premier coup d'œil remarquera quelque chose de suspect.

La charge utile est un objet de code binaire indépendant de la position avec des données incorporées. Les chaînes de caractères sont stockées en texte brut, ce qui vous permet de remplacer des traces déjà subtiles, car toutes les API Windows requises sont recherchées par hachage. Au début du travail, le malware fournit de la persistance en se copiant dans le dossier de démarrage, après quoi il passe aux fonctions du banquier.

Méthodes d'injection traditionnelles


Un banquier ordinaire pour voler des fonds du compte de la victime via l'interface de banque en ligne se présente lui-même ou un module spécial dans l'espace d'adressage du processus de navigation. Pour un certain nombre de raisons, ce n'est pas une tâche facile. Tout d'abord, l'injection peut être interceptée par un produit antiviral. De plus, la profondeur de bits du module implémenté doit coïncider avec la profondeur de bits du navigateur - le module 32 bits ne doit pas être intégré dans le processus 64 bits et vice versa. Par conséquent, une attaque nécessite deux versions du même module - 32/64 bits.

Après une injection réussie, le module bancaire doit détecter les fonctions liées au navigateur et les intercepter. Il a besoin de fonctions qui sont responsables de l'envoi et de la réception des requêtes HTTP au format texte brut avant le chiffrement et après le déchiffrement, respectivement. La complexité de la recherche de fonctionnalités varie d'un navigateur à l'autre. Dans Mozilla Firefox, ils sont exportés par la bibliothèque nss3.dll et leurs adresses sont faciles à trouver grâce à leurs noms connus. Google Chrome et d'autres navigateurs basés sur Chromium masquent ces fonctionnalités. Cela oblige les auteurs de virus à proposer des schémas spéciaux visant une version spécifique du navigateur et à changer de tactique lorsque de nouvelles versions sont publiées.

Si les fonctions sont trouvées et que l'interception est effectuée (et que la solution antivirus ne l'a pas détectée), le banquier peut modifier le trafic HTTP ou rediriger la victime vers des sites qui simulent des ressources bancaires en ligne légitimes, en forgeant des certificats. Des méthodes similaires sont utilisées par les célèbres chevaux de Troie bancaires Dridex , Ursnif, Zbot, Trickbot, Qbot et bien d'autres.

Nouvelle méthode de manipulation du navigateur


Win32 / BackSwap.A implémente une approche complètement différente. Bunker utilise des éléments du shell graphique Windows et l'imitation des entrées utilisateur. La méthode peut sembler banale, mais elle est efficace car elle vous permet de résoudre les problèmes connus de l'injection traditionnelle. Premièrement, le malware n'interagit pas avec le navigateur au niveau du processus. Grâce à cela, il n'est pas nécessaire de bénéficier de privilèges spéciaux et de contourner les antivirus qui protègent contre l'injection conventionnelle. Le deuxième avantage pour les attaquants est que le banquier ne dépend pas de l'architecture du navigateur ou de sa version; Un code fonctionne pour tout le monde.

Les logiciels malveillants suivent l'URL de la page visitée en définissant des hooks d'événements pour une certaine gamme d'événements pertinents disponibles via la boucle d'attente de messages Windows, tels que EVENT_OBJECT_FOCUS, EVENT_OBJECT_SELECTION, EVENT_OBJECT_NAMECHANGE et plusieurs autres. Le gestionnaire recherche des valeurs d'URL en recherchant des objets chaîne commençant par des HTTP obtenus en appelant la méthode get_accValue partir de l'interface d'événement IAccessible .


Figure 3. Réception utilisée pour obtenir l'URL de la page actuelle dans le navigateur. Ces adresses sont obtenues en vérifiant la sous-chaîne [ht] tp [s] (surlignée en rouge)

Ensuite, Win32 / BackSwap.A recherche des adresses bancaires et des en-têtes de fenêtre de navigateur indiquant que l'utilisateur prépare un transfert d'argent.


Figure 4. Le banquier recherche des lignes de code liées à des banques spécifiques. La première ligne est le titre de la fenêtre, la seconde est la partie URL

Après avoir trouvé celle désirée, le banquier télécharge du code JavaScript malveillant correspondant à une banque spécifique et l'injecte dans le navigateur. Une injection se fait de manière simple mais efficace.

Dans les exemples plus anciens, Win32 / BackSwap.A insère un script malveillant dans le presse-papiers et simule une frappe pour ouvrir la console du développeur (CTRL + SHIFT + J dans Google Chrome, CTRL + SHIFT + K dans Mozilla Firefox), puis collez le contenu du tampon (CTRL + V) et appuie sur ENTER pour exécuter le contenu de la console. Le malware répète ensuite la combinaison de touches pour fermer la console. À ce moment, la fenêtre du navigateur devient invisible - un utilisateur ordinaire pensera très probablement que le navigateur se fige pendant quelques secondes.

Dans les nouvelles versions, le circuit est amélioré. Au lieu d'interagir avec la console du développeur, un script malveillant est exécuté directement à partir de la barre d'adresse via un protocole JavaScript spécial , une fonction sous-utilisée prise en charge par la plupart des navigateurs. Le banquier imite en appuyant sur CTRL + L pour sélectionner la barre d'adresse, SUPPRIMER pour effacer le champ, "entre" les caractères dans "javascript" via un appel à SendMessageA dans une boucle, puis insère un script malveillant en utilisant la combinaison CTRL + V. Le script est exécuté après avoir "appuyé" sur ENTER. À la fin du processus, la barre d'adresse est effacée pour supprimer les traces de compromis.

Dans la figure 5, vous pouvez voir une partie du code injecté dans la console. Tout d'abord, Win32 / BackSwap.A définit un navigateur en vérifiant le nom de classe de la fenêtre sélectionnée (marquée en bleu). JavaScript malveillant est copié dans le tampon (marqué en rouge). Ensuite, la valeur de transparence de la fenêtre du navigateur est changée en "3", ce qui la rend invisible (marquée en violet). La partie liée à la fonction ToggleBrowserConsole , qui allume et éteint la console, est ToggleBrowserConsole .


Figure 5. Injection de script

Win32 / BackSwap.A prend en charge les attaques sur Google Chrome et Mozilla Firefox, la prise en charge d'Internet Explorer a été ajoutée dans les versions récentes. La méthode convient à la plupart des navigateurs avec une console de développeur ou la possibilité d'exécuter du code JavaScript à partir de la barre d'adresse (fonctions de navigateur standard).

Trois navigateurs compromis ont une fonctionnalité de sécurité intéressante conçue pour empêcher les attaques Self-XSS : lorsqu'un utilisateur essaie de coller du texte copié commençant par «javascript:» dans la barre d'adresse, le préfixe de protocole est supprimé et doit être entré à nouveau manuellement pour exécuter le script. Win32 / BackSwap.A contourne cet obstacle en simulant l'entrée de caractères d'un préfixe dans la barre d'adresse avant de coller le script malveillant copié.

Un autre outil de sécurité est implémenté dans Mozilla Firefox. Le navigateur interdit la copie de scripts sur la console par défaut; au lieu de cela, il affiche une notification des risques possibles et force l'utilisateur à saisir d'abord manuellement l'expression «autoriser le collage» pour permettre l'insertion de caractères copiés. Pour contourner cette mesure de sécurité, Win32 / BackSwap.A prévoit l'exécution d'une commande shell (figure 6), qui modifie le prefs.js configuration prefs.js et supprime cette protection.


Figure 6. Une commande shell qui supprime la protection contre l'insertion d'un script dans la console Firefox

Code malveillant JavaScript


Win32 / BackSwap.A utilise un script spécial pour chacune des banques cibles. Étant donné que toutes les banques ont des sites différents, le code est différent et a des variables différentes. Des scripts sont injectés dans les pages sur lesquelles, selon le banquier, la préparation du virement est effectuée. Les scripts implémentés remplacent secrètement le numéro de compte du destinataire par un autre, et lorsque la victime envoie le transfert, l'argent ira sur le compte de l'attaquant. Les contre-mesures contre les transferts non autorisés (authentification à deux facteurs) sont impuissantes, car le titulaire du compte confirme l'envoi de fonds.

Les auteurs de Win32 / BackSwap.A ont écrit des scripts pour travailler avec cinq banques polonaises: PKO Bank Polski, Bank Zachodni WBK SA, mBank, ING et Pekao. Les opérateurs suppriment certaines banques de la liste des objectifs - dans la plupart des nouvelles versions, il reste trois banques: PKO BP, mBank et ING. Dans les anciennes versions, les attaquants envoient le numéro de compte du destinataire à partir de serveurs C&C sur des sites WordPress piratés. Dans les nouvelles versions, les nombres sont stockés dans les scripts malveillants eux-mêmes. Les comptes changent souvent - un nouveau numéro de compte est utilisé dans presque chaque nouvelle campagne.

Les banquiers sont intéressés par les transferts dans une certaine fourchette - généralement de 10 000 à 20 000 zlotys polonais (168 000 à 337 000 roubles). Le script remplace non seulement le numéro de compte du destinataire, mais remplace également le champ de saisie par un faux - l'utilisateur voit le bon numéro et ne soupçonne rien.


Figure 7. Partie du code JavaScript malveillant. Les sites marqués en rouge sont chargés de vérifier le montant du virement et de remplacer le numéro de compte du destinataire

Conclusion


Win32 / BackSwap.A prouve que la confrontation entre l'industrie de la sécurité et les auteurs de virus ne nécessite pas toujours une nouvelle technique et tactique sophistiquée. Les navigateurs améliorent la protection contre l'injection de code, de sorte que les auteurs du malware sont passés à d'autres méthodes d'attaque, et une seule est implémentée dans Win32 / BackSwap.A.

Les produits antivirus ESET détectent une menace comme Win32 / BackSwap.A.

Les spécialistes d'ESET ont informé les développeurs de navigateurs compromis d'une nouvelle méthode d'attaque.

IoCs


9BC4C1D5403DDD90712CE87225490A21D1EDC516 JS/Nemucod.EAN trojan
CF5A74C268661501156663F74CD5E20603B0F261 Win32/BackSwap.A trojan
6251F9AD0E5F551AC4A6B918EF366E86C4CCFDC4 Win32/BackSwap.A trojan
2DC9760A7C6E9D261C73EFB7B2604840734BC058 Win32/BackSwap.A trojan
A68901D0D8C1247FF280F9453E3AE45687C57566 Win32/BackSwap.A trojan (JavaScript)

Source: https://habr.com/ru/post/fr413307/


All Articles