
прозрачный трекер заявлений о вымогательском ПО 🥷🏼🧅🖥️
ransomwatch отслеживает сайты вымогателей, используемые группами программ-вымогателей, и публикует агрегированную ленту заявлений
пожалуйста, используйте шаблон issue при добавлении новых групп
содержимое ransomwatch.telemetry.ltd, posts.json, groups.json, а также каталогов docs/ и source/ динамически генерируется на основе хостинг-решений реальных угроз в режиме, близком к реальному времени.
несмотря на принятые меры по очистке, просматривая или получая доступ к ransomwatch, вы подтверждаете, что делаете это на свой страх и риск
web:// ransomwatch.telemetry.ltd
json:// ransomwhat.telemetry.ltd/posts
json:// ransomwhat.telemetry.ltd/groups
groups.json содержит хосты, узлы, ретрансляторы и зеркала для отслеживаемой группы или субъектаposts.json содержит извлечённые посты с указанием времени их обнаружения и ответственной группыэто живой репозиторий, использующий комбинацию GitHub actions и сервисного контейнера. он посещает, анализирует и сообщает о контролируемых хостах в режиме, близком к реальному времени, полностью автономно
загрузка контента выполняется с помощью psf/requests — если требуется рендеринг, используются mozilla/geckodriver и seleniumhq/selenium.
Фронтенд в конечном итоге генерируется с помощью markdown, используя markdown.py, и обслуживается с помощью docsifyjs/docsify благодаря pages.github.com
графики и визуализации генерируются с помощью plotting.py при поддержке matplotlib/matplotlib
индексация постов выполняется с помощью комбинации grep, awk и sed в parsers.py — это хрупко и, как и любой ̴̭́H̶̤̓T̸̙̅M̶͇̾L̷͑ͅ ̴̙̏p̸̡͆a̷̛̦r̵̬̿s̴̙͛ĩ̴̺n̸̔͜g̸̘̈, имеет ограниченный срок жизни.
отрендеренный HTML для каждой страницы доступен в каталоге source
уплощённая версия groups.json, где каждый хост представлен отдельным объектом, доступна по адресу assets/groups-kv.json. структура представляет собой массив объектов, каждый из которых соответствует отдельной сущности/группе, при этом все свойства (такие как name, captcha, parser и т.д.) находятся на одном уровне, включая возможные повторения таких элементов, как profile и meta. некоторые инструменты анализа данных работают с такой структурой проще, требуя меньше транспонирования.
для получения скрытых сервисов требуется цепь tor! установите её с помощью;
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}
операция для выполнения
optional arguments:
-h, --help показать это справочное сообщение и выйти
--name NAME имя провайдера
--location LOCATION целевое веб-расположение (полный URI)
_______________ |*\_/*|________
| ___________ | ||_/-\_|______ |
| | | | | | | |
| | 0 0 | | | | 0 0 | |
| | - | | | | - | |
| | \___/ | | | | \___/ | |
| |___ ___| | | |___________| |
|_____|\_/|_____| |_______________|
_|__|/ \|_|_.............💔.............._|________|_
/ ********** \ / ********** \
/ ************ \ 👀 🦅 ransomwatch / ************ \
-------------------- --------------------
недавно проиндексированные посты можно отправлять в discord, указав переменную DISCORD_WEBHOOK при запуске parse.
DISCORD_WEBHOOK=https://discord.com/api/webhooks/xxxxx/xxx ./ransomwatch.py parse
erDiagram
groups_json ||--|{ group : contains
group {
string name "имя группы"
boolean captcha "статус captcha"
boolean parser "статус парсера"
boolean javascript_render "статус javascript"
string meta "произвольный текст"
string url "примечательные статьи и ссылки"
}
group ||--|{ locations : has
locations {
string fqdn "полностью квалифицированное доменное имя"
string title "заголовок страницы"
int version "версия скрытого сервиса"
string slug "полный URI"
boolean available "статус доступности"
datetime updated "временная метка последнего обновления"
datetime lastscrape "временная метка последнего сканирования"
boolean enabled "статус"
}
group ||--|{ post : references
post {
string post_title "заголовок поста"
string group_name "имя связанной группы"
datetime discovered "временная метка обнаружения"
}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 лицензирован в соответствии с unlicense.org