Перейти к основному содержимому
Версия: 7.0

Модель безопасности и рекомендации

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

Активы и доверительные границы

АктивГде существуетКто/что доверено
Секрет аккаунта восстановления (мастер-ключ сервисного аккаунта или мастер-пароль пользователя)Только в момент деления и в момент восстановления, в памяти процесса passwork-cliОператор настройки / оператор восстановления, кратковременно
Доли (share) секрета, N штукФайлы у держателей, при передаче — зашифрованы RSA держателяКаждый держатель — только свою долю
Приватный RSA-ключ держателяЛокально у держателяТолько сам держатель
API-токен сервисного аккаунта (только для варианта на сервисном аккаунте)Файл у оператора восстановленияОператор восстановления
Ключи сейфов (продуктовая криптография Пассворка)На сервере в зашифрованном виде, в открытом — только на клиенте в момент операцииСервер не видит открытый ключ сейфа никогда
Локальный журнал восстановления (JSONL)Файл на машине оператораОператор, экспорт в SIEM
История действий (Activity Log)На сервере ПассворкаАдминистраторы с доступом к аудиту

Доверительная граница проходит между сервером Пассворка (не видит открытые ключи и секреты — модель Zero-Knowledge) и клиентскими машинами держателей и операторов, где секреты кратковременно существуют в открытом виде. Схема Шамира добавляет вторую границу — ни один держатель по отдельности не пересекает порог доверия, необходимый для реконструкции.

Модель угроз (STRIDE)

КатегорияУгрозаКак обрабатывается в схемеОстаточный риск
Spoofing (подмена личности)Злоумышленник выдаёт себя за держателя и присылает произвольную долюshamir recover проверяет совместимость всех долей (общие M, N) — заведомо неверная доля вызывает код 6, а не тихую подмену секретаДоля от настоящего, но недобросовестного держателя неотличима от честной — подлинность держателя схема не проверяет, это организационный контроль (личная передача, известный канал)
SpoofingЗлоумышленник получает API-токен сервисного аккаунта (только вариант на сервисном аккаунте)Токен один не даёт доступа к данным — нужен ещё реконструированный мастер-ключТокен — предпосылка атаки при последующей утечке долей; храните как критичный секрет (см. рекомендации)
Tampering (модификация)Подмена содержимого файла доли на диске или при передачеДоли, зашифрованные под RSA держателя, при подмене не расшифруются или дадут доли, несовместимые между собой (код 6)Незашифрованные доли (без --holder-pubkey-dir) подмену содержимого не обнаруживают — используйте RSA-шифрование долей везде, где это возможно
TamperingМодификация локального журнала восстановления оператором постфактумЖурнал append-only, 0600, отклоняет запись через символическую ссылкуНет криптографической защиты от подмены (нет подписи записей, нет WORM-хранилища) — оператор физически может отредактировать файл на своей машине; единственная защита — экспорт в независимый SIEM в момент операции
Repudiation (отказ от авторства)Держатель заявляет, что не передавал свою долю, либо оператор отрицает участие в церемонииЛокальный журнал фиксирует operator_identity, время, состав кворума (по числу, не поимённо)Журнал не фиксирует личности держателей пофамильно — только количество использованных долей; для юридически значимого разбора нужен отдельный организационный протокол передачи долей (акт, подписи)
Information disclosure (утечка)Компрометация одной долиОдной доли принципиально недостаточно для реконструкции секрета при M ≥ 2 — это математическое свойство схемы, а не эвристикаКомпрометация M и более долей эквивалентна полной компрометации секрета; чем ниже M относительно N, тем быстрее достигается этот порог
Information disclosureСекрет виден в открытом виде на машине оператора в момент split/recoverФайлы секрета и восстановленного значения имеют права 0600, не логируются, не запрашиваются флагом --stdout по умолчаниюПрисутствие в памяти процесса и файловой системе на короткое время неустранимо принципиально; для варианта на обычном пользователе окно риска больше — секрет пригоден для интерактивного входа (см. ниже)
Denial of serviceHeld M − 1 или меньше держателей отказываются или недоступныСхема допускает недоступность до N − M держателей без потери работоспособностиЕсли недоступно больше держателей, чем допускает порог, восстановление невозможно никем — это заложенное свойство схемы (нет мастер-обхода), а не баг; выбор M и N — компромисс между устойчивостью к недоступности и устойчивостью к компрометации
Denial of serviceЖурнал восстановления недоступен для записи (диск полон, права нарушены)recovery grant-admin работает fail-closed: код 9, доступ не выдаётсяНамеренный побочный эффект — недоступность аудита блокирует операцию восстановления даже при легитимном кворуме; держите резервный путь для --audit-file на случай проблем с основным
Elevation of privilege (повышение привилегий)Сервисный аккаунт получает больше прав, чем нужно для восстановленияРоль сервисного аккаунта настраивается администратором отдельно от механизма ШамираСхема не ограничивает права роли сама по себе — если роли выданы избыточно (например, права администратора всей системы), компрометация контура восстановления даёт значительно больше, чем предполагалось
Elevation of privilegeM держателей сговариваются и восстанавливают доступ к сейфу, к которому не должны иметь отношенияНе предотвращается — это штатный, ожидаемый режим работы схемыМодель безопасности схемы — «доверие M из N держателей», а не «защита от M держателей». Если ваша модель угроз требует защиты и от сговора кворума, схема Шамира сама по себе не подходит — нужен дополнительный контроль (например, обязательное подтверждение вторым независимым процессом до применения восстановленного доступа)

