Как и любой другой компонент инфраструктуры, SSH-серверы подвержены угрозам и рискам безопасности. Мы уже рассказывали про защиту от брута SSH средствами Iptables. Сегодня поговорим про проверку защищенности SSH-сервера, с помощью инструмента ssh-audit и онлайн-сервиса Rebex SSH Check.
Еще по теме: Взлом пароля SSH с помощью Hydra
Проверка безопасности SSH-сервера
Есть два способа проверки конфигурации SSH:
- Путем просмотра файла конфигурации SSH и сравнения его с бенчмарком, таким как CIS.
- Используя Python скрипт ssh-audit, который позволяет извлекать большое количество информации о конфигурации протокола.
Аудит безопасности SSH-сервера с ssh-audit
Начнем с инструмента ssh-audit, который сканирует конфигурации сервера SSH и покажет, являются ли примененные нами конфигурации безопасными.
Основной особенностью этого инструмента является то, что он может аудитить каждую часть сервера SSH. Например, он сможет обнаружить баннер входа и использование небезопасного протокола, такого как SSH1.
На уровне шифрования коммуникаций, он способен проверять алгоритмы обмена ключами, открытый ключ хоста, симметричное шифрование после установления связи и аутентификационные сообщения. После анализа каждого из этих параметров вы получите полный отчет, указывающий, время изменения каждого пункта конфигурации, была ли она удалена или отключена, и является ли она безопасной.
Установка и выполнение ssh-audit
Установите ssh-audit из репозитория PyPI:
1 |
$ pip install ssh-audit |
Если используете дистрибутив Linux на базе Debian, можете установить ssh-audit следующей командой:
1 |
$ apt-get install ssh-audit |
Еще один способ установки ssh-audit — это код репозитории GitHub.
Самый быстрый способ запустить скрипт и протестировать сервер — это запустить его напрямую с помощью Python и предоставить в качестве аргумента доменное имя или IP-адрес сервера:
1 |
$ python ssh-audit.py |
Аргумент запуска ssh-audit:
1 2 3 4 5 6 7 8 |
-1, --ssh1: принудительно использовать версию ssh 1 -2, --ssh2: принудительно использовать версию ssh 2 -4, --ipv4: включить IPv4 -6, --ipv6: включить IPv6 -p, --port=: порт для подключения -b, --batch: пакетный вывод -v, --verbose: подробный вывод -l, --level=: минимальный уровень вывода (info | warn | fail) |
Для анализа локального сервера SSH:
1 |
$ ssh-audit.py -v localhost |
Также мы можно провести аудит внешнего сервера домена (например scanme.nmap.org):
1 |
$ ssh-audit.py scanme.nmap.org |
На следующих скринах мы видим, как инструмент отмечает алгоритмы разным цветом (алгоритм небезопасен, слаб или безопасен):
Таким образом, можно быстро определить и решить проблему с безопасностью сервера. Есть отображение версии SSH, используемой на основе информации об алгоритмах:
Скрипт ssh-audit показывает следующую информацию:
- Версия протокола и программного обеспечения, которое мы используем.
- Алгоритмы обмена ключами.
- Алгоритмы хоста.
- Алгоритмы шифрования.
- Алгоритмы аутентификации сообщений (хеш).
- Рекомендации по действиям с конкретными алгоритмами.
В отчетах инструмента мы видим, как он показывает используемые алгоритмы:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# algorithm recommendations (for OpenSSH 7.2) (rec) -ecdh-sha2-nistp521 -- kex algorithm to remove (rec) -ecdh-sha2-nistp384 -- kex algorithm to remove (rec) -ecdh-sha2-nistp256 -- kex algorithm to remove (rec) -diffie-hellman-group14-sha1 -- kex algorithm to remove (rec) -ecdsa-sha2-nistp256 -- key algorithm to remove (rec) -hmac-sha2-512 -- mac algorithm to remove (rec) -umac-128@openssh.com -- mac algorithm to remove (rec) -hmac-sha2-256 -- mac algorithm to remove (rec) -umac-64@openssh.com -- mac algorithm to remove (rec) -hmac-sha1 -- mac algorithm to remove (rec) -hmac-sha1-etm@openssh.com -- mac algorithm to remove (rec) -umac-64-etm@openssh.com -- mac algorithm to remove |
В случае, если нас интересует изменение конфигурации сервера по умолчанию, мы можем сделать это через файл конфигурации. Например, мы можем изменить порт по умолчанию и отключить баннер сервера:
1 2 3 4 |
$ sudo nano /etc/ssh/sshd_config Port 12000 PrintMotd no Banner /dev/null |
Также важно учитывать разрешения на файлы конфигурации, чтобы обеспечить принцип наименьших привилегий:
1 2 3 4 5 6 7 8 9 10 11 |
$ sudo chown -R root:root /etc/ssh $ sudo chmod 700 /etc/ssh $ sudo chmod 600 /etc/ssh/ssh_host_rsa_key $ sudo chmod 600 /etc/ssh/ssh_host_dsa_key $ sudo chmod 600 /etc/ssh/ssh_host_ecdsa_key $ sudo chmod 600 /etc/ssh/ssh_host_ed25519_key $ sudo chmod 644 /etc/ssh/ssh_host_rsa_key.pub $ sudo chmod 644 /etc/ssh/ssh_host_dsa_key.pub $ sudo chmod 644 /etc/ssh/ssh_host_ecdsa_key.pub $ sudo chmod 644 /etc/ssh/ssh_host_ed25519_key.pub $ sudo chmod 600 /etc/ssh/sshd_config |
Не забудьте, что для того чтобы изменения вступили в силу, необходимо перезапустить сервер SSH:
1 |
$ sudo service ssh restart |
После аудита SSH инструментом SSH-Audit, можно использовать онлайн-инструменты, которые позволяют проверить безопасность серверов SSH, среди которых можно выделить инструмент Rebex SSH Check.
Аудит безопасности SSH-сервера с Rebex SSH Check
Rebex SSH Check — это сервис, который позволяет сканировать алгоритмы обмена ключами сервера и алгоритмы симметричного шифрования, а также алгоритмы MAC, которые в данный момент настроены на анализируемом нами SSH-сервере.
Заключение
Мы рассмотрели аудит безопасности SSH-сервера, используя инструмент ssh-audit и онлайн-инструмент Rebex SSH Check. Проводя аудит SSH-сервера с помощью этих инструментов, вы сможете обеспечить безопасность сервера. Также, для дополнительной защиты SSH, рекомендую статью «Получение уведомления на почту о входе через SSH».
ПОЛЕЗНЫЕ ССЫЛКИ:
- SSH с использованием Paramiko на Python
- Брут SSH с помощью Metasploit на Kali Linux
- Получение информации об SSH при пентесте