Откройте журнал SSH на любом сервере с белым адресом, и там будет одно и то же: Failed password for root, Failed password for admin, Invalid user ubuntu, строка за строкой, с адресов со всего мира. Обычно на это смотрят как на шум, который fail2ban сам выметает. Мы тоже смотрели, пока однажды не задались вопросом: а что они собираются делать, если пароль подойдёт? Чтобы узнать, нужно их впустить. Не на настоящий сервер, конечно, а на поддельный.

Ниже история про то, как мы такую ловушку собрали, где она поначалу выдавала себя, как мы нарядили её мощным сервером с видеокартами и что в неё попало за первые двенадцать с половиной часов.

Сначала хотелось с нейросетью

Первая идея была модная: поставить на 22 порт фейковый SSH, который отвечает на команды через языковую модель. Модель сама сочиняет вывод ls, cat и всего остального, атакующий думает, что он на живой машине. Такие проекты уже есть, ближе всего к этой идее Beelzebub: он слушает SSH и отдаёт команды модели.

Мы от этого отказались и взяли классику, Cowrie. Это ловушка на Python, которой больше десяти лет. Нейросети внутри нет: файловая система в ней заготовленная, команды эмулируются кодом или отдают заранее записанный вывод. Зато она предсказуема, ничего не стоит в работе и пишет абсолютно всё: каждую попытку входа, каждую введённую команду, каждый скачанный файл. Файлы сохраняются отдельно и никогда не запускаются, а сессию потом можно проиграть как видеозапись терминала.

Схема простая. Настоящий sshd остаётся на месте и пускает только с наших адресов. Всех остальных файрвол на 22 порту незаметно перенаправляет в Cowrie. Проброс портов в ловушке выключен, чтобы из неё нельзя было сделать прокси, скачивание файлов ограничено десятью мегабайтами. Для просмотра есть небольшая веб-панель, закрытая простой basic-аутентификацией: своей страницы входа у неё нет, посторонний видит голый ответ 401 без единого слова. Красивая форма логина на странице, куда никто не должен заходить, сама по себе подсказка.

Первый чужой бот пришёл через шесть минут после запуска.

Ловушка, которая не палится

Голая Cowrie из коробки узнаётся опытным ботом за пару команд, поэтому основную работу мы потратили на правдоподобие.

Вход как на настоящем сервере. По умолчанию Cowrie пускает почти с любым паролем. Бот, у которого подходит и root:123, и root:qwerty, и root:что-угодно, быстро понимает, где он. Мы написали свой класс авторизации. Новый адрес пускается не сразу, а после случайного числа неудачных попыток, от двух до пяти. Пара логин-пароль, с которой он вошёл, закрепляется за этим адресом, и дальше проходит только она. Всё как на сервере, где действительно есть один подобранный пароль. Суть класса, упрощённо:

fixed = creds.get(src_ip)
if fixed is not None:
    # за этим IP уже закреплена пара: пускаем только с ней
    return fixed[0] == login and fixed[1] == passwd

need = self.state["need"].setdefault(src_ip, randint(self.mintry, self.maxtry))
tries = self.state["tries"][src_ip] = self.state["tries"].get(src_ip, 0) + 1
if tries >= need:
    creds[src_ip] = [login, passwd]   # этот пароль теперь «настоящий»
    return True
return False

Класс включается в cowrie.cfg строками auth_class = StickyAuth и auth_class_parameters = 2,5, состояние лежит в JSON и переживает перезапуск.

Приманка. Если уж пускать, то так, чтобы было интересно. Мы собрали эталонный Debian 12 через mmdebstrap, сняли с него слепок файловой системы утилитой Cowrie createfs и превратили ловушку в сервер для обучения нейросетей: 128 ядер AMD EPYC 7763, терабайт памяти, четыре NVIDIA H100, NVMe на 3,5 ТБ и 28 ТБ под данные. Нагрузка 94, в top крутится обучение, в домашнем каталоге история команд, в /data/models лежат чекпоинты, а в /opt/ml/.env ключи от облаков. Ключи, разумеется, фейковые и помеченные. Для майнера такая машина выглядит как джекпот.

Вывод nvidia-smi в ловушке: четыре NVIDIA H100 80GB, загрузка около 90 процентов, процесс python3 train.py
Вывод nvidia-smi в ловушке: четыре NVIDIA H100 80GB, загрузка около 90 процентов, процесс python3 train.py

