Поймали пароль в дампе - и за вечер перешли на SSH
Дамп трафика с общего свича показал пароль администратора открытым текстом: telnet не шифрует ничего. За один вечер перевели весь парк на OpenSSH и закрыли telnet навсегда.
OpenSSH вытесняет telnet в Linux-среде
История началась не с взлома и не с инцидента в привычном смысле. Просто один из наших инженеров решил разобраться, почему на свиче иногда тормозит трафик, поставил на ноутбук tcpdump и снял дамп на несколько минут. Разбираться с тормозами он разобрался, но заодно в том же дампе совершенно открытым текстом лежал логин и пароль администратора одного из серверов - человек заходил по telnet прямо через тот же сегмент.
Пароль был виден буква за буквой. Telnet не шифрует вообще ничего: ни логин, ни пароль, ни всё, что вы набираете после входа. Всё идёт в открытом виде, и любой, кто сидит в том же широковещательном домене и умеет запустить сниффер, видит полную сессию. Хаб или дешёвый неуправляемый свич - без разницы, трафик всё равно летит ко всем портам.
Мы показали это клиенту. Реакция была предсказуемой: «а что, так можно было?» Да, именно так и работает telnet с 1969 года - протокол проектировался для доверенных сетей, где все свои. Офисный свич таковой не является.
Что решили делать. Переходить на SSH - это было очевидно. OpenSSH к тому моменту уже стоял на большинстве наших Linux-машин, просто не использовался для удалённого управления: по привычке продолжали ходить telnet-ом, потому что «так всегда было». Задача на вечер - включить SSH везде, убедиться что работает, выключить telnet.
Прошлись по всем серверам. Схема была одинаковой на каждом:
- Проверить, запущен ли sshd -
ps aux | grep sshd. На большинстве машин демон уже стоял, просто не был в автозапуске. - Проверить
/etc/ssh/sshd_config- убедиться что порт 22 слушает, root login пока разрешили чтобы не отрезать себя в процессе перехода. - Добавить sshd в автозапуск через chkconfig или вручную в rc.local - зависело от дистрибутива.
- Попробовать зайти по SSH с другой машины - прежде чем трогать telnet.
- Только после проверки убрать telnet из inetd.conf и перезапустить inetd.
Последовательность важна. Если сначала выключить telnet, а потом обнаружить что SSH не работает - останешься без удалённого доступа к машине и придётся ехать к железу физически. Стойки у клиента стоят не в соседней комнате, так что спешки с отключением telnet лучше избегать.
На паре машин выяснились мелкие неприятности. На одной не было пакета openssh-server - поставили. На другой в sshd_config был прописан конкретный IP для ListenAddress, который уже не актуален после смены адресации - поправили. В целом прошло без сюрпризов.
Отдельный вопрос - Windows-машины. RDP там и так шифрует сессию, это не telnet. Но некоторые администраторы иногда ставили telnet-сервер на Windows для скриптовых задач - это тоже убрали. Для скриптовой автоматизации на Windows тогда альтернатив было меньше, но хотя бы не telnet в открытую сеть.
Что поменяли в привычках. Клиент попросил объяснить, что ещё может «лежать в открытом виде» в сети. Объяснили: FTP - пароли тоже в открытом тексте. POP3 без SSL - логин и пароль почты тоже виден. HTTP - весь веб-трафик. Это не значит что нужно сразу всё переделать, но понимать что твой офисный свич - не защищённая среда, полезно.
Пароль администратора, который попал в дамп, сменили. Это само собой.
По итогу вечера все Linux-серверы у клиента ходят по SSH, telnet выключен в inetd, и дополнительный сниффинг трафика ничего интересного не показывает - только зашифрованные сессии. Заняло часа три с проверками. Могло занять дольше, если бы не нормальная документация по сети - без понимания где какие машины стоят, такой переход превращается в квест.
Иногда самое полезное, что можно сделать для безопасности - это просто запустить сниффер и посмотреть, что летит по своей же сети. Результат бывает неожиданным.
- Первый домен NT 4.0 в Active Directory: апгрейд без лишних нервов · 5 октября 2000
- Первая 19-дюймовая стойка: три сервера, KVM и горячий воздух не туда · 20 августа 2000