14.5к
0
0
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
Назад

Как провести аудит безопасности Kubernetes

Время чтения 11 минут
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
14.5к
0
0
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники

Привет, меня зовут Александр. Я специалист по информационной безопасности в аутсорс-компании. Одна из моих задач — находить и устранять уязвимости в программных продуктах заказчиков.

В последнее время в проектах часто встречаю Kubernetes: его используют, когда разрабатывают веб-сайты, интернет-магазины, различные сервисы, например агрегаторы для покупки билетов.

Компоненты Kubernetes связаны с другими компонентами кластера, поэтому важно позаботиться о его безопасности. На примерах из личного опыта рассказываю, как можно провести аудит безопасности Kubernetes с помощью утилит Kube-bench, Kube-hunter, Kubescape, Trivy, собрать отчет по итогам проверки и устранить найденные уязвимости.

Все проверки выполнял на четырехнодовом «ванильном» кластере Kubernetes версии 1.27.3. Узлы кластера развернул на виртуальных машинах.

Как провести аудит безопасности Kubernetes

Зачем нужен Kubernetes

Kubernetes — платформа, которую используют команды разработки для деплоя приложений с микроядерной архитектурой.

Kubernetes можно представить как отдельную операционную систему: с помощью него управляют контейнерами, которые запускают приложения. Платформа поддерживает разные движки: Docker, Container runtime, CRI-O и Mirantis Container Runtime.

Так выглядит архитектура кластера Kubernetes

Kubernetes связан с другими компонентами кластера: kube-apiserver, scheduler, kube-controller-manager, kubelet, kube-proxy.

Безопасность Kubernetes: из чего состоит аудит

Аудит Kubernetes проводят, чтобы обнаружить проблемы безопасности, из-за которых возможна успешная атака на весь кластер.

Аудит Kubernetes состоит из разделов:

  • Безопасность среды выполнения runtime;
  • Безопасность сети внутри кластера;
  • Безопасность компонентов кластера;
  • Безопасность образов контейнеров.

Проблемы безопасности, которые может выявить аудит:

  • Небезопасные образы контейнеров из общедоступных репозиториев. В образах может присутствовать вредоносный код или backdoor.
  • Неправильно настроенные привилегии — права доступа. Это может привести к несанкционированному доступу.
  • Некорректная конфигурация системы или приложения. Это может привести к неправильному функционированию всего кластера.
  • Неправильная настройка сетевых политик или их полное отсутствие.
  • Неправильная организация при работе с секретами (secrets).
  • Неправильно настроенная конфигурация объектов типа под.
  • Отсутствие шифрования между компонентами кластера.

Чтобы получить наиболее полный отчет нужно:

  1. Использовать несколько инструментов, так как в утилитах разные типы и количество проверок;
  2. Сканировать все компоненты и сервисы, которые доступны;
  3. Использовать все базы уязвимостей и фреймворки, которые поддерживает утилита.

Инструменты для аудита безопасности Kubernetes

Существует обширный список open-source утилит, которые помогают найти уязвимости в кластерах Kubernetes. Для проведения аудита я использую Kube-bench, Kube-hunter, Kubescape и Trivy, потому что они обладают обширным функционалом и генерируют информативные отчеты.

Kube-bench хорошо подходит для быстрой проверки всех компонентов кластера.

Kube-hunter может имитировать атаки на кластер и работать в разных режимах:

  • Remote scanning. Удаленно сканирует заданные IP-адреса или DNS-имена. Проверяет там, где могут потенциально находиться кластеры Kubernetes.
  • Interface scanning. Сканирует IP-адреса и локальные сетевые интерфейсы. Подходит для сканирования, если кластер Kubernetes находится в частной сети.
  • IP range scanning. Поддерживает сканирование подсетей.

Kubescape сканирует кластер и его компоненты, может сканировать YAML-манифесты, HELM-чарты, репозитории с исходным кодом и образы контейнеров.

Trivy сканирует образы контейнеров и располагает базой данных уязвимостей.

Кейс: настраиваем Kube-bench и проводим аудит безопасности компонентов Kubernetes

Kube-bench полностью опирается на манифест CIS Benchmark, поэтому перед началом сканирования его нужно получить на официальном сайте некоммерческой организации CIS. Потребуется заполнить поля со звездочкой и нажать Get Free Benchmarks Now. После этого на электронную почту придет письмо. Для скачивания документа нужно перейти по ссылке из письма — нажать кнопку Access PDFs.

На сайте находим раздел с Kubernetes и скачиваем CIS нужной версии
В документе для каждой проверки есть раздел Audit, в котором описано, как проверить, и раздел Remediation — как исправить

Пример №1

