如何保护MSI安装程序数字签名免受篡改及证书链攻击?
防范代码签名证书链攻击的有效方法
只验证签名者组织名称确实存在风险——攻击者可能通过伪造同名组织证书、利用CA漏洞等方式构造合法证书链,绕过名称校验。以下是具体的高效防范措施:
核心验证策略
- 直接验证证书指纹(Thumbprint):这是最可靠的方案。将你方代码签名证书的SHA-256(优先)或SHA-1指纹硬编码到验证逻辑中,验证时提取安装程序签名证书的指纹直接对比,完全规避名称匹配的歧义问题。
- 校验证书主题密钥标识符(SKI):SKI是证书公钥的哈希值,可作为证书的唯一标识,比组织名称更精准,能有效区分同名不同证书的情况。
- 限定信任的根CA范围:不要依赖系统默认信任根列表,仅信任你方签发代码签名证书的特定根CA及其中间CA。验证时强制检查证书链必须终结在指定根CA,同时校验中间CA的合法性。
补充验证环节
- 检查增强密钥用法(EKU):确保证书的EKU字段包含
Code Signing(OID: 1.3.6.1.5.5.7.3.3),防止攻击者使用SSL等其他类型证书进行签名。 - 验证证书有效期:确认签名证书当前处于有效期内,且文件的签名时间落在证书有效期范围内。
- 启用严格链验证模式:调用
WinVerifyTrust时,使用WTD_REVOKE_CHECK_CHAIN参数开启证书吊销状态检查,避免已吊销证书被滥用;同时设置WTD_CHOICE_FILE明确针对文件进行验证。
误区规避
无需验证证书链中每个签名者的名称,重点是确保链中所有CA均为你方信任的对象,且最终用户证书是预先通过指纹/SKI认可的合法证书。
内容的提问来源于stack exchange,提问作者user2740605
相关产品推荐
相关产品推荐

