桌面更新发布安全检查表 · 更新 2026-07-05

Desktop Updater Release Security Checklist:Signing、Notarization、Update Metadata、Staged Rollout、Emergency Halt、Rollback 与 Recovery

面向 Tauri、Electron、Pake 式 wrappers 与其他通过 macOS/Windows 分发 signed installers 和 automatic updates 的 desktop apps 发布安全检查表。

Desktop auto-update 会把 release pipeline 变成 privileged remote-code delivery system。即使应用本身安全,只要 signing keys 泄漏、update metadata 可随意修改、release automation 权限过宽、没有 staged rollout,或团队无法 halt/rollback bad update,就可能发生灾难性故障。

这份 checklist 把 packaging、code signing、macOS notarization、Windows signing/time stamping、update metadata、artifact hosting、release promotion、telemetry、staged rollout、emergency halt、rollback 与 compromised-release recovery 当作一条完整 control chain。目标是让每个 trusted release 都可复现、可归因、可停止、可恢复。

RepoDaily 判断

在团队能用证据回答五个问题前,不要启用 unattended desktop updates:谁能签名、哪个 source revision 产生 artifact、client 如何验证 metadata/artifact、如何在扩大影响前暂停 rollout、bad/compromised release 后用户如何恢复。Signing 本身不是完整 release-security strategy;完整链路还需要 protected identities、provenance、verification、staged promotion、monitoring、halt controls、rollback policy 与 incident recovery。

快速矩阵

发布表面基线规则失败信号保留证据
Source revision从 immutable reviewed revision 发布Manual local build 或 moving branch refCommit/tag、review、build run identity
Build environment受控 reproducible release workersDeveloper laptop 产出 public artifactsRunner identity、toolchain versions、build logs
Signing identitySigner access 最小且可审计Certificate 导出后广泛共享或 CI secret scope 过宽Signer owner、access policy、signing event log
macOS distribution正确 identity 签名并完成 notarizationUnsigned/ad hoc/unnotarized public artifactSignature verification 与 notarization result
Windows distribution可信 code signing,并按策略 time stampUnsigned installer 或证书过期后无法验证Signature verification 与 timestamp evidence
Update metadata验证 version、URLs、hash/signature、platform、rollout dataMutable feed 可把 client 指向 arbitrary binaryMetadata snapshot 与 verification test
Artifact hostingImmutable release objects + restricted write accessApproved file 可原地替换Object/version identifier、digest、access log
PromotionBuild 与 production promotion 分离一个 job build 后立即触达全部 clientsApproval record 与 promoted digest
RolloutInternal/canary 起步并设置 health gatesPublish 即 100% rolloutCohort size、metrics、promotion decision
Emergency halt有 tested stop-new-adoption 控制只能删文件或手工热改 productionHalt runbook 与 exercise result
Rollback明确 downgrade 或 forward-fix policyMigrated data 无法被旧 binary 读取且没有 recoveryCompatibility matrix 与 recovery test
Incident recovery准备 signer rotation/revocation 与 trusted recovery releaseCompromised signer 后无 alternate trust pathRotation owner、revocation steps、recovery channel

Release pipeline 准备度评分卡

Broad automatic rollout 前给 updater pipeline 打分。

控制项0 分1 分2 分Owner 问题
Release provenanceUnknown/manual记录 build jobReviewed immutable revision + auditable build identity + digest能否证明哪个 source 产生这个 binary?
Signer protectionShared/exported broadlyBroad CI secretNarrow protected signer + audited use + rotation plan谁能产生 trusted binary?
Platform trustUnsignedSigned onlySigned + platform verification + notarization/timestamp policy以后 OS 和用户仍能验证 release 吗?
Metadata integrityMutable unauthenticated feedHTTPS onlyUpdater crypto verification + immutable digest/provenanceFeed compromise 能否投递 arbitrary code?
Rollout control立即全部用户Manual partialCohorts + gates + metrics + pause/promotion controlsBad release 第一批最多影响多少用户?
Halt controlDelete/hot-editManual pauseTested emergency halt + owner + evidence多快能阻止更多 client 更新?
Rollback/recoveryReinstallManual downgradeTested rollback/forward-fix + data recoverySchema-changing bad release 后怎么办?
Compromise responseNo planManual key rotationRevocation/rotation + alternate channel + recovery drillTrust anchor compromise 后如何恢复?

