
Поиск уязвимостей безопасности в кластерах Kubernetes
kube-hunter больше не находится в активной разработке. Если вы заинтересованы в сканировании кластеров Kubernetes на предмет известных уязвимостей, мы рекомендуем использовать Trivy. В частности, сканирование конфигураций Kubernetes на предмет ошибок и сканирование уязвимостей KBOM от Trivy. Узнайте больше в документации Trivy.
kube-hunter ищет уязвимости в кластерах Kubernetes. Инструмент был разработан для повышения осведомленности и видимости проблем безопасности в средах Kubernetes. Вы НЕ должны запускать kube-hunter на кластере Kubernetes, который вам не принадлежит!
Запуск kube-hunter: kube-hunter доступен в виде контейнера (aquasec/kube-hunter), а также мы предлагаем веб-сайт kube-hunter.aquasec.com, где вы можете зарегистрироваться онлайн, чтобы получить токен, позволяющий просматривать и делиться результатами онлайн. Вы также можете запустить код Python самостоятельно, как описано ниже.
Изучение уязвимостей: База знаний kube-hunter включает статьи об обнаруживаемых уязвимостях и проблемах. Когда kube-hunter сообщает о проблеме, он отображает её VID (идентификатор уязвимости), чтобы вы могли найти её в базе знаний по адресу https://aquasecurity.github.io/kube-hunter/
Если вас интересует интеграция kube-hunter с матрицей ATT&CK для Kubernetes, продолжите чтение
Демонстрационное видео kube-hunter
kube-hunter теперь поддерживает новый формат матрицы ATT&CK для Kubernetes. В то время как уязвимости kube-hunter представляют собой набор творческих техник, призванных имитировать атакующего в кластере (или за его пределами), MITRE ATT&CK определяет более общие стандартизированные категории техник для этого.
Вы можете рассматривать уязвимости kube-hunter как небольшие шаги для атакующего, которые следуют пути более общей техники, к которой он стремится. Большинство охотников и уязвимостей kube-hunter можно с большой точностью отнести к этим техникам, поэтому мы перешли на стандарт матрицы.
Некоторые уязвимости kube-hunter, которые мы не смогли сопоставить с техниками Mitre, помечены ключевым словом General

