劫持数字签名是一种可用于绕过设备保护限制,以及在red team评估过程中隐藏自定义恶意软件的技术。Matt Graeber在他的研究中发现了如何绕过数字签名散列验证的方法,并且在他发布的文章中详细描述了所有的细节。基于这些信息,Digital SignatureHijack脚本的开发是为了使这项技术完全自动化。前面的文章已经描述了有关劫持数字签名的更多信息。
一般信息
DigitalSignatureHijack基于PowerShell编写,可以从具有管理权限的PowerShell控制台执行。这个想法是通过只执行四个命令来快速地对PowerShell脚本和可移植可执行文件进行数字签名而来的。
命令
该脚本接受以下命令:
· SignExe – 数字签名的PE可执行文件
· SignPS – 数字签名PowerShell脚本
· ValidateSignaturePE – PE可执行文件的签名验证
· ValidateSignaturePS – PowerShell脚本的签名验证
依赖
DigitalSignature-Hijack依赖于Matt Graeber开发的自定义SIP(Subject Interface Package)dll文件。因此,需要将其存储在目标系统的某个位置,并且需要使用该DLL文件的新位置来更新脚本,否则注册表劫持将不起作用。
· 编译版本的MySIP.dll
· MySIP DLL的源代码
演示
以下是可用于对主机上存在的所有PowerShell脚本和PE可执行文件进行数字签名的命令列表。
对二进制文件进行签名:
Mimikatz是一个可以从内存转储凭据的二进制程序。它不是Windows的一部分,也不是由微软数字签名的可执行程序。
未签名的Mimikatz
执行SignExe命令后,Mimikatz就带有了微软官方验证可通过的证书。
对Mimikatz进行签名
签名验证:
劫持合法的证书将会出现散列不匹配的错误,因此数字签名将无法验证。
对Mimikatz进行签名- 无效签名
执行ValidateSignaturePE命令将正确验证存储在系统上的所有PE可执行文件的数字签名散列。
对Mimikatz进行签名 – 有效签名
签署PowerShell脚本:
DigitalSignature-Hijack PowerShell脚本未签名。因此,在实施设备防护UMCI(用户模式代码完整性)的情况下,需要对其进行签名。
未签名的PowerShell脚本
执行命令SignPS将为Microsoft PowerShell脚本提供一个Microsoft证书。
签名的PowerShell脚本
签名验证:
与PE可执行文件一样,Microsoft也正在对PowerShell脚本的数字签名进行散列验证。
PowerShell脚本 – 无效的签名
执行命令ValidateSignaturePS将绕过散列验证,因此数字签名将显示为有效。
PowerShell脚本 – 有效签名
下载
DigitalSignatureHijack脚本可以在以下位置中找到:
· 数字签名劫持
· https://github.com/netbiosX/Digital-Signature-Hijack
源代码
责任编辑:韩希宇
免责声明:
中国电子银行网发布的专栏、投稿以及征文相关文章,其文字、图片、视频均来源于作者投稿或转载自相关作品方;如涉及未经许可使用作品的问题,请您优先联系我们(联系邮箱:cebnet@cfca.com.cn,电话:400-880-9888),我们会第一时间核实,谢谢配合。