172 похожих чатов

Всем привет. Сомневаюсь, что кто-то ответит, учитывая что прошлые вопросы

со звёздочкой пришлось разруливать и решать самому, но попробую.

Какие есть способы атаки на хост, имея полный доступ к докер сокету? Демон имеет настройки по умолчанию.
Например я знаю, что можно docker run -it --rm -v /:/host ubuntu:22.04 и так изменить любой файл в системе. Решается через использование subuid/subgid. Какие ещё есть здесь "уязвимости"?

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

25 ответов

39 просмотров

Привет! Хотя в Docker предпринимаются меры для обеспечения безопасности, полный доступ к докер-сокету все же может создавать определенные риски. Вот несколько потенциальных уязвимостей, на которые следует обратить внимание: Привилегии контейнера: При использовании докер-сокета и запуске контейнеров с привилегированными правами (например, опция --privileged), контейнер может иметь доступ к системным ресурсам хоста и выполнение привилегированных действий. Это может стать проблемой, если злоумышленник получит доступ к привилегированному контейнеру. Точки монтирования: Контейнеры Docker могут монтировать файловую систему хоста. Если злоумышленник получает доступ к докер-сокету и может монтировать корневую файловую систему хоста (-v /:/host), то он может изменять файлы и директории на хосте, включая конфигурационные файлы и ключевые системные компоненты. Взаимодействие с другими контейнерами: Если различные пользователи могут поднимать контейнеры на одной машине, это может создать уязвимость. Злоумышленник может попытаться скомпрометировать контейнер, запущенный другим пользователем, и получить доступ к его данным или использовать его как точку отправки атак на другие системы или контейнеры. Уязвимости контейнера: При использовании образов контейнеров, основанных на операционных системах, которые могут иметь известные уязвимости, злоумышленник может использовать эти уязвимости для расширения своих привилегий внутри контейнера и дальнейшей эксплуатации хост-системы. Отслеживание активности: Важно отслеживать активность и журналирование докер-событий. Это поможет определить подозрительную или злонамеренную деятельность, такую как неавторизованное использование докер-сокета или выполнение неправильных команд. Для обеспечения безопасности хоста со всеми пользователями, которые могут использовать Docker, рекомендуется принять следующие меры: Ограничьте доступ к докер-сокету только нужным пользователям или группам. Запускайте контейнеры без привилегий по умолчанию, чтобы минимизировать возможные угрозы. Регулярно обновляйте контейнеры и базовые образы, чтобы закрыть известные уязвимости. Изолируйте контейнеры друг от друга с помощью соответствующих механизмов Docker, например, сетевых namespaces или использования пользовательских namespaces. Обратите внимание, что эти рекомендации не являются исчерпывающим списком, и безопасность Docker-инфраструктуры требует постоянного обновления и применения надлежащих практик.

Да дохуя и больше, но все сведется к одному - создаешь привилегед контейнер и усе

Evgen-Fil // hehe Автор вопроса
Andrey
Да дохуя и больше, но все сведется к одному - созд...

Ну там даже subuid/-gid не особо помогут с некоторой хитростью( Только rootless daemon, а это боль, имхо

Evgen Fil // hehe
Ну там даже subuid/-gid не особо помогут с некотор...

Да ваще нет. А на кой тебе такая конфигурация?

Evgen-Fil // hehe Автор вопроса

Несколько проблем сразу решаю, они между собой никак не связаны. 1) Хочу поднять общий для инстанса гитлаб раннер и дать доступ к хостовому докер сокету, чтобы привычные команды типа docker build работали. Юзерам на инстансе доверяю, но хочется уменьшить импакт в случае каких-то проблем. 2) Есть сервак, но нормально его админить лень. Есть пачка программистов, которым потенциально недоверяю, но хочу, чтобы деплоем занимались чисто они с моим минимальным вмешательством.

Evgen Fil // hehe
Несколько проблем сразу решаю, они между собой ник...

Ебашь туда кубер, читай гайды по харденингу от PCI DSS и NSA и живи нормально

Evgen-Fil // hehe Автор вопроса
Evgen Fil // hehe
Несколько проблем сразу решаю, они между собой ник...

Первую проблему думаю решить по-другому, без докера, например через kaniko. Теперь думаю, как запилить безопасный деплой этих самых контейнеров на стороне гитлаб CI. Вторую проблему придётся решать чисто самому, видимо.

Evgen-Fil // hehe Автор вопроса
Andrey
Ебашь туда кубер, читай гайды по харденингу от PCI...

Звучит вкусно, но 1) на изучение кубера мной уйдёт некоторое время, а решение надо бы поскорее, хорошо знаю докер и он везде есть 2) прогеры не настолько крутые и вряд ли осилят кубер

Evgen Fil // hehe
Звучит вкусно, но 1) на изучение кубера мной уйдёт...

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

Evgen-Fil // hehe Автор вопроса
Andrey
Концепции кубера простые, его админить сложно. Но ...

Там им будет проще отказаться от написания деплоя, фриланс же

Evgen-Fil // hehe Автор вопроса
Andrey
Там деплой простейший

Надо глянуть тогда, вероятно вторая проблема решится, спасибо за совет

Evgen Fil // hehe
Надо глянуть тогда, вероятно вторая проблема решит...

Вы с докером дрочиться будете куда жестче. Можешь вообще флакс или арго взять и написать стандартные манифесты - у вас сервисы сильно отличаются что ли? Простая инструкция в итоге выйдет - делай раз, делай два

Evgen-Fil // hehe Автор вопроса
Andrey
Вы с докером дрочиться будете куда жестче. Можешь ...

Ну пара написана на пхп, остальное в основном питон

Evgen Fil // hehe
Ну пара написана на пхп, остальное в основном пито...

Да это уже не так важно, важно сколько в сервисе контейнеров

Evgen-Fil // hehe Автор вопроса
Andrey
Да это уже не так важно, важно сколько в сервисе к...

Обычно сам сервис + опционально бдшка рядом, если речь об этом

Evgen Fil // hehe
Обычно сам сервис + опционально бдшка рядом, если ...

Короче, там все просто - кубер это апи, туда кидаешься запросами. Вот основная концепция - https://kubernetes.io/docs/concepts/workloads/pods/ Поверх нее строятся другие - replicaset чтоб следить, чтобы подов было столько то, а поверх репликасета - деплоймент, чтобы рулить плавным обновлением версии. Для стейтлесс деплоймент всегда используешь. Параллельно репликасету есть стейтфулсет - там имена у подов постоянные и можно указать шаблон для создания аналога вольюма в докере. Это для стейтфул херни. Для сетевого доступа и балансировки есть service - ищет поды по лейблам и балансит трафик между ними, если кинуть запрос на хост с именем сервиса - в кубере есть днс. Сервис может быть и лоадбалансером с внешним ойпи, но тут если тебе нужно выставить через хттп кучу сервисов, то есть ingress - это типа конфига для nginx. Ставишь ингресс-контроллер и он собирает себе конфиг из этих ресурсов и обслуживает все запросы с одного сервиса типа loadbalancer

Evgen-Fil // hehe Автор вопроса

Спасибо!

Evgen Fil // hehe
Спасибо!

Ну там нюансов куча, еще наебешься

Andrey
Короче, там все просто - кубер это апи, туда кидае...

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

Evgen-Fil // hehe Автор вопроса
Andrey
Ну там нюансов куча, еще наебешься

Верю, слышал, морально готов. Осталось время найти)

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

Тут человек вроде минимально понимает за докер, так что могу опустить кучу подробностей. И это для одной машины. Кубер прям на кластере - это тот еще квест, но лучше ничего нет

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта