-
Notifications
You must be signed in to change notification settings - Fork 0
ZH Security
DNSCrypt 组件的 supply-chain 流量遵循同一 DNS 隐私边界:GitHub release API、archive、signature 与 redirect 主机通过 Shadowsocks 上的 Cloudflare DoH 解析,并以 Google DoH 备用,随后经当前本地 SOCKS5 建立连接。组件安装/更新不会有意使用 Windows/system resolver 解析这些主机名。
不要在公开 issue 中发布可利用细节、proxy credentials、subscription URL、token 或私人配置。
优先使用 GitHub Private Vulnerability Reporting。若不可用,请创建最小化且不包含秘密的公开报告。
建议提供:
- 受影响版本/commit;
- Windows build;
- User/Admin/Game Mode;
- 复现步骤;
- 已脱敏日志。
需要额外审查的代码包括:
-
settings.jsonrollback 与 schema migration; - startup copy / HKCU Run;
- NetworkService embedding/materialization;
- UAC 与 named-pipe handshake;
- WinDivert download/hash/runtime cleanup;
- automatic self-update;
- DNSCrypt signature/catalog/runtime;
- plugin archive extraction/executable discovery;
- credential display/import。
更新采用 fail-closed:
- 只接受当前 GitHub repository 的规范 release assets;
- ZIP 与
.sha256必须同时存在; - SHA-256 必须匹配;
- ZIP 必须只有根目录
Shadowsocks.exe; - payload FileVersion 必须严格高于 target;
- staged updater 验证自身 SHA-256;
- replacement 带 rollback;
- 拒绝相同版本与 downgrade。
从 LocalAppData startup copy 启动时,实际更新记录的 primary EXE。
活动 DNSCrypt 不允许回退到明文/system DNS。Automatic mode 从已验证 catalog 中根据 DNSSEC/no-log/no-filter/address-family 筛选具体 DNSCrypt/DoH resolver。ODoH 禁用。
WinDivert 2.2.2 x64 按需下载,只有 pinned SHA-256 匹配后才使用。DLL/driver 不包含在 release ZIP 中。
SIP003 package 是第三方 executable。ZIP/TAR.GZ 解包必须拒绝:
-
..traversal; - absolute path;
- 越过 staging directory;
- TAR symlink/hardlink/special entry。
后台网络更新仅允许受信任的内置 repository mapping;manual archive 永不 auto-update,也不接受任意 repository URL。下载/解包限制大小与 entry 数量,除 traversal/absolute path 外还拒绝 Windows alternate-data-stream 名称。GitHub 提供 asset SHA-256 digest 时必须在 promotion 前验证。如果已安装 tag 与候选 tag 都能解析为版本,则拒绝更低的候选版本以防 downgrade。更新通过 staging + rollback-safe swap 完成;若 swap 被进程异常中断,下一次读取 plugin storage 时会恢复 orphaned backup。插件必须保存在 active storage root,不得把可变文件放到 product EXE 旁。
Local GeoSite/EasyList/ABP 使用 managed C# FilterEngine。历史可执行 abp.js 已删除。Online PAC 是用户显式选择的外部 PAC,应视为用户提供的程序。
本项目只提供客户端,不运营 proxy server。服务商可用性、账号策略与 server-side security 不属于客户端 scope。
Shadowsocks Reborn 由应用自身刷新已签名的 DNSCrypt 解析器目录,不允许 dnscrypt-proxy 通过 bootstrap DNS 解析远程 source 主机名。主解析路径为 Cloudflare DoH(1.1.1.1,TLS/SNI cloudflare-dns.com),备用路径为 Google DoH(8.8.8.8,TLS/SNI dns.google);两条 DoH HTTPS 连接都通过当前本地 Shadowsocks SOCKS5 打开。源主机名经该 DoH 路径解析后,public-resolvers.md 与 .minisig 的 HTTPS 下载同样通过 Shadowsocks。
下载大小受到限制,并在发布前使用固定的 DNSCrypt 公共 Minisign 密钥验证。随后 dnscrypt-proxy 只获得本地认证缓存,配置为 urls = []、bootstrap_resolvers = [] 和 ignore_system_dns = true。如果刷新暂时失败,可以继续使用已有且签名有效的缓存;若不存在有效缓存,则操作 fail-closed,并保留之前的 DNS 模式。