# Пособие для самостоятельного изучения по теме "Kubernetes Security"
::: danger
Безопасность напрямую зависит от того как работает рантайм - система, которая запускает контейнеры или ОС на которой она запускается. Для получения примеров атак можно обратиться к Mitre ATT&CK [тут](https://attack.mitre.org/matrices/enterprise/containers/).
:::
Для практического задания будем использовать вот [этот](https://github.com/madhuakula/kubernetes-goat.git) проект.
Чтобы его развернуть необходимо выполнить следующие команды:
1. Клонировать репозиторий
```
git clone https://github.com/madhuakula/kubernetes-goat.git
```
2. Перейти в корневую директорию проекта и выполнить команду:
```
bash setup-kubernetes-goat.sh
```
3. Запустить команду:
```
minikube service kubernetes-goat-home-service --url
```
Теперь уязвимый кластер доступен по адресу http://127.0.0.1:1234
::: danger
Так как Kubernetes отправляет на ноду долго запрос, возможно придется ждать порядка 5ти минут, чтобы приложение стало доступно по адресу выше.
:::
## Практика
Уязвимый кластер дает возможность протестировать уязвимую версию по следующим атакам:
### Раскрытие конфигурационных данных системы контроля версий
Атакующий может проводить атаки на сревисы, которые работают внутри кластера путем перебора существующих и несуществующих файлов и директорий.
:::info
В этом сценарии используется уязвимость приложения, которое расположено в контейнере кластера.
:::
Если обратиться по адресу http://127.0.0.1:1230/.git/config, то можно заметить, что доступна скрытая директория .git, при автоматическом деплое эту директорию могут скопировать на сервер автоматически.
Далее директорию можно скачать с помощью wget -r команды или испоьзовать инструменты из [этого](https://github.com/internetwache/GitTools) репозитория.
Полученные данные далее можно изучать локально с. помощью обычного git.
### RCE в контейнере
Сценарий доступен на порту http://127.0.0.1:1231/
Уязвимость представляет собой одну из проблем связанных с инйекциями команд. Параметры передаваемые приложению не проходят необходимых проверок и из-за этого атакующий может выполнять команды в контейнере.
Пример данных для запроса - 127.0.0.1;whoami
Остальные сценарии тестирования предлагается пройти самостоятельно используя материалы, которые приведены ниже.
Так же необходимо предложить исправление настроек kubernetes, где это возможно, чтобы пропала возможность атаковать инфраструктуру:
- Получать доступ к API серверу без предоставления аутентификационных данных
- Убегать из контейнера
## Полезные ресурсы
- https://dodcio.defense.gov/Portals/0/Documents/Library/DevSecOpsReferenceDesign.pdf
- https://github.com/kubernetes-sigs/security-profiles-operator
- https://www.container-security.site/general_information/container_cve_list.html
- https://0xn3va.gitbook.io/cheat-sheets/container/escaping
- https://blog.quarkslab.com/kdigger-a-context-discovery-tool-for-kubernetes.html
- https://github.com/inguardians/peirates
- https://res.cloudinary.com/snyk/image/upload/v1551798390/Docker_Image_Security_Best_Practices_.pdf