Dans un autre post, j’ai parlé de la THCon 2024 CTF pour laquelle nous avons créé un réseau social à grande échelle pour le défi OSINT.
Après un peu de “nettoyage de code” (une manière classe de ne pas dire “procrastination”), j’ai rendu cet outil public sur le repo suivant :
A tool to fill a mastodon instance with messages in the past
À quoi cela sert-il ? #
- Si vous avez besoin d’alimenter un faux réseau social avec beaucoup d’interactions entre les membres, il y a donc pas mal de bruit pour rendre un CTF OSINT plus difficile et plus réaliste (personnellement, je déteste quand un CTF OSINT vous sert des comptes qui ne publient QUE des choses que vous devez utiliser pour le défi, en plus c’est très irréaliste)
- Un avantage certain étant la possibilité de poster des messages dans le passé (dans notre exemple plus de 6 mois dans le passé) pour que l’histoire soit crédible. Pour notre projet, vous n’infiltrez pas les agences spatiales, ne piratez pas tous les satellites et ne construisez pas une mallette futuriste en un mois, mais nous avons commencé à travailler sur ce défi environ deux mois avant la THCon et le temps que toutes les intrigues soient prêtes, il aurait été trop tard pour poster.
- Vous voulez simuler l’envoi de messages dans le passé sur votre instance (aucune idée de la raison pour laquelle vous feriez ça, mais bon, c’est votre instance 🤷)
Comment qu’ça marche ? #
Mastodon utilise une base de données pour stocker les posts, et tapper directement dedans était beaucoup trop pénible, mais lorsque l’on utilise l’API (qui est bien sûr beaucoup plus facile et agréable) l’instance fixait la date du post toute seule.
Ainsi, le choix a été fait de tirer parti des deux. J’ai utilisé l’API pour créer des messages avec le bon ordre, les réponses, les pièces jointes, etc. et stocker les ID avec les horodatages qu’ils devraient avoir. Ces paires identifiant/horodatage pouvaient alors être utilisées pour parcourir toute la base de données et falsifier les horodatages, ce qui nous permettait de “poster” des messages 6 mois plus tôt.
Le repo contient toujours les discussions des hackers flat-earther du challenge d’OSINT de la THCon, laissées à titre d’exemple.
Utilisation #
Traiter les messages avec convert.py
#
Cet utilitaire prend en entrée un fichier au même format que messages.csv
:
Message | Username | Date | image1 | image2 | image3 | image4 |
---|---|---|---|---|---|---|
… | … | … | … | … | … | … |
Et recrache un fichier json
contenant les valeurs prêtes à être ingérées par le Bot. Vous ne devriez pas avoir à changer quoi que ce soit ici.
Notez que l’
imageX
peut être n’importe quelle pièce jointe acceptée par mastodon (ex : fichiers musicaux).
Un bloc de messages en lignes consécutives est un fil de discussion dans lequel les personnes se répondent les unes aux autres. Notez que cet outil ne gère pas les “conversations en d’arbre” (c’est-à-dire qu’Alice poste un message, Bob répond, puis Charlie répond à Alice, créant ainsi deux branches qui pourraient chacune être poursuivies).
Le premier message doit être daté, tandis que les dates des messages suivants peuvent être forcées (en fixant la valeur, comme on peut le voir dans l’exemple) ou déduites avec un délai aléatoire à partir de la date du message précédent (comme dans une conversation humaine normale).
Poster les messages avec bot.js
#
Exécuter le fichier bot.js en utilisant Node.js. Il faut pour cela que
- Les dépendances Node.js soient installées
- Le fichier
accounts.json
soit rempli avec tous les tokens d’accès aux comptes
Une fois que le bot a terminé (ce qui peut prendre un certain temps si beaucoup de messages doivent être envoyés), il produit un fichier (output.json
) contenant une liste de paires (ID/horodatage). Les messages ont été postés, mais les dates sont toutes à just now
.
Mettre à jour les dates dans la base de données en utilisant le fichier susdit (output.json
) et en exécutant les scripts mentionnés dans le mastodon.md
Des informations plus détaillées sur l’utilisation de l’outil et la mise en place d’une instance de mastodon sont disponibles dans la documentation sur le repo :
A tool to fill a mastodon instance with messages in the past