Как обезопасить докер для производственной среды?

Давайте посмотрим, как укрепить и защитить Docker для производственной среды..


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

Мы рассмотрим, как защитить Docker на платформе Linux от следующих.

  • Недостатки конфигурации
  • Удаленное выполнение кода
  • Переполнение буфера
  • Подделка изображений и т. Д..

Мы будем использовать следующие инструменты, такие как Нотариальный сервер Докера подписывать изображения и Безопасность скамьи Докера проверить хост, конфигурацию демона и т. д..

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

Что такое контейнерная технология?

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

На рынке существует ряд контейнерных технологий, таких как Apache Mesos, ракета, LXC, а также докер. Хотя они относятся к категории контейнерных технологий, они функционируют по-разному.

Разница между ВМ & В.Е.

Хост виртуальной машины полностью отличается от хоста виртуальной среды. На виртуальных машинах каждое контейнерное приложение поставляется со своим собственным набором библиотек и операционной системой, в то время как приложения по умолчанию на хосте виртуальной среды, таком как lxc, и docker совместно используют ядро ​​Linux..

Что такое Докер?

Docker – это контейнерная технология, используемая миллионами для создания веб-приложения и его развертывания из тестирования в производственной среде..

Docker Engine

Docker Engine состоит из трех компонентов.

  • Сервер: этот компонент – длительный процесс или демон, отвечающий за управление образами и контейнерами..
  • REST API: этот интерфейс позволяет демону docker и клиентскому инструменту docker обмениваться данными.
  • Инструмент клиента Docker: инструмент клиента Docker использует компонент API REST для информирования демона docker о работе с контейнерным приложением.

Docker Trusted Registry

Docker Trusted Registry – это решение для хранения изображений от Docker для бизнеса на платформе предприятия. Это отличается от док-хаб.  В то время как концентратор докеров размещается в облаке, доверенный реестр докеров является локальным решением для хранения данных. Docker Enterprise Edition.

Docker Content Trust

Docker Content Trust предоставляет возможность использовать подписи данных для изображений, отправляемых и получаемых в и из удаленных реестров докеров, таких как Docker Hub..

Пространства имен Linux

Пространства имен Linux – это функция ядра Linux, которая изолирует контейнерное приложение или процесс, выполняющийся на хосте виртуальной среды, от других процессов..

Linux Control Groups (Cgroups)

Linux Control Groups – это функция ядра Linux, которая позволяет выделять такие ресурсы, как время процессора, пропускная способность сети, системная память и т. Д., Для активных процессов на хосте..

возможности

В Linux в подсистеме ядра есть функция безопасности, которая может быть установлена ​​или принудительно установлена ​​для ограничения привилегированного процесса, такого как процесс, выполняемый пользователем с UID 1. Хотя привилегированные процессы или пользователи могут обойти дискреционные разрешения контроля доступа, они не могут обойти правила возможностей.

Теперь давайте сосредоточимся на безопасности.

Защита Docker Host

В этом разделе мы рассмотрим, как защитить хост, на котором находится Docker..

Сканирование ядра Linux

Прежде чем разместить докер на платформе Linux, вам сначала нужно проверить ядро. Есть несколько инструментов с открытым исходным кодом, таких как Lynis а также OpenVAS Вы можете использовать для сканирования ядра Linux.

Скопируйте или клонируйте проект Lynis из Github с помощью команды git clone..

git clone https://github.com/CISOfy/lynis.git

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

cd lynis; ./lynis система аудита

Харден Linux ядро

После того, как вы проверили ядро ​​Linux на наличие системных уязвимостей, вы можете добавить еще один дополнительный уровень защиты к ядру через Grsecurity. Это обеспечивает функции безопасности, такие как следующие.

  • Предотвращение эксплуатации переполнения буфера
  • / tmp предотвращение расовой уязвимости
  • Ограничения / proc, которые не пропускают информацию о владельцах процессов.
  • Предотвращение выполнения произвольного кода в ядре и т. Д..

Изначально вы можете скачать патчи бесплатно от grsecurity и примените их к вашему текущему ядру. Но это больше не позволяет бесплатные патчи.

Установите Docker в ВМ

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

Защита корневых привилегий

По умолчанию Docker требует привилегий root для создания и управления контейнерами. Вредоносный сценарий может использовать эту поверхность атаки, чтобы перейти к суперпользователю на хосте Linux и в конечном итоге получить доступ к конфиденциальным файлам / папкам, изображениям, сертификатам и т. Д..

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

Приведенная ниже команда запускает контейнер веб-сервера apache и удаляет возможности setgid и setuid с помощью –cap-drop, чтобы предотвратить изменение контейнером apache своего GID и UID на другой UID и GID..

GID и UID в этом контексте относятся к идентификатору группы и идентификатору пользователя соответственно.

docker run -d –cap-drop SETGID –cap-drop SETUID apache

Пользователь Docker

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

Вы можете добавить или создать пользователя Docker с помощью следующего:

доко группы sudo

Команда выше создает группу с именем docker

Затем создайте пользователя с помощью команды ниже:

sudo useradd mike

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

sudo usermod -aG докер майк

Управление контейнером с помощью групп

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

Если на вашем хосте не установлены cgroups, вы можете использовать следующую команду, чтобы установить его, а затем проверить Вот (для Ubuntu) о том, как его настроить.

