Сайт отвечает на 443, VPN отвечает на 1194, файрвол пропускает ровно эти два, и проверка проходит. Ничто в этой последовательности не спросило, что веб-работник может читать или какие файлы может перезаписать. Скомпрометированному работнику не нужен открытый порт, если он может добраться до управляющего сокета или каталога конфигурации с правом записи. Граница — это полномочия, а слушатели — лишь та часть, которую легко увидеть.

Отдельное имя службы — это ярлык; отдельная идентичность — это свойство безопасности.

Считайте полномочия работника, а не порты

Начните с пользователя выполнения, его групп, его возможностей и его вида файловой системы. Сервисная учётная запись, случайно входящая в группу VPN, может читать ключевой материал без единого открытого порта. Точки монтирования с правом записи — другая половина: загрузки и кеши должны находиться далеко от файлов политики и секретов, а ненужно общий каталог с правом записи сводит на нет аккуратное именование. Проверьте процесс, который выполнял бы операцию, потому что привилегированный родитель и непривилегированные работники не разделяют одни полномочия.

То, что ключ VPN читается при запуске демона, не значит, что веб-работнику он нужен. Отделите чтение, которое выполняет демон, от доступа, который получает приложение.

Сокеты, которые дают больше, чем кажется

Некоторые конечные точки — это административные API в костюме потока метрик. Интерфейс управления VPN может менять сеансы, отключать клиентов и читать состояние. Сокет среды выполнения контейнеров ещё шире: доступ к нему фактически означает контроль над хостом, гораздо больше, чем нужно веб-приложению. Ни один из них не относится к набору монтирований обычного приложения, и ни один не появляется при подсчёте слушающих портов.

Привязка административного слушателя к локальному адресу — это начало, а не полное ограничение, потому что каждый путь входа на этот адрес по-прежнему важен. Разрешайте только предусмотренные источники и интерфейсы.

Контейнеры делят одно ядро

Контейнеры добавляют границы процесса, файловой системы и сети и делят одно ядро с хостом. Это делает решающими выбор возможностей, монтирования хоста и доступ к демону: монтирование секретов хоста или выдача привилегированного контроля среды выполнения стирает границу, которую подразумевает метка контейнера. Отдельные VM действительно дают отдельные гостевые ядра, тогда как гипервизор, административные идентичности, хранилище и резервные копии остаются общими. Выбирайте границу, у конфигурации и обновлений которой есть названный владелец.

Более сложная схема, которую никто не поддерживает, хуже простой, которая действительно проверяется.

Сначала проверьте отказ, затем сервис

Используйте одобренные проверки в реальном контексте работника, чтобы подтвердить, что он не может менять политику VPN, читать ненужные секреты или касаться интерфейса управления. Успешное чтение от имени администратора ничего не проверяет в отношении этого отказа. Затем проверьте сайт, обычную разрешённую операцию VPN и то, что происходит с каждой из них при перезапуске. Сохраняйте путь восстановления, не зависящий от починки VPN, чтобы ошибка оставалась исправимой.

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

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

Похожие статьи