FreeBuf|任意文件移动导致的Windows提权攻击分析( 三 )

\RPC CONTROL\目录 。
C:\Dir\file.txtC:\Other\stuff.any 。 当然 , 这并不是完全等同的 , 但在很多情况下 , 这种条件足以让我们进行攻击 。 你可以使用和CreateDosDeviceSymlink分别完成这些步骤 , 但CreateSymlink工具通过一个方便的命令中实现了这种技术 。 Opportunistic locksoplock是一种可以放置在文件上的锁 , 当其他进程想要访问该文件时 , 它可以被告知—同时延迟这些进程的访问 , 以便锁定进程可以在解除锁之前让文件处于适当的状态 。 oplocks最初是为通过SMB缓存客户端-服务器文件访问而设计的 , 可以通过调用文件句柄上的特定控制代码设置oplock 。
oplock对于利用TOCTOU的bug是很有用的 , 因为你可以通过锁定一个试图打开的文件或目录来轻松地赢得与进程的竞争 。 当然 , 它也有一些限制:你不能细粒度地 “放行 “一个访问(一旦锁被解除 , 所有待定的访问都会发生) , 而且它并不适用于所有类型的访问 , 但它通常非常有效 。
SetOpLock工具可以让你创建这些锁 , 并阻止对文件或目录的访问 , 直到你按回车键释放锁 。 它让你在读、写和放行oplock之间进行选择 。 同样 , James将这一技术与之前的技术相结合 , 创造了一个强大的primitive , 实现一些TOCTOU bug的利用:通过设置一个伪symlink(和之前一样) , 并在最终文件(symlink的目标)上放置一个oplock , 我们可以在打开目标文件时改变symlink(即使目标文件被锁定 , symlink也没有被锁定) , 并使其指向另一个目标文件 。
FreeBuf|任意文件移动导致的Windows提权攻击分析
本文插图

C:\Dir/file.txtBaitAndSwitch工具用独占的oplocks实现了这种技术 , 如果你需要读写锁 , 可以使用SetOpLockCreateSymlinkC:\ProgramData\Product\Logs(具有默认/继承访问权的目录)中创建日志文件 。 日志文件由特权(系统)和非特权(用户)进程创建/写入 。
创建日志文件的过程设置了一个明确的ACL , 这样每个用户都可以写入文件 。
FreeBuf|任意文件移动导致的Windows提权攻击分析
本文插图

这就导致了可以被利用来创建具有任意内容任意文件的一个漏洞 。
如果我们删除现有的日志文件 , 并将日志目录变成与C:\Windows\System32的连接点(由于继承了C:\ProgramData的访问权限) , 产品X的特权进程将在System32目录下创建日志 。
FreeBuf|任意文件移动导致的Windows提权攻击分析
本文插图

我们也可以使用symlink技术转移一个特定的日志文件(如some.log) , 以攻击者选择的名称创建一个任意文件 , 如程序目录中的DLL 。
FreeBuf|任意文件移动导致的Windows提权攻击分析
本文插图

因为特权进程也对日志文件设置了允许写入的ACL , 所以我们也可以根据自己的喜好更改文件的内容 。
这是一个在很多产品上都发现过的bug , 大概是因为它是一个共同需求的简单实现(日志文件可被所有组件—用户和系统组件写入 , 所有组件的通用日志代码) 。 在过去一年多的时间里 , 我们看到了好几个这样的例子 。
Cylance , 作者:Ryan Hanson
Ben Turner在Symantec / Altiris agent中发现了这个bug 。
在McAfee Endpoint Security中 。 (已打补丁)
Mark Barnes的NVIDIA GeForce Experience和Intel Driver & Support Assistant 。
在Pulse Secure VPN客户端中(未打补丁)(碰撞与Matt Bush)


推荐阅读