win-07-security

Windows App Workflow 阶段 6+ —— 安全加固。适用场景:功能冻结前后,需要对桌面应用做威胁建模(STRIDE)、安全代码审查、依赖审计与密钥管理检查。提炼自 AppSec Engineer 与 Secrets & Credential Engineer。

SKILL.md

GitHub

阶段 6+:安全加固

目标:把安全从"想起来才查"变成清单化动作。桌面应用的攻击面集中在:IPC 边界、自动更新通道、本地数据存储、依赖供应链。

1. 威胁建模:STRIDE 一页纸(来自 AppSec Engineer)

对系统做一次遍历,产出下表:

1. 系统概述:组件(主进程/渲染进程/本地数据库/更新器/网络端点)
2. 资产清单:用户数据、凭证、签名私钥、更新清单
3. 信任边界:渲染↔主进程、应用↔本地文件、应用↔网络、更新器↔下载源
4. 逐边界过 STRIDE:
   Spoofing(伪装)/ Tampering(篡改)/ Repudiation(抵赖)/
   Information Disclosure(泄密)/ Denial of Service(拒绝服务)/ Elevation of Privilege(提权)
5. 每个威胁 → 缓解措施 → 负责人 → 状态

桌面应用必问的威胁清单:

  • 渲染层被 XSS/注入后,能通过 IPC 做到什么最坏的事?(答:只能做到契约里那些窄动词)
  • 更新包/更新清单被中间人篡改会怎样?(必须签名校验 + HTTPS)
  • 本地数据库被其他程序/用户读走会怎样?(敏感数据要加密,密钥不进配置文件)
  • 深链协议(myapp://)被恶意网页触发会怎样?(校验所有参数,不执行任意路径/命令)
  • 文件关联打开恶意文件会怎样?(解析器健壮性、路径校验)
  • 自动启动/计划任务项能否被普通权限篡改提权?

2. 安全代码审查规则(硬性,来自 AppSec Engineer)

  • 已知可利用漏洞的代码不准合并——"以后再修"= "被黑以后再说"
  • 安全修复必须验证真的修好了;没修好的修复比没有更糟(制造虚假安全感)
  • 不能只靠扫描器——逻辑漏洞、授权缺陷、业务漏洞靠人审
  • 依赖与自有代码同等审查(现代应用 80%+ 是第三方代码):npm audit / cargo audit / Dependabot 打开
  • 输入校验在每个信任边界做,不只前端
  • 加密只用成熟库(平台原生 / libsodium / .NET BCL),永不手写加密
  • 漏洞修复时限:Critical 7 天、High 30 天、Medium 90 天

3. 密钥与凭证管理(来自 Secrets Engineer)

  • 签名证书:放云 HSM / Azure Key Vault 或 CI Secrets;.pfx/.cer 和口令永不进仓库(加进 .gitignore 并做一次历史自查)
  • 应用内需要的任何第三方 key:绝不硬编码;桌面应用没有真正的"客户端机密"——任何打进安装包的 secret 都视为已泄露,改用设备本地存储 + 用户授权流程
  • 本地存的用户敏感数据:用 DPAPI(Windows)或等价机制加密,密钥不落明文文件
  • 遥测/崩溃上报:默认最小化,隐私政策里写明,提供关闭开关

4. 发布安全(与阶段 7 联动)

  • 所有产物签名 + 时间戳;更新清单签名;HTTPS 分发
  • 下载页提供哈希(SHA-256)供校验
  • 安全事件响应一页纸:发现问题 → 谁决定 → 如何紧急发版 → 如何通知用户

5. 质量门

# 判据 证据 通过?
1 STRIDE 表完成,高危项全部有缓解 威胁模型文档 ☐
2 依赖审计无 Critical/High 未修复 扫描报告 ☐
3 仓库与产物中无泄露的密钥/凭证 搜索记录 ☐
4 更新通道签名校验实测通过 篡改测试记录 ☐
5 隐私/遥测策略写明 隐私政策文本 ☐

通过后 → 阶段 7(打包发布)。