
der transparente Ransomware-Anspruchs-Tracker 🥷🏼🧅🖥️
ransomwatch verfolgt die Erpressungsseiten von Ransomware-Gruppen und stellt einen aggregierten Feed der Behauptungen bereit
Bitte verwende die Issue-Vorlage, wenn du neue Gruppen einreichst
Der Inhalt innerhalb von ransomwatch.telemetry.ltd, posts.json, groups.json sowie der Verzeichnisse docs/ und source/ wird dynamisch basierend auf den Hosting-Entscheidungen realer Bedrohungsakteure nahezu in Echtzeit generiert.
Obwohl Bereinigungsmaßnahmen ergriffen wurden, erkennst du durch das Ansehen oder den Zugriff auf ransomwatch an, dass du dies auf eigenes Risiko tust
web:// ransomwatch.telemetry.ltd
json:// ransomwhat.telemetry.ltd/posts
json:// ransomwhat.telemetry.ltd/groups
groups.json enthält Hosts, Nodes, Relays und Mirrors für eine überwachte Gruppe oder einen Akteurposts.json enthält extrahierte Beiträge, gekennzeichnet durch ihren Entdeckungszeitpunkt und die verantwortliche GruppeDies ist ein Live-Repository, das eine Kombination aus GitHub Actions und einem Service-Container nutzt. Es besucht, parst und berichtet nahezu in Echtzeit über überwachte Hosts – vollständig in sich geschlossen
Das Abrufen von Inhalten erfolgt mit psf/requests – falls Rendering erforderlich ist, werden mozilla/geckodriver und seleniumhq/selenium verwendet.
Das Frontend wird letztendlich mit Markdown generiert, unter Verwendung von markdown.py und mit docsifyjs/docsify bereitgestellt, dank pages.github.com
Grafiken oder Visualisierungen werden mit plotting.py mithilfe von matplotlib/matplotlib erstellt
Die Beitragsindizierung erfolgt mit einer Mischung aus grep, awk und sed innerhalb von parsers.py – es ist fragil und hat, wie jedes ̴̭́H̶̤̓T̸̙̅M̶͇̾L̷͑ͅ ̴̙̏p̸̡͆a̷̛̦r̵̬̿s̴̙͛ĩ̴̺n̸̔͜g̸̘̈, eine begrenzte Lebensdauer.
Gerendertes HTML für jede Seite ist im Verzeichnis source einsehbar
Eine abgeflachte Version von groups.json, bei der jeder Host ein eigenes Objekt ist, findest du unter assets/groups-kv.json. Die Struktur ist ein Array von Objekten, die jeweils eine eigene Entität/Gruppe darstellen, wobei jedes alle Eigenschaften (wie name, captcha, parser usw.) auf derselben Ebene enthält, einschließlich möglicher Wiederholungen bei Elementen wie profile und meta. Einige Datenanalysetools arbeiten mit dieser Struktur einfacher und benötigen weniger Transponierung.
Das Abrufen von Hidden Services erfordert einen Tor-Kreis! Richte einen ein mit;
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 / ************ \
-------------------- --------------------
Neu indizierte Beiträge können an Discord gesendet werden, indem beim Ausführen von parse eine DISCORD_WEBHOOK-Variable bereitgestellt wird.
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"
}lockbit3 ausgebencurl -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 ist lizenziert unter unlicense.org