![](https://i.imgur.com/gN7LgSK.png) # **Цель практической работы** Целью практической работы является проведение атаки 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. ![](https://i.imgur.com/cM75yn2.png) Рисунок 1 – Установка необходимых пакетов (python3-netaddr и python3 netifaces) ![](https://i.imgur.com/jCqBkFM.png) Рисунок 2 – Клонируем репозиторий с github, в котором находится SSH MITM ![](https://i.imgur.com/GCnGAc0.png) Рисунок 3 – Переходим в необходимую директорию, выполняем команду “export LANG=en_US.utf-8” и запускаем скрипт ![](https://i.imgur.com/OpWH0H0.png) Рисунок 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 сессию. ![](https://i.imgur.com/kyYz04A.png) Рисунок 5 – Запуск скрипта и активация агрессивного режима ![](https://i.imgur.com/jANjSTE.png) Рисунок 6 – Подключение с ОС Windows 11 к SSH-серверу, который работает на 2222 порту Теперь попробуем обнаружить SSH сессию с помощью утилиты tcpdump, запустим захват трафика и снова подключимся с ОС Windows 11 к SSH-серверу и создадим видимость работы. Остановим захват трафика, посмотрим 10 последних логов, связанных с 2222 портом, и выведем информацию в виде открытого текста, которая передаётся при инициализации передачи ключа. Описанные действия представлена на рис. 7-8. ![](https://i.imgur.com/EHd6fgd.png) Рисунок 7 – Захват трафика, остановка захвата, просмотр 10 последних логов, связанных с портом 2222 ![](https://i.imgur.com/iUGFzwk.png) Рисунок 8 - Вывод информации в виде открытого текста, которая передаётся при инициализации передачи ключа ## **2.2 Обнаружение SSH соединения на стандартном порте** Вернём SSH-серверу его стандартный 22 порт и запустим скрипт JoesAwesomeSSHMITMVictimFinder.py снова. Подключимся с ОС Windows 11 к SSH-серверу и создадим видимость работы (см. рис. 9). Обнаружим, что SSH соединение было обнаружено (см. рис. 10). ![](https://i.imgur.com/AgHihpy.png) Рисунок 9 – Подключение к SSH-серверу, который работает на 22 порту ![](https://i.imgur.com/kIyoDex.png) Рисунок 10 – Обнаружение SSH соединения с помощью скрипта # **3 Проведение и завершение атаки** Произведём установку утилиты arpspoof, которая будет перехватывать пакеты в локальной сети с коммутацией (см. рис. 11). Arpspoof перенаправляет пакеты от целевого хоста (или всех хостов) локальной сети, предназначенные для другого хоста в локальной сети, путём подмены ARP ответов. Это очень эффективный способ сниффинга трафика на коммутаторе. Кроме того, необходимо включить IP форвардинг на Kali Linux, чтобы трафик уходил с Kali Linux на атакуемые машины (см. рис. 12). ![](https://i.imgur.com/fyAJrf2.png) Рисунок 11 – Установка утилиты arpspoof ![](https://i.imgur.com/N3Tqkt0.png) Рисунок 12 – Включение IP форвардинга Следом установим максимальные права доступа на директорию ssh-mitm (см. рис. 13). Далее внесём изменения в iptables с помощью скрипта start.sh для перехвата SSH пакетов (см. рис. 13). ![](https://i.imgur.com/NxSUGLV.png) Рисунок 13 – Настройка прав доступа директории ![](https://i.imgur.com/Pt0pqee.png) Рисунок 14 – Добавление правил в iptables с помощью скрипта Также необходимо установить системную утилита rsyslog, которая обеспечит поддержку протоколирования сообщений (см. рис. 15). Именно благодаря этой утилите будет создан файл auth.log, информация о котором будет представлена ниже. ![](https://i.imgur.com/GuuOaD6.png) Рисунок 15 – Установка rsyslog Далее запустим ARP спуфинг целей (см. рис. 16). Флаг “-r” позволяет отравлять (в переводе - poison) оба хоста, т.е. захват трафика происходит в обе стороны. Флаг “-t” определяет конкретный хост для ARP poison (если не задан, то все хосты в локальной сети). ![](https://i.imgur.com/EbDMUUq.png) Рисунок 16 – Запуск ARP спуфинга целей Теперь возвращаемся на компьютер жертвы (Windows 11) и видим, что у нас оборвалась сессия. Подключимся снова и увидим предупреждение (см. рис. 17). Это предупреждение появляется, т.к. протокол SSH имеет встроенную защиту от реализуемого сценария атаки — он сохраняет некий отпечаток сервера и в случае, если отпечаток меняется, выдаёт предупреждение. В этом предупреждении говориться, что возможно в отношении нас выполняется атака человек-посередине, а возможно, что ключ хоста просто поменялся — неизвестно, в общем. Факт в том, что автоматически подключение не будет произведено. Нужно открыть файл ~/.ssh/known_host и либо вписать новый отпечаток, либо удалить запись для этого сервера и затем добавить новый отпечаток при инициализации подключения. Поэтому откроем файл known_host (см. рис. 18) и удалим отпечаток. ![](https://i.imgur.com/DNp0Me7.png) Рисунок 17 – Скриншот консоли с предупреждением ![](https://i.imgur.com/rxFjgol.png) Рисунок 18 – Содержимое файла known_host После удаления отпечатка подключимся с Windows 11 к SSH-серверу (см. рис. 19). ![](https://i.imgur.com/ZokV8tq.png) Рисунок 19 – Подключение к SSH-серверу после удаления слепка Далее на дополнительном терминале запускаем просмотр всех логов из файла auth.log, связанные с sshd_mitm (см. рис. 20). Обнаруживаем логи и пароль (root:1234) для входа в систему, завершаем arpspoofing комбинацией клавиш Ctrl+c и возвращаем правила iptables в исходный вид (см. рис. 21). Необходимо также отметить, что если каждый раз выходить из сессии и заходить по SSH, то каждый раз будет осуществляться перехват, мы будем видеть ip-адрес, логин и пароль. ![](https://i.imgur.com/7VEqggX.png) Рисунок 20 – Перехват логина и пароля ![](https://i.imgur.com/ApzXJHX.png) Рисунок 21 – Возврат исходных правил iptables # **Заключение** Таким образом, в результате выполнения практической работы была проведена атака MITM на SSH-сервер, результатом которой являются перехваченный логи и пароль. Приобретены практические навыки работы с tcpdump, arpspoof, iptables и другими скриптами в папке ssh-mitm. Кроме того, было изучено, что таиться в файлах known_host и auth.log. Полученные знания и навыки в дальнейшем могут применяться только для благих намерений, например, для устройства на работу в команду по тестированию на проникновение.