sudo apt-get установить cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

Мы можем выделить контейнеры для ограниченных ресурсов ЦП через –cpu-shares и –cpuset-cpus

В следующем примере команды показано, что контейнерный процесс prodnginx выполняется только на первом ядре через –cpuset-cpus и выделяет 20 ЦП через –cpu-shares, а контейнерный процесс proxnginx выполняется на первых двух ядрах ЦП, а также выделяется 20 ЦПУ.

запуск докера -d –name prodnginx –cpuset-cpus = 0 –cpu-shares = 20 nginx
Docker run -d –name testnginx –cpuset-cpus = 2 –cpu-shares = 20 nginx

Затем введите команду docker stats для просмотра загрузки ЦП контейнерами prodnginx и testnginx

ИМЯ КОНТЕЙНЕРА ИМЯ ЦП% MEM ИСПОЛЬЗОВАНИЕ / ОГРАНИЧЕНИЕ MEM% NET I / O BLOCK I / O
845bea7263fb prodnginx 57.69% 1.258MB / 985.2MiB 0.13% 578B / 0B 1.33MB / 0B
189ba15e8258 testnginx 55,85% 1,25 МБ / 985,2 МБ 0,13% 578 Б / 0 В 1,33 МБ / 0 В

Рекомендуется определять общие ресурсы ЦП для хоста докера, когда на нем запущено несколько контейнеров..

Управление контейнерами с пространствами имен

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

Мы можем включить пространство имен в Docker, используя файлы / etc / subuid и / etc / subgid, как показано ниже.

  • создать пользователя с помощью команды adduser

Судо Adduser Dockremap

  • Настройте subuid для пользователя dockremap

Док-карта sudo sh -c ‘echo: 400000: 65536 > / И т.д. / subuid»

  • Затем настройте subgid для пользователя dockremap

Док-карта sudo sh -c ‘echo: 400000: 65536 > / И т.д. / subgid»

  • Откройте файл daemon.json и заполните его следующим содержимым, чтобы связать атрибут userns-remap с пользователем dockremap

vi /etc/docker/daemon.json
{

"userns-переназначить": "dockremap"

}

  • Нажмите: wq, чтобы сохранить и закрыть файл daemon.json и, наконец, перезапустить Docker, чтобы включить пространства имен на хосте Docker.

sudo /etc/init.d/docker restart

Обеспечение Docker Daemon

Также необходимо настроить демон Docker для обеспечения безопасной связи между клиентом Docker и демоном Docker через TLS..

Используйте следующую команду, чтобы открыть файл daemon.json, скопировать и вставить следующее содержимое (замените IP-адрес действительным), как показано ниже.

vi daemon.json
{
"отлаживать": ложный,
"TLS": правда,
"tlscert": "/var/docker/server.pem",
"tlskey": "/var/docker/serverkey.pem",
"хостов": ["ТСР: //192.168.16.5: 2376"]
}

Защита компонентов Docker

Давайте посмотрим, как использовать такие инструменты, как CodeNotary а также нотариус подписывать изображения, чтобы избежать подделки изображений. Кроме того, необходимо также сканировать изображения, чтобы убедиться, что изображения не содержат уязвимостей.

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

Проверка изображений с помощью нотариуса

Прежде чем мы сможем использовать нотариальный сервер для подписи изображений, нам нужно скачать и установить docker-compose. Мы будем использовать Docker Compose для настройки нотариального сервера.

  • Запустите команду ниже, чтобы загрузить последнюю версию Docker Compose

Судо Керл -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s) – $ (uname -m)" -o / usr / local / bin / docker-compose

  • Примените исполняемые права доступа к docker-compose, как показано ниже

sudo chmod 700 / usr / local / bin / docker-compose

  • Вы можете проверить, успешно ли вы установили docker-compose, с помощью следующей команды

docker-compose –version

  • Теперь мы можем установить нотариальный сервер через docker-compose.

git clone https://github.com/theupdateframework/notary.git

  • Команда выше клонирует или копирует нотариальный сервер из нотариальное хранилище
  • Запустите нотариальный сервер и подписавшего с помощью следующих команд:

сборка докера
docker-compose up -d

  • Затем скопируйте конфигурацию и протестируйте сертификаты в локальный каталог нотариусов, используя команду ниже

mkdir -p ~ / .notary && cp cmd / notary / config.json cmd / notary / root-ca.crt ~ / .notary

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

export DOCKER_CONTENT_TRUST = 1
export DOCKER_CONTENT_TRUST_SERVER = https: // notaryserver: 4443

  • Сгенерируйте пару ключей делегирования с помощью команды ниже

ключ доверия docker генерирует mike –dir ~. / docker / trust

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

docker trust signer add –key ~ / .docker / trust / mike.pub майк mikedem0 / whalesay

  • Затем вы можете подписать свой образ докера, используя знак доверия команды docker. Вам нужно извлечь образ докера из концентратора док-станции и повторно пометить его, используя команды docker pull и docker tag соответственно.

доверенный знак докера mikedem0 / nginx: последние

Вы также можете сканировать образы докеров на наличие уязвимостей и недостатков конфигурации. Вы можете проверить здесь, чтобы узнать, как использовать Anchor Engine для поиска уязвимостей и Безопасность скамьи Докера проверить недостатки конфигурации.

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

TAGS:

  • докер

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map