Задача: провести полный аудит безопасности компонентов кластера Kubernetes.

Почему Kube-bench: утилита опирается на манифест CIS Benchmark, который содержит подробную информацию о различных уязвимостях в компонентах.

Для проверки всех компонентов Kube-bench можно запустить прямо в кластере Kubernetes. Как выбрать отдельные компоненты — в следующем примере.

Чтобы запустить утилиту в кластере Kubernetes:

  1. Устанавливаем Git
  2. Скачиваем официальный репозиторий с GitHub — git clone https://github.com/aquasecurity/kube-bench.git
  3. Переходим в скачанную директорию — cd kube-bench
  4. Запускаем файл job.yaml — kubectl apply -f job.yaml

Если запустить утилиту от имени обычного (не root) пользователя, часть компонентов не будет просканирована, потому что конфигурационные файлы таких компонентов имеют права пользователя root. Чтобы решить эту проблему, нужно запускать файл job.yaml от пользователя root или с помощью sudo.

Чтобы проверить статус пода, используем команду:

kubectl get po

Когда утилита завершит работу, появится статус подa — Completed

Чтобы отобразить отчет, который сгенерировала утилита, необходимо использовать команду:

kubectl logs <имя_пода_kube_bench>

В этом примере имя пода: kube-bench-6lwfh.

Команда будет следующей:

kubectl logs kube-bench-6lwfh

Отчет выводится в STDOUT — на экран пользователя

Чтобы перенаправить вывод в файл, нужно добавить символ «>» и указать имя файла, куда сохранить отчет. Например, сохраним отчет в файл с именем results.txt:

kubectl logs kube-bench-6lwfh > results.txt

Убедимся, что вывод команды был успешно записан в файл с помощью утилиты cat: cat results.txt

Пример №2

Задача: просканировать один или несколько компонентов кластера Kubernetes.

Необходимо установить Kube-bench в операционную систему с помощью пакетного менеджера, например дистрибутива Ubuntu.

Для установки в Ubuntu/Debian:

  1. Скачиваем официальный .deb-пакет — curl -L https://github.com/aquasecurity/kube-bench/releases/download/v0.6.15/kube-bench_0.6.15_linux_amd64.deb -o kube-bench_0.6.15_linux_amd64.deb
  2. Устанавливаем скачанный пакет с помощью apt — sudo apt install ./kube-bench_0.6.15_linux_amd64.deb -f
  3. Проверяем, что установка прошла успешно. Выполняем в терминале команду вывода версии Kube-bench — kube-bench version

Утилита установлена на операционной системе, поэтому доступны расширенные возможности

Чтобы просканировать конкретные компоненты кластера Kubernetes, нужно указать их с помощью опции –targets. Например, необходимо просканировать только master-ноду кластера. В этом случае команда будет выглядеть так:

sudo kube-bench run –targets master

К примеру, хотим просканировать компонент etcd и компонент, который отвечает за политику безопасности: команда sudo kube-bench run --targets etcd, policies
Так выглядит отчет утилиты Kube-bench

Формат отчета в Kube-bench:

  1. В Kube-bench используется три статуса для каждой из проверок — PASS, FAIL или WARN — 
    1. PASS — проверка успешно пройдена. Не требуется никаких действий для устранения.
    2. FAIL — проверка не пройдена. Требуется выполнение определенных действия для устранения.
    3. WARN — необходимо обратить внимание на проверку. Обычно означает, что часть настроек выполнена корректно, а часть нет.
  2. Номер проверки соответствует номеру проверки в CIS Benchmark.
  3. Полное название проверки также соответствует CIS Benchmark.

Кейс: настраиваем Kube-hunter и тестируем атаку на кластер

Пример №3

Задача: смоделировать атаку на кластер Kubernetes.

Почему Kube-hunter: утилита умеет имитировать кибератаку.

Kube-hunter написан на Python, поэтому для установки утилиты необходим пакетный менеджер pip. Pip загрузит и инсталлирует пакеты, необходимые для работы Kube-hunter. Если Python нет, то в выводе будет сообщение Command ‘python3’ not found, то есть «команда python3 не найдена».

Не забудьте про интерпретатор языка Python. Проверить, установлен он или нет, можно через команду python3

Для deb-дистрибутивов (Debian, Ubuntu, Linux Mint) команда для установки Python и pip будет следующей:

sudo apt -y install python3 pip3

Для RPM-дистрибутивов (RHEL, CentOS, Fedora) команда установки следующая:

sudo dnf -y install python3 pip3

После инсталляции Python и pip устанавливаем Kube-bench. Команда одинакова для всех дистрибутивов:

sudo pip3 install kube-hunter

Проверим, что установка прошла корректно, набрав в терминале:

