
le suivi transparent des revendications de ransomware 🥷🏼🧅🖥️
ransomwatch suit les sites d'extorsion utilisés par les groupes de ransomware et présente un flux agrégé de leurs revendications
veuillez utiliser le modèle de ticket lors de la soumission de nouveaux groupes
le contenu de ransomwatch.telemetry.ltd, posts.json, groups.json ainsi que des répertoires docs/ et source/ est généré dynamiquement en fonction des choix d'hébergement d'acteurs de menaces réels, en quasi-temps réel.
bien que des efforts de nettoyage aient été déployés, en consultant ou en accédant à ransomwatch, vous reconnaissez le faire à vos propres risques
web:// ransomwatch.telemetry.ltd
json:// ransomwhat.telemetry.ltd/posts
json:// ransomwhat.telemetry.ltd/groups
groups.json contient les hôtes, nœuds, relais et miroirs d'un groupe ou acteur suiviposts.json contient les publications extraites, notées par leur heure de découverte et le groupe responsableil s'agit d'un dépôt vivant qui utilise une combinaison d'actions GitHub et d'un conteneur de service. il visite, analyse et rapporte sur les hôtes surveillés en quasi-temps réel, de manière autonome
la récupération du contenu est effectuée avec psf/requests - si un rendu est nécessaire, mozilla/geckodriver et seleniumhq/selenium sont utilisés.
Le frontend est finalement généré en markdown, à l'aide de markdown.py et servi avec docsifyjs/docsify grâce à pages.github.com
les graphiques ou visualisations sont générés avec plotting.py à l'aide de matplotlib/matplotlib
l'indexation des publications est effectuée avec un mélange de grep, awk et sed dans parsers.py - c'est fragile et comme tout ̴̭́H̶̤̓T̸̙̅M̶͇̾L̷͑ͅ ̴̙̏p̸̡͆a̷̛̦r̵̬̿s̴̙͛ĩ̴̺n̸̔͜g̸̘̈, a une durée de vie limitée.
le HTML rendu pour chaque page est consultable dans le répertoire source
une version aplatie de groups.json avec chaque hôte comme objet distinct se trouve dans assets/groups-kv.json. la structure est un tableau d'objets, chacun représentant une entité/groupe distinct, chacun contenant toutes les propriétés (comme name, captcha, parser, etc.) au même niveau, y compris les répétitions potentielles sur des éléments tels que profile et meta. certains outils d'analyse de données fonctionnent plus facilement avec cette structure, nécessitant moins de transposition.
la récupération des services cachés nécessite un circuit tor ! établissez-en un avec ;
docker run -p9050:9050 ghcr.io/joshhighet/torsocc:latest
usage: ransomwatch.py [-h] [--name NAME] [--location LOCATION] {add,scrape,parse,markdown}
positional arguments:
{add,scrape,parse,markdown}
opération à exécuter
optional arguments:
-h, --help afficher ce message d'aide et quitter
--name NAME nom du fournisseur
--location LOCATION emplacement web cible (URI complète)
_______________ |*\_/*|________
| ___________ | ||_/-\_|______ |
| | | | | | | |
| | 0 0 | | | | 0 0 | |
| | - | | | | - | |
| | \___/ | | | | \___/ | |
| |___ ___| | | |___________| |
|_____|\_/|_____| |_______________|
_|__|/ \|_|_.............💔.............._|________|_
/ ********** \ / ********** \
/ ************ \ 👀 🦅 ransomwatch / ************ \
-------------------- --------------------
les publications nouvellement indexées peuvent être envoyées sur discord en fournissant une variable DISCORD_WEBHOOK lors de l'exécution de parse.
DISCORD_WEBHOOK=https://discord.com/api/webhooks/xxxxx/xxx ./ransomwatch.py parse
erDiagram
groups_json ||--|{ group : contains
group {
string name "nom du groupe"
boolean captcha "statut du captcha"
boolean parser "statut de l'analyseur"
boolean javascript_render "statut javascript"
string meta "texte libre"
string url "articles et références notables"
}
group ||--|{ locations : has
locations {
string fqdn "nom de domaine pleinement qualifié"
string title "titre de la page"
int version "version du service caché"
string slug "URI complète"
boolean available "statut de disponibilité"
datetime updated "horodatage de la dernière mise à jour"
datetime lastscrape "horodatage du dernier scraping"
boolean enabled "statut"
}
group ||--|{ post : references
post {
string post_title "titre de la publication"
string group_name "nom du groupe associé"
datetime discovered "horodatage de la découverte"
}lockbit3curl -sL ransomwhat.telemetry.ltd/posts \
| jq -r '.[] | select(.group_name == "lockbit3") | .post_title' \
| tail -n 10
curl -sL ransomwhat.telemetry.ltd/groups \
| jq -r '.[] | .locations[] | select(.available == true) | .slug'
curl -sL ransomwhat.telemetry.ltd/groups \
| jq -r '.[] | select(.name == "lockbit3")'
curl -sL ransomwhat.telemetry.ltd/posts \
| jq -r '.[] | [.group_name, .post_title] | @tsv' \
| sed 's/ /_/g' | column -t | tail -n 20
ransomwatch est licencié sous unlicense.org