30 分钟 Desktop Updater Release Security Test

启用 broad automatic updates 前的快速 release gate exercise。

0–5 分钟:证明 provenance

选择 latest release,追踪 source revision、build job、digest、signer、metadata 与 promotion decision。

成功标准一个 release 可端到端重建,无需猜测。

5–10 分钟:测试 tamper rejection

修改 artifact 或 metadata fixture,并验证 updater 按 runtime trust model 拒绝。

成功标准Tampering fail closed 且 diagnostics 可用。

10–15 分钟:检查 signer boundary

列出可以 sign 或 publish stable metadata 的 identities/jobs。

成功标准Signer 与 stable-channel permissions narrow、owned、auditable。

15–20 分钟:演练 canary halt

把 harmless test release promotion 到 small cohort,观察 health 后暂停扩散。

成功标准无需删 evidence 或 ad hoc 修改 production 就能 halt rollout。

20–25 分钟:证明 rollback/recovery

使用代表性 local data/config 测试 downgrade 或 forward-fix。

成功标准用户能回到 supported state 且无 silent data loss。

25–30 分钟:演练 signer compromise

Walk through freeze、evidence preservation、restriction、rotation/revocation、notification 与 recovery release。

成功标准Incident 有 owner、alternate trust path 与具体 first actions。

安全 Desktop Release Flow

  1. 冻结 immutable release candidate,记录 source revision、dependency lock state、build config、runtime/toolchain versions 与 reviewer approval。
  2. 在 controlled release worker 构建;platform artifacts 只产出一次,计算 digests,并在 promotion 前记录 provenance。
  3. 通过最窄 signing path 签名;signing credentials 或 remote signing permissions 与普通 build/test jobs 分离。
  4. 完成 platform verification:macOS signature/notarization;Windows signature verification/time-stamp policy;runtime-specific updater signature requirements。
  5. 发布 immutable artifacts 与 authenticated update metadata,并验证 client 会拒绝 tampered metadata、wrong signatures、changed artifacts、unsupported platform entries 与策略外 downgrade。
  6. 先 promotion 到 internal/canary cohorts;根据 install success、launch success、crash rate、rollback signals、update loops、support volume 与 critical workflow checks 扩大范围。
  7. 保留 tested emergency halt path,能阻止更多 clients adoption,同时不删除 evidence 或破坏 trusted channel。
  8. 100% rollout 前证明 application binary、local DB、config migrations、plugins、caches 与 local services 的 rollback 或 forward-fix 行为。
  9. 演练 compromised-release recovery:restrict/revoke affected signer/channel、rotate credentials、发布 trusted recovery release、通知用户并保留 forensic evidence。

场景表

场景必需控制停止条件
Small Tauri desktop appUpdater signing key protection、signed updater artifacts、staged channel、rollback testUpdater key 与 broad build credentials 共用或 rollback 未测试
Electron app using autoUpdaterSigned app/installers、controlled feed、platform-specific testing、staged releaseFeed 可无审批重定向全部 clients
macOS direct distributionDeveloper ID signing、notarization、verification、immutable downloadPublic artifact unsigned、unnotarized 或可原地替换
Windows direct downloadTrusted signing、verification、timestamp policy、protected signerUnsigned installer 或 signing cert uncontrolled export
Pake-style internal wrapperPinned build source、signed installer、controlled target URL policy、managed update channelWrapper update 和 remote target 都可无 review 改变
Desktop app with local DB migrationCompatibility plan、backup/restore test、staged rolloutSchema migration 使 rollback impossible 且 recovery 未测试
Security hotfixFast lane 仍保留 signer protection、provenance、verification、canary、haltEmergency process 绕过 trust chain
Suspected signing compromiseFreeze、preserve evidence、restrict signer、rotate/revoke、alternate recovery channel继续通过 suspected trust path 发布

