Files
singbox_glue/docs/security.md
T

3.3 KiB
Raw Blame History

Безопасность

Секреты

Секретами считаются auth, obfs password, URI целиком, generated config и все backup-файлы.

  • CLI не принимает URI позиционным аргументом;
  • dataclass скрывает credentials из repr();
  • parser errors не содержат исходный URI;
  • diff заменяет secret values на <REDACTED>;
  • 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 запрещено.