Автоматизированный поиск уязвимостей в Kubernetes-кластерах от Aqua Security. Режимы: удалённое сканирование (снаружи), внутри пода (из скомпрометированного контейнера). Находит: открытые API-серверы, etcd без аутентификации, привилегированные поды, секреты в переменных окружения, пути побега из контейнера.
pip install kube-hunter # Удалённо kube-hunter --remote 10.0.0.1 # Внутри кластера kube-hunter --pod
Разработка kube-hunter прекращена. Если вы заинтересованы в сканировании кластеров Kubernetes на наличие известных уязвимостей, мы рекомендуем использовать Trivy. В частности, его возможности по сканированию конфигурации Kubernetes и сканированию уязвимостей в KBOM. Подробнее в документации 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 с Kubernetes ATT&CK Matrix, продолжайте чтение
Демонстрационное видео kube-hunter
kube-hunter теперь поддерживает новый формат Kubernetes ATT&CK matrix.
В то время как уязвимости kube-hunter представляют собой коллекцию творческих техник, имитирующих атакующего в кластере (или за его пределами),
Mitre ATT&CK определяет более общие стандартизированные категории техник для этого.
Можно представить уязвимости kube-hunter как небольшие шаги для атакующего, следующего по пути более общей техники, на которую он нацелился.
Большинство "охотников" и уязвимостей kube-hunter могут быть точно классифицированы по этим техникам, поэтому мы перешли на соблюдение стандарта Matrices.
Некоторые уязвимости kube-hunter, которые мы не смогли сопоставить с техникой Mitre, имеют префикс General (Общее)

kube-hunter?Есть три разных способа запустить kube-hunter, каждый из которых обеспечивает свой подход к обнаружению слабостей в вашем кластере:
Вы можете запустить kube-hunter на любой машине (включая ваш ноутбук), выбрать "Удаленное сканирование" и указать IP-адрес или доменное имя вашего кластера Kubernetes. Это даст вам взгляд атакующего на вашу конфигурацию Kubernetes.
Вы можете запустить kube-hunter непосредственно на машине в кластере и выбрать вариант проверки всех локальных сетевых интерфейсов.
Вы также можете запустить kube-hunter в поде (pod) внутри кластера. Это покажет, насколько ваш кластер был бы открыт, если бы один из ваших подов приложений был скомпрометирован (например, через уязвимость в ПО). (Флаг --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 /location/of/kubeconfig/file.
Также обратите внимание, что это всегда выполняется при использовании режима --pod.
Для имитации атакующего на ранних этапах kube-hunter не требует аутентификации для проведения охоты.
kube-hunter определённый маркер сервисной учётной записи для использования при охоте, вручную передав JWT Bearer-токен секрета сервисной учетной записи с помощью флага --service-account-token. Пример:
bash
$ 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
Доступные методы отправки:
KUBEHUNTER_HTTP_DISPATCH_URL (по умолчанию: https://localhost)KUBEHUNTER_HTTP_DISPATCH_METHOD (по умолчанию: POST)При запуске в виде пода в среде Azure или AWS, kube-hunter будет получать подсети из службы метаданных экземпляра. Естественно, это делает процесс обнаружения более длительным.
Чтобы жестко ограничить сканирование подсети префиксом /24, используйте опцию --quick.
Пользовательская охота позволяет опытным пользователям контролировать, какие "охотники" регистрируются в начале охоты.
Если вы знаете, что делаете, это может помочь, если вы хотите адаптировать процесс охоты и обнаружения kube-hunter под свои нужды.
Пример:
kube-hunter --custom <HunterName1> <HunterName2>
Включение пользовательской охоты удаляет всех "охотников" из процесса, за исключением указанных в белом списке.
Флаг --custom считывает список имен классов "охотников". Чтобы просмотреть все имена классов kube-hunter, вы можете комбинировать флаг --raw-hunter-names с флагом --list.
Пример:
kube-hunter --active --list --raw-hunter-names
Уведомление: Из-за архитектурного дизайна kube-hunter, следующие "Основные Охотники/Классы" всегда будут регистрироваться (даже при использовании пользовательской охоты):
* HostDiscovery
* Генерирует IP-адреса для охоты на основе предоставленных конфигураций
* Автоматически обнаруживает подсети, используя облачные API метаданных
* FromPodHostDiscovery
* Автоматически обнаруживает IP-адреса поверхности атаки для охоты, используя техники, основанные на среде подов
* Автоматически обнаруживает подсети через облачные Metadata API
* PortDiscovery (Обнаружение портов)
* Сканирование портов на указанных IP-адресах для известных портов сервисов Kubernetes
* Collector (Сборщик)
* Собирает обнаруженные уязвимости и открытые сервисы для последующего отчёта
* StartedInfo (Информация о запуске)
* Выводит сообщение о запуске
* SendFullReport (Отправка полного отчёта)
* Отправляет отчёт на основе заданных конфигураций
Существует три метода развёртывания kube-hunter:
Вы можете запустить kube-hunter непосредственно на вашей машине.
Вам потребуется установленное следующее: * python 3.x * pip
Установка:
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 с сетью хоста (host network), он сможет сканировать все интерфейсы на хосте:
docker run -it --rm --network host aquasec/kube-hunter
Примечание для Docker для Mac/Windows: Имейте в виду, что «хост» для Docker для Mac или Windows — это виртуальная машина (VM), в которой Docker запускает контейнеры. Поэтому указание --network host даёт kube-hunter доступ к сетевым интерфейсам этой VM, а не вашей физической машины.
По умолчанию kube-hunter работает в интерактивном режиме. Вы также можете указать параметры сканирования с помощью описанных выше параметров, например:
docker run --rm aquasec/kube-hunter --cidr 192.168.0.0/24
Этот вариант позволяет обнаружить, что может обнаружить/сделать вредоносный контейнер в вашем кластере. Это даёт представление о том, что мог бы сделать атакующий, если бы смог скомпрометировать под, возможно, через уязвимость в ПО. Это может выявить значительно больше уязвимостей.
Пример файла job.yaml определяет Job, которая запустит kube-hunter в поде, используя настройки доступа по умолчанию для подов в Kubernetes. (Вы можете изменить это определение, например, чтобы запускать от имени непривилегированного пользователя или в другом пространстве имен.)
kubectl create -f ./job.yamlkubectl describe job kube-hunterkubectl logs <имя пода>Чтобы ознакомиться с руководством по участию, Нажмите здесь
Этот репозиторий доступен по лицензии Apache License 2.0.