Различия модели угроз между вариантами

Сервисный аккаунт (Расширенная редакция)Обычный пользователь (упрощённый вариант)
Поверхность атаки на секретТолько через реконструкцию долей — у аккаунта нет интерактивного входа, скомпрометированный пароль отдельно похитить негдеМастер-пароль пригоден для обычного входа — фишинг, подбор, повторное использование пароля становятся релевантными векторами в дополнение к атаке на доли
Окно жизни открытого секретаТолько внутри процесса grant-admin, секундыОт момента shamir recover до входа в продукт и завершения выдачи доступа — операция полностью ручная, окно больше и зависит от дисциплины оператора
Fail-closed аудитЕсть (recovery grant-admin, код 9 при недоступности журнала)Нет — shamir split/recover не проверяют журналирование, ответственность за аудит целиком на процессе организации
Частичное покрытие сейфовТребует ручного вмешательства Владельца — сервисный аккаунт не может подтвердить запрос доступа самПользователь технически может подтвердить запрос сам после восстановления пароля, но до инцидента доступа к учётной записи ни у кого нет — риск на практике тот же
Минимизация прав ролиВозможна без побочных эффектов — аккаунт не используется ни для чего, кроме восстановленияАналогично, но учтите: минимизация роли не отменяет того, что учётная запись обладает обычным паролем, годным для входа

Для критичных инсталляций предпочитайте вариант на сервисном аккаунте именно из-за меньшей поверхности атаки на постоянно существующий секрет (нет интерактивного входа) и наличия fail-closed аудита. Упрощённый вариант обоснован только там, где лицензия не позволяет иначе.

Ограничения схемы

  • Не защищает от сговора кворума. M легитимных держателей, договорившихся между собой, могут инициировать восстановление к любому сейфу, покрытому политикой — это ожидаемое поведение, а не уязвимость, но модель угроз должна это учитывать при выборе держателей и порога.
  • Ротация в v1 — только через полное переразвёртывание. Заменить одного скомпрометированного держателя без создания нового аккаунта восстановления и нового деления секрета нельзя (подробности — ниже).
  • Аутентичность держателя не проверяется криптографически. Схема проверяет математическую совместимость долей, а не то, что доля действительно пришла от заявленного человека — это организационный, а не технический контроль.
  • Локальный журнал не защищён от подмены той же машиной, что его ведёт. Целостность журнала гарантируется только до тех пор, пока оператор ему не противодействует; для независимого аудита нужен внешний сток (SIEM/syslog).
  • Продуктовая История действий не видит деталей церемонии. Она фиксирует только итоговую выдачу доступа — без локального журнала расследование инцидента постфактум невозможно восстановить в деталях.
  • Упрощённый вариант расширяет поверхность атаки за счёт интерактивного входа — см. таблицу выше.

