Взлом учебного стенда через SSH: разбор лабы от сканирования до шелла

Менее 60 секунд — столько понадобилось для полной компрометации учебного хоста на Ubuntu с OpenSSH через автоматический подбор пароля. Пароль пользователя — 12345, защита от перебора не настроена, аутентификация по паролю — единственный способ входа. Для атаки хватило двух инструментов и стандартного словаря. Ниже — пошаговый разбор такой лабы: от первого сканирования до получения шелла. Каждый шаг привязан к конкретной теме из курса по основам информационной безопасности — не «почему так работает в теории», а какая именно концепция объясняет то, что вы видите в терминале прямо сейчас.
Учебный стенд для пентеста: что понадобится
Для повторения шагов нужен минимальный стенд из двух виртуальных машин в одной локальной сети:
- Атакующая машина — Kali Linux. В нём nmap (Network Mapper — сканер сети), hydra (параллельный онлайн-подборщик паролей) и SSH-клиент установлены из коробки. Подойдёт и другой дистрибутив с этими инструментами, но Kali — стандарт для учебных стендов и CTF-соревнований (Capture The Flag — формат, где участники решают практические задачи по ИБ).
- Целевая машина — Ubuntu 22.04 или 24.04 LTS с установленным OpenSSH-сервером. Установка — одна команда:
sudo apt install openssh-server. Сервис стартует автоматически и слушает порт 22 с дефолтной конфигурацией. Именно эта конфигурация и станет уязвимостью. - Сеть — обе машины в одной подсети (например, 192.168.1.0/24 в VMware или 10.0.2.0/24 в VirtualBox). Связность проверяется
ping.
Стенд собирается за 10 минут. Всё описанное ниже выполняется исключительно на изолированном стенде, который вы контролируете. Сканирование и подбор паролей на чужих системах — уголовно наказуемое деяние.
Сканирование портов nmap — находим открытый SSH
Первый шаг любой методологии тестирования на проникновение — разведка. Нужно понять, какие сервисы работают на целевой машине и какие порты принимают соединения.
nmap -sV -p 22 192.168.1.9
# Ожидаемый вывод:
# PORT STATE SERVICE VERSION
# 22/tcp open ssh OpenSSH 8.9p1 Ubuntu (protocol 2.0)
Что значит каждый элемент:
-sV— определить версию сервиса. Без этого флага nmap покажет только состояние порта (open/closed/filtered), но не скажет, что именно на нём крутится.-p 22— сканировать конкретно порт 22 (стандартный для SSH). Если администратор перенёс SSH на нестандартный порт, поможет-p-— полное сканирование всех 65535 портов. Долго, но найдёт всё.192.168.1.9— IP-адрес целевой машины.
Как понять, что получилось: в колонке STATE видим open, в VERSION — конкретную версию OpenSSH. Если STATE показывает filtered — порт закрыт файрволом; closed — сервис не запущен.
TCP-хэндшейк: как nmap определяет открытый порт
Когда nmap отправляет запрос на порт 22, происходит TCP-хэндшейк (трёхстороннее рукопожатие). Механизм простой, но понимать его нужно — без этого результаты nmap останутся магией:
- Kali отправляет пакет SYN — «хочу соединиться»
- Если порт открыт, Ubuntu отвечает SYN-ACK — «готов, подтверждаю»
- Kali отправляет ACK — «подтверждено, начинаем обмен данными»
Пришёл SYN-ACK — порт открыт. Тишина или RST (принудительный сброс) — закрыт или фильтруется. Это четвёртый (транспортный) уровень модели OSI (Open Systems Interconnection — семиуровневая модель, описывающая взаимодействие сетевых систем). Каждый раз при запуске nmap именно этот механизм определяет, «жив» ли порт.
Эксплуатация открытого порта SSH: разведка сервиса
Знать, что порт 22 открыт — начало, но не повод сразу запускать подбор. Сначала выясним, КАК сервер аутентифицирует пользователей и какие алгоритмы поддерживает.
Баннер SSH. При подключении к порту 22 сервер сам сообщает свою версию. Команда nc -vn 192.168.1.9 22 (nc — Netcat, утилита для работы с сетевыми соединениями) покажет строку вроде SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6. Приём называется banner grabbing — захват баннера. Версия OpenSSH позволяет проверить наличие известных уязвимостей в базах вроде NVD.
Методы аутентификации. Критически важно проверить, принимает ли сервер пароли: nmap --script ssh-auth-methods --script-args="ssh.user=root" -p 22 192.168.1.9. Если в ответе присутствуют оба метода — publickey и password — парольная аутентификация включена и брутфорс SSH пароля технически возможен.
Аудит алгоритмов. Утилита ssh-audit (устанавливается через pip3 install ssh-audit или из GitHub-репозитория jtesta/ssh-audit) проверяет серверные алгоритмы шифрования и показывает, какие из них устарели. Запуск: ssh-audit 192.168.1.9. Вместе с nmap-скриптом ssh2-enum-algos это позволяет выявить слабые шифры без единой попытки входа.
Брутфорс SSH пароля через Hydra — слабые пароли как точка входа
Парольная аутентификация открыта. Имена пользователей в учебных стендах предсказуемы — root, admin, user, pentest, john. Следующий шаг — автоматический подбор пароля.
Hydra (THC-Hydra) перебирает комбинации логин/пароль по словарю. В Kali Linux стандартный словарь rockyou.txt содержит около 14,3 миллиона записей паролей из реальных утечек и лежит в /usr/share/wordlists/. В современных версиях Kali файл сжат — перед первым использованием выполните sudo gunzip -k /usr/share/wordlists/rockyou.txt.gz.
hydra -l pentest -P /usr/share/wordlists/rockyou.txt 192.168.1.9 ssh
# -l pentest — конкретное имя пользователя
# -P rockyou.txt — файл со списком паролей для перебора
# 192.168.1.9 — адрес цели
# ssh — протокол атаки
Что произойдёт: Hydra начнёт отправлять SSH-запросы на аутентификацию с каждым паролем из словаря. По умолчанию она запускает 16 параллельных потоков; для SSH лучше снизить до 4 флагом -t 4, иначе сервер начнёт сбрасывать соединения. Когда правильный пароль найден, вывод покажет:
[22][ssh] host: 192.168.1.9 login: pentest password: 123
В лабораторном отчёте ssh-bruteforce-lab подбор пароля 12345 для пользователя john занял менее минуты. У сервера не было ни ограничения числа попыток, ни задержки между запросами, ни автоматической блокировки IP. Три отсутствующих защиты — и минута до полного доступа.
В MITRE ATT&CK (открытая база тактик и техник атак; T-коды вроде T1110 — идентификаторы конкретных техник) эта атака классифицируется как T1110.001 — Password Guessing (тактика Credential Access). Суть: злоумышленник итеративно подбирает пароли, используя словари из публичных утечек.
Бизнес-логика атаки и OWASP A07
Слабые пароли SSH — не экзотика, а самая распространённая ошибка конфигурации серверов. OWASP (Open Web Application Security Project) классифицирует проблему в категории A07:2021 — Identification and Authentication Failures: слабые пароли, отсутствие ограничений на подбор, дефолтные учётные данные.
Зачем атакующему SSH? На серверах с минимальной конфигурацией это нередко один из немногих открытых портов. Получив доступ, злоумышленник имеет полноценную командную оболочку — читать файлы, запускать процессы, двигаться по сети. Монетизация варьируется от установки криптомайнера до развёртывания ransomware.
Получение шелла через SSH: заходим на учебный стенд
Пароль найден. Подключаемся: ssh pentest@192.168.1.9. При первом подключении SSH покажет отпечаток (fingerprint) серверного ключа и спросит, доверяете ли вы серверу. В учебной лабе вводим yes. После ввода пароля — вы внутри: приглашение pentest@target:~$.
В MITRE ATT&CK использование скомпрометированной учётной записи классифицируется как T1078.003 — Local Accounts (тактики Initial Access, Persistence, Privilege Escalation и Defense Evasion). Техника T1021.004 — SSH формально относится к Lateral Movement и описывает перемещение между хостами внутри уже скомпрометированной сети; в нашей лабе мы входим извне на первый хост, поэтому корректнее описывать шаг через T1078.003 (Initial Access). Тонкость, но для понимания ATT&CK-карты она важна.
Первые команды после получения доступа — базовая разведка на стенде:
whoami— имя текущего пользователя. Ожидаемый ответ:pentest.id— числовой идентификатор пользователя (UID) и список групп. Если в выводе есть группаsudo— пользователь может повышать привилегии до root. Прямой путь к privilege escalation (повышению привилегий).sudo -l— список команд, доступных с правами root. Ответ(ALL : ALL) ALLозначает полный контроль над системой. На этом, по сути, лаба заканчивается — вы root.cat /etc/passwd— список всех локальных пользователей. Показывает поверхность атаки: сколько учётных записей, какие системные, какие пользовательские.cat /var/log/auth.log— журнал аутентификации. Здесь зафиксированы ВСЕ попытки входа, включая неудачные от Hydra. СтрокаFailed password for pentest from 192.168.1.17 port 54150 ssh2— индикатор компрометации (IoC), который выдаёт факт подбора.
Принцип наименьших привилегий (Principle of Least Privilege) гласит: каждый пользователь должен иметь ровно те права, которые необходимы для его задачи. Если учётная запись веб-приложения входит в группу sudo — это нарушение, превращающее подбор одного пароля в полный захват системы.
Каждый шаг на карте MITRE ATT&CK — методология тестирования на проникновение
Разбор лабораторной работы по ИБ будет неполным без привязки к стандартной карте техник атак. Каждый шаг лабы соответствует конкретной технике ATT&CK и конкретному разделу учебной программы:
| Шаг лабы | Техника ATT&CK | Тактика | Тема из курса ИБ |
|---|---|---|---|
| Сканирование nmap | T1046 Network Service Discovery | Discovery | Модель OSI, TCP-хэндшейк, порты |
| Перечисление методов аутентификации | T1046 Network Service Discovery | Discovery | Протоколы аутентификации |
| Подбор пароля Hydra | T1110.001 Password Guessing | Credential Access | Парольные политики, OWASP A07 |
| Вход по SSH | T1078.003 Local Accounts | Initial Access | Протоколы удалённого доступа |
| Использование учётной записи | T1078.003 Local Accounts | Initial Access, Persistence | Управление учётными записями |
| Очистка логов (потенциально) | T1070.002 Clear Linux or Mac System Logs | Defense Evasion | Журналирование, аудит событий |
Последняя строка — техника, которую злоумышленник МОЖЕТ применить для сокрытия следов. Имея доступ к системе, он способен очистить /var/log/auth.log и удалить записи о подборе. Именно поэтому в реальной инфраструктуре логи отправляются на отдельный сервер (SIEM — система управления событиями безопасности), к которому у скомпрометированного хоста нет доступа на запись.
Разбор ошибок конфигурации: как защитить SSH на стенде
Стенд был скомпрометирован из-за четырёх конкретных ошибок в файле /etc/ssh/sshd_config (конфигурация SSH-сервера). Каждая имеет прямое исправление.
# /etc/ssh/sshd_config — исправленная конфигурация
PermitRootLogin no # Запрет прямого входа под root
PasswordAuthentication no # Только ключи, пароли отключены
MaxAuthTries 3 # Максимум 3 попытки аутентификации
AllowUsers pentest # Белый список разрешённых пользователей
После правки — sudo systemctl restart sshd для применения. Если после перезапуска SSH по-прежнему принимает пароли — перепроверьте, нет ли конфликтующих директив в /etc/ssh/sshd_config.d/*.conf. Это частая ловушка: файлы из .d/ каталога переопределяют основной конфиг.
Ошибка 1: парольная аутентификация включена. Дефолтная конфигурация OpenSSH разрешает вход по паролю. Переключение на аутентификацию по ключам (PasswordAuthentication no) полностью устраняет вектор брутфорса — приватный ключ не передаётся по сети и не может быть подобран удалённо. В терминах D3FEND (MITRE-матрица защитных техник, зеркальная ATT&CK — только про защиту, а не атаку) это усиление механизма аутентификации: замена пароля на асимметричную криптографию.
Ошибка 2: root-вход разрешён. В текущих версиях OpenSSH значение PermitRootLogin по умолчанию — prohibit-password, что всё ещё разрешает root-вход по ключу. Значение no полностью закрывает прямой root-доступ через SSH.
Ошибка 3: нет ограничения попыток. Без MaxAuthTries и без fail2ban (утилита, анализирующая /var/log/auth.log и автоматически блокирующая IP после заданного числа неудачных попыток) Hydra отправляет тысячи запросов в минуту беспрепятственно. Установка: sudo apt install fail2ban. В D3FEND это D3-AL (Account Locking) и D3-LAM (Local Account Monitoring).
Ошибка 4: пароль из пяти цифр. Комбинация 12345 входит в топ-10 паролей из каждой крупной утечки. Защитная мера D3-CDP (Change Default Password) — первое, что требуется при развёртывании любого сервиса. Сложный пароль не спасёт от всех атак, но исключит подбор за секунды по стандартному словарю.
Методология тестирования на проникновение укладывается в цикл: найти поверхность атаки, проверить известные слабости, подтвердить эксплуатацию, задокументировать, предложить исправление. Эта лаба — первая итерация цикла на простейшем примере. В реальном пентесте после получения первоначального доступа добавляются privilege escalation, lateral movement, закрепление и детальная отчётность.
Разбор лабораторной работы по ИБ не заканчивается на получении шелла. Главная ценность — понимание, какая ошибка конфигурации сделала атаку возможной и как одна строка в конфиге её блокирует.
Тут есть парадокс, который стоит проговорить. Всё описанное выше — первая лаба, с которой начинают на 90% учебных площадок. Ни одного нового инструмента, ни одной экзотической уязвимости. nmap и hydra существуют больше двадцати лет. Парольная аутентификация SSH — дефолт, который не менялся годами. И тем не менее этот сценарий воспроизводится на реальных серверах снова и снова. Проблема не в сложности атаки — проблема в том, что PasswordAuthentication no и fail2ban не ставят «потому что и так работает». Самый частый вопрос после прохождения такого стенда — «а что, одна строка в конфиге всё это останавливает?». Да. Но чтобы эта строка стала осмысленным действием, а не копипастой из чужой статьи, нужно хотя бы раз увидеть [22][ssh] host: ... password: 123 в выводе Hydra и осознать, что вы только что получили полный контроль над чужой машиной за минуту. Именно этот момент превращает теорию про парольные политики и принцип наименьших привилегий из абзаца в учебнике в рабочий навык. На IB Basics на codeby.school/ib-basics каждая лаба привязана к теории, которая объясняет, почему шаг работает, а не просто что вводить в терминал.
Эту тему и смежные навыки разбирают на практике в курсе «Специалист по тестированию на проникновение» Codeby Academy.
