Комплексная безопасность во время выполнения для ваших контейнеров с практической демонстрацией

Falco - это инструмент безопасности во время выполнения с открытым исходным кодом, который может помочь вам защитить различные среды. Sysdig создал его, и с 2018 года он является проектом CNCF. Falco в реальном времени читает журналы ядра Linux, журналы контейнеров, журналы Kubernetes и т. Д. С помощью мощного механизма правил, чтобы предупреждать пользователей о злонамеренном поведении.

Это особенно полезно для безопасности контейнеров - особенно если вы используете Kubernetes для их запуска - и теперь это де-факто механизм обнаружения угроз Kubernetes. Он принимает журналы аудита API Kubernetes для обнаружения угроз во время выполнения и понимания поведения приложений.

Это также помогает командам понять, кто чем занимался в кластере, поскольку он может интегрироваться с Webhooks для создания предупреждений в системе тикетов или в механизме совместной работы, таком как Slack.

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

Итак, некоторые вещи, которые может обнаружить Falco, следующие:

  • Открытие сеанса оболочки из контейнера
  • Подключение тома пути к хосту
  • Чтение секретных и конфиденциальных файлов, таких как /etc/shadow
  • Установка нового пакета в работающий контейнер
  • Новый процесс, порожденный из контейнера, не являющегося частью CMD.
  • Открытие нового порта или неожиданное сетевое соединение
  • Создание привилегированного контейнера
  • и многое другое…

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

Есть несколько способов запустить Falco в кластере Kubernetes. Вы можете установить Falco в каждый узел Kubernetes, запечь Falco в качестве второго контейнера в модуле или использовать Daemon Set для внедрения в них модуля Falco.

Использование DaemonSet - лучший и более гибкий вариант, поскольку он требует наименьшего количества изменений в функции Dev, а также не влияет на функцию Ops, как того требует первый вариант. Кроме того, он является родным для Kubernetes, поэтому это предпочтительный способ.

Практика

Теперь давайте посмотрим на Falco в действии. Для выполнения предварительных условий вам понадобится работающий кластер Kubernetes.

Установить Helm

Helm - это менеджер пакетов для Kubernetes, и он очень помогает, если он у вас установлен. Мы установим Falco с помощью диаграммы Helm, поэтому нам нужно сначала установить Helm в нашем кластере. Игнорируйте шаг ниже, если вы уже установили Helm в своем кластере.

Установить Helm просто. Загрузите последний пакет для своей ОС, распакуйте его и переместите на свой путь:

wget https://get.helm.sh/helm-v3.3.4-linux-amd64.tar.gz
tar -xvf helm-v3.3.4-linux-amd64.tar.gz 
chmod +x linux-amd64/helm 
mv linux-amd64/helm /usr/local/bin/

Установить Falco

Теперь давайте установим Falco, используя официальную диаграмму Helm.

Сначала добавьте репозиторий falcosecurity Helm и обновите репо:

$ helm repo add falcosecurity https://falcosecurity.github.io/charts
"falcosecurity" has been added to your repositories
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "falcosecurity" chart repository
Update Complete. ⎈Happy Helming!⎈

Теперь давайте установим Falco с помощью диаграммы Helm:

$ helm install falco falcosecurity/falco
NAME: falco
LAST DEPLOYED: Fri Oct 16 07:06:24 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Falco agents are spinning up on each node in your cluster. After a few
seconds, they are going to start monitoring your containers looking for
security issues.
No further action should be required.

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

$ kubectl get pod -o wide
NAME          READY   STATUS    RESTARTS   AGE     NODE                 
falco-cgvxc   1/1     Running   0          6m53s   kind-control-plane
falco-f9526   1/1     Running   0          6m53s   kind-worker2         
falco-rx2gj   1/1     Running   0          6m53s   kind-worker

Поздравляю! Мы успешно установили Falco, и он работает на всех узлах.

Тестирование

Время для тестирования! Мы создадим модуль NGINX и попробуем выполнить несколько действий, которые мы обычно не выполняем.

Создайте под NGINX:

kubectl run nginx --image=nginx

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

kubectl get pod nginx -o wide
NAME    READY   STATUS    RESTARTS   AGE   NODE
nginx   1/1     Running   0          2m    kind-worker

Как мы знаем, модуль NGINX присутствует в узле kind-worker. Соответствующий модуль Falco - falco-rx2gj.

Давайте откроем дублирующееся окно и сделаем следующее в левом окне, отслеживая журналы контейнера Falco, используя kubectl logs falco-rx2gj в правом окне:

  • Запустите оболочку контейнера NGINX.
  • Кот чувствительный файл /etc/shadow.
  • Выход из оболочки.

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

Вы также можете экспортировать эти журналы в инструмент мониторинга, такой как Prometheus или Grafana, и вы также можете запустить веб-перехватчик в Slack для немедленного уведомления.

Заключение

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

Спасибо за прочтение! Надеюсь, вам понравилась статья!