
# **Цель практической работы**
Целью практической работы является проведение атаки MITM на SSH-сервер. Для достижения поставленной цели необходимо решить следующие задачи:
- установить SSH MITM;
- научиться использовать tcpdump;
- научиться работать со скриптами в папке ssh-mitm;
- научиться пользоваться arpspoof;
- разобраться как работает iptables;
- выяснить, что хранится в файле known_host;
- научиться анализировать содержимое файла auth.log.
По окончании практической работы будут приобретены навыки проведения атаки SSH MITM, а также получено осознание процесса атаки и на каких стадиях необходимо защищаться.
# **1 Установка SSH MITM**
В качестве машины атакующего будем использовать Kali Linux. Там уже имеются программы tshark, ettercap, arpspoof, nmap и iptables. Поэтому устанавливаем оставшиеся зависимости и SSH MITM следующим образом. Установим необходимые пакеты (python3-netaddr и python3-netifaces), склонируем репозиторий с SSH MITM, перейдём в необходимую директорию, на всякий случай выполним команду “export LANG=en_US.utf-8”.
Последняя команда нужна поскольку будет скачен исходный код SSH и будет проверена его подлинность с помощью GPG. Но дело в том, что GPG выводит сообщения на языке системы, а проверка в установочном скрипте install.sh выполняется только для английского языка. В общем, если не выполнить эту команду, то установка не завершиться из-за того, что установочный скрипт будет всё время спотыкаться о проверку подписи.
Запустим скрипт install.sh, по окончании его работы, ответим отрицательно на вопрос: “Kali Linux обнаружен без установленного AppArmor. Для дополнительной безопасности настоятельно рекомендуется (хотя и не обязательно) запускать sshdmitm в ограниченной среде. Хотите ли вы автоматически включить AppArmor?”.
Графическое сопровождение действий, описанных выше, представлено на рис. 1-4.

Рисунок 1 – Установка необходимых пакетов (python3-netaddr и python3 netifaces)

Рисунок 2 – Клонируем репозиторий с github, в котором находится SSH MITM

Рисунок 3 – Переходим в необходимую директорию, выполняем команду “export LANG=en_US.utf-8” и запускаем скрипт

Рисунок 4 – Результат работы скрипта install.sh
# **2 Поиск SSH подключений в локальной сети**
В комплекте с программой имеется скрипт JoesAwesomeSSHMITMVictimFinder.py, он делает поиск целей в локальной сети очень простым. Он выполняет атаку ARP спуфинг блоков IP на короткое время и сниффит трафик в поисках SSH подключений. IP адреса атакуются не одновременно, а небольшими блоками — все блоки обрабатываются последовательно, когда скрипт доходит до последнего, то всё начинается сначала. Он сообщит о всех исходящих SSH подключениях от устройств в локальной сети.
Данный скрипт будет искать SSH подключения, выполненные только к стандартному, то есть 22-му порту. SSH подключения на нестандартный порт он не увидит.
Тем не менее есть способ обнаружить SSH соединение во время его подключения, поскольку в момент подключения происходит обмен довольно характерными данными в незашифрованном виде.
## **2.1 Обнаружение SSH соединения на нестандартном порте**
Трафик SSH является зашифрованным. Тем не менее подключения к SSH можно обнаружить, поскольку зачастую SSH использует стандартны порт 22. И даже в случае, если хитрый системный администратор настроил работу на нестандартном порту, мы всё равно можем найти эти подключения.
Продемонстрируем эту возможность. Для этого запустим машину, на которой работает SSH-сервер на порту 2222 (её ip-адрес: 192.168.1.14). Далее на Kali Linux (ip-адрес: 192.168.1.9) запустим скрипт JoesAwesomeSSHMITMVictimFinder.py и включим агрессивный режим (см. рис. 5). Выполним подключение с ОС Windows 11 (ip-адрес: 192.168.1.3) к SSH-серверу, который работает на 2222 порту, и создадим видимость работы (см. рис. 6). Убедимся, что запущенный ранее скрипт не смог обнаружить SSH сессию.

Рисунок 5 – Запуск скрипта и активация агрессивного режима

Рисунок 6 – Подключение с ОС Windows 11 к SSH-серверу, который работает на 2222 порту
Теперь попробуем обнаружить SSH сессию с помощью утилиты tcpdump, запустим захват трафика и снова подключимся с ОС Windows 11 к SSH-серверу и создадим видимость работы. Остановим захват трафика, посмотрим 10 последних логов, связанных с 2222 портом, и выведем информацию в виде открытого текста, которая передаётся при инициализации передачи ключа. Описанные действия представлена на рис. 7-8.

