Как да защитим Docker за производствена среда?

Нека да разгледаме как да втвърдим и закрепим Docker за производствената среда.


Макар че докер направи възможно разработчиците на софтуер и инженерите на DevOps бързо да изграждат и разгръщат приложения, освен това предлага голяма повърхност за атаки на хакери, които използват кибер.

Ще разгледаме как да защитим Docker на Linux платформа от следното.

  • Пропуски в конфигурацията
  • Дистанционно изпълнение на код
  • Буфер прелива
  • Подправяне на изображения и т.н..

Ще използваме следните инструменти, като например Нотариален сървър на Докер за подписване на изображения и Сигурност на докерската пейка за да проверите за хост, конфигурация на демон и т.н..

Преди да пристъпим към сигурността, нека да докоснем основите.

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

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

На пазара има редица контейнерни технологии, като например Апаче Месо, ракета, lxc, и докер. Въпреки че попадат в категорията на контейнерните технологии, те функционират по различен начин.

Разлика между VM & VE

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

Какво е Докер?

Docker е контейнерна технология, използвана от милиони за създаване на уеб приложение и разгръщане от тестване към производствена среда.

Докер двигател

Докер двигателят е съставен от три компонента.

  • Сървър: Този компонент е дългогодишен процес или демон, отговорен за управлението на изображения и контейнери.
  • REST API: Този интерфейс дава възможност демона на докер и клиентския инструмент за докер да комуникират.
  • Инструмент за клиент на Docker: Клиентският инструмент Docker използва компонента REST API, за да информира демона на докера за работа с контейнерно приложение.

Докер доверен регистър

Docker Trusted Registry е решение за съхранение на изображения от Docker за бизнеса на корпоративната платформа. Тя е различна от тази на докер хъб.  Докато центърът за докер се хоства в облака, надеждният регистър на докер е решение за съхранение на място Docker Enterprise Edition.

Докер съдържанието доверие

Docker Content Trust предоставя възможността да се използват подписи на данни за изображения, изпратени и получени до и от отдалечени регистри на докер, като например докер център.

Linux Namespaces

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

Linux контролни групи (групи)

Linux Control Groups е функция на ядрото на Linux, която ви позволява да разпределяте ресурси като време на процесора, честотна лента на мрежата, системна памет и т.н. на активни процеси на хост.

Възможности

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

Сега нека се съсредоточим върху сигурността.

Осигуряване на домакин на Докер

В този раздел ще разгледаме как да защитим хоста, където Docker пребивава.

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

Преди да хоствате докер на Linux платформа, първо трябва да инспектирате ядрото. Има няколко инструмента с отворен код като Lynis и OpenVAS можете да използвате за сканиране на Linux ядрото.

Копирайте или клонирайте проекта Lynis от Github с помощта на командата git clone.

git клонинг https://github.com/CISOfy/lynis.git

След това използвайте командата по-долу, за да отидете в директорията на lynis и да извършите одит на Linux системата.

CD линис; ./lynis система за одит

Harden Linux ядро

След като сканирате ядрото на Linux за системни уязвимости, можете да добавите още един допълнителен слой на защита към ядрото чрез grsecurity. Той предоставя функции за сигурност като следните.

  • Предотвратяване на експлоатация на буферно преливане
  • / tmp рана предотвратяване на уязвимост
  • / proc ограничения, които не пропускат информация за собствениците на процеси.
  • Предотвратяване на произволно изпълнение на код в ядрото и т.н..

Първоначално можете Изтегли пачове безплатно от grsecurity и го приложите към текущото ви ядро. Но вече не позволява безплатни лепенки.

Инсталирайте Docker във VM

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

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

По подразбиране Docker изисква root права за създаване и управление на контейнери. Зловредният скрипт може да използва тази атакова повърхност, за да ескалира до суперпотребител на хост на Linux и евентуално да получи достъп до чувствителни файлове / папки, изображения, сертификати и т.н..

За да го предотвратим, можем да използваме следната команда. Можем да решим да откажем възможностите като setgid и setuid, за да предотвратим други програми или процеси да променят своя GID в друг GID, което може да доведе до привилегия за ескалация. Можете също да проверите тук за списък с дефиниция на възможностите на Linux.

Командата по-долу управлява контейнера на web-сървъра на апаш и пуска зададените и настроени възможности чрез –cap-drop, за да попречи на контейнера апаш да промени GID и UID в друг UID и GID.

GID и UID в този контекст се отнасят съответно до идентификатор на групата и потребителски идентификатор.

docker run -d –cap-drop SETGID –cap-drop SETUID апаш

Докер потребител

Освен да предотвратявате други програми или процеси, можете също да създадете потребител, който да управлява докер операции, като например изпълнение на докер, вместо да го управлявате чрез суперпотребител.

Можете да добавите или създадете потребител на докер чрез следното:

sudo groupadd docker

Командата по-горе създава група, наречена docker

След това създайте потребител с помощта на командата по-долу:

sudo useradd mike

Накрая използвайте командата по-долу, за да добавите потребителски микрофон към груповия докер, за да администрирате докер операции.

