55 lines
2.8 KiB
Markdown
55 lines
2.8 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=disabled` запрещает новому TUN-механизму 1.14 менять native DNS и
|
||
platform interception. DNS контролируется явной route rule. Chrome QUIC
|
||
parroting включён (`disable_chrome_parrot=false`); production acceptance обязан
|
||
подтвердить совместимый RSA/ECDSA/ACME certificate, поскольку Ed25519 с этим
|
||
режимом несовместим.
|
||
|
||
`pinSHA256` и `ech` отклоняются: молчаливое ослабление TLS запрещено.
|