Skip to content

Latest commit

 

History

History
299 lines (183 loc) · 23.5 KB

File metadata and controls

299 lines (183 loc) · 23.5 KB

Réunion de Fractureiser Mitigation, le 08/06/2023

(Note de traduction: les informations relevant du jargon technique sont potentiellement faussées, merci de me corriger si tel est le cas)

Ordre du jour et compte rendu de la réunion du 80/06/2023 sur ce qui peut arriver et comment l'éviter

Dans l'intérêt de garder cette réunion productive, nous avons invités un petit groupe de membres de la communauté, principalement des personnes travaillant sur les répertoires de mods, et les personnes qui ont aidé à organiser la réponse à l'incident.

Enregistrement

La réunion a été enregistrée et éditée pour inclure les identifiants des intervenants. Vous pouvez regarder l'enregistrement sur YouTube ou PeerTube (en anglais).

Quand

08/06/2023 16h00 UTC

Invités

Organisateurs de la réunion :

  • Emi (premier intervenant, organisateur)
  • Jasmine (organisateur)

Secrétaire de la réunion :

  • williewillus (journaliste de l'incident ; Violet Moon)

Membres de la communauté (par ordre alphabétique):

  • Adrian (Modrinth)
  • cpw (Forge)
  • Doctor Oyster (Chef de l'Équipe gérant la Communauté Overwolf)
  • Emma (Modrinth)
  • Fury (CEO d'Overwolf)
  • gdude (Quilt)
  • Geometrically (Modrinth)
  • IMS (CaffeineMC)
  • Jared (BlameJared Maven)
  • kennytv (PaperMC)
  • Mikey (FTB)
  • modmuss (Fabric)
  • Slowpoke (FTB)
  • Starchild (Quilt)
  • timoreo (Prism Launcher)
  • ZekeZ (Prism Launcher)

Sommaire de l'Incident et Réponse

(Cette partie sert majoritairement pour les participants ayant besoin de se mettre à jour - elle n'a pas besoin d'être lu à voix haute)

fractureiser est un nouveau virus auto répliquant qui a infecté des plugins Bukkit, des mods Forge, Fabric et les fichiers JARs de Minecraft. Les JARs Infectés, dès leur lancement, vont s’exécuter normalement, mais télécharger une série de "payloads" volant les jetons de connections, mots de passe/moyens de payement sauvegardés dans les navigateurs, et des cryptomonnaies. Après qu'un ordinateur ai été infecté, tous les fichiers JAR sur l'appareil sont injectés d'une telle manière que s'ils sont partagés et lancés sur un autre ordinateur, l'infection s'étendra. Des comptes CurseForge compromis ont été utilisé pour gagner l'accès à des projets de mods connus et distribuer des JARs infectés aux utilisateurs.

Des discussions et réponses à ce problème ont commencé tôt le 6 juin. Des échantillons ont été découverts, identifiés et décompilés. La source des "payloads" qui propagent le virus et volent les mots de passe/jetons a été identifié et rapidement supprimé par son hôte, Serverion. Les JARs infectés ne peuvent plus progresser ou propager le virus, mais les infections avant que le nœud soit supprimé peuvent toujours être actives.

Au moment de l'écriture, des échantillons continuent d'être décompilé dans l'espoir que si les attaquants tentent de créer une nouvelle itération du virus, ses nœuds de commandes et contrôles puissent être supprimé aussi rapidement que possible. Le 7 juin, l'attaquant a tenté de créer un nouveau nœud, qui a été rapidement supprimé par son hôte. Une URL web pointant vers ce nœud maintenant défunt a été trouvé, et est activement surveillé.

Ordre du jour

Nous avons environ une heure, donc nous allons passer 15 minutes sur chaque sujet maximum. J'ai organisé les sujets selon la probabilité qu'une action soit réalisable d'après moi (williewillus). Plus quelque chose est réalisable, plus il est bas. Si le temps nous contraint, nous pourrons abandonner ces sujets.

Système de Vérification Opaque / Sécurité par l'Ignorance

Sujets et Actions à aborder

  • Que fait CurseForge/Modrinth quand il vérifie un mod ?
    • Insérer le meme "what do you do here" :)
  • Quelles vérifications automatiques sont effectuées ?
    • ?
  • Quelles vérifications automatiques devraient être effectuées ?
    • Analyse statique ?
    • Pouvons-nous demander aux répertoires de mods de respecter ces plans d'action ?
  • À moitié hors contexte : Peut-on avoir un algorithme de hachage autre que MD5 sur CF, s'il vous plait ? Cela fait plusieurs années que MD5 est cassé, ne rien faire nous fait juste attendre pour une attaque par collision
    • Qu'est-ce qu'utilise Modrinth ?

Résumé :
Note de traduction : dû à la traduction, les mots peuvent ne pas être une traduction exacte des pensées de la personne, nous avons fait de notre mieux

Fury : CEO d'Overwolf. Eng travaille sur les mesures d'atténuations, donc je suis là. Concernant les contrôles, d'un point de vue élevé, nous ne pouvons pas être entièrement transparent car des personnes pourraient trouver des moyens de les éviter. Je comprends que l’ambiguïté est difficile, je vais partager le maximum possible. Tous les mods sont vérifiés automatiquement. Des vérifications manuelles sont effectués sur certains. Techniquement, on commence par exécuter des analyses antivirus/antimalware. On vérifie la structure du fichier. L'API supporte actuellement SHA-1. Plus d'améliorations côté client pour mettre en œuvre ce principe d'une manière positive. Des vérifications manuelles sont effectués quand une vérification automatique trouve quelque chose, un humain vérifie le mod. Le processus évolue continuellement, les tests automatiques ont été mis à jour pour vérifier cette vulnérabilité.

Emi : Passons à Modrinth pour garder tout cela rapide

Geo/Jay : Créateur de Modrinth. Notre modération est assez fiable. Nouveau projet : Vérification manuelle. Vérification de la description, des images. Vérification du code source aussi, surtout pour les nouveaux auteurs/auteurs inconnus. Dans le cas d'un mod dont le code source n'est pas public, on décompile occasionnellement les mods, mais très peu souvent. Vérification en backend pour la structure du fichier. Les virus dans des mods Minecraft ne sont quasiment jamais détectés par les antivirus. Nous savons que ce processus n'est pas parfait. Après la vérification initiale, nous comptons sur les rapports pour les mises à jour. S'appuie sur la confiance de la communauté (auteur connu), mais cette confiance est aussi imparfaite.

Emi : Quand vous vérifiez les mods ayant leur code source public, vérifiez-vous que les sources correspondent au fichier ?

Geo : Non, mais nous pourrions faire quelque chose où les utilisateurs fournissent leur code source pour un badge "vérifié", comme ce que fait npm depuis peu. Ce n'est peut-être pas le plus idéal.

Emi : Quel hash est utilisé par Modrinth ?

Geo : Nous utilisons SHA-1/SHA-512, disponible dans l'API. Le launcher que nous faisons les valide. Nous avons rehashé tous les fichiers en SHA-512 il y a un an.

Compilations reproduisibles

Une chose qui pourrait aider dans la partie "scan pour mods modifiés" de la réponse, serait si nous savions si une version spécifique d'un mod ne peut avoir qu'un seul fichier compilé possible. Il s'agit de compilation reproduisible avec le code source. Nous pourrions simplement recompiler le mod en question depuis les sources, prendre son hash, et le comparer au fichier suspicieux pour détecter les infections de l'Étape 0, plutôt que de devoir faire l'exercice difficile qu'est scanner pour une signature dans le code.

Combien de mods ont des plugins dans leurs scripts de compilations avec des dépendances en -SNAPSHOT ?

Je suis prêt à parier que tous, car les examples de Fabric et Forge font exactement ça.

Dans un premier lien, les plugins Gradle tel que Loom et ForgeGradle faisaient ça pour pouvoir publier des fixs et les appliquer rapidement sans action de l'utilisateur, mais il devient important que nous puissions avoir un contrôle certain.

Les attaques de la chaîne via des répertoires Mavens hackés est un vrai danger.

Sujets et Actions à aborder

  • Ne plus utiliser -SNAPSHOT dans les examples et les documentations en faveur de versions fixes
  • Mettre à jour le fabric-example-mod et l'exemple du MDK de Forge pour utiliser la vérification et/ou le bloquage du hachage de Gradle
  • Mettre en place un groupe de travail dans Loom/FG pour étudier les compilations reproductibles lorsque le flag gradle est activé. Il peut y avoir du nondéterminisme introduit par des parties de la chaîne d'outils de modding comme les remappeurs de jar. Chaque cas doit être résolu de manière à ce qu'un mod se construise de manière reproductible dès sa sortie.
  • Idée folle : Comme F-Droid, soumettre les sources et les faire compiler par le repo ?
    • La capacité étant coûteuse, il est peu probable que cela se produise.

Starchild: Pour Quilt, l'un des problèmes est la signature. Nous ne pouvons pas reproduire une signature.

willie: Mais si la signature est distribuée séparément, tout devrait bien se passer ?

Geo: Nous ne pouvons jamais être sûrs à 100 %. Nous pouvons passer beaucoup de temps à examiner chaque fichier. Une chose importante est l'accessibilité. Beaucoup de gens ne savent pas comment fonctionne Gradle et ce que sont les compilations reproductibles. Il existe des modèles de modélisation, mais même la signature de code est difficile pour les développeurs mobiles. Nous recevons des milliers de soumissions par jour.

Fury: Nous suggérons aux auteurs qui choisissent de se soumettre à des vérifications supplémentaires d'apposer une étiquette sur leur mod pour que les joueurs puissent le voir afin d'accroître la confiance.

Mods téléchargeants des fichiers externes

Les mods téléchargeants des fichiers externes contenant du code executable sont vulnérables a des attaques par chaîne d'approvisionnement.

Quelques exemples de mods utilisant cette méthode.

  • Essential
    • Les mods se mettant a jours automatiquement sans en informer l'utilisateur. Si les serveurs d'update d'Essential sont compromis, le code malveillant serait téléchargé au lancement du jeux.
  • Les dépendeances de mods pour owolib, tels que gadget
    • Vas demander a l'utilisateur de télécharger owo-lib, cela téléchargera le fichier jar de modrinth. Si un fichier malveillant est ajouté a modrinth avec la bonne version, on se retrouve a nouveau face a une attaque par chaîne d'aprovisionnement.

Si un mod populaire, tel qu'Essential, venais a être compromis, cela permetrait a des malwares de se propager rapidement a des millions d'utilisateurs.

Sujets a aborder

  • Les mods sur les plateformes (modrinth, curseforge, etc.) peuvent-ils télécharger des fichiers contenant du code executable provenant de sources externes ?
    • Je pense que non, mais comment l'empêcher? Lancer le jeux avec le mod et vérifier s'il ne télécharge rien de nouveau dans le dossier mods ?

Fury: Effectuer une vérification manuelle quand on apercoit ce pattern.

Willie: Mais il est possible d'ajouter du code malicieux plus tard.

Fury: Regarder la réputation de l'auteur et quelques autres atributs de sécuritée.

Starchild: Pas vraiment pour le bannisement de téléchargement de fichiers depuis l'internet. Quelques cas ou l'utilisation serait légitime. On pourais indiquer sur la plateforme que le mod télécharge des fichiers externes. On peut avoir des politiques d'utilisations tel que 'doit forcément passer par du https', etc.

Willie: Clarification: Je parlais de téléchrager du code, et non pas des données.

Lambda: TODO(j'ai manqué la première partie) Quilt a une proposition pour les téléchargements de dépendances. Plus généralement seulement permettre des téléchargements pré-déclarés (ex : avec un hash). Bien que nous permetions a des mods de le faire, cela restera toutefois suspicieux.

Signature du code

Les artéfactes binaires déposés sur les répertoires de mods devraient être signés par leur auteur.

Des templates et des documents d'aide par exemple Fabrix Loom et ForgeGradle devraient rendre leurs experience utilisateur aussi facile que possible.

  • Créer les releases en CI
  • Signer les fichiers jars en CI au moment du build
  • Télécharger les jars signés sur les repos en CI

Déplacer les releases en CI est déja plus que ce que font la plupart des modeurs (la plupart ne tag même pas leurs releases). Gardez en tête que la plupart des modeurs sont des programeurs amateurs n'ayant pas travaillé en industrie et ne connaisant rien a tout cela.

Je ne peut pas a quel point il est important que tout soit bien documenté, facile, et prêt a l'emploit. Ou bien personne ne l'utilisera.

Les répertoires devraient éventuellement néscésiter une signature pour chaque upload et rejeter chaque artéfacte non signé. Cela aura besoin d'une période d'adaptement, et requiert un matériel pédagogique de qualité.

Sujets a aborder

  • Où les clés publiques doivent-elles être conservées et associées à leurs auteurs ? En d'autres termes, qu'est-ce qui empêche un hacker de remplacer une clé publique et le binaire signé en même temps ?
    • Sur le compte d'utilisateur modrinth (derière une autentification a 2 facteurs)?
      • Sans un compte d'organisation, cela pourait être génant dans le cas de mods déposés par plusieurs personnes ?
      • Si modrinth est compromis, un hacker peut remplacer la clé publique et en umploader une nouvelle en même temps
  • Signatures PGP ou le jarsigner de java ?
    • PGP est le standard utilisé pour Maven Central. Mes impressions sont que personne n'utilise les choses spécifiques a java. La signature OpenSSH est aussi une option mais c'est plus récent et il n'y a pas d'écosystème établit. PGP est probablement le meilleur choix, malheureusement. Nous pouvont automatiser toutes les parties désastreuses du processus avec des helpers dans les plugins Gradle.
  • Forge a un support pour les signatures depuis des années et il n'a pas été utilisé. Que pouvons-nous en apprendre ?
  • Les lanceurs devraient probablement inclure des éléments d'interface utilisateur pour indiquer l'état de la vérification de la signature du mod.
  • Suivit immédiat.
    • Modrinth et CurseForge conçoivent le fonctionnement de l'association/stockage des clés publiques.
    • les modloaders écrivent une documentation complète sur la facon de procéder :
      1. Créer des versions en CI en utilisant les tags git
      2. Signer et télécharger automatiquement des artéfacts a partir de CI

Emi: Cela ne néscésite pas un procéssus complet

Starchild : Que voulons nous prévenir, et ou ? Les répertoires des mods peuvent associer une clé avec l'utilisateur et la demander lors du dépot de fichiers, mais une vérification peut toujours se produire dans le modloader.

Jasmine: J'ai récement déposé des fichiers sur Maven Central qui demande une signature du code. Le processus n'était pas particierement difficile grace aux buildscripts, la partie la plus compliquée a été de trouver la documentation.

Emi: Un participant sans micro demande: Pourquoi signer le code ? La raison principale est surtout pour identifier.

cpw: J'ai codé pour Forge, cela fait environ 10 ans. Il aurait pu détécter l'étape 0 et probablement l'étape 3 si la signature n'était pas dépouillée. probablement l'étape 3 si la signature n'avait pas été supprimée. Nous voulions que les gens le fassent. La plupart des gens de Forge utilisent les empreintes digitales, qui aparaissent dans les journeaux de débogage, etc. pour distribuer la confiance. Un moddeur peut dire que son propre jar est bon, mais pas l'utilisateur. Cela nécessite une autorité de confiance dans l'écosystème minecraft. La mise en place d'un tel système est complexe. Le seul acteur viable est Curseforge et modrinth, puisqu'ils suivent déja les choses que vous avez besoin de suivre. A propos de la signeature sur les répos, le faire coté client ? Il est trop tard pour faire cela. Si l'entièretée de l'écosystème etait signée, nous pourions revoir la question.

Emi: Est-il possible d'avoir un CA controlé en colaboration? Ajouter 2 étapes semble un peut trop.

cpw: Tu peut signer avec plusieurs CA a la fois, ce n'est donc pas nécessaire.

furr: Nous pouvons regarder pour faire quelque chose

cpw: Si vous vous engagez a faire cela, c'est génial :)

Geo: IMO serait le meilleur su un tiers de confiance le fait. Différentes plateformes ont différentes politiques. Modrinth est intéréssé par ceci aussi mais il faut etre cautioneux.

Emi: Serait tu près a travailler avec CurseForge pour déveloper un CA tiers ?

Geo: Oui. Tout le monde devrait mettre leurs différent de coté s'il en est de la sécuritée, bien que Modrinth n'ai pas été afecté, il l'est indirectement depuis.

cpw: Ca serait cool de voir les coses bouger après 10 ans

Bac a sable

L'isolation du processus de minecraft est une autre stratégie de défense pouvant etre utilisée affin de limiter le rayon d'effet d'ataques provenant de code malicieux.

En général, c'est un problème compliqué.

Minecraft ne devrait avoir accès qu'a(u) :

  • Internet, pour s'autentifier, se conectr aux serveurs, etc.
  • Dossier .minecraft et ce qui se trouve a l'interieur.

La chose principale a bloquer est l'accès aux fichiers système.

Sous Windows, il n'y a pas l'air d'avoir de moyens faciles de déployer un système d'isolation (autre que "Jouer a minecraft Bedrock"). Le plus proche serait model de chromium, qui pourait réduire les modifications intrusives du jeux.

Sur macOS, on pourait utiliser le système d'isolation built in d'Apple connu sous le nom de "seatblet". c'est déja obligateoire sur l'apple store, mais pas pour les aplications externes comme Minecraft. Cependant il n'est pas possiblie de l'utiliser affin de restreindre l'accès en réseau de certains sites. Ci dessous se trouve une image montrant les configuration des permitions pouvant être utilisées pour restreindre les accès. CEla pourait s'avérer etre assez pour limiter les malwares et des ataques. image

Sur linux, nous avons plusieurs options. la première étant SELinux/AppArmor. Ces frameworks ont la réputation d'être extrêmement difficiles a configurer et par conséquent, n'a pas été largement déployé. Cependant, les politiques que nous recherchons sont plutot simples, il est donc probable que nous nous tournions ver ceci plus tard.

Dans le jargon d' OpenBSD, tout ce que l'on veut est d' unveil(2) a tout les chemins de l'instance a la racine, malheureusement cette interface n'est pas disponible sous Linux.

Deuxième option, l'utilisation d'un système tel que Flatpak.

timoro: Le fait d'executer du code non vérifié est toujours dangereux, qu'importe l'isolement utilisé. L'isolement est toujours le dernier recour. Nous avons un Flatpack de Prism(launcher) qui est isolé et privé de beaucoup d'accès. Ca a empécher cette ataque spécifique. CMais ça peut etre difficile, ex. vous pouvez penser a restreindre l'accès au micro, mais, et si un mod rajoutant un chat vocal en a besoin ? On a besoin de restreindre l'accès mais de donner de la libertée aux modeurs. Linux a beaucoup de techniques, permetant de restreindre aproximativement tout et nimporte quoi.

ZekeZ: Le principal problème est Windows et macOS, surtout Windows.

Emi: Beaucoup de mods pouraient etre impactés, restreindre l'accès a des fichiers système peut poser problème pour des mods demandant une configuration globale indépendament de l'instance.

ZekeZ: Quel etait le problème avec EMI ?

Emi: Il existe une option utilisateur permettant de stocker des éléments dans ~/.minecraft au lieu de celui local à l'instance.


Récapitulatif

kennytv: Bonjour de la part de Paper. Nous avons notre propre repo pour les plugins. par contre nous serions intéressés par un scanner pour identifier les logiciels malveillants actuels. Il y en a beaucoup ces temps ci. Concernant la signature, Sponge l'avait également pendant un certain temps. Ils ont essentiellement abandonné cette fonctionnalité car les utilisateurs ne savaient pas comment l'utiliser. Il est très difficile de faire comprendre aux novices son fonctionnement

Lambda: Nous aimerions voir du mod hosting pour ajouter plus d'A2F Ou seulement permettre aux API/CI de déposer des fichiers. ca peut être un peut contraignant mais ça permetrait d'eviter de se faire f=voler ses tokens. Actuelement, neous ne savont pas si Modrinth a une A2F. CurseForge en a mais seulement pour les payements. Nous voudriont voir ceci s'étendre plus loins.

Geo: Nous travaillions sur un système d'A2F avant que tout cela ne commence. Cela permettra également l'utilisation de jetons ciblés (ex: des bulds non signés uniquement a partir du jeton, des builds signés uniquement a partir de ce jeuton). l'A2F présente une faille, a savoir que le token de session est toujours vulnérable. Nous prévoyons de lancer de nouvelles fonctionalités d'autentification dans quelques semaines.

Emi: Pour rappel, les contributeurs de LPS (Luna Pixel Studios) avaient l'A2F d'activé.

willie: J4apuie les points sur les builds, les signatures, les realeases En CI

Geo: Une chose que les plateformes font est une checkliste générale lorsque un projet est upload pour la première fois. Sur Modrinth nous avons un guide pour litéralement tout. Quand nous avons ajouté des descriptions et des icones aux nouvelles checklists, la quantitée dde checklist a fait un bond.

Emi: Publication CI récemment mise en place. J'ai simplement copié un autre fichier de flux de travail Github. Ce n'est pas maintenable.

Lambda: Nous devont héberger le Maven BlammeJared avec de nombreux projets. Il faut encourager les gens a utiliser l'intégration continue autant que possible. Le kit de dévelopement par défaut ne publie que l'artéfact, pas de source. Nous avons besoin de plus d'exemples et de guides pour configurer Jenkins etc.

willie: les actions GH sont plus faciles pour les débutants non ?

Jared: Je ne suis pas familier avec les actions GH en ce moment. Tout les fichiers sur mon maven sont compilés locallement, je ne sais pas comment du remote publishing marcherais.

Emi: POur beaucoup de mods, Maven n'est pas strictement néscésaire. Il est possible d'utiliser CurseMaven ou le maven de Modrinth. C'est pratique pour les mods qui ne s'exposent pas intentionelement en tant qu'API.

willie: La plupart des mods sont des mods 'feuille' qui n'ont pas besoin de Maven

Jared: CurseMaven n'est pas une option sur le long terme. Personne ne l'a remarqué mais CurseGradle a été retiré de Github. sa source a disparue. Personne ne l'a vu ou n'en a parlé.

willie: c'est un résumé des actions à entreprendre globalement.

Furry: Merci a tous. Overwolf s'est dévelopé avec les années. Certains d'entre vous nous ont contactés et nous ont donné des informations importantes. Si vous avez d'autres informations, n'hésitez pas a nous contacter, cela aiderais beaucoup.