# Атака «человек-посередине» на SSH
***Информация представлена исключительно в образовательных целях***
**Цель работы:** ознакомление с процессом атаки, чтобы понимать процесс и на каких стадиях защищаться.
**Задание:**
1. Установить SSH MITM;
2. Научиться использовать tcpdump;
3. Научиться пользоваться arpspoof;
4. Разобраться как работает iptables;
5. Выполнить практическую работу “Основы Iptables”;
6. Что такое файл known_host;
7. Выполнить атаку человек-посередине на SSH;
8. Научиться анализировать auth.log.
## Ход выполнения практической работы
Протокол SSH позволяет подключаться к другому компьютеру для выполнения на нём команд и передачи файлов. SSH использует надёжное шифрование, поэтому передаваемый сетевой трафик невозможно расшифровать или модифицировать.
В SSH для входа на удалённый компьютер можно использовать два способа:
• ввод пароля пользователя на удалённой системе;
• аутентификация с помощью публичного ключа.
Если вход выполняется по паролю, то можно представить следующий сценарий атаки:
• трафик пользователя перенаправляется на машину атакующего;
• атакующий отслеживает попытки подключения к SSH серверу и перенаправляет их на свой SSH сервер;
• SSH сервер атакующего настроен, во-первых, вести журнал всех введённых данных, в том числе пароля пользователя, а, во-вторых, передавать команды на легитимный SSH сервер, к которому хочет подключиться пользователь, для их выполнения, а затем возвращать результаты легитимному пользователю.
Именно по такой схеме работает программа SSH MITM.
Инструмент SSH MITM состоит из нескольких компонентов:
• модифицированный сервер SSH;
• вспомогательные скрипты для выполнения сопутствующих действий: обнаружение SSH подключений, ARP спуфинг и сниффинг трафика, перенаправление портов.
При своей работе SSH MITM использует следующие инструменты:
• tshark (версия Wireshark с интерфейсом командной строки);
• ettercap (используется только для ARP спуфинга, поэтому вместо неё можно использовать arpspoof);
• nmap;
• iptables.
Для проведения атаки человек-посередине понадобятся следующие утилиты, установленные на ПК атакующего: tshark, ettercap, arpspoof, nmap и iptables. Обновим данные программы, а также установим недостающие, как это показано на рисунке 1.

Рисунок 1 – Обновление и установка необходимых утилит на атакующий хост
Теперь установим оставшиеся зависимости и SSH MITM, как это показано на рисунке 2.

Рисунок 2 – Установка оставшихся зависимостей и SSH MITM
В конце установки отключаем AppArmor защиту, как это показано на рисунке 3.

Рисунок 3 – Отключение AppArmor защиты
Чтобы исключить ARP-спуфинг реальных хостов, настроим внутреннюю локальную сеть, соединяющую 3 виртуальных хоста: атакующего, SSH-сервер и SSH-клиент, как это показано на рисунках 4а, 4б и 4в соответственно.

Рисунок 4а – Настройка сети виртуальных хостов

Рисунок 4б – Настройка сети виртуальных хостов

Рисунок 4в – Настройка сети виртуальных хостов
Найдём подключения к SSH через tcpdump. Этот метод сработает даже при нестандартном выборе номера порта службы SSH. Для начала, необходимо записать дамп трафика, проходящего через сетевой интерфейс, это делается командами, представленными на рисунке 5, при помощи утилиты tcpdump. Важно, чтобы tcpdump увидел трафик, не предназначенный атакующему хосту, необходимо в настройках сетевой карты включить неразборчивый режим.

Рисунок 5 – Записываем дамп трафика
локальной сети в файл ssh.cap
Для генерации SSH трафика подключимся с SSH-клиента к SSH-серверу. Результат данных действий показан на рисунке 6.

Рисунок 6 – Подключаемся с SSH-клиента к SSH-серверу
При помощи утилиты tcpdump прочитаем созданный файл дампа трафика и выведем пакеты, направленные на порт 22 (SSH порт). Результат показан на рисунке 7.

Рисунок 7 – Смотрим собранный дамп трафика по 22 порту (SSH)
Если администратор SSH-сервера изменил стандартный SSH порт с 22 на другой номер, то обнаружить SSH подключения можно по строке «@openssh.com», которая указывает на инициализацию SSH соединения.

Рисунок 8 – Смотрим собранный дамп трафика
по ключевому слову (@openssh.com)
Теперь, для лучшей детализации, откроем дамп трафика в WireShark, как это показано на рисунке 9. Как видно из этого рисунка, большинство пойманных пакетов относятся к протоколу SSHv2, а также каждый из пакетов можно открыть и посмотреть на них подробнее. Например, показанный на рисунке пакет инициализирует используемый алгоритм шифрования – Диффи-Хеллмана с использованием эллиптических кривых.

Рисунок 9 – Просмотр дампа трафика через WireShark
Ещё один способ найти SSH соединения – запустить скрипт «», входящий в комплект SSH-MITM. Результат работы скрипта представлен на рисунке 10. Найдено соединение между 169.254.221.10 (SSH-клиент) и 169.254.221.15 (SSH-сервер). Теперь можно приступать к атаке.

Рисунок 10 – Запуск скрипта для поиска SSH соединений
После успешного нахождения целей (полученных в резульате анализа SSH соединений), можно приступить к атаке, запустив с правами администратора скрипт start.sh, как это показано на рисунке 11.

Рисунок 11 – Запуск атаки SSH-MITM
После настройки сети и запуска сервиса sshd-mitm, необходимо провести спуфинга ARP запросов. Необходимая для этого команда и результат показаны на рисунке 12.

Рисунок 12 – Запуск спуфинга ARP запросов
После начала перехвата трафика пользователь SSH-клиента, попытавшись подключиться к серверу, получит предупреждение о смене отпечатка SSH-сервера. Это один из немногих, если не единственный способ определить спуфинг атаку. Подобное предупреждение показано на рисунке 13.

Рисунок 13 – Предупреждение о смене отпечатка SSH-сервера
Чтобы обойти эту защиту необходимо удалить соответствующую строку из файла known_hosts или сам файл, который показан на рисунке 14. Файл ssh known_hosts – это файл, в котором хранится открытый ключ всех серверов (их отпечаток), к которым пользователь подключились с помощью ssh. Этот файл используется для проверки идентичности серверов в будущем.

Рисунок 14 – Файл known_hosts
Подключимся с SSH-клиента к SSH-серверу и введём некоторые команды. Данные действия показаны на рисунке 15.

Рисунок 15 – Подключение к SSH
Вернёмся на атакующий Kali Linux. Полученная в результате перехвата информация сохраняется в двух файлах: /var/log/auth.log (фрагмент представлен на рисунке 16) и /home/ssh-mitm/session.txt (фрагмент представлен на рисунке 17). Первый файл содержим перехваченный логин и пароль, а второй файл содержит логин, пароль, данные сессии и саму сессию SSH в расшифрованном виде.

Рисунок 16 – Перехваченные учётные данные

Рисунок 17 – Перехваченная сессия
**Выводы:** в результате выполнения практической работы были получены практические навыки работы с утилитой ssh-mitm. Была проведена атака на SSH «человек посередине», в результате чего были перехвачены логин, пароль и полная расшифрованная сессия SSH. Чтобы защититься от такой атаки необходимо обращать внимание на предупреждение о смене отпечатка SSH-сервера и проверять, реально ли на сервере были изменены ключи; также необходимо верифицировать шлюз, на который идут пакеты, а не слепо доверять ARP ответам.