任意文件移动导致的Windows提权攻击分析

本文介绍了如何滥用Windows上特权进程执行文件操作来实现本地特权升级(用户到管理员/系统),同时介绍了利用这些类型的错误的现有技术以及漏洞利用工具。

特权文件操作错误

高权限运行的进程会和所有进程一样对操作系统中的文件进行操作。但是当一个高权限的进程在没有足够的安全措施的情况下访问用户控制的文件或目录时,就有可能成为一个安全漏洞,因为恶意程序有可能滥用该特权进程执行的操作,做一些不该做的事情。对用户控制的资源进行特权访问很多时候都可能造成安全问题,文件只是其中一个部分。

人们熟知的例子包括修改用户可写服务可执行文件和DLL种植。如果你对特权服务将执行的文件有写权限,或者对它将寻找DLL的目录有写权限,你就可以在这个特权进程中执行你的payload。这是一个众所周知的漏洞,除了偶尔的配置错误,现在大多数在特权层面运行的软件都能防御这种攻击。

然而,对文件系统操作的潜在滥用似乎并不为人所知,但却同样危险:如果你能让一个有特权的进程为你创建、复制、移动或删除任意文件,那么美好的SYSTEM权限的shell有可能就在不远处。

另外,由于这些漏洞是逻辑漏洞,它们利用起来通常非常稳定(不涉及内存损坏),通常可以在代码重构中存活(只要文件操作逻辑不改变),而且无论处理器架构如何,都可以用完全相同的方式进行利用。这些特点使它们对攻击者来说非常有价值。

寻找bug 用户可写位置

虽然大多数特权程序不会直接操作一些非特权用户的文件(有一些例外,如杀毒软件),但许多程序会对可能位于用户可以摆弄的地方的文件进行操作。非特权用户有某种形式的写访问权限的有趣位置包括:

用户自己的文件和目录,包括其AppData和Temp文件夹,如果你运气好或运行杀毒软件,他们当中的一些特权进程可能会使用这些文件和目录。

公共用户的文件和目录:idem。

在 “C:\”中创建的目录有默认的ACL(Access Control List):默认情况下,在分区根部创建的目录允许用户写。

C:\\ProgramData的子目录,有默认的ACL:默认情况下,用户可以创建文件和目录,但不能修改现有的文件和目录。这往往是找漏洞过程中首先要看的地方。

C:\Windows/Temp的子目录:默认情况下,用户可以创建文件和目录,但不能修改现有的文件和目录,也不能读取文件/访问其他用户创建的目录。对于安装程序和其他有特权的软件和脚本,如果它们准时运行,不检查是否有预先存在的文件和目录,就会产生很有意思的问题。

你可以使用SysInternals的[AccessChk]工具(https://docs.microsoft.com/en-us/sysinternals/downloads/AccessChk)、`icacls`或PowerShell的`Get-Acl`等工具和命令来检查文件权限,或者干脆使用explorer的安全选项卡:高级表格中有一个有效访问选项卡,允许列出特定账户或组对该文件/目录的访问权限。下面的截图显示了在`C://ProgramData`目录下授予用户组的(默认)访问权限。

C:\ProgramData default access rights

寻找有特权的文件操作

要找到特权进程进行文件操作的实例,我们可以简单地使用SysInternals的ProcMon,过滤感兴趣的进程的文件事件。当我们看到它访问用户可控的文件&目录时,我们可以检查该进程是否使用了impersonate的方式来进行操作。有的时候没有:

ProcMon on McAfee

当然,这只会给我们提供进程本身所执行的操作(例如,当它启动时),要想找到更多的操作,我们就必须研究无权用户可以执行的操作,可以直接通过UI(如果它有的话),也可以间接通过COM、LPC、网络接口和其他暴露的攻击面。其中有些可能需要对产品进行逆向工程(很酷的例子这里、这里和这里),对于这个介绍,我们只打算去找那些简单点的例子介绍。

漏洞利用技术和工具

一旦我们发现一些对用户/用户控制的文件&目录进行的文件操作,我们就需要一种方法来劫持这些操作来做一些有趣的事情。

James Forshaw(@tiraniddo)在NTFS文件系统和Windows操作系统内部完成了开创性工作,他在发表了许多相关的文章(symlinks、hardlinks、NTPathConversion、DirCreate2FileRead、FileWrite2EoP、AccessModeMismatch),并在Infiltrate和SyScan。他提出了几种滥用Windows文件系统和路径解析功能的技术(大致总结如下),并在开源的symboliclink-testing-tools工具包和NtApiDotNet库中实现了这些技术。他的技术和工具包为许多测试人员打开了去寻找这类bug的大门(包括我自己),使这些bug有可能—甚至很容易—被利用,有效地把它们变成了新的漏洞利用潮流。

NTFS junctions

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d4d45335b21b47d1c23425c940fc9a81.html