Первая часть из цикла про sensor-based решения по безопасности для Kubernetes.



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



Сбор этой информации может происходить как ИЗ контейнера, так и ВНЕ его. Для первого случая решения используют sidecar- контейнеры, подмену системного компонента runc и встраивание (injection) собственных библиотек в процессы, пользовательских приложений. Для второго случая используются модули ядра и eBPF пробы.



1) Самым надежным и правильным решением на сегодняшний день считаются eBPF пробы - просто, быстро, стабильно.

2) Модули ядра предлагают, как вариант, когда ядро младше 4.19. При этом нужно понимать, что при ошибке в модуле и его падении - упадет и вся Node.

3) Sidecar- контейнеры могут помочь видеть только сеть и при этом дают значительные ресурсные издержки на каждый Pod.

4) Подмена runc обычно идет в связке со встраиванием собственных библиотек через LD_PRELOAD, dlopen, патчинг GOT таблиц и т.д. Все для того, чтобы подготовить окружение для запускаемого контейнера для его мониторинга - то есть происходит модификация окружения (контейнеры под таким решением и без него могут вести себя по-разному). Данная библиотека производит перехват нужных функций на user-space уровне. Получаем такой классический антивирус из нулевых. При этом накладные расходы по ресурсам размываются с расходами самого приложения и сложно сказать на сколько они в итоге повышаются, но точно падает скорость работы.



Для окружений с MicroVM (типа AWS Fargate) или serverless-функциями (типа AWS Lambda) работает только 4 вариант со встраиванием собственной библиотеки для перехвата ряда функций.