Так ловушка отвечает на nvidia-smi. Ни одной видеокарты за этим нет.

Где она выдавала себя. Самое интересное началось, когда мы стали прогонять через ловушку настоящие скрипты ботов из её же журнала. Нашлось три прокола.

Первый: grep в Cowrie понимал только ключи -q и -m, а остальные молча игнорировал. Боты массово делают lspci | grep -i nvidia, и наш сервер с четырьмя H100 отвечал пустой строкой, потому что без -i регистр не совпадал. Разведывательный скрипт одного бота так и докладывал своим хозяевам: «GPU:», а дальше ничего. Мы дописали в эмуляцию grep ключи -i, -v, -c, -w и -F, и после правки тот же скрипт увидел 128 ядер и четыре H100.

Второй: в Debian 12 каталог /bin это ссылка на /usr/bin, а готовые ответы Cowrie лежат по старым путям. Команда, у которой нет ни эмуляции, ни заготовленного вывода по новому пути, отвечала «cannot execute binary file: Exec format error». На живом Debian такого не бывает, это прямая улика. Пришлось разложить ответы df, dmesg, mount и других команд по правильным путям и дописать недостающие: lsblk, ip, ss, systemctl, docker, journalctl, top.

Третий, мелкий: команда hostname возвращала одно имя, а файл /etc/hostname другое, имя по умолчанию из поставки Cowrie. Человек такое заметит.

Честно скажем и про то, что осталось. Вывод nvidia-smi заготовлен заранее, поэтому время в его шапке никогда не меняется. На sort, screen, tmux и gzip ловушка пока не отвечает правдоподобно. Внимательный человек нас раскусит, но на ботов это пока не влияло.

Нейросеть всё-таки вернулась. Только не изображать сервер, а комментировать. Отдельная служба читает журнал Cowrie и присылает нам в Telegram каждый вход, каждую команду с коротким разбором от бесплатной модели и по закрытии сессии полную запись: что вводил бот и что ему отвечал наш сервер. Читать, как модель серьёзно объясняет, зачем боту понадобилось удалить папку .ssh, неожиданно увлекательно.

Цифры за первые двенадцать с половиной часов

Запись с 16:20 UTC 24 октября до 04:59 UTC 25 октября, наши собственные проверочные подключения из подсчёта исключены.

Что

Сколько

Подключений

1 846

Разных адресов

126

Неудачных попыток входа

1 536

Успешных входов

175 с 70 адресов

Сессий, где вводились команды

102 с 65 адресов

Команд всего

1 524

Скачиваний файлов

219 (47 разных файлов)

Число успешных входов говорит о нашей настройке, а не о стойкости паролей: ловушка пускает любого, кто достаточно настойчив. Интереснее, что делали внутри.

Две трети подключений, 1 198 из 1 846, сделал один адрес. Его программа представлялась клиентом на Go и тупо шла по словарю: подключилась, пара логин-пароль, отключилась, и так почти тысячу двести раз. Вошла один раз, а дальше упиралась в закреплённую пару. Ничего не искала и ничего не знала про сервер.

Логин почти всегда root, 728 попыток из 1 711. Пароли из той же категории, что и десять лет назад:

Пароль

Попыток

123456

83

345gs5662d34

58

3245gs5662d34

57

123

44

1234

39

admin

26

12345678

20

Две странные строки на втором и третьем месте не случайны, это подпись следующего героя.

Ботнет на 59 адресов

Почти вся работа после входа пришлась на одну сеть. Из 65 адресов, которые вводили команды, 59 выполнили один и тот же сценарий слово в слово. В SSH-ключе, который он оставляет, стоит комментарий mdrfckr, и исследователи связывают его с группой Outlaw, которая с 2018 года собирает из взломанных серверов сеть для майнинга.

Журнал ловушки Cowrie: после успешного входа с паролем из словаря тот же адрес пробует пары 345gs5662d34 и root 3245gs5662d34, потом снова входит со словарным паролем
Журнал ловушки Cowrie: после успешного входа с паролем из словаря тот же адрес пробует пары 345gs5662d34 и root 3245gs5662d34, потом снова входит со словарным паролем

Шесть минут журнала. Красным пары, которые ботнет пробует сразу после входа.