sudo usermod -aG docker mike

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

В производствена среда може да имате повече от един контейнер.

Ако нямате инсталирани групи на вашия хост, можете да използвате следната команда, за да го инсталирате и след това да проверите тук (за Ubuntu) как да го конфигурирате.

sudo apt – вземете инсталирайте cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

Можем да разпределим контейнерите към ограничени ресурси на процесора чрез –cpu-share и –cpuset-cpus

Следващият пример за команда показва, че процесът на контейнер prodnginx се изпълнява само върху първото ядро ​​чрез –cpuset-cpus и разпределя 20 CPU чрез –cpu-share, докато процесът на контейнер проксинкс се изпълнява на първите две ядра на процесора и също така се разпределя 20 процесор.

docker run -d – име prodnginx –cpuset-cpus = 0 –cpu-share = 20 nginx
docker run -d –name testnginx –cpuset-cpus = 2 –cpu-share = 20 nginx

След това въведете статистиката на командния докер, за да видите използването на процесора от контейнерите prodnginx и testnginx

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

Добра идея е да определите CPU-споделяния за хост на докер, когато имате повече от един контейнер, работещ върху него.

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

Пространството от имена може да попречи на контейнерите да се изпълняват като привилегировани потребители, което може да помогне да се избегнат атаки за ескалация на привилегиите.

Можем да активираме пространството на имена в docker, като използваме / etc / subuid и / etc / subgid файлове, както е показано по-долу.

  • създайте потребител с помощта на командата adduser

sudo adduser dockremap

  • Настройте subuid за потребителската док-карта

sudo sh -c ‘echo dockremap: 400000: 65536 > / И т.н. / subuid “

  • След това настройте subgid за потребителската dockremap

sudo sh -c ‘echo dockremap: 400000: 65536 > / И т.н. / subgid “

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

vi /etc/docker/daemon.json
{

"userns-оставам": "dockremap"

}

  • Натиснете: wq, за да запазите и затворите файла daemon.json и накрая рестартирайте докер, за да активирате пространства от имена на хост на докера

sudo /etc/init.d/docker рестартиране

Осигуряване на Docker Daemon

Необходимо е също така да конфигурирате Docker демон, за да осигурите сигурна комуникация между докер клиента и докер демон чрез TLS.

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

vi daemon.json
{
"отстраняване на грешки": невярно,
"TLS": вярно,
"tlscert": "/var/docker/server.pem",
"tlskey": "/var/docker/serverkey.pem",
"Силите": ["TCP: //192.168.16.5: 2376"]
}

Осигуряване на компоненти на Docker

Нека да разгледаме как да използваме инструменти като CodeNotary и нотариален сървър да подписвате изображения, за да избегнете подправяне на изображения. Освен това е необходимо да сканирате изображения, само за да сте сигурни, че изображенията не са пълни с уязвимости

Ще използваме нотариалния сървър на Docker за подписване и проверка на изображения и използване Котва на двигателя за сканиране на изображения за уязвимости.

Проверете изображенията с нотариален сървър

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

  • Изпълнете командата по-долу, за да изтеглите последната версия на Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s) – $ (unme -m)" -o / usr / local / bin / docker-compose

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

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

  • Можете да проверите дали успешно сте инсталирали docker-compose чрез следната команда

docker-compose –версия

  • Сега можем да инсталираме нотариалния сървър чрез docker-compose

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

  • Командата по-горе клонира или копира нотариалния сървър от нотариално хранилище
  • Стартирайте нотариалния сървър и подписал чрез командите по-долу:

docker-compose build
docker-compose up -d

  • След това копирайте сертификатите за конфигурация и тестове в местната нотариална директория, като използвате командата по-долу

mkdir -p ~ / .notary && cp cmd / нотариус / config.json cmd / нотариус / root-ca.crt ~ / .notary

  • Сега изпълнете следната команда, за да свържете нотариалния сървър към клиента на докера

експортиране DOCKER_CONTENT_TRUST = 1
експортиране DOCKER_CONTENT_TRUST_SERVER = https: // notaryserver: 4443

  • Генерирайте двойка ключове за делегиране чрез командата по-долу

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

  • Сега нека създадем нови насочени ключове в случай, че хранилището не съществува

docker trust signner add –key ~ / .docker / trust / mike.pub mike mikedem0 / whalesay

  • След това можете да подпишете вашето изображение на докер с помощта на командния знак за доверие на докер. Необходимо е да издърпате изображението на докер от концентратора на докер и да маркирате повторно, като използвате командата за издърпване и докер маркер съответно.

знак за докер доверие mikedem0 / nginx: най-нов

Можете също да сканирате изображения на докер за уязвимости и пропуски в конфигурацията. Можете да проверите тук, за да разберете как да използвате Anchor Engine за сканиране на уязвимости и Докер пейка сигурност за да проверите за пропуски в конфигурацията.

Надявам се, че горното ви дава представа за сигурността на Docker за производствената среда. Може да искате да проверите и този курс за Udemy хакване и обезопасяване на Docker контейнери.

ЕТИКЕТИ:

  • докер

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