InquirerSara Duterte to use personal funds for HK trip on Nov. 6-8Bollywood HungamaBREAKING: Maatrubhumi release date CONFIRMED; Salman Khan-starrer to release on December 4; to clash with EethaThe Jerusalem PostTrump administration coordinated with Iran on deportations for asylum seekers in middle of war – APDaily MaverickLETTER TO MAHLAMBA NDLOPFU: Sies for Sisisi’s creative accounting and the cat with crocodile tearsInquirer EntertainmentDavao Conyo leads TikTok Awards PH 2026 winners heading to SEA tiltZDF heuteAktuelle Pressemitteilungen des ZDFNHK 社会中山間地域の訪問介護 移動コストを報酬加算で評価案 厚労省Wirtualna PolskaUprowadzili i więzili mieszkańca Gdyni. To odkryli w aucie porywaczyNMEGrimes making film debut in entirely AI-generated ‘Gods Don’t Give Gifts’عالم التقنيةHonor WIN 2 يتفوق في الأداء ويتصدر تصنيفات أكتوبر متقدماً على OnePlus 16ColliderEvery Lord of the Rings Book, Ranked by GoodreadsDW 中文澳门国安首案:民主派前议员区锦新被重判12年半
The Daily Newsstand · Free, Always
Friday, November 6, 2026

Wolfee‑Watcher новый бесплатный инструмент runtime k8s

Translate

Зачем защищать контейнеры после деплоя? Рассказываю о Wolfee‑Watcher

Так всё же, зачем? Существует ряд опасных классов уязвимостей, которые направлены как раз на взаимодействие приложения с контейнерной инфраструктурой. Вот тут и начинается само наблюдение, а куда дальше может продвинуться злоумышленник? А также, если он всё‑таки получил какой‑то токен — не только продуктового приложения, а любого инфраструктурного, у которого уже более широкий круг прав, — векторы атаки мы в данной статье разбирать не будем: думаю, это тема отдельной статьи, особенно о том, чем опасен базовый Kubernetes без настройки.

После RCE злоумышленник может запустить любой код в работающем контейнере, просочить внутрь реверс‑шелл и дальше пробовать продвигаться вглубь. SSRF сама по себе не означает доступ к командной строке, но позволяет заставить приложение обратиться к внутренним адресам или облачным метаданным. Защита и наблюдение за контейнерами стали первым рубежом после прорыва веб‑приложений. Прорыв в кластер через горизонтальное движение из инфраструктуры — тоже критичный сценарий, и обходить его стороной я не хочу, но думаю, что в следующей статье я как раз расскажу о векторах атаки на кластер и о том, как его хотя бы базово защитить. Поэтому хочется увидеть, что происходит дальше — пока ещё можно разобраться в последовательности действий атакующего и успеть принять меры по его выдавливанию из нашей инфраструктуры.

Именно для наблюдения наших кластеров я решил создать Wolfee‑Watcher. До него я попробовал несколько бесплатных инструментов для Kubernetes, в том числе StackRox. Он помогал мониторить процессы и настройки подов, но после тестов мне всё равно не хватало истории и охвата. Также мне очень понравились такие решения, как Falco, Tetragon и Tracee, — именно они подтолкнули меня сделать свой комбайн для мониторинга, чтобы не держать зоопарк из кучи инструментов и видеть единый дашборд с ресурсами, образами и уязвимостями в одной панели — для личного удобства и решил поделиться им с вами.

Главная страница дашборда

Главная страница дашборда

Почему мониторинг бинарей может быть недостаточен и опасные сисколы

Не обязательно какая‑то подозрительная активность будет именно бинарник, поэтому жестко отслеживать вызовы условно того же nmap и быть спокойным не стоит. Вот тут как раз и может помочь отслеживать такого потенциального опасного сискола как io_uring. По сути это асинхронный интерфейс к ядру, который может выполнять операции минуя обычные сисколы. Для приложения, вызов io_uring серьезный повод проверить, возможно кто‑то уже внутри.

Как я отслеживаю это (в дефолте это аномалия)

Как я отслеживаю это (в дефолте это аномалия)

Для статьи я запустил Falco event‑generator + свои тестовые вызовы. Он воспроизводит подозрительные действия внутри контейнера и через Kubernetes API. Потом проверил io_uring отдельным подом и посмотрел, какую историю удастся собрать в Wolfee‑Watcher.

Короткий список событий на основе именно фалко генератора

Короткий список событий на основе именно фалко генератора

Wolfee‑Watcher обучается на основе запущенных бинарей внутри приложения, поэтому новое поведение будет попадать в аномалии, в форензику пода как аномалия, а так же помечатся меткой, которая мониторит изменение верхнего слоя и выводит это внутри пода.

Это не полный показатель, более точную информацию можно выгрузить по кнопке

Это не полный показатель, более точную информацию можно выгрузить по кнопке

Как мы видим добавление и изменение двух системных файлов /etc/shadow и /etc/hosts. В Violations я вижу, какой процесс его открыл и в каком поде это произошло. Там же лежат срабатывания по действиям в Kubernetes API. Шумное правило можно приглушить, а ошибочное срабатывание пометить ложным.

Правила были заранее созданы

Правила были заранее созданы