Почерк у него узнаваемый. Сначала подбирает пароль root по словарю. Как только вход удался, тот же адрес за несколько секунд пробует две свои пары: 345gs5662d34 с таким же паролем и root с паролем 3245gs5662d34. Затем снова входит с найденным паролем и начинает работать. Зачем ему эти две пары, мы можем только предполагать, похоже на проверку «а не наш ли это уже сервер». Строка 345gs5662d34 озадачила не только нас: в 2023 году про неё спрашивал автор дневника SANS, в его ловушке это был один из самых частых логинов.

Сценарий внутри занимает четыре-пять минут и от 18 до 27 команд. Если пересказать без самих команд:

Шаг

Зачем

Удаляет папку .ssh и записывает туда свой ключ

вход без пароля, даже если пароль сменят

Меняет пароль root

выгнать конкурентов, подобравших тот же пароль, и самого владельца

Ищет и останавливает чужие процессы

убрать чужие майнеры

Смотрит процессор, память, архитектуру

понять, сколько тут можно намайнить

Ставит задание в cron и загружает архив dota

закрепиться и запустить майнер

Пароль root в ловушке сменился 42 раза. Архив dota3 разбирала Elastic: в нём майнер, бэкдор с управлением через IRC и модуль перебора SSH, который ищет следующие жертвы. Круг замыкается: взломанный сервер сам начинает подбирать пароли к чужим серверам, а владелец узнаёт об этом из жалобы хостинга или по счёту за процессор.

Разведчик, который ходил по расписанию

Оставшиеся шесть адресов вели себя иначе. Четверо спросили только версию системы командой uname и ушли: собирают список, где что стоит, чтобы прийти потом с подходящим инструментом. Двое прогнали длинные проверочные скрипты, и один из них вернулся 38 раз. Это тот самый бот из истории с grep: видеокарты он ищет только через lspci, а nvidia-smi не вызывал ни разу. Первые 34 захода из-за ошибки в grep он видел машину вовсе без видеокарт и всё равно возвращался, так что ходит он по своему расписанию, а не потому, что его что-то заинтересовало. После правки он зашёл ещё четыре раза, увидел четыре H100 и пропал. Майнер на машину за полсуток так никто и не поставил: то ли разведка и заражение у этой сети работают по разным расписаниям, то ли на что-то в ответах ловушки он всё-таки споткнулся. Это мы узнаем дальше.

Подписи клиентов тоже показательны: 1 305 подключений от программы на Go, 380 от библиотеки libssh 0.9.6, 32 от libssh 0.11.1. PuTTY, которым обычно пользуются люди, встретился три раза. В SSH ломятся автоматы, и отвечать им нужно автоматикой.

Как попробовать самому

Cowrie ставится из PyPI, актуальная версия 3.1.3. Подробная инструкция есть в документации проекта, коротко это выглядит так: отдельный пользователь без прав, виртуальное окружение, pip install cowrie, cowrie start. По умолчанию ловушка слушает 2222, а перенаправить на неё чужих с 22 порта можно правилом nftables, оставив свой адрес настоящему sshd:

define ssh_home = { 203.0.113.10 }

table ip nat {
  chain prerouting {
    type nat hook prerouting priority dstnat;
    tcp dport 22 ip saddr != $ssh_home redirect to :2222
  }
}

Адрес в примере условный, впишите свой. И не забудьте открыть 2222 только для перенаправленных пакетов (ct status dnat accept), иначе ловушку будет видно напрямую. Ставить её лучше на отдельную машину, где нет ничего ценного: вы сознательно приглашаете туда людей, которые пришли ломать.

Что из этого взять для своего сервера

Всё, что мы увидели, ломается об одну настройку: вход по паролю выключен. Боту из этой статьи нечего подбирать, если сервер пускает только по ключу.

Сначала проверьте, что вход по ключу у вас работает, и только потом выключайте пароли. В /etc/ssh/sshd_config или отдельном файле в /etc/ssh/sshd_config.d/:

PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password

sshd -t проверит синтаксис, systemctl reload ssh применит. Текущую сессию не закрывайте, пока не убедились из второго окна, что вход по ключу проходит.

Второе - fail2ban. При выключенных паролях он уже не про защиту, а про чистоту журналов: тот самый бот на 1 198 подключений отлетит после пятой попытки.

