HACK7YD 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 Windows系统中的重要文件经常添加数字签名以防止篡改,一些白名单规则也是基于数字签名的。 作为数字签名研究系列的基本内容,本文介绍了两种添加数字签名的方法,分析了CAT文件数字签名的特点,并纠正了一位读者对我的文章的回复。地址如下: 《利用xwizard.exe加载dll》 基于我的测试,个人认为移动位置后,CAT文件的数字签名不会失效。 0x01 简介 本文将介绍以下内容: 生成证书的方法 在文件末尾添加数字签名的方法(验证码) 在CAT文件(目录)中保存数字签名的方法 使用CAT数字签名的文档的特征 0x02 将数字签名添加在文件末尾的方法(Authenticode) 在关于隐写术技术的系列文章中,我研究了在数字签名中隐藏有效载荷的方法。地址如下: 《隐写技巧——在PE文件的数字证书中隐藏Payload》 证书格式在本文中已有介绍,此处不再赘述。 在文件末尾添加数字签名后,可以通过文件属性查看它。 示例: c:\ Windows \ System32 \ comment . exe 使用Microsoft数字签名,如下所示 powershell可以验证数字签名: Get-AuthenticodeSignature。\mimikatz.exe 您也可以使用工具从命令行查看数字签名。 使用signtool.exe查看: signtool.exe验证/v C:\ Windows \ System32 \ comment . exe 如下图 使用sigcheck.exe查看: sigcheck.exe-q C:\ Windows \ System32 \ comment . exe/accept EULA 如下图 注: signtool.exe 可用于查看文件的数字签名。 安装Visual Studio后,SDK被包含在内,您可以在其中找到signtool.exe,它位于C:\ Program Files \ Microsoft SDKS \ Windows \ Cmd进入开发者工具可以直接调用signtool.exe。 Windows 7 SDK下载地址: https://www.microsoft.com/en-us/download/details.aspx?id=8279 sigcheck.exe: 可用于查看文件的数字签名。 下载地址: https://docs . Microsoft . com/zh-cn/sysinternals/downloads/SIG check 本文的相关文档已经上传到github,地址如下: https://github.com/3gstudent/signtools 生成测试证书的命令如下: makecert-n ' CN=Microsoft Windows Test '-r-SV root . pvk root . cer cert2spc Root.cer Root.spc pvk 2 pfx-pvk root . pvk-pi 123456-SPC root . SPC-pfx root . pfx-f 证书注册: (管理员权限) certmgr.exe-add-c root . cer-s-r本地计算机根目录 注: 详情请参考之前的文章《A dirty way of tricking users to bypass UAC》。 签名mimikatz.exe: sign tool sign/f root . pfx/p 123456 mimikatz.exe 数字签名是正常的,如下图所示。 0x03 将数字签名保存在CAT文件中的方法(catalog) 在Windows系统中,有些文件无法通过文件属性获取其数字签名信息,但这些文件也包含数字签名。这里的数字签名是指CAT(安全目录)文件的数字签名。 信息可参考: https://docs . Microsoft . com/en-us/windows-硬件/驱动程序/安装/目录-文件 对签名流程的直观理解: 将sha1加密后的文件哈希值保存在CAT文件中(一个CAT文件可以保存多个文件哈希值) 向CAT文件添加数字签名。 将CAT文件添加到系统的安全目录数据库中。 这些文档是数字签名的。 示例: c:\ Windows \ System32 \ catroot \ { f 750 E6 c 3-38EE-11 D1-85e 5-00 c 04 fc 295 ee } \ ntph . cat 属性-安全目录-项目详情-文件,可以找到哈希值对应的文件。 如下图 无法通过文件属性查看CAT数字签名。 的。cat文件以ASN.1标准保存,不能直接通过记事本查看,需要解密。在线地址如下: https://lapo.it/asn1js/ 选择要解密的cat文件并显示完整的格式。 格式分析可以参考: https://support . Microsoft . com/en-us/help/287547/object-ids-associated-with-Microsoft-cryptography 示例: c:\ Windows \ System32 \ xwizard . exe 使用CAT格式的数字签名,您无法通过文件属性查看CAT数字签名。 无法使用powershell获取CAT文件的数字签名: get-AuthenticodeSignature C:\ Windows \ System32 \ xwizard . exe 如下图 注意: Win10系统可以获得CAT文件的数字签名,而Win7不能。 但是您可以使用signtool.exe和sigcheck.exe来查看数字签名。 使用signtool.exe查看: signtool.exe验证/pa/a/v C:\ Windows \ System32 \ xwizard . exe 如下图 使用sigcheck.exe查看: sigcheck.exe-q C:\ Windows \ System32 \ xwizard . exe/accept EULA 如下图 下面描述了如何对CAT文件进行数字签名。 1、生成CAT文件 使用以下内容创建一个新的文本文档cat.txt: [目录标题] Name=makecat1.cat [目录文件] ExeFile1=mimikatz.exe 注: txt文件末尾需要有一个空行,否则下一次操作会报错,表示找不到文件。 如下图 使用makecat.exe生成cat文件: makecat -v cat.txt 2、使用证书为CAT文件添加签名 sign tool sign/f root . pfx/p 123456 make cat 1 . cat 注: 这里的证书使用0x02中生成的证书Root.pfx。 3、将cat文件添加到系统的安全编录数据库 (管理员权限) signtool catdb -v makecat1.cat 注: 使用-r参数:signtool catdb -r makecat1.cat 如果没有添加到系统的安全目录数据库中,签名状态为未签名,如下图所示 添加到系统的安全目录数据库相当于将makecat1.cat文件添加到目录c:\ windows \ system32 \ cat root \ { f 750 E6 c 3-38ee-11 D1-85e 5-00 c 04 fc 295 ee }。 删除等同于删除C:\ Windows \ System32 \ CAT root \ { f 750 E6 C 3-38EE-11 D1-85e 5-00 C 04 fc 295 ee }目录下对应的CAT文件makecat1.cat 使用signtool.exe获取数字签名: signtool.exe验证/pa/a mimikatz.exe 使用sigcheck.exe获取数字签名: sigcheck.exe-q mimikatz.exe/accept EULA 移动位置后,签名仍然有效。 如下图 验证结论:移动位置后,CAT文件数字签名不会失效 当然,使用带有CAT文件数字签名的xwizard.exe加载dll,一定程度上可以绕过应用白名单的拦截。 0x04 小结 介绍了添加数字签名的两种方法,分析了CAT文件数字签名的特点。对于可执行文件,Process Explorer可以验证两种不同的数字签名。 如下图 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子