DevSecOps Talks
7.07K subscribers
70 photos
85 files
1.08K links
Рассказываем об актуальном в мире DevSecOps. Канал DevSecOps-команды "Инфосистемы Джет"
Download Telegram
Kubernetes Controllers: For, Owns, Watches

Всем привет!

В сети не всегда просто найти хорошую статью про написание собственных Kubernetes Operators/Controllers. Особенно, если интересует не «общая картинка», а какие-то частности.

В статье Автор разбирает разницу между конструкциями for(), owns() и get() при регистрации controller через SetupWithManager.

Для этого рассматривается пример:
🍭 Создается Custom Resource
🍭 Controller узнает об этом и создает pod (nginx:latest), присваивает ему labelfoo:bar
🍭 Controller должен гарантировать наличие указанных label. Т.е. add/update/delete не должны «срабатывать»

Далее расписывается логика реконсиляции controller’a. Наглядно описывается как можно это реализовать не делая еще один Controller, который бы смотрел за каждым pod и его labels – как раз тот самый owns().

В завершении – описание функции watches(), которая лежит в основе for() и owns(). В статье много примеров и кода для собственного воспроизведения примера.

P.S. Про awesome подборку написания Kubernetes Operators мы писали тут.
DevOps Conf 2023, 13 марта

Всем привет!

Сегодня и завтра будет проходить конференция «DevOps Conf 2023», приходите пообщаться с нами вживую, поболтать про DevSecOps ☺️ Или о рыбалке 🤔

Кроме поболтать можно:
🍭Послушать небольшие доклады, посвященные Trivy и SRIOV/DPDK в k8s // 13:30 и 15:40 соответственно
🍭 Пройти тест Тьюринга – вопросы от людей и нейросети!
🍭 Попробовать микросервисные молекулярные коктейли в баре «Контейнер»

Ещё Саша Краснов из команды нашего Партнера - "Лаборатории Числитель" расскажет про "Декларативное управление конфигурацией узлов Kubernetes в масштабе" в зале №4 // 15:50 – 16:40

Ждем Вас! ☺️☺️☺️
DevOps Conf 2023, 14 марта

Первый день конференции благополучно завершился! Бар «Контейнер» продолжает свою работу согласно расписанию!

Приходите к нам, как и вчера можно:
🍭 Послушать небольшие доклады, посвященные SRIOV/DPDK в k8s и Trivy // 13:30 и 15:40 соответственно
🍭 Пройти тест Тьюринга – вопросы от людей и нейросети!
🍭 Попробовать микросервисные молекулярные коктейли в баре «Контейнер»

Если Вы уже были на нашем стенде, то предлагаем присоединиться к круглому столу «DevOps в Enterprise. Вендорские решения vs Open Source vs Outsource», который проведет Юрий Семенюков в Митапошной // 11:10 – 12:40

Завершает конференцию Павел Яньков и его доклад «Гид автостопщика по HashiCorp Vault»! // 17:00 - 17:50, Зал 2

Приходите, задавайте вопросы, пишите понравилось ли Вам в комментариях! До встречи! ☺️☺️☺️
Nosey Parker: поиск секретов

Всем привет!

Nosey Parker – небольшая утилита, которая позволяет искать секреты. По факту – open source версия утилиты, используемой Praetorian. «Старшая версия» обладает ML-аналитикой для более точной идентификации секретов.

Open source версия:
🍭 Позволяет анализировать файлы, директории, git-историю
🍭 Группирует все findings
для сокращения «шума» и дедупликации
🍭 Работает достаточно быстро

Под капотом – набор из регулярных выражений в количестве 95 patterns. Как вариант – можно посмотреть, что есть «внутри» и использовать логику для расширения используемых Вами решений или попробовать Nosey Parker.
Packj: анализ open-source пакетов

Всем привет!

Материал для «кандидатской» и open source продукт… Казалось, что между ними общего? Ответ – Pakcj, история которого как раз началась как работа над диссертацией.
В итоге получился интересный проект, задача которого анализировать open source пакеты не только на CVE, но и на многое другое.

С его помощью можно найти:
🍭 Сведения об Авторах пакета
🍭 Временной промежуток между release
🍭 Пакет требует много полномочий // например, codegen, envvars, decode, process, file и т.д.)
🍭 Сведения о количестве уязвимостей // да, куда без них
🍭 Является ли repo fork’ом или нет
🍭 Typo squatting, Dependency Confusion, Install-time hooks // coming soon

По умолчанию работает в режиме Audit. Но, при использовании флага -t осуществляется установка пакета и его «динамический» анализ с использованием strace (рекомендуется использовать в контейнере или в VM). Больше информации, как обычно, можно найти в repo проекта.
Kyverno: PolicyException

Всем привет!

В недавнем релизе (1.9.0) Kyverno был добавлен механизм PolicyException, при помощи которого можно явно разрешить некоторое действие, запрещенное политиками Kyverno. Механизм обладает достаточно гибкими возможностями по управлению scope, на который применяется «исключение».

В статье Автор не только описывает подробности, но и реализует пример:
🍭 Создание PolicyException в namespace с именем falcon-dev
🍭 Kyverno создает ClusterCleanupPolicy, которая удалит созданный exception по прошествии заданного времени
🍭 Проверка ☺️

В статье описываются все необходимые настройки, предоставлены yaml. Важно(!): пока что функционал PolicyException находится в alpha.
Kubernetes * Probes

Всем привет!

Практически во всех рекомендациях (в том числе по ИБ) можно увидеть нечто вроде “Ensure that * Probes are set”. Они бывают разные – Startup, Liveness, Readiness. И каждая отвечает за свой «участок» - проверка того, что приложение «стартовало», приложение функционирует и может принимать трафик, приложение доступно. Но как настроить их корректно и всегда ли они нужны?

В статье более детально разбирается что каждый из видов probes, как их можно настроить и когда их целесообразно использовать.

Отдельно хочется упомянуть схему, доступную в статье. На ней наглядно отображено, когда какая probe «работает» и какие могут быть последствия в случае, если она не срабатывает.

В завершении стать рассматриваются handlers: ExecAction, TCPSocketAction, HTTPGetAction, gRPC и как их можно использовать.
Анализ безопасности JWT, часть 1

Всем привет!

JSON Web Token (JWT) – популярный механизм, который позволяет сохранять некоторую информацию о пользователе (например, id, name, creation time и т.д.) и использовать ее в дальнейшем.

Однако, некорректная работа с JWT может привести к проблемам информационной безопасности. Для знакомства с темой предлагаем Вам обратить внимание на статью JWT [JSON WEB TOKENS] [EXPLANATION & EXPLOITATION] (0x01).

В первой приводится общее описание JWT, его структуры и далее рассматривается самое интересное:
🍭 Flawed signature Verification
in Backend
🍭 Brute forcing the Secret Keys If HMAC algorithm is used

Каждый вектор атаки рассматривается на примерах, есть пояснения и screenshots. Но и это еще не все ☺️ Продолжение в следующем посте! В нем Автор рассмотрит JWT header injections.
Анализ безопасности JWT, часть 2

Всем привет!

Продолжение предыдущей статьи. Автор рассматривает блок, посвященный JWT header injections.

В статье можно найти информацию о:
🍭 Self-signed JWT with JKU header injection
🍭 Self-signed JWT with JWK parameter

Примеры
рассматриваются с использованием Portswigger Labs. Для каждого из них приводится описание Автора и минимум необходимой теории. Кстати, на самом Portswigger тоже очень много интересной информации про безопасность JWT в сочетании с лабораторным работами.
FalcoSecurityAudit.pdf
1 MB
Аудит безопасности Falco

Всем привет!

В приложении доступны результаты независимого аудита проекта Falco (~ 63 страницы), проведенного компанией Quarkslab.

Материал содержит разделы:
🍭 Границы работ (fuzzers, моделирование угроз, SAST-практики и т.д.)
🍭 Модель угроз
Статический анализ (Cppcheck, CodeQL, Infer)
🍭 «Ручной» анализ
🍭 Динамический анализ и многое другое

В целом все достаточно неплохо: 1 Medium уязвимость (potential buffer overflow), несколько Low и Info.

А как Вы думаете – является ли open source менее защищенным by default? Или наоборот – open source ничем не хуже «внутренней разработки» с точки зрения ИБ? Пишите Ваше мнение в комментариях ☺️
Разбор Kubernetes Security Context

Всем привет!

По ссылке доступен long read, в котором Автор на примерах разбирает различные Security Context и пользу от их использования. Для демонстрации заготовлено минималистичное flask-приложение и его различные модификации.