kube-hunter

Если при выполнении команды kube-hunter появился интерфейс утилиты, значит, программа установлена успешно

Чтобы запустить сканирование в Kube-hunter, необходимо:

  1. Запустить утилиту с помощью команды — kube-hunter
  2. Выбрать один из режимов сканирования — Remote scanning, Interface scanning, IP range scanning

Режимы зависят от цели: сканирование IP-адресов, DNS, локальных сетевых интерфейсов или подсетей.

В моем примере режим Remote scanning. IP-адрес 10.2.47.80 — адрес одной из master-нод кластера

Когда сканирование будет завершено, утилита отобразит найденные уязвимости.

Отчет Kube-hunter выглядит так

Утилита нашла master-ноду доступной по адресу 10.2.47.80 и обнаружила открытые сервисы Kubelet API, Etcd и API Server.

Отчет Kube-hunter содержит:

  • ID уязвимости в базе разработчика утилиты — столбец ID
  • Адрес и порт ноды кластера, где была найдена уязвимость — столбец LOCATION
  • Категорию найденной уязвимости — столбец MITRE CATEGORY
  • Название найденной уязвимости — столбец VULNERABILITY
  • Описание найденной уязвимости — столбец DESCRIPTION
  • Наименование параметра, который подвержен атаке или уязвим — столбец EVIDENCE

В примере на master-ноде была найдена уязвимость с ID номером KHV002. Это означает, что публично раскрыта версия Kubernetes 1.27.3, которую могут обнаружить другие пользователи или злоумышленники.

Подробную информацию и рекомендации по устранению любой уязвимости можно прочитать на сайте разработчика Kube-hunter в базе данных уязвимостей Aqua Vulnerability Database

Пример №4

Задача: сканирование в локальной сети.

В режиме Interface scanning утилита Kube-hunter ищет сетевые интерфейсы, на которых может располагаться кластер Kubernetes.

Чтобы провести сканирование на локальном интерфейсе, запускаем Kube-hunter и выбираем число 2
В этом режиме утилита также обнаружила сервисы в кластере
И вывела список уязвимостей

Пример №5

Задача: сканирование компонентов Kubernetes и выполнение атак.

В активном режиме IP range scanning утилита автоматически исследует компоненты Kubernetes: узлы, поды, сервисы, сети — и выполняет атаки для проверки уязвимостей. Во время активного сканирования будут вноситься изменения в кластер Kubernetes — например, пытаться извлечь логи из контейнера.

Чтобы отобразился список всех изменений, которые умеет вносить Kube-hunter при активном сканировании, выполним команду:

kube-hunter –list –active

Список доступных изменений увидим в разделе Active Hunters

Кейс: настраиваем Kubescape и проводим аудит конфигурации кластера

Пример №6

Задача: провести аудит на наличие неправильной конфигурации кластера, обнаружить другие некорректные настройки.

Почему Kubescape: утилита предназначена для анализа различных параметров — разрешенные политики доступа, контейнерные образы, сетевая конфигурация, настройки авторизации и аутентификации, управление ролями.

Утилита Kubescape — сканер безопасности, который использует фреймворки NSA-CISA (.pdf, 4,6 МБ), MITRE ATT&CK и CIS Benchmark. Оценивает безопасность и соответствие конфигурации кластера рекомендациям и стандартам CIS Kubernetes Benchmark.

Установка kubescape производится из официального репозитория разработчиков программы. Для deb-систем (Debian, Ubuntu, Linux Mint) нужно выполнить следующие шаги:

  1. Добавить репозиторий kubescape в систему —sudo add-apt-repository ppa:kubescape/kubescape
  2. Обновить список репозиториев — sudo apt update
  3. Установить пакет Kubescape — sudo apt -y install kubescape

Проверяем, что установка прошла успешно: выполняем в терминале команду вывода версии Kubescape: kubescape version

У Kubescape есть специальный режим сканирования, который называется Host Scanning, — на все узлы кластера устанавливается агент, который собирает информацию о каждой ноде. По завершении работы агент будет автоматически удален. Сканирование запускается по команде:

kubescape scan –enable-host-scan –verbose

После сканирования утилита отобразит подобный отчет
Здесь отображены уязвимости, которые найдены в объектах типа Service Account
Еще утилита нашла проблемы безопасности в используемом сетевом плагине (CNI) Weave Net
Уязвимости в объекте под сервиса kube-apiserver

У Kubescape своя внутренняя база уязвимостей, которая размещена на официальном сайте.

Для того чтобы посмотреть более подробную информацию о найденной уязвимости, нужно перейти по ссылке, которая указана в столбце DOCS
При переходе по ссылке откроется карточка, в которой будет описание уязвимости, на что она влияет и как ее исправить

