VirtualBox:Windows进程COM注入EoP

平台:VirtualBox v5.0.32 r112930 x64(在Windows 10上测试)

类型:特权提升

概要:

可以绕过VirtualBox驱动程序实现的进程加固,在VirtualBox进程中加载任意代码,以访问VBoxDrv驱动程序,该驱动程序可以允许从普通用户提升到EoP。

描述:

注意:我不知道你是否考虑这个问题,考虑过访问VBoxDrv驱动程序的功能,以及您将要怎样阻止访问,我认为是这样。

VirtualBox使用许多不同的技术来防止不受信任的代码访问核心系统驱动程序。这是因为大多数VB都是作为非管理员用户运行,但驱动程序提供了许多特权功能,例如分配内核内存和加载驱动程序。这个过程在内核驱动程序(防止诸如获得VB进程的完全处理权限之类)以及在访客模式下都通过挂接库加载器阻止不受信任的DLL来实现。

显然,如果您在VirtualBox.exe主进程中运行不受信任的代码,则可能会导致内核代码执行。因此绕过过程很有趣。在运行VirtualBox.exe时,将多个COM对象加载到内存中。由于COM的工作原理,可以将对象注册到每个用户版本(通过它唯一的CLSID),而不是系统版本。由于所有VB进程都以用户身份运行,我们可以替换类型(如VirtualBox Client COM服务器),并且VirtualBox.exe的启动副本将尝试加载代码。

诀窍是绕过签名检查过程,我们不能只插入我们自己的DLL,所以我们必须检查已经被信任的东西,就像Windows中大多数Microsoft签名的二进制文件。最简单的攻击向量是使用在scrobj.dll中实现的Scriptlet Component COM服务器。这允许我们注册一个COM对象,而不是被实现为一个DLL是以脚本语言(如JScript或VBScript)实现的。由于scrobj.dll被验证为已签名的MS二进制文件,所以它将被加载,但是我们通过未在默认Windows系统上验证的JScript文件在进程内部获得代码执行权限。

当然,JScript还不足以在VBoxDrv驱动程序上调用方法,所以我们需要一种打破限制性脚本环境的方法。你可能会找到一个错误的COM对象,并使用它来ROP你的出路,但有一个更简单的方法。.NET的核心部分(如mscoree,mscorwks,mscorlib)是受信任的二进制文件,所以使用一些.NET COM注册,我们可以使用JScript中的.NET来引导完整的.NET,我们可以做任何事情,如调用任意方法通过P / Invoke。我们不能注册一个.NET COM对象,因为.NET通过标准库加载来加载大多数DLL,这将被签名检查阻止,所以我们强制.NET从一个字节数组中加载一个程序集,该进程加密代码从来没有见过

从固定的角度来看,我确定总是会有边缘的情况,但是您可能想要列出某些DLL,例如scrobj / jscript / vbscript等以及任何.NET相关的DLL。

概念证明:

我提供了一个PoC作为一个scriptlet文件和一个注册表reg脚本。当组合在一起时,Scriptlet将替换VirtualBox Client COM服务器(CLSID:{DD3FC71D-26C0-4FE1-BF6F-67F633265BBA}),因此当VirtualBox.exe尝试加载它时,它将绕过签名检查。然后通过从内存中引导一些任意.NET代码(因此没有DLL可以验证),可以调用导出的库函数并访问VirtualBox驱动程序,从而获得完整的执行。

先决条件: 您将需要为PoC安装.NET 3.5。

1)确保安装.NET 3.5。否则PoC将提示您安装。2)将poc.sct复制到目录c:\poc,使本地磁盘上有一个文件c:\poc\poc.sct。3)使用VBoxManage startvm“VM名称”启动虚拟机(不要使用GUI,因为这样不能很好的加载COM对象)。4)此时会显示一个消息框,显示两个内存地址(这是调用SUPR3PageAllocExz的结果)。应该从“unrestricted”VirtualBox.exe进程显示该消息框。

预期结果:

将Scriptlet代码加载到内存中将失败

观察结果:

加载了Scriptlet代码,允许访问设备驱动程序。

PoC

PoC下载地址(可能需要科学访问)

 

*参考来源:chromium,转载请注明来自MottoIN

原创文章,作者:Jarry,如若转载,请注明出处:http://www.mottoin.com/101119.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code