Рассматривается:
🍭 runAsUser / runAsGroup // пример с SSRF
🍭 privileged и allowPrivelegeEscalation // пример с SUID и возможным повышением привилегий
🍭 readOnlyRootFilesystem // пример с созданием файла внутри контейнера
🍭 drop capabilities // пример с drop: ALL и bind на 80-ый порт (Сработало! Почему? Ответ есть в статье) и последующей настройкой исключений
🍭 apparmor // пример с попыткой чтения /etc/passwd

Автор максимально детально описывает все действия, которые он реализует, а также описывает «зачем» он это делает. Примеры из статьи можно реализовать самостоятельно – все исходные коды, ссылки на используемые материалы и дополнительные ресурсы присутствуют.

P.S. Для некоторых Security Context Автор приводит дополнительные комментарии, которые не всегда просто найти / есть в официальной документации.
Проблематика и автоматизация создания Network Policy

Всем привет!

Зачастую рассказывают про положительные стороны чего-либо. Однако, знать про отрицательные тоже важно, чтобы получить полную и общую картину.

В статье Автор рассуждает о том, почему Network Policy не самый удобный инструмент / уровень абстракции для сегментирования сети k8s, особенно с точки зрения разработчика.

Критикуешь – предлагай! Да, есть и такое! В завершение статьи описывается как можно проще/лучше управлять трафиком с использованием Intents (определение есть в статье). И не только описание – не найдя ничего подходящего, ребята создали свой собственный operator - Otterize Intents Operator.

Он «повышает» уровень абстракции и позволяет контролировать создание/наличие сетевых политик. Грубо говоря, все, что надо указать – с кем «общается» целевой сервис и как. Все. Operator создаст необходимую политику (только Ingress) и проставит требуемые labels на участников взаимодействия.

Подробнее про Otterize Intents Operator можно прочесть в документации. Важно (!): есть как коммерческая, так и open source версия продукта.
Vulnhub: Vulnerable Docker Environments

Всем привет!

Иногда нужно/хочется провести тестирование возможности эксплуатации уязвимостей. Например, для того, чтобы понять – «отработает» ли средство защиты или просто в исследовательских целях.

Проект Vulnhub может в этом помочь. В нем собрано большое количество «заранее уязвимых» окружений для различных технологий (python, wordpress, elasticsearch, flask, java и многое другое).

Для каждого окружения в repo можно найти CVE, которые в них «заложены» и readme.md, описывающий как можно ее проэксплуатировать. Есть небольшой нюанс – английский язык доступен не везде, много информации на китайском ☺️

Важно(!): указанные окружения не рекомендуется использовать в production, а лишь для целей тестирования и изучения.
Ресторан «Kubernetes»

Привет!

Легкий пятничный пост 😊 Наверное, когда-нибудь вас просили объяснить – «Что такое Kubernetes? Но только просто, чтобы было понятно и сразу!»
Было уже много разных аналогий и вот еще одна. Автор сравнивает k8s с рестораном! Как раз для пятницы!

Получается следующее:
🍭 Master Node: главный повар, управляет всем
🍭 Kube-apiserver: система обработки заказов посетителей ресторана
🍭 Kube-controller-manager: управляющий по кухне
🍭 Kube-scheduler: временное табло, помогающее кухне справляться с заказами и т.д.

В целом все неплохо «ложится» на Kubernetes 😊 А как Вы «просто и понятно» объясняете, что такое Kubernetes интересующимся?
Безопасность build pipeline: все ли так плохо?

Всем привет!

По ссылке доступна статья, в которой Автор пытается посмотреть на проблему безопасности build-pipelines максимально критично. Ее задача понять – все ли на самом деле так плохо? Или проэксплуатировать уязвимость сложнее, чем написано во многих статьях?

В качестве возможных сценариев рассматриваются:
🍭 Модификация исходного кода
🍭 «Добавление» зависимостей
🍭 Воздействие на runner

Для каждого сценария описаны «сложности», с которыми скорее всего придется столкнуться атакующими. С точки зрения Автора все не так уж и плохо, особенно если соблюдать «гигиену» - защищать ветки (branch protection), проверять подпись «внешних» компонентов и т.д. А что Вы думаете по этому поводу?
Kube-apiserver в роли port scanner

Всем привет!

Еще одна потрясающая статья от Rory McCune, посвященная «своеобразному» использованию возможностей Kubernetes. Нет, это не уязвимость, это не bug, это не ошибка.

Kubernetes устроен таким образом, что он может осуществлять сетевые запросы на внешние адреса в некоторых ситуациях. Например, в случае с Validating Webhooks. Таким образом можно реализовать некий аналог SSRF и превратить Kubernetes в «сканер портов».

Rory
проделал следующее:
🍭 Создается namespace
🍭 Регистрируется webhook
. Никакой сервер, обрабатывающий запрос не регистрируется. Вместо этого указывается потенциальная «жертва»
🍭 Создается pod
в указанном namespace. Готово! В сообщении об ошибки получаем всю необходимую информацию

PoC
того, что описано выше можно найти в repo. Если интересно посмотреть небольшую демонстрацию, ее можно найти в блоге Rory.

P.S. Лучше не проверять этот, пусть и крайне базовый PoC на каких-либо настоящих сервисах и/или в production-окружениях.
Network isolation для 1,500 сервисов

Всем привет!

В статье описан опыт Monzo по управлению сетевым трафиком в средах контейнерной оркестрации. На очень больших масштабах.

Ребята проделали колоссальную работу, которую можно разделить на несколько основных этапов:
🍭 Выбор сервиса для «пилотирования». Им стал service.ledger, который взаимодействует с множеством других
🍭 Понимание того, с кем service.ledger общается. Для этого команда написала собственный инструмент – rpcmap, который анализирует Go-код и пытается найти возможные точки взаимодействия. Работало не очень, но в качестве «первых шагов» - вполне
🍭 Подготовка Native Network Policy, определение подходов к labeling. Политика хранилась вместе с конфигурацией ledger и, если необходимо добавить новый «приемник», то делался соответствующий MR
🍭 Трудности, порождаемые таким подходом. Отсутствие тестирование, нюансы с roll back и т.д. Поиск нового решения, которым стал Calico
🍭 Создание сетевых политик Calico, обладающих большим order для журналирования действий Network Policy для поиска ошибок. Дада, Вам не показалось 😊 Анализ Network Policy при помощи другой Network Policy
🍭 Очередное переосмысление labeling с учетом опыта, полученного на предыдущих шагах

И многое-многое-многое! Читается на одном дыхании, рекомендуем! 😊
Выбор компонентов платформы контейнерной оркестрации.

Всем привет!

Ни для кого не секрет что любая платформа контейнерной оркестрации состоит из множества компонентов, таких как:
🍉 Подсистема мониторинга
🍉 Подсистема журналирования
🍉 Подсистема аутентификации/авторизации
🍉 и множество других компонентов

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

🍉 Выбор подсистемы оповещений и алертов
🍉 Особенности проектирования cli-утилиты для управления кластером
🍉 Подходы к тестированию платформы
🍉 Разбор разных методов хранения конфигураций
🍉 и многое другое
Network Mapper: кто с кем общается в k8s

Всем привет!

Продолжаем тему анализа сетевого трафика k8s и упрощения создания сетевых политик для его контроля.

Не всегда понятно какой сервис с каким общается, что затрудняет создание (и автоматизацию этого процесса) сетевых политик. Для решения этой задачи можно обратить внимание на Otterize Network Mapper.

Решение работает по следующей схеме: записывает DNS-трафик, анализирует активные соединения, получает IP-адреса и идентифицирует «источник».

Чтобы попробовать Network Mapper в действии достаточно:
🍭 Установить сам Network Mapper (есть Helm Chart)
🍭 Установить cli-утилиту для общения с «основной системой»
🍭 Готово! Можно получить информацию о том какие сервисы общаются между собой как в stdout, так и в JSON для дальнейшей работы

Пример того, как это выглядит можно найти в repo проекта, а небольшая инструкция доступна в документации проекта.
Авторизация Kubelet в Kube-apiserver

Всем привет!

Kubelet крайне важная часть Kubernetes. Он взаимодействует с runtime для создания контейнеров и не только, общается с kube-apiserver. Логично предположить, что он, как и все остальные сущности, обращающиеся к kube-apiserver должен проходить процедуру авторизации.

И это так, однако не все так просто,
как может показаться. Например, если сделать kubectl --kubeconfig=%yourkubelet.conf% auth can-i –list, то описания его прав на, например, pod вы не увидите. Хотя с этим же самым kubeconfig можно запросить перечень pods в каком-нибудь namespace и получить результат.

Если присмотреться, то в ответе вышеуказанной команды есть интересная строчка: the list may be incomplete: node authorizer does not support user rule resolution Resources.

Именно этой «особенности» посвящена очередная прекрасная статья от Rory McCune. Почему так происходит и как работает авторизация Kubelet «под капотом», ссылки на исходный код Kubernetes - все есть в статье. Рекомендуем!