# Практическая работа №6 (“Fail2Ban-SSH и Brute-force attack”.) ## Цель работы: Научиться настраивать Fail2Ban для SSH ## Задача: 1) Настроить SSH-сервер и SSH-клиент 2) Запретить доступ от root 3) Вывести журнал подключений пользователей SSH 4) Установить и настроить Fail2Ban для SSH 5) Провести несколько разных атак ## Основные понятия 1) ***SSH*** - это Secure Shell (безопасная оболочка), специальный протокол для передачи данных в безопасном режиме. Он очень часто применяется для удаленного управления компьютерами и устройствами по сети. 2) ***Fail2Ban*** - это бесплатная популярная программная платформа с открытым исходным кодом, разработанная для предотвращения вторжений, которую можно использовать для защиты вашего сервера от атак методом перебора паролей. Одной из главных задач Fail2ban является блокировка IP-адреса, активность которого имеет явный вредоносный признак. 3) ***Hydra*** - это программное обеспечение с открытым исходным кодом для перебора паролей в реальном времени от различных онлайн сервисов, веб-приложений, FTP, SSH и других протоколов. Это распараллеленный взломщик для входа в систему, он поддерживает множество протоколов для осуществления атак. ## Подготовка к работе 1) Для начала нужно обновиться: > sudo apt-get update 2) Затем установим утилиту Fail2Ban > sudo apt-get install fail2ban После установки данной утилиты мы должны прописать команду для активации: > service fail2ban start 3) После этого установим Hydra: > sudo apt-get install hydra Мы можем начинать! ## Работа с SSH (Сервер) Установка пакетов SSH: > sudo apt-get install ssh После установки проверим состояние SSH: > service sshd status ![](https://i.imgur.com/IgXXKKq.png) Режим работы SSH-сервера с настройками по-умолчанию хоть и является вполне работоспособным для небольших частных сетей, всё же нуждается в задании некоторых важных параметров для использования на высоконадёжных публичных серверах. Настройки демона хранятся в файле ***/etc/ssh/sshdconfig*** Просмотреть его содержимое можно командой: > cat /etc/ssh/sshd_config В первую очередь следует обратить внимание на следующие параметры: Port, AddressFamily, ListenAddress. ***Port*** Глобально задаёт номер порта, через который будет работать соединение и если оставить его стандартным, т. е. 22, то велика вероятность, что он будет слишком часто сканироваться роботами. ![](https://i.imgur.com/64EqyOz.png) ***AddressFamily*** и ***ListenAddress*** ![](https://i.imgur.com/xGdXYwn.png) Если необходимо использовать доступ по паролю, то обязательно нужно отключать авторизацию по пустому паролю: > PermitEmptyPasswords no ![](https://i.imgur.com/9RNcyA1.png) Следует также отключать root-доступ: > PermitRootLogin no ![](https://i.imgur.com/L8WKE0Q.png) Для применения сделанных настроек необходим перезапуск SSH-сервера: > sudo systemctl restart sshd Итоговый файл конфигурации выглядит следуюзим образом: ![](https://i.imgur.com/UzjfS6u.png) ![](https://i.imgur.com/Dubksrz.png) Остальное отавить по-умолчанию. Очень полезным является параметр, позволяющий проводить авторизацию и шифрование трафика с помощью специальных SSH-ключей: > PubkeyAuthentication yes Следует заметить, что в таком случае серверу необходимо явно указывать, где хранятся открытые ключи пользователей. Это может быть как один общий файл для хранения ключей всех пользователей (обычно это файл etc/.ssh/authorized_keys), так и отдельные для каждого пользователя ключи. Второй вариант предпочтительнее в силу удобства администрирования и повышения безопасности: > AuthorizedKeysFile etc/ssh/authorized_keys # Для общего файла > > AuthorizedKeysFile %h/.ssh/authorized_keys # Файл -> пользователь Во втором варианте благодаря шаблону автоподстановки с маской «%h» будет использоваться домашний каталог пользователя. ## Fail2Ban знакомство Все файлы конфигурации хранятся в следующей директории: > ls -al /etc/fail2ban Самый важный файл в данной конфигурации ***jail.conf***, поскольку в нём содержатся фильтры по умолчанию. Пример вывода: ![](https://i.imgur.com/IQfU8S2.png) На моём примере вывода можно заметить файл с названием ***jail.local***, я его создала для того, чтобы не потерять записанный мною фильтр при перезапуске Fail2Ban. Чтобы создать этот файл, нужно прописать команду ***nano jail.conf***, находять в директории /etc/fail2ban. Далее нужно вписать следующие данные: ![](https://i.imgur.com/avJuaNO.png) В логах под названием ***auth.log*** показываются все попытки аунтификации по sshd. После настройки необходимо перезапустить сервис командой, это нужно для того, чтобы новые настройки вступили в силу: > service fail2ban restart Удостоверюсь, что Fail2Ban активен: > service fail2ban status Пример вывода: ![](https://i.imgur.com/RAyJjJK.png) ### Проверка работоспособности Попробуем подключиться по ssh и ввести три раза неправильно пароль: Пример вывода: ![](https://i.imgur.com/GZjPV2d.png) ## Вывод журнала подключений Попробую подключиться по SSH: ![](https://i.imgur.com/jhlyaAR.png) Затем проверю на сервере историю подключений: > cat /var/log/auth.log ![](https://i.imgur.com/futjB2k.png) ## Проведение атак ### Fail2Ban VS Patator Patator – это инструмент атак Brute-forcе для многоцелевого и гибкого использования в рамках модульной конструкции. Он использует инструменты и скрипты атак для получения паролей. Необходимо создать 2 файла: 1. Файл с возможными именами пользователя > sudo touch users_name.txt ![](https://i.imgur.com/KLa6yR9.png) 2. Файл с возможными паролями пользователя > sudo touch passwords.txt ![](https://i.imgur.com/s0gfqSO.png) Посмотрим свой ip адрес: ![](https://i.imgur.com/RKeVbxt.png) Чтобы начать брутфорс-атаку, необходимо использовать команду: > patator ssh_login host=192.168.176.139 user=FILE0 password=FILE1 0=user_name.txt 1=passwords.txt -x ignore:mesg='Authentication failed' Где: `host=` - ip адрес цели `user=FILE0 password=FILE1` - данные, которые будет использовать Potator при брутфорс-атаке `0=user_name.txt 1=passwords.txt` - файлы, созданные нами, именно из них Potator будет брать данные для брутфорса `-х ignore:mesg= 'Authentication failed'` - команда не выводить на экран строку, имеющую данное сообщение. Параметр фильтрации подбирается индивидуально. То есть в зависимости от версии и настроек сервера, сообщение об неудачной аутентификации может быть другим ![](https://i.imgur.com/X8De3hc.png) ### Patator без Fail2Ban ![](https://i.imgur.com/syLfRVb.png) ### Fail2Ban VS Hydra При использовании такого инструмента, как Hydra, необходимо знать имя пользователя, в сторону которого будет проводиться брутфорс-атака. Попробуем использовать Hydra: > hydra -V -f -t 4 -l olpeach -P ./passwords.txt ssh://192.168.176.139 Где: `l – использовать логин;` `P – использовать пароль из файла со списком;` ![](https://i.imgur.com/6fTs62K.png) ### Hydra без Fail2Ban ![](https://i.imgur.com/ORod2Fl.png) ### Fail2Ban VS Medusa В нашем случае воспользуемся командой: > medusa -h 192.168.176.139 -u olpeach -P passwords.txt -M ssh -f -v 6 `-h` - IР-адрес жертвы `-u` - Логин `-Р` - Путь к словарю `-М` - Выбор модуля `-f` - Остановка после нахождения валидной пары логин/пароль `-v` - Настройка отображения сообщений на экране во время процесса подбора ![](https://i.imgur.com/nz6VXaN.png) ### Medusa без Fail2Ban ![](https://i.imgur.com/gIAMZok.png)