Рисунок 7 – Захват трафика, остановка захвата, просмотр 10 последних логов, связанных с портом 2222

Рисунок 8 - Вывод информации в виде открытого текста, которая передаётся при инициализации передачи ключа
## **2.2 Обнаружение SSH соединения на стандартном порте**
Вернём SSH-серверу его стандартный 22 порт и запустим скрипт JoesAwesomeSSHMITMVictimFinder.py снова. Подключимся с ОС Windows 11 к SSH-серверу и создадим видимость работы (см. рис. 9). Обнаружим, что SSH соединение было обнаружено (см. рис. 10).

Рисунок 9 – Подключение к SSH-серверу, который работает на 22 порту

Рисунок 10 – Обнаружение SSH соединения с помощью скрипта
# **3 Проведение и завершение атаки**
Произведём установку утилиты arpspoof, которая будет перехватывать пакеты в локальной сети с коммутацией (см. рис. 11). Arpspoof перенаправляет пакеты от целевого хоста (или всех хостов) локальной сети, предназначенные для другого хоста в локальной сети, путём подмены ARP ответов. Это очень эффективный способ сниффинга трафика на коммутаторе.
Кроме того, необходимо включить IP форвардинг на Kali Linux, чтобы трафик уходил с Kali Linux на атакуемые машины (см. рис. 12).

Рисунок 11 – Установка утилиты arpspoof

Рисунок 12 – Включение IP форвардинга
Следом установим максимальные права доступа на директорию ssh-mitm (см. рис. 13). Далее внесём изменения в iptables с помощью скрипта start.sh для перехвата SSH пакетов (см. рис. 13).

Рисунок 13 – Настройка прав доступа директории

Рисунок 14 – Добавление правил в iptables с помощью скрипта
Также необходимо установить системную утилита rsyslog, которая обеспечит поддержку протоколирования сообщений (см. рис. 15). Именно благодаря этой утилите будет создан файл auth.log, информация о котором будет представлена ниже.

Рисунок 15 – Установка rsyslog
Далее запустим ARP спуфинг целей (см. рис. 16). Флаг “-r” позволяет отравлять (в переводе - poison) оба хоста, т.е. захват трафика происходит в обе стороны. Флаг “-t” определяет конкретный хост для ARP poison (если не задан, то все хосты в локальной сети).

Рисунок 16 – Запуск ARP спуфинга целей
Теперь возвращаемся на компьютер жертвы (Windows 11) и видим, что у нас оборвалась сессия. Подключимся снова и увидим предупреждение (см. рис. 17). Это предупреждение появляется, т.к. протокол SSH имеет встроенную защиту от реализуемого сценария атаки — он сохраняет некий отпечаток сервера и в случае, если отпечаток меняется, выдаёт предупреждение. В этом предупреждении говориться, что возможно в отношении нас выполняется атака человек-посередине, а возможно, что ключ хоста просто поменялся — неизвестно, в общем. Факт в том, что автоматически подключение не будет произведено. Нужно открыть файл ~/.ssh/known_host и либо вписать новый отпечаток, либо удалить запись для этого сервера и затем добавить новый отпечаток при инициализации подключения. Поэтому откроем файл known_host (см. рис. 18) и удалим отпечаток.

Рисунок 17 – Скриншот консоли с предупреждением

Рисунок 18 – Содержимое файла known_host
После удаления отпечатка подключимся с Windows 11 к SSH-серверу (см. рис. 19).

Рисунок 19 – Подключение к SSH-серверу после удаления слепка
Далее на дополнительном терминале запускаем просмотр всех логов из файла auth.log, связанные с sshd_mitm (см. рис. 20). Обнаруживаем логи и пароль (root:1234) для входа в систему, завершаем arpspoofing комбинацией клавиш Ctrl+c и возвращаем правила iptables в исходный вид (см. рис. 21).
Необходимо также отметить, что если каждый раз выходить из сессии и заходить по SSH, то каждый раз будет осуществляться перехват, мы будем видеть ip-адрес, логин и пароль.

Рисунок 20 – Перехват логина и пароля

Рисунок 21 – Возврат исходных правил iptables
# **Заключение**
Таким образом, в результате выполнения практической работы была проведена атака MITM на SSH-сервер, результатом которой являются перехваченный логи и пароль.
Приобретены практические навыки работы с tcpdump, arpspoof, iptables и другими скриптами в папке ssh-mitm. Кроме того, было изучено, что таиться в файлах known_host и auth.log.
Полученные знания и навыки в дальнейшем могут применяться только для благих намерений, например, для устройства на работу в команду по тестированию на проникновение.