По умолчанию Kubescape использует собственную базу уязвимостей. Также можно использовать базы данных от NSA Framework и MITRE ATT. Для запуска фреймворка от NSA используется команда: 

kubescape scan –enable-host-scan framework nsa -v

Рассмотрим найденную уязвимость. Она связана с сетевыми политиками безопасности.

Чтобы посмотреть описание найденной уязвимости, нужно перейти по ссылке из столбца DOCS
Как видно из описания, проверка показывает, что между объектами под должны быть настроены сетевые политики
Запускаем сканирование с помощью фреймворка MITRE: kubescape scan --enable-host-scan framework mitre -v
Обнаружено несколько уязвимостей высокой степени угрозы: Writable hostPath mount, HostPath mount, Privileged container

Кейс: используем сканер Trivy для поиска уязвимостей в образах контейнеров

Пример №7

Задача: найти уязвимости в образах контейнеров.

Почему Trivy: утилита предназначена для поиска уязвимостей в образах контейнеров. Поддерживает несколько форматов, включая Docker, Podman, Buildah, img, kaniko.

Установить Trivy можно несколькими способами. Это зависит от используемой операционной системы. Подробные инструкции есть на официальном сайте разработчика. В качестве примера рассмотрю установку на ОС семейства deb — Ubuntu, Debian, Linux Mint.

  1. Скачиваем официальный .deb-пакет — wget https://github.com/aquasecurity/trivy/releases/download/v0.42.1/trivy_0.42.1_Linux-64bit.deb
  2. Устанавливаем скачанный пакет с помощью dpkg — sudo dpkg -i trivy_0.42.1_Linux-64bit.deb
  3. Убедимся, что установка утилиты прошла корректно. Для этого введем в терминале команду — trivy

Терминал вывел справку по использованию утилиты. Значит, установка завершилась успешно

Команда для запуска сканирования образа контейнера:

trivy image <имя образа:тег>

Например, просканируем образ Python версии 3.4.

Чтобы подобрать правильный тег образа, можно воспользоваться официальным сайтом Docker hub
В нашем примере с образом Python команда: trivy image python:3.4
После того как образ будет полностью просканирован, утилита выведет подробный отчет

Отчет Trivy содержит:

  • Название библиотеки, в которой была найдена уязвимость — столбец Library
  • Название найденной уязвимости — столбец Vulnerability
  • Уровень критичности найденной уязвимости — столбец Severity
  • Используемую версию программного компонента, в котором найдена уязвимость, — столбец Installed Version
  • Версию программного компонента, в котором исправлена найденная ранее уязвимость, — столбец Fixed Version
  • Наименование найденной уязвимости — столбец Title

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

Если образ взяли с сайта Docker Hub, необходимо еще раз найти его там и перейти в раздел Tags
Выбрать нужный тег. Откроется структура образа. В разделе Image hierarchy будет отображен базовый образ — как правило, образ ОС

Если используете собственные образы, понадобятся их Dockerfile. Базовый образ указан в самой первой инструкции FROM.

Итоговый отчет по аудиту безопасности

После того как сканирование кластера Kubernetes завершено, можно собрать итоговый отчет, например, в Excel.

Для каждой утилиты проверки в отчете можно разделить на блоки. Например, выделить проверки по компонентам и разделам кластера:

  1. Control Plane. Включает в себя проверки для таких компонентов, как API-сервер, Controller Manager, Scheduler, etcd.
  2. Worker nodes. Включает в себя проверки для worker (рабочих) нод кластера, например таких, как настройка и использование логирования, использование сертификатов.
  3. Kubelet. Включает в себя проверки для компонента kubelet.
  4. Policies. Включает в себя проверки для RBAC, Service Account и network policy (сетевые политики).

Пример страницы из итогового отчета. Данные проверок Kube-bench
Страница из итогового отчета. Данные проверок Kube-hunter
Страница из итогового отчета. Данные проверок Kubescape

Примеры моих таблиц можете использовать как шаблон для итогового отчета по безопасности Kubernetes.

Отчет не универсальный и будет отличаться в зависимости от конфигурации кластера:

— Настроек кластера;

— Версии Kubernetes;

— Используемых сторонних компонентов, например сетевых плагинов (CNI), балансировщиков;

— Реализации Kubernetes — «ванильный» (оригинальный, без сторонних изменений), Kubespray, OpenShift, Rancher.

Как устранить уязвимости в Kubernetes

Разработчики Kube-bench, Kube-hunter, Kubescape и Trivy дают рекомендации, как устранить найденные уязвимости.

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

Комментарии0
Тоже интересно
Комментировать
Поделиться
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники