Официальное руководство по усилению защиты не предлагает одного главного переключателя - оно предлагает слои. Единый вход и автоматическая подготовка учётных записей, ограничение устройств, политика расширений, поддерживаемые клиенты, режим приватности, контроль моделей и личных ключей, исключение репозиториев, ограничение областей для автоматики, режим с автоматической проверкой вместе с песочницей, сетевые ограничения, обработчики событий, исключения файлов, обзорные агенты и журналы аудита.
Перечень выглядит длинным, но за ним стоит простая логика: каждый слой закрывает свой класс риска и не закрывает остальные. Идентичность отвечает за то, кто действует. Режимы и песочница - за то, что он может сделать. Сеть - за то, куда уйдут данные. Обзор - за то, что попадёт в основную ветку. Журналы - за то, что вы сможете восстановить постфактум. Ни один слой не является запасным для другого, и дырка в одном не закрывается усилением соседнего.
Полезно один раз собрать минимальный корпоративный базовый уровень как чек-лист. Ниже он и приведён: закреплены вход, подготовка учётных записей и идентичность устройств; закреплены режим приватности и список разрешённых моделей; чувствительные репозитории исключены или вынесены из области; выбран режим с проверкой или список разрешённого вместо полного доступа; у локальной песочницы и облачного трафика есть явные политики; внешние серверы, плагины и расширения проходят список и ревью источника; критичные обработчики работают в режиме блокировки при сбое; обзорные агенты дополняют человека; журналы экспортируются и просматриваются; канареечное обновление и откат протестированы.
Десять пунктов - это немного для организации, и каждый из них проверяем. Именно проверяемость отличает базовый уровень от декларации: по каждому пункту можно предъявить не намерение, а наблюдаемое поведение или запись в журнале. Если предъявить нечего, пункт считается невыполненным независимо от того, что написано в политике, и на аудите он будет выглядеть ровно так же.
Пункт про обработчики стоит расшифровать, потому что он тонкий. Обработчик, который должен блокировать опасное действие, обязан отказывать при собственном сбое, а не пропускать. Разница проявляется в единственный момент - когда обработчик недоступен, - и именно в этот момент политика либо есть, либо её нет. Отсюда второе требование: у критичной проверки не должно быть зависимости, которой может не оказаться. Обработчик, который ходит за вердиктом в сетевой сервис, при обрыве связи превращается в пропускающий; та же проверка, лежащая рядом с репозиторием и не требующая сети, продолжает работать. Признак неверной настройки выглядит безобидно: команды, которые обычно требовали подтверждения, однажды проходят молча.
Ещё один слой обычно уже куплен: существующие средства предотвращения утечек подключаются к инструменту тремя способами. Агент на устройстве смотрит исходящий трафик к доменам сервиса и блокирует или сигналит по своим правилам - он ничего не знает про смысл работы, зато действует и там, где обработчики не настроены, и оплачивается задержкой на проверке трафика. Собственная логика в обработчиках проверяет запрос до отправки модели и сгенерированный код до записи на диск. Вызов из обработчика внешнего сервиса поставщика даёт решение по его ответу - и это ровно та сетевая зависимость, которая при обрыве оставляет проверку без вердикта. Рядом стоит ограничение источников для браузера: список разрешённых доменов, за пределы которого переход агента блокируется.
Отдельно нужно повторить сказанное про режимы: вероятностный классификатор не является границей безопасности. Он полезен как регулятор автономности по умолчанию - снимает рутинные подтверждения там, где риск невелик, и тем самым сохраняет внимание человека для случаев, где оно нужно. Но секреты, разрушительные команды и регулируемые области защищают детерминированными средствами и внешней изоляцией, а не оценкой, потому что оценка ошибается тихо и на редких входах.
Эта фраза кажется очевидной, пока не увидишь конфигурацию, где вся защита держится на режиме с проверкой. Она выглядит аккуратно, работает большую часть времени и рассыпается ровно тогда, когда содержимое репозитория, страницы или ответа внешнего сервера окажется специально составленным, то есть в единственном случае, ради которого защита и строилась. Слой оценки хорош вместе с жёсткими границами и плох вместо них.
Последний пункт списка выглядит эксплуатационным, но он тоже про безопасность. Политика поддерживаемых клиентов заставляет обновляться, а обновление меняет поведение инструмента сразу у всех, включая поведение ваших обработчиков, правил и интеграций. Канареечное обновление означает, что новая версия сначала приходит небольшой группе, а остальные остаются на прежней, пока проверка не пройдена. Откат означает, что возврат отработан заранее и не требует изобретательности в неудачный день. Не отрепетировав ни того ни другого, вы однажды получите инцидент, вызванный не атакой, а плановым обновлением, и разбираться придётся сразу во всей организации.
Инженерный вывод простой: усиление защиты - это не набор запретов, а набор слоёв с понятным владельцем у каждого. Внедрять их стоит в порядке от идентичности к автономности и сети, проверять - отрицательными тестами, а пересматривать - при каждом изменении состава инструментов. Тогда у вас появляется не ощущение безопасности, а её наблюдаемые признаки.
Типичные провалы предсказуемы. Строить защиту на одном слое, обычно на режиме с проверкой. Оставить чувствительные репозитории в области видимости, ограничившись правилами. Сделать критичный обработчик зависимым от сети и получить пропускающий режим при обрыве. Не проверить обработчики в режиме блокировки. И не отработать канареечное обновление и откат.
Минимальный корпоративный базовый уровень
[ ] единый вход, подготовка учётных записей и идентичность устройств закреплены
[ ] режим приватности и список разрешённых моделей закреплены
[ ] чувствительные репозитории исключены или вынесены из области
[ ] выбран режим с проверкой или список разрешённого вместо полного доступа
[ ] у локальной песочницы и облачного трафика есть явные политики
[ ] внешние серверы, плагины и расширения проходят список и ревью источника
[ ] критичные обработчики работают в режиме блокировки при сбое
[ ] обзорные агенты дополняют человека, а не заменяют его
[ ] журналы экспортируются и регулярно просматриваются
[ ] канареечное обновление и откат протестированы