Что остаётся на вашей стороне

API-токен сервисного аккаунта — постоянный секрет

Токен сам по себе не даёт доступа к данным сейфов: без реконструированного мастер-ключа сервер не отдаст расшифровываемые ключи. Но токен всё равно стоит защищать как критичный секрет:

  • храните его в хранилище секретов (secret manager, HSM), а не в почте или общем диске;
  • давайте роли сервисного аккаунта только права, необходимые для выдачи доступа и чтения структуры сейфов политики — не полные права администратора системы;
  • ограничьте круг людей, знающих, где лежит токен, отдельно от круга держателей долей;
  • если в вашей редакции доступны ограничения входа по ролям (IP-allowlist, обязательный SSO и т.п.), примените их к роли сервисного аккаунта — лишний барьер не помешает, даже если у роли и так нет интерактивного входа.

Нет продуктового аудита самой церемонии

История действий видит только итоговую выдачу доступа, а не то, кто был держателем и сколько долей собрано. Обязательно настройте локальный журнал passwork-cli (см. Аудит и коды завершения) и направляйте его во внешнюю систему мониторинга — это единственный способ восстановить картину инцидента постфактум.

Ротация долей в v1 — только через переразвёртывание

Лёгкой замены отдельного держателя без перевыпуска всей схемы нет. Если держатель скомпрометирован или покидает организацию, процедура такая:

  1. Создать новый аккаунт восстановления с новым набором держателей и новым делением секрета (настройка сервисного аккаунта или упрощённый вариант).
  2. Подключить новый аккаунт к администраторам политики и убедиться, что покрытие полное (покрытие сейфов).
  3. Удалить старый аккаунт восстановления из администраторов политики и затем удалить сам аккаунт (для упрощённого варианта — дополнительно сменить или деактивировать мастер-пароль старой учётной записи).

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

Частичное покрытие сейфов

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

Рекомендации по эксплуатации

  • Выбирайте независимых держателей. Люди, которые могут сговориться или физически находятся в одном месте (например, весь ИТ-отдел), снижают ценность порога — рассмотрите держателей из разных подразделений или юрисдикций для критичных политик доступа.
  • Разделяйте роль оператора настройки и оператора восстановления, где это возможно — снижает риск того, что один и тот же человек контролирует обе стороны схемы.
  • Проверяйте восстановление регулярно. Проведите тестовую церемонию на некритичном сейфе той же политики хотя бы раз в квартал — это единственный способ убедиться, что доли, токен (или пароль) и покрытие всё ещё согласованы.
  • Обновляйте состав держателей при кадровых изменениях. Увольнение держателя — повод для ротации схемы, даже если формально утечки не было.
  • Не храните M долей у одного человека. Схема защищает ровно настолько, насколько доли физически разделены между разными людьми и местами хранения.
  • Минимизируйте роль аккаунта восстановления. Права только на выдачу доступа и чтение структуры сейфов нужной политики — не более.
  • Для упрощённого варианта — минимизируйте время жизни восстановленного пароля. Зачищайте файлы, переменные окружения и буфер обмена сразу после входа и выдачи доступа; рассматривайте компрометацию этого пароля как компрометацию полноценной учётной записи.

Конкретные значения M из N, состав держателей и сегментация политик зависят от масштаба организации — см. Практические рекомендации с тремя типовыми профилями.

Подробнее о криптографической модели Пассворка в целом — в разделе Криптография.