Существует три различных способа запуска kube-hunter, каждый из которых предлагает свой подход к обнаружению слабых мест в вашем кластере:
Запустите kube-hunter на любой машине (включая ваш ноутбук), выберите удаленное сканирование и укажите IP-адрес или доменное имя вашего кластера Kubernetes. Это даст вам взгляд на вашу установку Kubernetes глазами злоумышленника.
Вы можете запустить kube-hunter непосредственно на машине в кластере и выбрать опцию сканирования всех локальных сетевых интерфейсов.
Вы также можете запустить kube-hunter в поде внутри кластера. Это покажет, насколько ваш кластер будет уязвим, если один из ваших подов приложения будет скомпрометирован (например, через уязвимость в программном обеспечении). (флаг --pod)
Сначала проверьте эти предварительные требования.
По умолчанию kube-hunter запустит интерактивную сессию, в которой вы сможете выбрать один из следующих вариантов сканирования. Вы также можете указать параметр сканирования вручную из командной строки. Вот ваши варианты:
Для указания удаленных машин для охоты выберите вариант 1 или используйте опцию --remote. Пример:
kube-hunter --remote some.node.com
Для сканирования интерфейсов используйте опцию --interface (при этом будут просканированы все сетевые интерфейсы машины). Пример:
kube-hunter --interface
Для указания конкретного CIDR для сканирования используйте опцию --cidr. Пример:
kube-hunter --cidr 192.168.0.0/24
Установите флаг --k8s-auto-discover-nodes, чтобы запросить Kubernetes для получения всех узлов в кластере, а затем попытаться отсканировать их все. По умолчанию будет использоваться конфигурация внутри кластера для подключения к API Kubernetes. Если вы хотите использовать явный файл kubeconfig, укажите --kubeconfig /путь/к/kubeconfig/файлу.
Также обратите внимание, что это всегда делается при использовании режима --pod.
Чтобы имитировать атакующего на ранних стадиях, kube-hunter не требует аутентификации для охоты.
Имперсонация - Вы можете предоставить kube-hunter конкретный токен сервисного аккаунта для использования во время охоты, передав JWT Bearer токен секрета сервис-аккаунта вручную с флагом --service-account-token.
Пример:
$ kube-hunter --active --service-account-token eyJhbGciOiJSUzI1Ni...
При запуске с флагом --pod kube-hunter использует токен сервисного аккаунта, смонтированный внутри пода, для аутентификации в сервисах, которые он находит во время охоты.
--service-account-token имеет приоритет при запуске в виде подаАктивная охота — это опция, при которой kube-hunter будет эксплуатировать найденные уязвимости для поиска дальнейших уязвимостей. Основное различие между обычной и активной охотой заключается в том, что обычная охота никогда не изменяет состояние кластера, в то время как активная охота потенциально может выполнять изменяющие состояние операции с кластером, что может быть вредно.
По умолчанию kube-hunter не выполняет активную охоту. Для активной охоты в кластере используйте флаг --active. Пример:
kube-hunter --remote some.domain.com --active
Вы можете увидеть список тестов с опцией --list. Пример:
kube-hunter --list
Чтобы увидеть также тесты активной охоты, а также пассивные:
kube-hunter --list --active
Чтобы увидеть только карту сети ваших узлов, запустите с опцией --mapping. Пример:
kube-hunter --cidr 192.168.0.0/24 --mapping
Это выведет все узлы Kubernetes, найденные kube-hunter.
Для управления логированием вы можете указать уровень журнала, используя опцию --log. Пример:
kube-hunter --active --log WARNING
Доступные уровни журнала:
По умолчанию отчет отправляется в stdout, но вы можете указать другие методы, используя опцию --dispatch. Пример:
kube-hunter --report json --dispatch http
Доступные методы отправки:
При запуске в виде пода в среде Azure или AWS kube-hunter будет получать подсети из службы метаданных экземпляра. Естественно, это делает процесс обнаружения более длительным.
Чтобы жестко ограничить сканирование подсети CIDR /24, используйте опцию --quick.
Пользовательская охота позволяет опытным пользователям контролировать, какие охотники регистрируются в начале охоты. Если вы знаете, что делаете, это может помочь, если вы хотите настроить процесс охоты и обнаружения kube-hunter под свои нужды.
Пример:
kube-hunter --custom <ИмяОхотника1> <ИмяОхотника2>
Включение пользовательской охоты удаляет всех охотников из процесса охоты, кроме указанных в белом списке.
Флаг --custom принимает список имен классов охотников. Чтобы просмотреть все имена классов kube-hunter, вы можете объединить флаг --raw-hunter-names с флагом --list.
Пример:
kube-hunter --active --list --raw-hunter-names
Примечание: Из-за архитектурного дизайна kube-hunter, следующие "Основные охотники/Классы" будут всегда регистрироваться (даже при использовании пользовательской охоты):
Существует три метода развёртывания kube-hunter:
Вы можете запустить kube-hunter непосредственно на вашей машине.
Вам потребуется установить следующее:
Установка:
pip install kube-hunter
Запуск:
kube-hunter
Клонируйте репозиторий:
git clone https://github.com/aquasecurity/kube-hunter.git
Установите зависимости модуля. (Вы можете предпочесть сделать это в виртуальном окружении)
cd ./kube-hunter
pip install -r requirements.txt
Запуск:
python3 kube_hunter
Если вы хотите использовать pyinstaller/py2exe, вам нужно сначала запустить скрипт install_imports.py.
Aqua Security поддерживает контейнеризированную версию kube-hunter по адресу aquasec/kube-hunter:aqua. Этот контейнер включает этот исходный код, а также дополнительный (закрытый) плагин отчетности для загрузки результатов в отчет, который можно просмотреть на kube-hunter.aquasec.com. Пожалуйста, обратите внимание, что запуск контейнера aquasec/kube-hunter и загрузка данных отчета регулируются дополнительными условиями.
Dockerfile в этом репозитории позволяет создать контейнеризированную версию без плагина отчетности.
Если вы запускаете контейнер kube-hunter с хост-сетью, он сможет сканировать все интерфейсы на хосте:
docker run -it --rm --network host aquasec/kube-hunter
Примечание для Docker for Mac/Windows: Имейте в виду, что "хост" для Docker for Mac или Windows — это виртуальная машина, в которой Docker запускает контейнеры. Поэтому указание --network host предоставляет kube-hunter доступ к сетевым интерфейсам этой виртуальной машины, а не вашего компьютера.
По умолчанию kube-hunter работает в интерактивном режиме. Вы также можете указать параметр сканирования с помощью параметров, описанных выше, например:
docker run --rm aquasec/kube-hunter --cidr 192.168.0.0/24
Эта опция позволяет узнать, что может сделать/обнаружить запуск вредоносного контейнера в вашем кластере. Это дает представление о том, что может сделать злоумышленник, если ему удастся скомпрометировать под, возможно, через уязвимость в программном обеспечении. Это может выявить значительно больше уязвимостей.
Пример файла job.yaml определяет задачу, которая запускает kube-hunter в поде, используя настройки доступа к поду Kubernetes по умолчанию. (Вы можете изменить это определение, например, для запуска от имени пользователя, не являющегося root, или для запуска в другом пространстве имен.)
kubectl create -f ./job.yamlkubectl describe job kube-hunterkubectl logs <имя пода>Чтобы прочитать руководство по внесению вклада, нажмите здесь
Этот репозиторий доступен по лицензии Apache License 2.0.