Violations собирает именно нарушения политик, а не весь поток событий. Вкладка Syscalls показывает правила на системные вызовы; Tracepoints и LSM Hooks относятся к событиям ядра. Build и Deploy проверяют образы и настройки запуска, а Audit показывает нарушения правил для Kubernetes API. Когда мне нужно понять, что произошло, я начинаю с конкретного срабатывания, а не листаю все события подряд.

Что изменилось в Kubernetes?

Генератор не ограничился действиями внутри контейнера: он создал несколько ролей и других объектов кластера. На странице аудита я открыл роль wildcard-resources-role. Её создал ServiceAccount генератора. В карточке осталось время запроса, сам объект и запись о действии в Kubernetes API.

примеры правил из аудит вкладки

примеры правил из аудит вкладки

Audit logs так же есть в моем приложении, по сути это стрим из файла аудит лога с мастер ноды
(обратите внимание, что читает именно с файла, с облаком могут быть проблемы из‑за недоступности мастера). В мониторинге идет просто поток всех событий которые идут из файла, но так же можно отфильтровать на опасные, они заранее выставлены. Во вкладке Rules настраиваются правила и уведомления. Silent убирает шум из ленты; правила и алерты при этом продолжают работать.

Тут мы видим создание ролей, exec внутрь контейнера. Можно перейти в RBAC и увидеть собственно созданную роль. Там видно, какие из них позволяют читать секреты или выполнять команды в подах, так же они имеют подсветку на особо критичные.

Если под удалили

Часть подов генератор удалил вскоре после создания. На скрине можно увидеть во вкладке forensics, их уже нет в обычном списке работающих подов, но в истории они сохранились с пометкой terminated. Внутри можно увидеть что было выполнено внутри контейнера (можно переключить конкретный контейнер)

Для выгрузки есть отдельная кнопка Upper Dir. Она забирает верхний слой контейнера в tar.gz: новые файлы, изменённые конфиги и скрипты, оставленные после запуска. Список удалённых файлов кладётся в архив как WOLFEE-DELETED-FILES.txt. Сам контейнер останавливать не нужно, но его слой должен ещё быть доступен на ноде. У выгрузки есть пределы: 10 000 записей и 512 МиБ на архив; файлы крупнее 128 МиБ пропускаются. Логи контейнера скачиваются отдельно кнопкой Logs.

Если общей ленты мало, в карточке пода включаю подробную запись событий ядра. На скриншоте открыт список LSM‑хуков; среди них есть события доступа к файлам. Наблюдение настраивается для выбранного пода, не для всего кластера.

Сетевые политики наблюдение

Нужно не забывать что сетевые политики внутри кластера один из основных механизмов защиты, и контроль их нужно осуществлять нужно очень внимательно. В данном примере мы видим все политики внутри моего тестового кластера. А по кнопке можно сгенерировать любую политику, но применять нужно будет руками, так как это все таки лучше доверить человеку после проверки.

Приманки

То, что решил добавить для усиления наблюдения, и то, что я хотел бы увидеть в StackRox это — хонипоты. За основу взял доступный опенсорс и добавил ловушки в свое приложение, схема банальна — контейнер выдает себя за один из предложенных сервисов и ожидает соединения к нему, после чего мы видим это в алертах, на выбор пользователю представлен широкий выбор ловушек, которые помогут в детекте любого злоумышленника который пытается сканировать изнутри.

само событие

само событие

выбор сервиса

выбор сервиса

Аудит образов внутри кластера

А что если внутри уже работает что то подозрительное, или опасный образ, это тоже необходимо отслеживать и своевременно обновлять. Под капотом сканирования работает Trivy: он находит уязвимости в образах, запущенных в кластере. wolfee‑watcher дополняет находки данными об эксплуатации и исправлениях, а затем сопоставляет CVE с выгрузкой БДУ ФСТЭК. Поэтому рядом с CVE можно увидеть идентификатор БДУ и уровень опасности по этой базе; если совпадения нет, поле остаётся пустым. Неудавшееся сканирование тоже видно, его не спутаешь с чистым отчётом.

Так же можно увидеть такой столбец как digest, в случае если кто то пытается залить образ с таким же тегом — будет событие в аномалии, один из векторов за которым тоже стоит поглядывать

Compliance кластера на соответствие стандартам

Для этого есть раздел Compliance. Он собирает технические проверки по CIS, NIST, PCI DSS, HIPAA и приказу ФСТЭК № 118. По ФСТЭК здесь 44 контроля: например, видны поды с избыточными привилегиями или пространства имён без сетевой политики. У каждого контроля показано, сколько объектов проходит проверку и где остаются проблемы. Это рабочий список для исправлений, а не заключение об аттестации кластера.

Под капотом всё собирают разные компоненты. Tracee получает события процессов и ядра; через tracee-bridge и Kafka они попадают в обработку. sentry-audit приносит действия из Kubernetes API, scanner-agent отвечает за образы, а forensic-watcher помогает с файлами подов. Для одного кластера консоль работает внутри него, для нескольких можно вынести общий хаб отдельно. Компоненты общаются по mTLS. На схеме видно, где живут агенты и куда идут данные.

Это приложение я делал около года, один, и могут наблюдаться какие‑то проблемы, особенно в юай, я не являюсь разработчиком, а только AppSec / DevSecOps инженером и пытаюсь помочь сообществу для развития опенсорса, спасибо большое, что дочитали до конца, и прошу, не судите строго, моя первая статья:3

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.