T1034: 路径拦截
摘要
**此技术已被弃用。请使用[通过 PATH 环境变量进行路径拦截](https://attack.mitre.org/techniques/T1574/007)、[通过搜索顺序劫持进行路径拦截](https://attack.mitre.org/techniques/T1574/008)和/或[通过未加引号的路径进行路径拦截](https://attack.mitre.org/techniques/T1574/009)。** 路径拦截发生在将可执行文件放置在特定路径中,使其被应用程序执行而非预期的目标执行时。其中一个例子是在易受攻击应用程序的当前工作目录中使用 [cmd](https://attack.mitre.org/software/S0106) 的副本,该应用程序使用 CreateProcess 函数加载 CMD 或 BAT 文件。 (Citation: TechNet MS14-019) 攻击者在执行路径拦截时可能利用多种不同的弱点或错误配置:未加引号的路径、路径环境变量错误配置以及搜索顺序劫持。第一种漏洞涉及完整程序路径,而第二和第三种则在未指定程序路径时发生。如果可执行文件被定期调用,这些技术可用于持久化;如果被拦截的可执行文件由更高特权的进程启动,则可用于权限提升。 ### 未加引号的路径 如果路径包含一个或多个空格且未用引号括起(例如 <code>C:\unsafe path with space\program.exe</code> 对比 <code>"C:\safe path with space\program.exe"</code>),则服务路径(存储在 Windows 注册表项中)(Citation: Microsoft Subkey) 和快捷方式路径易受路径拦截的影响。 (Citation: Baggett 2012) 攻击者可以将可执行文件放置在路径的更高层级目录中,Windows 将解析该可执行文件而非预期的可执行文件。例如,如果快捷方式中的路径是 <code>C:\program files\myapp.exe</code>,攻击者可以在 <code>C:\program.exe</code> 处创建一个程序,它将被运行而非预期的程序。 (Citation: SecurityBoulevard Unquoted Services APR 2018) (Citation: SploitSpren Windows Priv Jan 2018) ### PATH 环境变量错误配置 PATH 环境变量包含一个目录列表。某些执行程序的方法(即使用 cmd.exe 或命令行)在未给出程序路径时,仅依赖 PATH 环境变量来确定搜索程序的位置。如果在 PATH 环境变量中列出的任何目录位于 Windows 目录 <code>%SystemRoot%\system32</code>(例如 <code>C:\Windows\system32</code>)之前,则可以在前面的目录中放置一个与 Windows 程序(例如 cmd、PowerShell 或 Python)同名的程序,当从脚本或命令行执行该命令时,该程序将被执行。 例如,如果 PATH 环境变量中 <code>C:\example path</code> 位于 <code>C:\Windows\system32</code> 之前,那么一个名为 net.exe 并放置在 <code>C:\example path</code> 中的程序将在从命令行执行 “net” 时被调用,而非 Windows 系统 “net”。 ### 搜索顺序劫持 搜索顺序劫持发生在攻击者滥用 Windows 搜索未给出路径的程序的顺序时。搜索顺序因用于执行程序的方法而异。 (Citation: Microsoft CreateProcess) (Citation: Hill NT Shell) (Citation: Microsoft WinExec) 然而,Windows 通常先搜索发起程序所在目录,然后再搜索 Windows 系统目录。发现易受搜索顺序劫持影响的程序(即未指定可执行文件路径的程序)的攻击者,可以通过创建一个以未正确指定程序命名的程序并将其放置在发起程序的目录中来利用此漏洞。 例如,“example.exe” 使用命令行参数 <code>net user</code> 运行 “cmd.exe”。攻击者可以在与 example.exe 相同的目录中放置一个名为 “net.exe” 的程序,“net.exe” 将被运行而非 Windows 系统实用程序 net。此外,如果攻击者在与 “net.exe” 相同的目录中放置一个名为 “net.com” 的程序,那么由于 PATHEXT 下定义的可执行扩展名顺序,<code>cmd.exe /C net user</code> 将执行 “net.com” 而非 “net.exe”。 (Citation: MSDN Environment Property) 搜索顺序劫持也是劫持 DLL 加载的常见做法,已在 [DLL 搜索顺序劫持](https://attack.mitre.org/techniques/T1038)中涵盖。
来源归属
来源:MITRE ATT&CK · 置信度:high
平台
- Windows
战术
持久化
参考来源
- https://attack.mitre.org/techniques/T1034
- https://capec.mitre.org/data/definitions/159.html
- https://blogs.technet.microsoft.com/srd/2014/04/08/ms14-019-fixing-a-binary-hijacking-via-cmd-or-bat-file/
- http://support.microsoft.com/KB/103000
- https://isc.sans.edu/diary/Help+eliminate+unquoted+path+vulnerabilities/14464
- https://securityboulevard.com/2018/04/windows-privilege-escalation-unquoted-services/
- https://www.sploitspren.com/2018-01-26-Windows-Privilege-Escalation-Guide/
- http://msdn.microsoft.com/en-us/library/ms682425
- http://technet.microsoft.com/en-us/library/cc723564.aspx#XSLTsection127121120120
- http://msdn.microsoft.com/en-us/library/ms687393
- https://msdn.microsoft.com/en-us/library/fd7hxfdd.aspx