Повышение безопасности Linux в серверной и облачной среде
Август 11, 2022
Linux много лет оставался узкоспециализированной ОС и поэтому не привлекал внимание киберпреступников. Но ввиду повсеместного перехода на отечественный софт на базе Linux возросло количество атак на ресурсы, использующие эту ОС. Вместе с тем в целом растет количество киберпреступлений в России:
- Число атак на госсектор и ИТ-сферу в 2021 г. составило 14%
- Доля атак на серверы составила 68% в 2022 г. (при этом количество незащищенных баз данных увеличилось на 37%)
- Каждое четвертое преступление совершается с применением ИТ-технологий
А это значит, что компаниям предстоит всерьез заняться вопросом ИТ-безопасности. Linux сам по себе является довольно надежной ОС, но его защита не идеальна. В этой статье мы расскажем, как повысить безопасность Linux в серверной и облачной среде.
- Как укрепить безопасность Linux-сервера
- Безопасность в облаке
- Выбор надежного дистрибутива Linux
- Новый Linux с акцентом на безопасность
- Еще по теме
Как укрепить безопасность Linux-сервера
Ужесточение политики паролей и аутентификации пользователей
Почти 80% организаций используют ненадежные пароли — велика вероятность, что ваша компания в их числе. К счастью, Linux позволяет задать параметры политики паролей и принудить пользователей к соблюдению установленных требований. Помимо этого можно настроить период истечения срока действия паролей и faillog для установки количества попыток авторизации. Для конфигурации аутентификации пользователей и политики паролей используйте Linux PAM (Pluggable Authentication Modules).
Надежный пароль состоит из набора десяти-двенадцати символов, включающих цифры, символы и буквы разного регистра. Но пользователи часто записывают сложные пароли и не соблюдают осторожность при хранении записей, что сводит все усилия специалистов по безопасности к нулю. Для решения проблемы можно ввести дополнительные уровни авторизации. Существует множество менеджеров паролей, совместимых с Linux и предоставляющих такие функции, как двухфакторная аутентификация, автозаполнение и т.д. Некоторые из них — опенсорсные (Bitwarden), некоторые требуют оформления подписки (1Password, Dashlane). Выбор зависит от бюджета, требований и используемого дистрибутива.
Также стоит отключить доступ root по SSH и никогда его не использовать, так как злоумышленники, завладевшие root-правами, получают доступ ко всей системе.
Только необходимые пакеты
Неиспользуемые пакеты ПО накапливаются в системе, занимая память и увеличивая поверхность атаки. Поэтому оставьте только компоненты, необходимые для работы сервера, и отключите или удалите неиспользуемые сервисы и функционал.
Для начала нужно получить список всех сервисов и пакетов. У Linux-дистрибутивов разные менеджеры пакетов, поэтому команды отличаются:
Если у вас RHEL/CentOS, наберите
yum list installed
Для Debian/Ubuntu:
apt list --installed
В Alpine Linux используется apk (Alpine Package Keeper), поэтому команда будет выглядеть так:
apk info
Проанализируйте полученный список пакетов, удалите ненужные и обновите оставшиеся. Вместо небезопасных тулов, таких как telnet, rlogin, rsh и т.д., используйте более надежные альтернативы: SSH, sftp, SCP и пр.
Регулярные обновления
ИТ-безопасность невозможно достичь без регулярного обновления ПО. Поставщики Linux-дистрибутивов, будь то компании или сообщества, постоянно выпускают патчи безопасности для ядра и остальных пакетов. Эти патчи необходимо устанавливать как можно скорее, чтобы защитить сервер от эксплойтов.
Процесс установки обновлений можно выполнять вручную или автоматизировать. Также можно обновить систему целиком, только ядро или выбранные пакеты. В качестве примера используем yum.
Проверить наличие обновлений можно с помощью команды
yum check-update
Для обновления всех пакетов, наберите
sudo yum update
Чтобы обновить определенные компоненты, используйте
sudo yum update <packagename>
Кроме того, yum позволяет устанавливать только патчи безопасности без других исправлений:
sudo yum update --security
Чтобы обновить только ядро, выполните
sudo yum update kernel
и перезапустите систему
sudo reboot
Некоторые компании предлагают функцию обновления ядра без перезагрузки системы, что помогает свести время простоя к минимуму и при этом соблюсти требования безопасности.
Также важно проверять срок окончания жизненного цикла дистрибутива (EOL), так как вендоры перестают поддерживать и выпускать обновления для устаревших версий ОС. С графиком EOL можно ознакомиться на сайте вендора. В целях минимизации рисков безопасности заранее запланируйте миграцию на свежую версию.
Стоит отметить, что рантайм тоже нужно регулярно обновлять. Обновления Java выходят четыре раза в год в виде критических обновлений безопасности (CPU). Они содержат исправления известных уязвимостей (CVE) и другие улучшения.
Защита от сетевых атак
Частота сетевых атак растет — в 2021 году на их долю пришлось 78% от общего числа киберинцидентов. Для защиты сети закройте неиспользуемые порты TCP и UPD. Чтобы вывести перечень всех открытых портов, используйте команду ss
или netstat
:
ss -tulpn | grep LISTEN
или
netstat -tulpn | grep LISTEN
Где флаг -t означает все TCP-порты, -u — UPD-порты, -l — слушающие сокеты сервера, -p — PID, -n — вывод без определения имен. После закрытия всех ненужных портов, воспользуйтесь инструментами firewalld
или iptables
для конфигурации правил firewall. Можно использовать Fail2ban — полезный инструмент для защиты от брутфорс-атак (путем перебора паролей) и подозрительных действий в целом. Fail2ban сканирует логи и блокирует IP-адреса, связанные с подозрительной деятельностью.
Настройка SSH
Протокол Secure Shell (SSH) — гораздо более надежный инструмент по сравнению с telnet rlogin, но для использования всех его возможностей его нужно правильно настроить. Используйте следующую команду для получения конфигурационного файла:
nano /etc/ssh/sshd_config
Далее измените некоторые настройки. Во-первых, поменяйте дефолтную версию протокола v1 на более безопасную v2, убрав символ # перед Protocol 2:
# The default requires explicit activation of protocol 1
Protocol 2
Во-вторых, отключите пустые пароли, изменив
#PermitEmptyPasswords no
на
PermitEmptyPasswords no
В-третьих, если у ваших серверов есть GUI, стоит отключить механизм X11 forwarding, который позволяет отображать на локальном компьютере графические интерфейсы X11-программ, запущенных на удаленном сервере. Для этого измените
X11Forwarding yes
на
X11Forwarding no
Также можно изменить максимальное количество попыток аутентификации, которое по умолчанию установлено на шесть. Давайте заменим на три, например:
MaxAuthTries 3
Это несколько основных советов по настройке SSH, а более детальный разбор представлен в пользовательской документации. После внесения всех изменений сохраните файл и перезапустите SSH с помощью команды
systemctl restart sshd
Безопасность в облаке
Linux — самая популярная ОС для Docker-контейнеров, а LXC (Linux Containers) заняла 33,5% рынка контейнерных технологий в 2021 году, обогнав Docker. Разработчики отдают предпочтение Linux за возможности гибкой настройки и безопасность, но дополнительные меры защиты Linux-контейнеров не помешают.
Во-первых, используйте надежный Linux-дистрибутив. Более подробный разбор дистрибутивов представлен ниже, но что касается облака, CentOS наиболее часто подвергается атакам (50.8%) (статья на английском языке). Поддержка этого дистрибутива была прекращена в 2019 г., поэтому сейчас он содержит много уязвимостей. А с учетом того, что это самый тяжеловесный Linux в облаке, мы рекомендуем миграцию на альтернативную ОС.
Помимо этого следите за тем, что вы «кладете» в свои контейнеры. Это относится как к версии ОС, так и опенсорсным компонентам. По данным Snyk (статья на английском языке), 56% участников опроса сталкивались с киберинцидентами, вызванными неправильной конфигурацией или наличием известных уязвимостей в облачной среде. Наш совет: никогда не скачивайте пакеты из ненадежных источников и всегда устанавливайте ПО последней версии с исправленными уязвимостями.
Еще одно важное замечание: в большинстве случаев контейнеры по умолчанию используют root. Опасность кроется в том, что root в облаке и на хосте (сервере) — один и тот же, поэтому злоумышленник, получивший доступ к root в контейнере, с легкостью может получить контроль над хостом. Во избежание этого используйте rootless контейнеры, позволяющие пользователю без привилегий root создавать контейнеры и управлять ими. Такой метод уменьшает поверхность атаки и защищает хост.
Выбор надежного дистрибутива Linux
Наиболее популярные дистрибутивы Linux мало чем отличаются друг от друга в плане средств защиты на уровне системы. Патчи Linux выходят по мере появления, в отличие от четкого графика CPU-обновлений Java (хотя некоторые вендоры OpenJDK предлагают экстренные и внеплановые исправления безопасности в рамках коммерческой поддержки). Соответственно, основное различие заключается в уровне поддержки, дополнительных инструментах и конфигурации.
Функции, обеспечивающие безопасность
Прежде всего, дистрибутив должен быть максимально чистым, т.е. содержать только необходимые пакеты. Универсальное правило — чем меньше компонентов в системе, тем меньше поверхность атаки. Вместо удаления ненужных пакетов вручную, как описано в разделе выше, лучше сразу выбрать компактный дистрибутив. В этом плане Alpine Linux — самое удобное решение с размером базового образа 2,67 МБ.
Не все дистрибутивы сопровождаются коммерческой поддержкой: в некоторых случаях помощь оказывает только сообщество (Debian, CentOS, Alpine Linux). Хотя бесплатный дистрибутив помогает сэкономить в краткосрочной перспективе, в целях безопасности следует сотрудничать с надежным поставщиком, который своевременно выпускает фиксы и патчи и готов оказать вам помощь 24/7. Желательно, чтобы вендор выпускал рекомендации по безопасности (security advisory) с уведомлением о последних обнаруженных CVE.
Некоторые вендоры предлагают удобные дополнительные инструменты для проверки целостности файлов и защиты системы от несанкционированных изменений. Например, Advanced Intrusion Detection Environment (AIDE), установленная в качестве дополнительного пакета, создает базу данных системных файлов и отслеживает проникновения в систему.
График обновлений
В 2021 году было зарегистрировано рекордное число атак, использующих уязвимости нулевого дня (статья на английском языке), обнаруженные, но еще не исправленные. Чем скорее компания или сообщество выпустит исправления безопасности, тем ниже риск эксплойтов. Некоторые компании предлагают автоматические обновления.
Кроме того, LTS-релизы получают обновления в течение длительного срока, поэтому компании чаще всего используют их в продакшене.
SELinux или AppArmor
Linux-дистрибутивы также различаются по используемой технологии изоляции — SELinux или AppArmor. Обе системы являются реализацией механизма Mandatory Access Control (MAC), направленного на ограничение доступа процессов к файлам и их изоляцию друг от друга.
SELinux контролирует доступ с помощью меток, в то время как AppArmor использует пути доступа к файлам. SELinux включает в себя большое количество функций для обеспечения безопасности, но при этом им очень сложно пользоваться. С другой стороны, AppArmor — более простой в усвоении и применении.
Кроме того, SELinux основан на принципе «по умолчанию все запрещено», т.е.все процессы изначально заблокированы и требуют разрешения на выполнение действий. AppArmor, наоборот, позволяет администраторам с самого начала ограничить только определенные процессы.
SELinux поставляется с RHEL, CentOS и Fedora, а Ubuntu, Debian и SUSE Linux по умолчанию используют AppArmor.
Сравнительная таблица
Ниже приведен сравнительный обзор популярных дистрибутивов Linux в соответствии с характеристиками безопасности.
CentOS | RHEL | Debian | Ubuntu | Alpine Linux | |
---|---|---|---|---|---|
Коммерческая поддержка | x | ✓ | x | ✓ | x |
Рекомендации по безопасности | ✓ | ✓ | ✓ | ✓ | x |
Система MAC (для хост-систем, не входят в базовый Docker-образ) | SELinux | SELinux | AppArmor | AppArmor | AppArmor |
Размер базового образа (сжатый) | 79,65 МБ | 10,3 МБ | 29,93 МБ | 27,01 МБ | 2,67 МБ |
Axiom Runtime Container Pro с акцентом на безопасность
Разработчики семейства продуктов Axiom знают, как важна безопасность ПО. Наша доверенная среда разработки и исполнения Java Axiom JDK Pro разрабатывается в соответствии с концепцией жизненного цикла безопасной разработки (SDL). Версия Axiom JDK Certified получила сертификат ФСТЭК на применение в системах с повышенными требованиями к защите данных. Поэтому наш Axiom Runtime Container Pro был создан с учетом лучших практик безопасной разработки и содержит все необходимое для обеспечения надежной среды выполнения процессов сервера и облачно-нативных приложений:
- Базовый образ с Linux, который оптимизирован для запуска Java приложений и поддерживает две libc, musl и glibc, для лучшей совместимости;
- Axiom JDK Pro Lite, легковесная версия Axiom JDK Pro, созданная специально для облачной инфраструктуры;
- Инструментарий Нативных Образов Axiom NIK для ускорения запуска приложений;
- Поддержка 24/7 от инженеров команды Axiom JDK.
Благодаря регулярным обновлениям базового образа, вы сможете разрабатывать безопасные решения на базе Axiom Runtime Container Pro, а легковесные компоненты контейнера позволят вам уменьшить потребление памяти и сократить расходы на облако!
Еще по теме
Хотите уменьшить размер своей ОС? Узнайте, как Linux удается сохранить адекватный функционал при минимальном размере на примере Alpine Linux
Работаете с контейнерами? Узнайте, как избежать побочных эффектов контейнеризации
Не уверены в надежности всех зависимостей вашего Java-приложения? Ознакомьтесь с обзором сканеров безопасности