Канал о (не)безопасности Kubernetes + микросервисных, контейнеризированных приложений. Ведет команда www.luntry.ru Вопросы, идеи, предложения => @Qu3b3c https://knd.gov.ru/license?id=673ddbc21039886b1d03b7ce®istryType=bloggersPermission
Мысли/идеи о том что Virtual Desktop Infrastructure (VDI)
можно сделать на базе классических/нативных контейнеров в Kubernetes
все чаще мелькают на просторах сети и статья "mnl_584/how-i-came-to-build-a-cheap-server-cluster-for-vdi-ca2ed6028eb2">How I came to build a cheap server cluster for VDI" еще одно подтверждение этому. Ранее мы писали о проекте kVDI, потом находили проект webmesh-vdi.
В рамках данной работы получился проект VM-Operator (написан на Java
), где Qemu-based
виртуальные машины (не классическая контейнеризация и так давно можно с помощью KubeVirt, но все же ) запускаются в Kubernetes Pods
.
Мы абсолютно уверенны, что когда-нибудь и защита специализированных клиентский рабочих мест сведется к защите контейнеров ;)
Сегодня нам бы хотелось поделиться с вами интересным докладом с интригующим названием специалиста Google
- "Why Perfect Compliance Is the Enemy of Good Kubernetes Security" (видео) c KubeCon + CloudNativeCon North America 2024. Самый полезный на наш взгляд слайд мы вынесли в картинку поста ;)
В начале октября в рамках AM Life Plus наша команда Luntry в лице Дмитрия Евдокимова выступила с темой "Как контейнеры и Kubernetes меняют ландшафт угроз" в стиле TEDx
. Где очень кратенько (всего 8
мин), без слайдов постаралась порассуждать на тему являются ли контейнерные технологии с оркестраторами новой головной болью для безопасников или наоборот являются новой возможностью противодействовать текущим вызовам и проблем ИБ.
На нашем сайте стали доступны слайды и видеозапись доклада "Kubernetes Audit Log в арсенале SOC" c SOC Forum 2024.
В рамках данного доклада наша команда Luntry делиться своими опытом и знанием о детектах на базе событий Kubernetes Audit Log
.
В рамках конференции Cloud Native Rejekts 2024 прошел доклад “Malicious Compliance Automated: When You Have 4000 Vulnerabilities and only 24 Hours Before Release” от Duffie Cooley и Kyle Quest. Данный доклад является логическим развитием одного из моим самых любимых докладов за последнее время "Malicious Compliance: Reflections on Trusting Container Image Scanners" =)
В новом докладе авторы обманывали сканеры уязвимостей всеми правдами и неправдами уже не в ручную, а автоматизировано и получили результат с нескольких тысяч уязвимостей до 0
=) В основном для это авторы использовали инструмент mint.
Кто там сторонник zero tolerance
к уязвимостям?! В общем сезон образов без уязвимостей объявляется открытым!
Сегодня начался KubeCon + CloudNativeCon North America 2024, а значит что нас ждет море интересных докладов и анонсов. Ряд из больших анонсов уже были сделаны в преддверии конференции. Нам бы отдельно хотелось выделить:
1) Релиз containerd 2.0 (1.0
была выпущена 7
лет назад) - тут наконец есть стабильная поддержка user namespaces
.
2) Istio Ambient Mode (то что работает без sidecar
) достиг статуса General Availability
в версии v1.24
, что заняло у него чуть больше 2
-х лет.
P.S. В комментариях можно поделится докладами, которые вам наиболее интересны с данного мероприятия.
12 ноября на конференции DevOops 2024 наша команда Luntry выступит с докладом “Латаем огрехи в образах приложений до рантайма, во время и после”, расскажем как сделать использование образов безопасными.
Внесем изменения на уровне самого образа, применяя модификации слоев с помощью docker-squash
, mint
и т. д. «Подкрутим» рантайм на уровне операционной системы и Kubernetes
: AppArmor
, capabilities
, управление привилегиями и другие «ручки». Рассмотрим наблюдение за аномальным поведением контейнеров в рантайм.
Продолжая тематику Kubernetes Network Security
, Rory McCune
представил новую заметку в своем блоге – Exploring A Basic Kubernetes Network Plugin.
Статья объясняет, как в Kubernetes
кластере Pods
получают IP
-адреса через сетевые плагины, соответствующие спецификации CNI
. В примере используется kind
с плагином kindnetd
.
Конфигурация сети хранится в файле 10-kindnet.conflist
, где указаны IP
-диапазоны для каждого узла. Для маршрутизации трафика между подами на разных узлах kindnetd
создает записи в таблице маршрутизации. В завершение автор отмечает, что работа с сетью в Kubernetes
может быть сложной и зависит от выбранного сетевого плагина.
Тем временем, в предверии конференции KubeCon + CloudNativeCon NA 2024
, вышла новая версия Kyverno
– 1.13
. Основных изменений не так много:
- добавлена поддержка подписей images
, использующих sigstore bundle
- добавлена поддержка PolicyExceptions
для ValidatingAdmissionPolicies
сгенерированных из Kyverno политик (используя subrule validate.cel
)
Также нельзя не упомянуть о ломающих изменениях:
1) С версии 1.13
у контроллеров Kyverno отобраны wildcard
разрешения на просмотр всех ресурсов. Это изменение может повлиять на отчеты, а также на политики mutate
и generate
на пользовательских ресурсах, поскольку контроллер больше не сможет просматривать пользовательские ресурсы
2) CVE-2024-48921 позволяла пользователям с возможностью создавать PolicyExceptions
обходить ClusterPolicy
в конкретном неймспейсе.
Rory McCune
, чьи исследования мы не раз упомянали на канале, начал новую серию статей – на этот раз, посвященную Kubernetes network security
.
Первая статья из цикла – The Many IP Addresses of Kubernetes. В ней автор объясняет сложность сетевых IP
-адресов в Kubernetes
, где используются три основные IP
-диапазона: адреса для Nodes
, overlay сети для Pods
и сети для Service
. Также на примере разбирается как Kubernetes
связывает IP
на уровне ОС с помощью iptables
, управляемых kube-proxy
.
Сегодня в центре нашего внимания статья "Exploring Google Cloud Default Service Accounts: Deep Dive and Real-World Adoption Trends". В рамках нее исследователи проанализировать права облачного Default Service Accounts
в облаке GCP
и в частности Google Kubernetes Engine (GKE)
. Материал будет полезен как клиентам данных систем, так и облачным провайдерам, чтобы своевременно предусмотреть и создать соответствующие механизмы безопасности. В частности тут речь идет про Workload Identity, про который мы уже неоднократно писали [1,2,3,4] на канале, но не встречали аналога в отечественных облаках.
Сегодня хотим поделиться крутым докладом от Rory McCune
– Charting the Course: The History and Evolution of Kubernetes Security с недавно прошедшей конференции Kubernetes Community Days UK
.
В докладе автор рассказывает о том как значительно улучшилась безопасность Kubernetes
за последние 10 лет, а также о моментах на которые нужно и важно обращать внимание. Ко всему прочему автор не забывает упомянуть 4 "неисправимых" CVE
в Kubernetes
.
30 октября на конференции SafeCode 2024 Autumn наша команда в лице Сергея Канибора представит доклад "Security observability в Kubernetes". Из доклада вы узнаете, как Luntry
может помочь разработчикам, QA
-специалистам, системным аналитикам, Ops/DevOps/DevSecOps
, командам ИБ и SOC
строить и поддерживать надежную и безопасную инфраструктуру.
Также на конференции наш коллега Анатолий Карпенко (Luntry
) совместно с Алексеем Федулаевым (MTC Web Services
) проведут воркшоп "Готовим контейнеры вкусно и полезно".
Начнем эту неделю с крутой статьи "Securing Continuous Delivery: Argo CD Threat Detection", которую написали наши постоянные читатели и любезно поделились ей с нами ;) От ребят ранее была и другая не менее интересная статья про Threat Detection
в k8s
, но вернемся к сегодняшней теме. В рамках данной стать рассматривается стратегия обнаружения угроз в ArgoCD
. Если вы используете данный GitOps
оператор, то он определённо играет ключевую роль у вас в кластере, так что стоит серьезно задуматься о его безопасности. И вот в статье приведено 12
полезных детектов для данной системы. Специалистам SOC
обязательно к изучению! Так же из статьи можно узнать как вообще об устройстве ArgoCD
, так и о его модели угроз, которая отдельна описана в замечательном документе "Argo CD End User Threat Model".
Давненько у нас не было хардкорных постов про ядро и его эксплуатацию - исправляемся.
Встречайте статью "SELinux bypasses". Из данного материала вы узнаете:
- Что такое SELinux
и как он реализован
- 6
способов его обхода
Да, в статье рассматривается все на пример ОС Android
, но как вы знаете в Kubernetes мы тоже можем использовать SELinux
и по сути он не чем не отличается.
Способу побега из контейнера, о котором мы рассказывали в июле этого года, только на днях присвоили идентификатор CVE
– CVE-2024-10220. Почему это произошло только сейчас, учитывая полный дисклоуз уязвимости, остаётся под вопросом.
Тем не менее, злоумышленник, используя deprecated gitRepo volume
может совершить из контейнера, при соблюдении трёх условий – поддержка gitRepo volume type
, наличие git
бинаря на Node
и отсутствие ограничений на использование gitRepo volume type
.
Уязвимость аффектит следующие версии:- kubelet v1.30.0 to v1.30.2
- kubelet v1.29.0 to v1.29.6
- kubelet <= v1.28.11
Фиксы доступны в:- kubelet v1.31.0
- kubelet v1.30.3
- kubelet v1.29.7
- kubelet v1.28.12
Очередной прошедший KubeCon
в первую очередь ассоциируется с обновлением ряда инструментов для Kubernetes
и Container
. В их числе containerd
, он релизнулся в версии 2.0
(о чем мы вкратце написали в одном из предыдущих постов).
В неплохой обзорной статье Samuel Karp
рассказывает об основных изменениях в новой версии:
- NRI enabled by default
- Image verifier plugins
- Удаление устаревшего и избыточного кода
Если вы хотите более подробно ознакомиться со всеми изменениями, то это можно сделать тут и тут.
По части security
ломающих изменений хочется отметить – io_uring_* syscalls are disallowed by default. Более подробно мы рассказывали про это здесь.
Стали доступны видеозаписи и слайды с KubeCon + CloudNativeCon North America 2024 и это более 300
докладов (смотреть, не пересмотреть). Про безопасность докладов как всегда хватает и мы постепенно самые интересные начнем рассматривать на нашем канале.
Making Sense of Kubernetes Initial Access Vectors Part 2 – Data Plane – вторая статья (с первой можно ознакомиться тут) от WIZ
, посвященная более глубокому разбору техник для получения Initial Access
в Kubernetes
кластере.
В этой статье автор разбирает техники, относящиеся к Data Plane
: - Applications – abuse RBAC и abuse system privileges
- NodePort Service
- Images and supply chain
Making Sense of Kubernetes Initial Access Vectors Part 1 – Control Plane – неплохая статья от WIZ
, посвященная более глубокому разбору техник для получения Initial Access
в Kubernetes
кластере.
Глобально автор разделил окружения на Control Plane, Data Plane, CI/CD
и Cloud Access
. В рамках данной статьи автор разбирает техники, относящиеся к Control Plane
: Kubelet API Access, Management interfaces
и K8s API Access
.
Как думаете, насколько опасна такая Role
?
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-exec-view-role
rules:
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["get"]
Role/ClusterRole
с правами create – pods/exec
может позволить пользователю делать exec
в Pod
, то вы ошибались. Благодаря особенностям работы Websockets
, прав get – pods/exec
будет достаточно, чтобы выполнять команды в Pod
. Kubernetes
, но вы могли его не заметить, поскольку по умолчанию для exec
использовался SPDY
протокол, а не Websockets
. О проблеме известно с 2019 года!exec
при правах get – pods/exec
, например, можно воспользоваться wscat
:
wscat -s "base64url.bearer.authorization.k8s.io.$token, base64.channel.k8s.io" -n -c 'wss://192.168.99.100:8443/api/v1/namespaces/default/pods/testpod/exec?container=testpod&command=sh&stdout=true&stderr=true&stdin=true&tty=true'
Kubernetes 1.31
для операций attach
, exec
и port-forward
теперь по умолчанию используется Websockets
, а это значит, что прав get – pods/exec
будет достаточно, чтобы выполнять команды в Pod
.Rory McCune
– When is read-only not read-only?, в которой он рассказал об этой особенности.
Читать полностью…
Очень крутая статья "Kubernetes: The Road to 1.0" о том как все начиналось! Из материала можно узнать о следующих этапах появление Kubernetes
:
1) Опыт эксплуатации оркестраторов Borg
и Omega
с 2009
по 2013
2) Ранняя разработка API
контейнерного продукта в 2H2013
3) Подготовка к запуску в 1H2014
4) Финишная реализация устройства в 2H2014
5) Запуск в 2015
Напомним только что:
- 7
июня 2014
вышел initial
релиз Kubernetes
- 10
июля 2015
вышел Kubernetes
версии 1
И есть отдельный документальный фильм про Kubernetes
.
Совсем недавно обновился учебный план для сертификата Kubernetes Security Specialist (CKS)
(новая версия 1.31
). Данный план в принципе может быт неким ориентиром по построению защиты у себя. Там есть разбивка на разделы:
- Cluster Setup
- Cluster Hardening
- System Hardening
- Minimize Microservice Vulnerabilities
- Supply Chain Security
- Monitoring, Logging and Runtime Security
Отдельно выделим следующие моменты:
1) Необходимость NetworkPolicy
встречается сразу в нескольких разделах
2) "Minimize host OS footprint (reduce attack surface)" <- специализированные OS
3) "Minimize base image footprint" <- про тонкие/минималистичные образы
4) "Perform behavioral analytics to detect malicious activities" <- обнаружение по поведению, а не правилам
5) "Use Kubernetes audit logs to monitor access" <- доклад об этом сегодня от нас на SOC Forum ;)
Начнем новую неделю с замечательного туториала "How to Build Smaller Container Images: Docker Multi-Stage Builds". Основная задача материала научить делать маленькие/тонкие и более безопасные образы для приложений. Одним из основных посылов является: "build and runtime images should also be completely separate!". Из статьи вы узнаете:
1) Как делать не надо.
2) Что такое Multi-Stage
сборки
3) Примеры Multi-Stage
сборки для Node.js
, Go
, Rust
, Java
, PHP
7 ноября в 17:00 в рамках SOC Forum 2024 наша команда Luntry представит доклад “Kubernetes Audit Log в арсенале SOC”.
Там мы погрузимся в премудрости механизма Kubernetes Audit Log
. Разберемся, какие там есть подводные камни и слепые зоны и как максимально от него получить пользу для обнаружения злоумышленников.
Выступление можно посмотреть как offline
, так и online
на сайте мероприятия.
6 ноября в 11:00 состоится онлайн-конференция AM Live “Защита контейнерных сред”. Наша команда Luntry, примет участие и вместе с другими спикерами обсудит риски и средства защиты контейнерных сред.
Зарегистрироваться можно тут.
AWRBACS - это инструмент на Go
предназначенный упростить аудит CRUD
прав в Kubernetes RBAC
. Подробнее об его истории и назначении можно узнать из статьи автора "AWRBACS: AWACS for RBAC".
Scaling in the Clouds: Istio Ambient vs. Cilium – интересная статья-сравнение, опубликованная в блоге Istio
инженером из Microsoft
.Istio
был запущен в ambient mode
с waypoint proxy
в каждом namespace
. Чтобы сделать сценарии похожими, в кластере с Cilium
был включен WireGuard encryption, L7 proxies
и Node Init
, а также была применена L7 Cilium Network Policy
в каждом namespace
.
По итогам тестирования автор выяснил, что значительные проблемы в производительности у Cilium
начинаются при работающих L7
политиках и включенном шифровании. Хотя Istio
в то же время потреблял больше ресурсов.
С заметками автора можно ознакомиться тут.
В Cilium
раскрыли очередную уязвимость – CVE-2024-47825: CIDR deny policies may not take effect when a more narrow CIDR allow is present.
Например, при использовании приведенных ниже политик трафик разрешен для 1.1.1.2
, в то время как он должен быть запрещен:
apiVersion: cilium.io/v2
kind: CiliumClusterwideNetworkPolicy
metadata:
name: block-scary-range
spec:
endpointSelector: {}
egressDeny:
- toCIDRSet:
- cidr: 1.0.0.0/8
---
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: evade-deny
spec:
endpointSelector: {}
egress:
- toCIDR:
- 1.1.1.2/32
- toEntities:
- all
Большой ресерч от DataDog
State of Cloud Security получил апдейт. Там есть два интересных момента, которые особо не подсвечивают облачные провайдеры:
1) Managed Kubernetes
, запущенные по умолчанию увеличивают риск атаки
2) Опасные (привилегированные) IAM
роли в Managed k8s
увеличивают риск для pivot
Исследование проводилось на AWS, Azure
и Google Cloud
так что настоятельно рекомендуем с ним ознакомиться всем, кто имеет дело с этими облаками или просто интересуется облачной безопасностью.