☸️ Как защитить кластер Kubernetes, предотвращая загрузку нежелательных модулей

Мануал
Дорога к безопасным контейнерам длинная и извилистая.
Одна остановка, которую вы должны предпринять в этом путешествии, – отключить ненужные модули ядра в ваши контейнеры Linux.
Kubernetes – это невероятная классная система управления контейнерами.
Но с этой силой приходит большая ответственность у разработчиков и администраторов.

Если вы не развертываете защищенные контейнеры в защищенных кластерах, вы сражаетесь в проигрышной битве с самого начала.

К счастью, речь идет о Linux, поэтому вы можете многое сделать для обеспечения безопасности ваших развертываний.

Одна очень важная задача, которую вы можете выполнить, – предотвратить загрузку нежелательных модулей ядра в ваши контейнеры.

Вы будете удивлены тем, сколько модулей загружается при загрузке – многие из них вам, вероятно, не нужно использовать в ваших контейнерах.
Давайте посмотрим, как это сделать!
Я продемонстрирую это с помощью контейнера, основанного на последнем образе Ubuntu Server.
Я буду делать это с помощью инструмента Multipass.
Если вы не используете Multipass, вы все равно можете позаботиться об этом, независимо от того, какую технологию контейнеров вы используете, если ваши контейнеры основаны на Linux.

Как развернуть и получить доступ к контейнеру Ubuntu

Давайте сначала развернем новый контейнер с Multipass.

Мы развернем Ubuntu Daily 20.04 с помощью команды:

multipass launch daily:20.04
После запуска контейнера вам будет предоставлено случайно сгенерированное имя для развертывания.
Если вы пропустите это имя, вы можете просмотреть его с помощью команды:
multipass list

Теперь, когда контейнер развернут, получите доступ к его оболочке с помощью команды:

multipass shell NAME
Где NAME – это случайно сгенерированное имя контейнера.

Как отключить и занести в черный список модули

Мы собираемся занести в черный список модули, которые мы не хотим загружать в наши контейнеры.
Чтобы сделать это, вы должны сначала знать, какие модули загружаются.

Чтобы вывести список всех загруженных в данный момент модулей, введите команду:

lsmod
Вам будет представлен каждый модуль, который в данный момент загружен в ядро:
Пролистайте этот список и найдите все модули, которые вы не хотите загружать в ядро вашего контейнера.

Поскольку контейнеры, как правило, имеют очень конкретное назначение, вероятно, мы можем занести модули в черный список.

Прежде чем мы действительно создадим черный список модулей, которые мы не хотим загружать при загрузке, мы должны отключить  их.

Почему?
Это контейнер, а не виртуальная машина или стандартная ОС, поэтому вы не можете перезагрузиться.

Вот почему нам нужно вручную  оффнуть модули.

Чтобы вручную выгрузить работающий модуль, введите команду:

sudo modprobe -r MODULENAME
Где MODULENAME – это имя модуля.

Если вы выполните команду lsmod, вы должны увидеть, что модуль больше не загружается в ядро.

Как только вы скомпилировали свой список, откройте файл черного списка на редактирование с помощью команды:

sudo nano /etc/modprobe.d/blacklist.conf
В этом файле вы добавите все модули, которые вы хотите исключить, в виде:
blacklist MODULENAME
Где MODULENAME – это имя модуля.
Например, вы хотите запретить загрузку модуля ядра floppy:
blacklist floppy
Примечание. Вы должны быть осторожны, дабы не занести в черный список модули, которые имеют решающее значение для работы ОС или того, от чего будет зависеть ваш контейнер. Поэтому, прежде чем занести модуль в черный список, обязательно немного изучите то, что делает этот модуль.
К этому моменту вы вручную удалили все модули ядра, которые вы не хотите загружать, и создали черный список, чтобы они никогда не загружались.

Мы должны остановить и запустить контейнер и увидеть, что эти модули списки больше не загружаются.

Однако, если вы обнаружите, что модули все еще загружаются, это означает, что образ все еще использует старую копию initramfs, которая не содержит ваших изменений.

Пересоберите initramfs с помощью команды:
sudo update-initramfs -u
В следующий раз, когда вы остановите и запустите свой контейнер, вы обнаружите, что занесенные в черный список модули наверняка не загрузятся.

Заключение

Это не универсальная мера безопасности для ваших контейнеров Kubernetes.

Это то, что вы должны учитывать при разработке приложений и сервисов, которые зависят от контейнера Linux.

Вам не нужны посторонние, а иногда и небезопасные модули, работающие в контейнере, которые могут обойтись с минимальным минимумом.

Подумайте об этом процессе как об одной из многих ступеней, которые вы должны пройти, чтобы развернуть действительно безопасные контейнеры.

 

Добавить комментарий