签名伪造的利用及思考
字数 1372 2025-08-19 12:42:16
签名伪造的利用及思考 - 详细教学文档
前言
签名伪造技术主要用于使恶意软件看起来更加可信,绕过浏览器和操作系统的安全警告。本文详细介绍了签名伪造的技术实现方法和相关思考。
签名的作用
在零信任互联网环境中,数字签名用于:
- 验证软件来源的真实性
- 减少浏览器和操作系统对未签名软件的警告
- 提高恶意软件的社会工程学欺骗效果
对比示例:
- 未签名软件会显示黄色警告提示
- 已签名软件显示蓝色或绿色提示,用户信任度更高
实验1:使用SigThief.py进行基础签名伪造
工具:sigthief.py
使用方法:
python3 sigthief.py -i 要伪造的证书软件 -t 未签名的软件 -o 输出的文件名
局限性:
- 仅复制签名信息,不验证证书链
- 容易被安全软件识别为伪造签名
- 在未导入相应证书的系统上会显示"未知发布者"
实验2:完整自签名证书链伪造
所需工具
- makecert.exe
- cert2spc.exe
- pvk2pfx.exe
- signtool.exe
- certmgr.exe
(包含在Windows SDK中,下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=8279)
详细步骤
0x01 生成自签名根证书
makecert.exe -n "CN=Root" -r -sv Root.pvk Root.cer
-n指定证书名称-r创建自签名证书-sv指定私钥文件- 设置私钥密码(示例中使用123456)
0x02 使用根证书签发子证书
makecert.exe -n "CN=Child" -iv Root.pvk -ic Root.cer -sv Root.pvk Root.cer -sky signature
-iv指定颁发者私钥-ic指定颁发者证书-sky指定密钥类型(signature表示签名密钥)
0x03 转换公钥证书为SPC格式
cert2spc.exe Root.cer Root.spc
0x04 合并为PFX格式证书
pvk2pfx.exe -pvk Root.pvk -pi 123456 -spc Root.spc -pfx Root.pfx -f
-pi指定私钥密码-f强制覆盖现有文件
0x05 为文件签名
signtool sign /f Root.pfx /p 123456 target.exe
常见问题解决:
如果直接使用cmd运行signtool报错:"No certificates were found that met all the given criteria",应使用VS开发人员命令提示符工具执行。
0x06 导入证书
# 当前用户证书存储
certmgr.exe -add -c Root.cer -s -r currentUser root
# 本地计算机证书存储(需要管理员权限)
certmgr.exe -add -c Root.cer -s -r localmachine root
0x07 实验结果
- 在导入证书的系统上,签名显示为"已验证的发布者"
- 在未导入证书的系统上,仍显示"未知发布者"
- 注意:必须先签名再添加UAC认证,否则签名会失效
UAC认证添加技巧
使用Windows自带的mt.exe工具可以为任意exe添加UAC认证,提升软件可信度。
高级技巧:通过COM文件特性劫持系统常用程序(如cmd.exe、regedit.exe)时,配合签名伪造可实现更隐蔽的权限维持。
深入思考
-
证书信任范围问题:
- 自签名证书仅在导入该证书的系统上显示为可信
- 需要研究如何获取系统默认信任的证书私钥,或找到将系统证书导出为PFX格式的方法
-
流量加密应用:
- 考虑使用特制证书加密C2通信流量,可能绕过阿里云等云服务的流量检测
- 需要验证不同环境下的实际效果
-
攻击链优化:
- 结合UAC认证和签名伪造,可以创建更逼真的软件劫持
- 注意操作顺序:先签名,再添加UAC认证
防御建议
- 不要轻易安装未知来源的证书
- 检查软件的完整证书链而不仅是签名状态
- 对高权限操作保持警惕,即使软件显示为已签名
- 使用高级威胁检测工具监控证书异常行为
总结
签名伪造技术可以显著提高恶意软件的社会工程学成功率,但完整的利用需要解决证书信任范围限制。未来研究方向应包括获取系统默认证书的方法和证书在流量加密中的应用。