# Безопасность ## Секреты Секретами считаются auth, obfs password, URI целиком, generated config и все backup-файлы. - CLI не принимает URI позиционным аргументом; - dataclass скрывает credentials из `repr()`; - parser errors не содержат исходный URI; - diff заменяет secret values на ``; - state хранит hashes, версию и endpoint без auth; - URI/config/backups имеют `0600`, каталоги — `0700`; - subprocess запускается массивом аргументов без shell. При попадании URI в чат, issue, history или journal следует заменить оба credential. ## Fail closed До изменения production проверяются strict policy, URI, exact 1.14.0, `with_quic`, `with_gvisor`, deterministic candidate и настоящий `sing-box check`. Неизвестные параметры не игнорируются. In-place package upgrade запрещён. Legacy state/config требует ручного архивирования; автоматической миграции или cross-version rollback нет. ## Same-release backup provenance Текущий config можно сохранить как last-good только если его SHA и engine version подтверждены state версии 0.2.0. Каждый автоматический backup имеет соседний `.meta`, а last-good — `last-good.meta.json`. Несовпадение checksum или версии блокирует rollback до изменения production. Metadata защищает от операционной ошибки, но не от атакующего с root-доступом. ## Anti-leak Отдельная таблица `inet vpn_egress_guard` отклоняет forwarding `eth1 -> eth0`. Она не принадлежит sing-box и остаётся независимой от таблицы `inet sing-box`. Package drop-in требует успешного запуска guard перед sing-box. Systemd dependency не является watchdog для ручного удаления nftables table; runtime-состояние проверяет `vpn-egressctl doctor`. ## DNS и TLS `dns_mode=hijack` включает native DNS integration и platform-level interception TCP/UDP 53. При `auto_redirect` sing-box направляет non-local DNS на автоматически выведенный TUN address `172.19.0.2`; явная route rule не используется. Linux не может этим механизмом перенаправить DNS, адресованный локальному IP самого шлюза. DoH/DoT также не распознаются как DNS, но проходят через общий TUN/VPN маршрут как обычный трафик. Chrome QUIC parroting включён upstream default; поле `disable_chrome_parrot=false` не рендерится. Production acceptance обязан подтвердить совместимый RSA/ECDSA/ACME certificate, поскольку Ed25519 с этим режимом несовместим. `pinSHA256` и `ech` отклоняются: молчаливое ослабление TLS запрещено.