Повышение безопасности Linux в серверной и облачной среде

Повышение безопасности Linux в серверной и облачной среде


Август 11, 2022


Linux много лет оставался узкоспециализированной ОС и поэтому не привлекал внимание киберпреступников. Но ввиду повсеместного перехода на отечественный софт на базе Linux возросло количество атак на ресурсы, использующие эту ОС. Вместе с тем в целом растет количество киберпреступлений в России:

А это значит, что компаниям предстоит всерьез заняться вопросом ИТ-безопасности. Linux сам по себе является довольно надежной ОС, но его защита не идеальна. В этой статье мы расскажем, как повысить безопасность Linux в серверной и облачной среде.

  1. Как укрепить безопасность Linux-сервера
    1. Ужесточение политики паролей и аутентификации пользователей
    2. Только необходимые пакеты
    3. Регулярные обновления
    4. Защита от сетевых атак
    5. Настройка SSH
  2. Безопасность в облаке
  3. Выбор надежного дистрибутива Linux
    1. Функции, обеспечивающие безопасность
    2. График обновлений
    3. SELinux или AppArmor
    4. Сравнительная таблица
  4. Новый Linux с акцентом на безопасность
  5. Еще по теме

Как укрепить безопасность 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 МБ
Сравнение безопасности Linux-дистрибутивов

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-приложения? Ознакомьтесь с обзором сканеров безопасности

Author image

Олег Чирухин

Директор по коммуникациям с разработчиками (DevRel)

Axiom JDK info@axiomjdk.ru Axiom JDK logo Axiom Committed to Freedom 199 Obvodnogo Kanala Emb. 190020 St. Petersburg RU +7 812-336-35-67 Axiom JDK 199 Obvodnogo Kanala Emb. 190020 St. Petersburg RU +7 812-336-35-67