我们在两台电脑上运行经过数字签名的 120 Mb 可执行文件时遇到了一个奇怪的问题。
如果用户启动了数字签名的 .exe,则启动主机(例如 Explorer 或 cmd.exe)将进入无限(无休止)循环,不断打开/关闭 HKLM\System\CurrentControlSet\Control\Cryptography\Providers 和 HKLM\System\CurrentControlSet\Control\Cryptography\Configuration 注册表项。调用堆栈表明主机进程位于 CreateProcess 函数内(更具体地说 - 在 NtCreateUserProcess 内),并且目标进程“部分创建”。例如,它在任务管理器中可见,但进程监视器中没有“进程创建”事件,并且任何打开目标进程的尝试都会挂起尝试打开它的工具。
Explorer/CMD 的启动过程如下:
- 检查 HKLM\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\Image 文件执行选项(不存在)
- 以 32 KB 为单位读取整个 .exe
- 读取 HKLM\System\CurrentControlSet\Control\Cryptography\ 下的注册表项并枚举 HKLM+HCU\SOFTWARE\MICROSOFT\SystemCertificates\Disallowed\Certificates
- 在结束 HKU.DEFAULT\SOFTWARE\Policies\Microsoft\SystemCertificates\Disallowed\Certificates 枚举后,立即开始无限循环读取上述注册表项
数字证书是 COMODO 颁发的用于代码签名的常用 SHA1-RSA 证书。签名的可执行文件带有时间戳。问题不在于某个特定的可执行文件,因为使用此证书签名的所有其他可执行文件都存在同样的问题。其他签名的可执行文件似乎运行正常。
我们已经尝试过:
- 文件哈希值正确。
- 两台电脑都安装了 MalwareBytes。
- 禁用防病毒软件和防火墙并不能解决问题。
- 安全模式解决问题。
- 证书正常,未过期,未撤销,certutil -f -urlfetch -verify 没有发现任何问题。
- 证书的哈希值未在上述各种 Disallowed\Certificates 注册表项的枚举中列出。
- 卸载 MS14-066/KB2992611 没有帮助。
有任何想法吗?
答案1
我们找到了其中的原因。
这确实是 Malwarebytes 工具的问题。其驱动程序 (mbamchameleon.sys) 会注入 CreateProcess 调用,并在检查某些已签名可执行文件的数字签名时导致无限循环。
https://support.eurekalog.com/index.php?/Knowledgebase/Article/View/67/4/installer-hangs-on-launch