Desktop release 风险检查表

Signing key 成为 universal bypass

被盗 signing identity 可让恶意 artifacts 看起来可信。Signing authority 应比普通 CI credentials 受到更强保护。

Mutable release artifact

审批后仍可替换同 URL binary 会破坏 provenance,也让 incident reconstruction 变困难。

Metadata redirect attack

没有独立 verification 的 update feed 可以把 clients 指向任意 URL,会成为高价值 control plane。

One-click global blast radius

Publish 后直接触达全部 clients,会失去提前发现 crashes、migration failures、update loops 与 platform regressions 的机会。

Rollback 被 data migration 阻断

当新版本不可逆修改 local DB、config、plugins 或 caches 时,binary rollback 没有意义。

Emergency bypass culture

Security hotfix 在压力下跳过 signing controls、provenance、verification 或 canary rollout,往往带来第二次事故。

Expired/unverifiable signatures

弱 certificate lifecycle 与 timestamp practices 会让合法历史 release 难以继续验证。

No trusted recovery channel

Updater channel compromise 后,如果 notification 与 recovery artifacts 也依赖同一 trust anchor,恢复会更困难。

发布安全实现模式

Build once, promote by digest

Platform artifact 只创建一次,以 digest 标识,并把同一字节依次 promotion 到 internal、canary、stable。

Separate build and sign roles

普通 CI build/test,较窄 protected step/service 在 policy checks 后签名。

Immutable release manifest

记录 source revision、artifact digest、version、platform、signer、build identity、metadata revision、rollout cohort 与 rollback target。

Canary health gate

只有 install success、launch success、crash rate、update completion 与关键 workflow checks 达标才 promotion。

Kill-switch without evidence deletion

通过 channel/promotion control 暂停 new adoption,不删除调查所需 release artifacts。

Migration compatibility contract

每个 local data/config migration 在 release 前标记 reversible、backward-compatible、backup-required 或 forward-fix-only。

Signer compromise drill

事故前演练 restriction、revocation/rotation、alternate signing path、trusted notification 与 recovery release。

FAQ

面向运营 desktop update channels 团队的简短回答。

Code signing 是否足够保护 desktop updates?

不够。还需要 protected signing authority、release provenance、authenticated metadata、immutable artifacts、staged rollout、halt controls、rollback policy 与 compromise recovery。

为什么 Desktop Update 要 staged rollout?

Desktop release 会因 OS version、architecture、installer path、local DB state、antivirus interaction 与 runtime behavior 失败;canary cohort 可限制 blast radius 并产生真实 health evidence。

Release artifact 能否原地替换?

应避免。发布新 immutable artifact 与 versioned metadata,保证 review、rollback 与 incident reconstruction 可信。

Rollback 除 binary 外还应覆盖什么?

Local DB、config migrations、plugins、caches、credentials、local services 与 protocol compatibility 都可能决定 rollback 是否真正安全。

Security hotfix 应如何发布?

使用加速但仍受控的路径:immutable source、provenance、protected signing、verification、small canary、active monitoring、halt control 与 recovery plan。

最重要的 compromise drill 是什么?

假设 signing/update credential 被盗,并证明团队能 freeze promotion、preserve evidence、restrict trust、rotate/revoke、notify users 与发布 trusted recovery release。

相关雷达

Infrastructure & Runtime 雷达

相关 RepoDaily briefs

Sources

  1. Tauri Updater
  2. Tauri Windows Code Signing
  3. Electron Updating Applications
  4. Electron autoUpdater API
  5. Electron Code Signing
  6. Apple Notarizing macOS Software
  7. Apple Developer ID
  8. Microsoft Code Signing Options
  9. Microsoft Authenticode Time Stamping
  10. RepoDaily Desktop Runtime Security Checklist

Feedback

这页是否帮助你做出决定?

匿名反馈只用于判断内容是否真正有用。

报告过期或缺失的证据