61 lines
3.3 KiB
Markdown
61 lines
3.3 KiB
Markdown
# Безопасность
|
||
|
||
## Секреты
|
||
|
||
Секретами считаются 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 запрещено.
|