Русский
Русский
English
Статистика
Реклама

Microk8s

Перевод Изучаем (отсутствующую) безопасность типичных установок Docker и Kubernetes

10.08.2020 20:22:45 | Автор: admin


Я работаю в IT больше 20 лет, но как-то руки не доходили до контейнеров. В теории я понимал, как они устроены и как работают. Но поскольку я никогда с ними не сталкивался на практике я не был уверен в том, как именно крутятся-вертятся у них шестерёнки под капотом.


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


Для быстрого старта я записался на курсы Black Hat 2020 под названием Из грязи в князи: проникновение и защита окружений Docker Swarm и Kubernetes.


Курс, который проводили Sheila A. Berta и Sol Ozzan, сразу же начался с описания того, как работают контейнеры Docker, а также какой путь они проходят при разворачивании в Kubernetes. Это было полностью практическое занятие студенты должны были предварительно перед занятиями установить Docker и microk8s на свои машины отличный способ увидеть взаимодействие инструментов между собой, найти слабые места и, что самое важное, попробовать их блокировать.


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



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


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


Красная команда


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


Монтирование docker.sock внутри контейнера опасно: если вы получили root внутри контейнера, а также установили Docker внутри контейнера, имеющего сокет Docker (/var/run/docker.sock), у вас есть потенциальная возможность исследования целого кластера, включая доступ к любому другому контейнеру. Такой доступ невозможно предотвратить ни сетевой изоляцией, ни другими способами.


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


Docker API может выдать кучу информации: Docker API, при настройке по умолчанию, работает без авторизации и может выдавать кучу информации. Используя Shodan можно легко найти список открытых портов, потом получить подробную информацию о кластере и перейти к его полному захвату. TrendMicro написали об этом интереснейшую статью.


Синяя команда


Не запускайте содержимое контейнеров под root: несмотря на то, что под root запускать проще, вы не должны этого делать. Вместо этого запускайте приложения с сброшенными правами отобразив uid либо с помощью параметра --user при работе с CLI, либо указывая USER в Dockerfile.


Не разрешайте установку программ в контейнерах: почти каждая атака начинается с установки чего-нибудь. Начиная с nmap и заканчивая ifconfig и самим Docker (внутри контейнера), установка чего-либо в контейнере была обычным делом. По этой же причине всегда нужно блокировать все неиспользуемые порты. Это также помогает предотвратить передачу управляющих команд при заражении вашей машины. Кроме предотвращения установки программ, стоит убедиться в том, что в самом контейнере установлено минимальное число приложений, нужное для выполнения задачи.


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


Используйте секреты Docker вместо переменных окружения: Секреты есть примерно с 2017 года. Хотя это и небезопасно, но все же лучше, чем переменные окружения для передачи секретных данных в контейнер.


Если статья вызвала у вас интерес к контейнерам можно достаточно легко установить Docker и\или microk8s (небольшая версия Kubernetes). Здесь есть инструкции по установке Docker для Linux и MacOS, а здесь инструкции по установке microk8s для Windows, Linux и MacOS.


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


Если есть желание и\или необходимость пройти комплексный курс по Docker, в котором спикеры-практики разбирают все его инструменты: от основных абстракций до параметров сети, нюансов работы с различными ОС и языками программирования, то попробуйте Видеокурс по Docker. Вы познакомитесь с технологией и поймете, где и как лучше использовать Docker. А заодно получите best practice кейсы лучше обучаться в безопасности и с поддержкой практиков на историях о граблях, чем лично на самих граблях с шипованными ручками.

Подробнее..

Установка простого приложения (например Superset) в microk8s используя metallb и helm

03.03.2021 10:13:29 | Автор: admin

Snaps являются кросс-дистрибутивными, независимыми и простыми в установке приложениями, упакованными со всеми их зависимостями для запуска во всех основных дистрибутивах Linux. Snaps безопасны они ограничены и не ставят под угрозу всю систему. Они работают под разными уровнями содержания (то есть степень изоляции от базовой системы и друг от друга).


MicroK8s это CNCF-сертифицированное развертывание локального кластера Kubernetes, он предназначен для быстрой и легкой установки потока Kubernetes, изолированной от вашей локальной среды. В качестве оснастки он запускает все службы Kubernetes (т.е. без виртуальных машин), упаковывая при этом весь необходимый набор библиотек и файлов. Эта изоляция достигается за счет упаковки всех двоичных файлов для Kubernetes, Docker.io, iptables и CNI в единый пакет Snap.


Преимущества microk8s:


  • использует только необходимые ему ресурсы
  • кластеризация нескольких microk8s
  • легкая и простая установка в Ubuntu через snap, хваленая изоляция snap пакетов, возможность легкого отката на предыдущую версию
  • наличие аддонов

Apache Superset это веб-приложение для поиска и визуализации данных.


Helm это диспетчер пакетов для Kubernetes, упрощающий для разработчиков и операторов упаковку, настройку и развертывание приложений и служб в кластерах Kubernetes.


MetalLB это реализация балансировщика нагрузки для кластеров Kubernetes на голом железе со стандартными протоколами маршрутизации. Он выделяет службы с отдельными выделенными адресами IP, выделенными из пула.


Операционная система: Ubuntu 18.04


Устанавливаем Snapd, git


sudo apt-get update && sudo apt-get install -y snapd git

Устанавливаем microk8s версии 1.18


sudo snap install microk8s --classic --channel=1.18/stable && sudo snap install helm --classic

Стартуем microk8s


sudo microk8s.start

Добавляем текущего пользователя в группу microk8s


sudo usermod -a -G microk8s $USER

Меняем права директории .kube в домашней директории текущего пользователя


sudo chown -f -R $USER ~/.kube

Выходим из сессии и заходим снова


exit

Делаем алиал kubectl на microk8s.kubectl


alias kubectl=microk8s.kubectl

Активируем дополнения microk8s. В опциях дополнения metallb указываем список IP с ваших сетевых карточек. Если у вас 1 сервер, то это два одинаковых IP адреса. Кластеризацию microk8s я не проверял, но по идее нужно указывать IP адреса обоих серверов. Для этого обязательна кластеризация microk8s. IP на сетевой карте 192.168.22.7. У вас он будет другой.


microk8s enable dns ingress storage metallb:192.168.22.7-192.168.22.7 

Смотрим что все поды у нас Running


kubectl get all --all-namespaces

Скачиваем репозиторий superset


git clone https://github.com/apache/superset.git

Переходим в директорию где хранится helm для superset


cd superset/helm/superset

Скачиваем зависимиости для текущего helm


helm dependency update

Сохраняем конфиг для подключения к Kubernetes


sudo microk8s.kubectl config view --raw > $HOME/.kube/config

Запускаем установку superset с помощью helm используя конфиги в текущей директории


helm install --set persistence.enabled=true,service.type=LoadBalancer,ingress.enabled=true,ingress.hosts[0]=superset.192.168.22.7.xip.io  superset ./

Если вы перейдет по ссылке superset.192.168.22.7.xip.io то увидите вот такой экран.



Логин и пароль по умолчанию admin/admin. Superset настроен. Можно пользоваться.



Если нужно удалить весь кластер Kubernetes в microk8s, то можно воспользоваться командой reset


microk8s reset --destroy-storage
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru