
il tracker trasparente delle rivendicazioni ransomware 🥷🏼🧅🖥️
ransomwatch monitora i siti di estorsione utilizzati dai gruppi ransomware e pubblica un feed aggregato delle rivendicazioni
si prega di utilizzare il modello di issue quando si segnalano nuovi gruppi
i contenuti all'interno di ransomwatch.telemetry.ltd, posts.json, groups.json insieme alle directory docs/ e source/ sono generati dinamicamente in base alle scelte di hosting di attori di minaccia reali, in tempo quasi reale.
nonostante gli sforzi di sanificazione, visualizzando o accedendo a ransomwatch riconosci di farlo a tuo rischio e pericolo
web:// ransomwatch.telemetry.ltd
json:// ransomwhat.telemetry.ltd/posts
json:// ransomwhat.telemetry.ltd/groups
groups.json contiene host, nodi, relay e mirror per un gruppo o attore monitoratoposts.json contiene i post estratti, annotati con il momento della loro scoperta e il gruppo responsabilequesto è un repository live che utilizza una combinazione di GitHub actions e un service container. visita, analizza e segnala gli host monitorati in tempo quasi reale in modo autonomo
il recupero dei contenuti è effettuato con psf/requests - se è necessario il rendering, vengono utilizzati mozilla/geckodriver e seleniumhq/selenium.
Il frontend è infine generato con markdown, utilizzando markdown.py e servito con docsifyjs/docsify grazie a pages.github.com
i grafici o le visualizzazioni sono generati con plotting.py con l'aiuto di matplotlib/matplotlib
l'indicizzazione dei post è effettuata con una combinazione di grep, awk e sed all'interno di parsers.py - è fragile e come qualsiasi parsing di H̶̤̓T̸̙̅M̶͇̾L̷͑ͅ ̴̙̏p̸̡͆a̷̛̦r̵̬̿s̴̙͛ĩ̴̺n̸̔͜g̸̘̈, ha una durata limitata.
l'HTML renderizzato per ogni pagina è visualizzabile nella directory source
una versione appiattita di groups.json con ogni host come oggetto separato si trova in assets/groups-kv.json. la struttura è un array di oggetti, ciascuno rappresentante un'entità/gruppo distinto, con tutte le proprietà (come name, captcha, parser, ecc.) allo stesso livello, inclusa la possibile ripetizione di elementi come profile e meta. alcuni strumenti di analisi dei dati funzionano più facilmente con questa struttura, richiedendo meno trasposizioni.
il recupero dei servizi nascosti richiede un circuito tor! stabiliscine uno con;
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}
operation to execute
optional arguments:
-h, --help show this help message and exit
--name NAME provider name
--location LOCATION target web location (full URI)
_______________ |*\_/*|________
| ___________ | ||_/-\_|______ |
| | | | | | | |
| | 0 0 | | | | 0 0 | |
| | - | | | | - | |
| | \___/ | | | | \___/ | |
| |___ ___| | | |___________| |
|_____|\_/|_____| |_______________|
_|__|/ \|_|_.............💔.............._|________|_
/ ********** \ / ********** \
/ ************ \ 👀 🦅 ransomwatch / ************ \
-------------------- --------------------
i post appena indicizzati possono essere inviati a discord fornendo una variabile DISCORD_WEBHOOK quando si esegue parse.
DISCORD_WEBHOOK=https://discord.com/api/webhooks/xxxxx/xxx ./ransomwatch.py parse
erDiagram
groups_json ||--|{ group : contains
group {
string name "group name"
boolean captcha "captcha status"
boolean parser "parser status"
boolean javascript_render "javascript status"
string meta "freeform text"
string url "notable articles and references"
}
group ||--|{ locations : has
locations {
string fqdn "fully qualified domain name"
string title "page title"
int version "hidden service version"
string slug "full URI"
boolean available "availability status"
datetime updated "timestamp of last update"
datetime lastscrape "timestamp of last scrape"
boolean enabled "status"
}
group ||--|{ post : references
post {
string post_title "post title"
string group_name "associated group name"
datetime discovered "timestamp of discovery"
}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 è licenziato sotto unlicense.org