Skip to content

RU Security

SlimRG edited this page Aug 23, 2026 · 1 revision

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

Supply-chain трафик компонента DNSCrypt следует той же DNS privacy boundary: GitHub release API, archive, signature и redirect-hosts разрешаются через Cloudflare DoH поверх Shadowsocks с резервным Google DoH, после чего соединение идёт через активный локальный SOCKS5. Установка/обновление компонента намеренно не использует Windows/system resolver для этих hostnames.

Сообщение об уязвимости

Не публикуйте exploitable details, proxy credentials, subscription URLs, tokens или приватный конфиг в открытом issue.

Предпочтительно использовать GitHub Private Vulnerability Reporting. Если он недоступен — создайте минимальный безопасный report без секретов.

Полезно указать:

  • версию/commit;
  • Windows build;
  • User/Admin/Game Mode;
  • воспроизведение;
  • очищенные logs.

Чувствительные области

Дополнительного review требуют:

  • settings.json rollback и schema migration;
  • startup-copy/HKCU Run;
  • embedding/materialization NetworkService;
  • UAC и named-pipe handshake;
  • WinDivert download/hash/runtime cleanup;
  • automatic self-update;
  • DNSCrypt signature/catalog/runtime;
  • plugin archive extraction и executable discovery;
  • password/import display behavior.

Self-update

Обновление fail-closed:

  • принимаются только канонические assets текущего GitHub repository;
  • ZIP и .sha256 обязательны;
  • SHA-256 должен совпасть;
  • ZIP должен содержать ровно root Shadowsocks.exe;
  • payload FileVersion должен быть строго новее target;
  • staged updater проверяет собственный SHA-256;
  • target replacement имеет rollback;
  • равная версия и downgrade запрещены.

Если процесс запущен из LocalAppData startup-copy, обновляется записанный primary EXE.

DNSCrypt

Активный DNSCrypt не должен уходить в plaintext/system-DNS fallback. Automatic mode выбирает конкретные DNSCrypt/DoH resolvers из проверенного catalog после фильтров DNSSEC/no-log/no-filter/address-family. ODoH отключён.

WinDivert

WinDivert 2.2.2 x64 скачивается по требованию и принимается только после проверки pinned SHA-256. DLL/driver не входят в release ZIP.

Плагины

SIP003 plugin package — сторонний executable. ZIP/TAR.GZ extraction должна запрещать:

  • .. traversal;
  • absolute paths;
  • выход за staging directory;
  • TAR symlink/hardlink/special entries.

Background network update разрешён только для доверенных repository mappings встроенного каталога; manual archives не auto-update, произвольные repository URL не принимаются. Download/extraction ограничены по размеру и числу entries; кроме traversal/absolute paths запрещены Windows alternate-data-stream имена. Если GitHub публикует SHA-256 digest asset-а, он проверяется перед promotion. Если installed и candidate release tags распознаются как версии, более старая candidate-версия отклоняется, предотвращая downgrade. Замена выполняется через staging + rollback-safe swap; orphaned backup после аварийно прерванного swap восстанавливается при следующем чтении plugin storage. Плагины остаются под active storage root и не должны перемещать mutable files рядом с product EXE.

Local routing

Local GeoSite/EasyList/ABP routing выполняется managed C# FilterEngine. Исторический исполняемый abp.js отсутствует. Online PAC — отдельный явно выбранный внешний PAC и должен рассматриваться как пользовательский код.

Scope

Клиент не управляет proxy server infrastructure. Доступность провайдера, account policy и server-side security находятся вне scope приложения.

Bootstrap resolver-каталога DNSCrypt

Shadowsocks Reborn самостоятельно обновляет подписанный каталог DNSCrypt, не позволяя dnscrypt-proxy разрешать hostnames удалённых sources через bootstrap DNS. Основной resolver — Cloudflare DoH (1.1.1.1, TLS/SNI cloudflare-dns.com), резервный — Google DoH (8.8.8.8, TLS/SNI dns.google); оба HTTPS-соединения DoH открываются через активный локальный SOCKS5 Shadowsocks. После разрешения имени источника загрузка public-resolvers.md и .minisig также идёт через Shadowsocks.

Размер загрузок ограничен, а пара проверяется закреплённым публичным Minisign-ключом DNSCrypt до публикации. Затем dnscrypt-proxy получает только локальный аутентифицированный кэш с urls = [], bootstrap_resolvers = [] и ignore_system_dns = true. Если обновление временно недоступно, может использоваться уже существующий валидный подписанный кэш; при отсутствии валидного кэша операция завершается fail-closed, а предыдущий DNS mode сохраняется.

Clone this wiki locally