
SSH-Snake — это самораспространяющийся, самореплицирующийся безфайловый скрипт, который автоматизирует пост-эксплуатационную задачу обнаружения SSH-приватных ключей и хостов.
🐍 SSH-Snake — это мощный инструмент, предназначенный для автоматического перемещения по сети с использованием закрытых ключей SSH, обнаруженных на системах, с целью создания всесторонней карты сети и её зависимостей, а также определения того, насколько сеть может быть скомпрометирована с помощью SSH и закрытых ключей, начиная с определённой системы.
SSH-Snake автоматически выявляет связи между системами, которые соединены через SSH, что вручную потребовало бы огромных затрат времени и усилий.
Другими словами, SSH-Snake автоматически и рекурсивно выполняет следующие задачи:
user@host), которые могут принять эти ключи.Это полностью самореплицирующийся и самораспространяющийся инструмент, работающий полностью без файлов. Во многих смыслах SSH-Snake — это червь: он копирует себя и распространяется с одной системы на другую, насколько это возможно.
Вместо того чтобы вручную прыгать между системами с ключами SSH, как в игре Super Mario, позвольте SSH-Snake сделать эту работу за вас.
Хотя этот инструмент предназначен для хакерских целей, системные администраторы также могут использовать его для лучшего понимания своей инфраструктуры и сети. Если вы хотите отключить вывод обнаруженных закрытых ключей, закомментируйте эту строку кода.
Подробный анализ того, как на самом деле работает этот скрипт, технические детали, интересные находки, проектные решения, бенчмаркинг и извлечённые уроки можно найти в этой статье блога. Это программное обеспечение написано Джошуа Роджерсом.
Уменьшенный скриншот вывода SSH-Snake в очень маленькой сети. |
|---|
Синие узлы означают, что назначение может подключиться к самому себе (user@host<-->user@host). Красные рёбра указывают на двунаправленное соединение (user1@host1<-->user2@host2). |
|---|
SSH-Snake можно либо скачать, либо передать в bash через pipe:
wget https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh
bash ./Snake.nocomments.sh
или
curl https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh | bash
SSH-Snake бесшовно имитирует то, что делал бы человек-противник для обнаружения закрытых ключей SSH и назначений, к которым можно подключиться. Написанный полностью на Bash, он работает с минимальным набором зависимостей, обычно доступных на основных системах Linux (и MacOS): bash, ssh, coreutils, awk, uniq, sort, grep, tr, find и cat. Требуется getent ИЛИ dscacheutil. sed требуется только для самой первой системы. Также могут использоваться sudo, hostname, ip, timeout, arp, ifconfig, ipconfig и xargs, но они не обязательны (скрипт корректно обрабатывает случаи их отсутствия). Если на системе не окажется необходимых пакетов, он мягко сообщает об ошибке, предупреждая пользователя, что сканирование не может быть продолжено на этой конкретной системе (и возвращается, продолжая с предыдущей).
SSH-Snake полностью бесфайловый: после запуска скрипта пользователем он передаётся в bash целевых систем через stdin и аргументы bash (через SSH). На сканируемых системах не остаётся материальных следов скрипта: единственные свидетельства его работы — это дерево процессов и значительное количество неудачных попыток SSH, которые неизбежно произойдут.
SSH-Snake использует поиск в глубину: после подключения к одной системе он пытается подключиться дальше от неё, прежде чем вернуться назад.
Название SSH-Snake связано с тем, что вывод скрипта напоминает змею, ползущую вверх и вниз по сети. Однако, в отличие от игры Snake, SSH-Snake не умирает, когда кусает собственный хвост (подключается к системе, которая уже просканирована или сканируется в данный момент): он просто выводит, как было установлено соединение, и возвращается, не повторяя сканирование (чтобы избежать бесконечной рекурсии).
SSH-Snake протестирован на различных версиях Linux и MacOS (с установленным Homebrew Bash). Если вы столкнётесь с ОС на базе Linux, с которой он несовместим, пожалуйста, сообщите об этом.
.bash_history,SSH-Snake поставляется с некоторыми общими настройками, которые можно сконфигурировать. Эти настройки описаны в SETTINGS.md#general-settings.
SSH-Snake также включает множество настраиваемых/модульных стратегий (функций), которые можно использовать для обнаружения закрытых ключей SSH на системе и поиска хостов и назначений для подключения. Предусмотрены разумные значения по умолчанию, однако если вы хотите выполнить максимально полное сканирование, то включение дополнительных методов обнаружения может помочь. Если сканирование занимает много времени, отключение некоторых методов может ускорить процесс. За исключением одной стратегии (find_ssh_keys), каждую стратегию можно отключить/включить. Они описаны в SETTINGS.md#configurable-discovery-strategies.