[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1h

Впишите в ignoreip свой адрес. Мы сами однажды забанили себя, когда слишком часто переподключались во время настройки ловушки, и не сразу поняли, почему молчит только SSH, а всё остальное на сервере отвечает.

Проверка. Если пароль на сервере был слабым и вы подозреваете, что к вам уже заходили, проверьте следы именно этого ботнета:

grep -r mdrfckr /root/.ssh /home/*/.ssh 2>/dev/null
crontab -l; ls -la /etc/cron.d
lastb | head -50

Первая команда ищет его ключ, вторая задания по расписанию, третья показывает последние неудачные входы. Нашли что-то из этого - чистить такой сервер вручную бессмысленно, проще перенести данные на новый и сменить все пароли и ключи, которые на нём были.

Короткий чек-лист

  • Вход по ключу проверен из второго окна

  • PasswordAuthentication no, PermitRootLogin prohibit-password

  • fail2ban включён, свой адрес в ignoreip

  • SSH открыт только для своих адресов, если это возможно

  • В authorized_keys нет чужих ключей, в cron нет чужих заданий

Комментарии (36)


  1. Laax
    25.10.2026 08:17

    Подозреваю, что у вас много свободного времени...

    Но очень интересно, прочитал с удовольствием.


    1. poige
      25.10.2026 08:17

      Подозреваю, что у вас много свободного времени...

      вот-вот


  1. MountainGoat
    25.10.2026 08:17

    SSH открыт только для своих адресов,

    Интересно, сколько людей так сделали, а вспомнили, что они так сделали только после того, как поменяли провайдера.


    1. denisgrigoriev04
      25.10.2026 08:17

      Можно использовать wireguard, чтобы не зависимо от провайдера либо входить, либо вообще терять связь с сервером


    1. phoenix964 Автор
      25.10.2026 08:17

      Бывает, но это не катастрофа. Домашний сервер чинится монитором и клавиатурой, а у VPS/VDS у хостеров в панели есть VNC-консоль: заходишь как с локального экрана и правишь правила. Только пароль для входа с консоли надо иметь, если по SSH пускаешь лишь по ключам.


    1. shanker
      25.10.2026 08:17

      Интересно, сколько людей так сделали, а вспомнили, что они так сделали только после того, как поменяли провайдера.

      Я использую динамические списки, а не статические. Использование лично мне очень удобно. Ну, и ботов давно не видно. Тем более, что подход может применяться к любому не публичному сервису: SSH, web, VPN и т.д. - вообще не важно. По сути речь про технологию port knocking. Реализация вариативна. Достаточно подробно я описывал использование технологии в статье Практические варианты использования port knocking. Но, самый простой способ: настроить firewall так, чтоб на порт сервиса запрос прилетал не сразу, а при повторном обращении. Клиент точно знает, что сервис должен быть рабочим. Он будет стучаться несколько раз (за короткий промежуток времени). Это будет тем секретным кодом, что пропустит легитимного клиента - "за настойчивость". Большинство сканеров так не работают: для массовых сканирований они экономят ресурсы и отправляют лишь один запрос. Для Linux я делал open source скрипт с реализацией идеи. Главный момент: определить опытным путём количество повторений, которое будет считаться легитимным так, чтоб это не особо сказалось на качестве первичного подключения. После первого успешного подключения IP-клиента включается в белый список (на время, в течение которого повторные подключения уже не будут "тормозить", как первое подключение т.к. клиент проверен по IP и заново его проверять уже не нужно). Я проверял результат на Censys\Shodan: информация о сервисе исчезала.


    1. Spiritschaser
      25.10.2026 08:17

      Я в принципе ничего кроме VPN домой не открываю. Иногда, на время - хорошо чрутированный wuftpd с собственными юзерами, и после обмена, отключаю.


  1. InsiderCrush
    25.10.2026 08:17

    Вы точно с пользой провели это время. И Вам точно не должно быть его жалко. И главное: впереди так много еще подобных вопросов и задач! :D


    1. poige
      25.10.2026 08:17

      Вы точно с пользой провели это время. И Вам точно не должно быть его жалко.

      Вот-вот — на месте автора я бы точно прислушался! Комментаторы на Хабре это, если не мировой уровень экспертизы по потере времени, то всё же достаточно высокий. Может быть даже всё-таки мировой… ;)


      1. shigorin
        25.10.2026 08:17

        автору спасибо, комментаторам... нет, ну бывают толковые, но некоторые умудряются удивить и поныне, эт Вы верно подметили.
        // ой, чё эт я, комментирую? 8)


  1. vaslobas
    25.10.2026 08:17

    бэкдор с управлением через IRC

    Ах, старая школа жива.


    1. poige
      25.10.2026 08:17

      Ничё, скоро на Rust перепишут. ;)


  1. denisgrigoriev04
    25.10.2026 08:17

    Зачем столько трудностей, почему просто не взять ip который не жалко, подождать 30 минут, сделать резервную копию диска для изучения и отформатировать диск


    1. phoenix964 Автор
      25.10.2026 08:17

      Так тоже делают, это называется high-interaction honeypot, и для разбора конкретного вредоноса он лучше. Но у настоящей машины свои минусы. За эти 30 минут бот успеет запустить майнер или начать перебирать чужие серверы уже с вашего адреса, и жалобы на абузу придут вам. Значит, надо резать исходящий трафик, а тогда бот сразу видит, что сеть не работает.

      Снимок диска покажет, что осталось после сеанса, но не покажет порядок команд, а нам был интересен как раз сценарий: что бот проверяет первым и что решает после этого. И главное для нас: на дешёвой виртуалке нет видеокарт. Разведчик, который заходил 38 раз, искал именно GPU, и без четырёх «H100» в выводе nvidia-smi мы бы его, скорее всего, вообще не увидели. Cowrie ничего чужого не исполняет, пишет каждую команду в JSON, а скачанные файлы складывает в отдельную папку. Для статистики за ночь этого хватило.


      1. denisgrigoriev04
        25.10.2026 08:17

        Ради науки не жалко, если один из ip адресов забанят, особенно если это ip6. Можно пропатчить ядро, чтобы куда-нибудь логировать все системные вызовы

        Можно использовать дорогую виртуалку и дешёвый ip, хотя наверное этот путь даже более сложный


        1. phoenix964 Автор
          25.10.2026 08:17

          Ну в общем вы сами ответили на свой вопрос)).


        1. kaseiiro
          25.10.2026 08:17

          На v6 интересных ботов не замечено, да и вообще логи пустые. Видимо, подобрать адрес — тот еще квест, который отсеивает типовую автоматику.


      1. KivApple
        25.10.2026 08:17

        Можно сделать MTIM SSH сервер, который логгирует проходящие через него команды и их ответы, но при этом пропускает в неизменном виде на конечную VPS.


  1. phoenix964 Автор
    25.10.2026 08:17

    Ну в общем вы сами ответили на свой вопрос)).


  1. Folist
    25.10.2026 08:17

    Осталось допилить, что бы автоматом рассылались жалобы на айпишники атакующих


    1. phoenix964 Автор
      25.10.2026 08:17

      Уже сделано.


  1. khomenkoev
    25.10.2026 08:17

    А зачем?


    1. PsihXMak
      25.10.2026 08:17

      Не быть вам инженером с такими вопросами :)


      1. tempart
        25.10.2026 08:17

        Инженер-специалист может и не задаваться таким вопросом, а профессионал - обязан

        Но в статье есть формулировка цели, так что всё ок


      1. khomenkoev
        25.10.2026 08:17

        С точки зрения реального продакшена, ценность этого исследования стремится к нулю. Выводы здесь классические и без всяких ловушек — закрывать SSH ключами, настраивать fail2ban и не изобретать велосипед.Сборка кастомного класса авторизации и эмуляция nvidia-smi ради того, чтобы в очередной раз зафиксировать стандартную, давно описанную активность ботнета Outlaw (смена пароля и майнер в cron), — это избыточный R&D и трата времени. Статья хороша исключительно как научно-популярный контент для широкой аудитории и демонстрация возможностей Cowrie. Практического выхлопа для оперирования реальной инфраструктурой здесь нет.


    1. AVikont
      25.10.2026 08:17

      Зачем переизобретать honeypot?
      Есть несколько причин, в том числе повышение собственной технической грамотности.


  1. tech_post_dev
    25.10.2026 08:17

    Про разведчика, который ходил 38 раз и так ничего и не поставил. Интересно, какими именно командами он спрашивал про видеокарты. Скрипты под майнинг часто зовут не голый nvidia-smi, а что-то вроде nvidia-smi --query-gpu=name,memory.total --format=csv,noheader и разбирают ответ построчно. Если ловушка на любой вызов отдаёт одну и ту же заготовленную таблицу, парсер вместо «NVIDIA H100 80GB HBM3, 81559 MiB» получит мусор, и для него машина выглядит битой.

    Туда же ls /dev/nvidia*, lsmod | grep nvidia и cat /proc/driver/nvidia/version: на настоящем сервере с драйвером они непустые и согласованы с версией драйвера в шапке nvidia-smi. Если в записях сессий такие вызовы есть, было бы любопытно посмотреть, что он получил в ответ.


    1. phoenix964 Автор
      25.10.2026 08:17

      Тут вышло интереснее, чем кажется. nvidia-smi он не вызывал ни разу, /dev/nvidia*, lsmod и /proc/driver/nvidia тоже. Его скрипт ищет видеокарты только через lspci | grep -i vga и lspci | grep -i nvidia (и то же через busybox), плюс nproc, модель процессора, last и проверку, что оболочка умеет запускать скрипты. Так что таблица nvidia-smi ему была не нужна.

      Зато в записях нашлась моя ошибка. grep в Cowrie 3.1.3 молча игнорировал -i, поэтому lspci | grep -i nvidia возвращал пусто, и первые 34 захода разведчик видел строку GPU пустой. Я пропатчил grep в 17:47 UTC, после этого он пришёл ещё 4 раза и уже видел четыре H100. Последний заход в 17:52, с тех пор тишина. Почему пропал, не знаю. Может, отчёт ушёл дальше, и следующий шаг за другой частью сети. А может, смутило, что карты в выводе задвоены: lspci и busybox lspci отвечают одинаково.

      Заодно поправлю себя выше: я писал, что разведчика привлёк nvidia-smi, а он его не вызывал и 34 раза из 38 видел машину вообще без видеокарт. Абзац в статье тоже исправил.

      Ваши проверки (/dev/nvidia*, lsmod, версия драйвера, согласованная с nvidia-smi) добавлю, спасибо, это хороший список того, где ловушка ещё может проколоться.


      1. cofein51
        25.10.2026 08:17

        после этого он пришёл ещё 4 раза и уже видел четыре H100. Последний заход в 17:52, с тех пор тишина. 

        Может заподозрил что то не ладное, а то ведь сервер был пустой, а тут хоп +4 карточки...

        Теперь люди сидят и думают, ловушка это или супер удача...


  1. Sap_ru
    25.10.2026 08:17

    Извините, но вы из какого года пишете?

    Второе - fail2ban.

    Это вредный совет!
    Сейчас прежде всего нужно проверить, поддерживает ли ssh-сервер опции "PerSourcePenalties" и "PerSourcePenalty*", и если да, то использовать их, так как это даёт гораздо более гибкую настройку и защиту. Умение пользоваться этим функционалом сейчас, принципиально важно, и стыд и позор администратору, который об этом не знает.


    1. Yokushiro
      25.10.2026 08:17

      И всë-таки fail2ban это база, которая точно не повредит и избавит от проблем.


    1. Newbiefromeburg
      25.10.2026 08:17

      • PerSourcePenalties идеален как первая линия обороны: он мгновенно отсекает агрессивный автоматизированный брутфорс и снижает нагрузку на процессор.

      • Fail2Ban незаменим, если вам нужно выкинуть атакующий IP из системы окончательно и заблокировать ему доступ ко всем остальным портам сервера.


  1. hwyf17
    25.10.2026 08:17

    в cron нет чужих заданий

    А я еще на свои crontab-ы и от root и от user ставлю атрибут chattr +i только для чтения


  1. Spiritschaser
    25.10.2026 08:17

    Зачем ему эти две пары, мы можем только предполагать, похоже на проверку «а не наш ли это уже сервер»

    Вообще, звучит как план! Но это не этично и не законно, конечно же, и я осуждаю такой план.


    1. Deosis
      25.10.2026 08:17

      Странно, что после такого предположения не добавили такую пару ради интереса.


  1. sanchezzzhak
    25.10.2026 08:17

    Ну это тянет на серис, который отлавливает заражены серверы и предупреждает владельцев. Только непонятно как это монитизироаать.