
Комментарии 35
Подозреваю, что у вас много свободного времени...
Но очень интересно, прочитал с удовольствием.
SSH открыт только для своих адресов,
Интересно, сколько людей так сделали, а вспомнили, что они так сделали только после того, как поменяли провайдера.
Можно использовать wireguard, чтобы не зависимо от провайдера либо входить, либо вообще терять связь с сервером
Бывает, но это не катастрофа. Домашний сервер чинится монитором и клавиатурой, а у VPS/VDS у хостеров в панели есть VNC-консоль: заходишь как с локального экрана и правишь правила. Только пароль для входа с консоли надо иметь, если по SSH пускаешь лишь по ключам.
Интересно, сколько людей так сделали, а вспомнили, что они так сделали только после того, как поменяли провайдера.
Я использую динамические списки, а не статические. Использование лично мне очень удобно. Ну, и ботов давно не видно. Тем более, что подход может применяться к любому не публичному сервису: SSH, web, VPN и т.д. - вообще не важно. По сути речь про технологию port knocking. Реализация вариативна. Достаточно подробно я описывал использование технологии в статье Практические варианты использования port knocking. Но, самый простой способ: настроить firewall так, чтоб на порт сервиса запрос прилетал не сразу, а при повторном обращении. Клиент точно знает, что сервис должен быть рабочим. Он будет стучаться несколько раз (за короткий промежуток времени). Это будет тем секретным кодом, что пропустит легитимного клиента - "за настойчивость". Большинство сканеров так не работают: для массовых сканирований они экономят ресурсы и отправляют лишь один запрос. Для Linux я делал open source скрипт с реализацией идеи. Главный момент: определить опытным путём количество повторений, которое будет считаться легитимным так, чтоб это не особо сказалось на качестве первичного подключения. После первого успешного подключения IP-клиента включается в белый список (на время, в течение которого повторные подключения уже не будут "тормозить", как первое подключение т.к. клиент проверен по IP и заново его проверять уже не нужно). Я проверял результат на Censys\Shodan: информация о сервисе исчезала.
Я в принципе ничего кроме VPN домой не открываю. Иногда, на время - хорошо чрутированный wuftpd с собственными юзерами, и после обмена, отключаю.
Вы точно с пользой провели это время. И Вам точно не должно быть его жалко. И главное: впереди так много еще подобных вопросов и задач! :D
Вы точно с пользой провели это время. И Вам точно не должно быть его жалко.
Вот-вот — на месте автора я бы точно прислушался! Комментаторы на Хабре это, если не мировой уровень экспертизы по потере времени, то всё же достаточно высокий. Может быть даже всё-таки мировой… ;)
бэкдор с управлением через IRC
Ах, старая школа жива.
Зачем столько трудностей, почему просто не взять ip который не жалко, подождать 30 минут, сделать резервную копию диска для изучения и отформатировать диск
Так тоже делают, это называется high-interaction honeypot, и для разбора конкретного вредоноса он лучше. Но у настоящей машины свои минусы. За эти 30 минут бот успеет запустить майнер или начать перебирать чужие серверы уже с вашего адреса, и жалобы на абузу придут вам. Значит, надо резать исходящий трафик, а тогда бот сразу видит, что сеть не работает.
Снимок диска покажет, что осталось после сеанса, но не покажет порядок команд, а нам был интересен как раз сценарий: что бот проверяет первым и что решает после этого. И главное для нас: на дешёвой виртуалке нет видеокарт. Разведчик, который заходил 38 раз, искал именно GPU, и без четырёх «H100» в выводе nvidia-smi мы бы его, скорее всего, вообще не увидели. Cowrie ничего чужого не исполняет, пишет каждую команду в JSON, а скачанные файлы складывает в отдельную папку. Для статистики за ночь этого хватило.
Ради науки не жалко, если один из ip адресов забанят, особенно если это ip6. Можно пропатчить ядро, чтобы куда-нибудь логировать все системные вызовы
Можно использовать дорогую виртуалку и дешёвый ip, хотя наверное этот путь даже более сложный
Можно сделать MTIM SSH сервер, который логгирует проходящие через него команды и их ответы, но при этом пропускает в неизменном виде на конечную VPS.
Ну в общем вы сами ответили на свой вопрос)).
Осталось допилить, что бы автоматом рассылались жалобы на айпишники атакующих
А зачем?
Не быть вам инженером с такими вопросами :)
Инженер-специалист может и не задаваться таким вопросом, а профессионал - обязан
Но в статье есть формулировка цели, так что всё ок
С точки зрения реального продакшена, ценность этого исследования стремится к нулю. Выводы здесь классические и без всяких ловушек — закрывать SSH ключами, настраивать fail2ban и не изобретать велосипед.Сборка кастомного класса авторизации и эмуляция nvidia-smi ради того, чтобы в очередной раз зафиксировать стандартную, давно описанную активность ботнета Outlaw (смена пароля и майнер в cron), — это избыточный R&D и трата времени. Статья хороша исключительно как научно-популярный контент для широкой аудитории и демонстрация возможностей Cowrie. Практического выхлопа для оперирования реальной инфраструктурой здесь нет.
Зачем переизобретать honeypot?
Есть несколько причин, в том числе повышение собственной технической грамотности.
Про разведчика, который ходил 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. Если в записях сессий такие вызовы есть, было бы любопытно посмотреть, что он получил в ответ.
Тут вышло интереснее, чем кажется. 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) добавлю, спасибо, это хороший список того, где ловушка ещё может проколоться.
Извините, но вы из какого года пишете?
Второе - fail2ban.
Это вредный совет!
Сейчас прежде всего нужно проверить, поддерживает ли ssh-сервер опции "PerSourcePenalties" и "PerSourcePenalty*", и если да, то использовать их, так как это даёт гораздо более гибкую настройку и защиту. Умение пользоваться этим функционалом сейчас, принципиально важно, и стыд и позор администратору, который об этом не знает.
И всë-таки fail2ban это база, которая точно не повредит и избавит от проблем.
PerSourcePenaltiesидеален как первая линия обороны: он мгновенно отсекает агрессивный автоматизированный брутфорс и снижает нагрузку на процессор.Fail2Banнезаменим, если вам нужно выкинуть атакующий IP из системы окончательно и заблокировать ему доступ ко всем остальным портам сервера.
в cron нет чужих заданий
А я еще на свои crontab-ы и от root и от user ставлю атрибут chattr +i только для чтения
Зачем ему эти две пары, мы можем только предполагать, похоже на проверку «а не наш ли это уже сервер»
Вообще, звучит как план! Но это не этично и не законно, конечно же, и я осуждаю такой план.
Пустили ботов по SSH на фейковый сервер с четырьмя H100: что они там делали