皇冠体育寻求亚洲战略合作伙伴,皇冠代理招募中,皇冠平台开放会员注册、充值、提现、电脑版下载、APP下载。

首页科技正文

ipfs矿机团购(www.ipfs8.vip):自界说Windows Sandbox(二)

admin2021-05-21104资讯

自界说Windows Sandbox(一)

运行沙盒

运行Windows Sandbox应用程序会触发执行流程,我们将在此不再赘述。我们只是提到该流程导致CmService通过RPC挪用执行vmcompute!HcsRpc_CreateSystem。另一个要害服务vmcompute.exe,可运行和协调主机上的所有盘算系统(容器)。

在我们的例子中,CreateSystem下令还吸收形貌所需盘算机的下一个设置JSON:

注重:为了便于阅读,JSON被省略了,你可以在附录A中接见完整的JSON。

此JSON是在CmService!Container::Manager::Hcs::Details::GenerateCreateComputeSystemJson确立的。我们没有想法跟踪任何有助于构建该设置的文件。

在最先剖析JSON中有趣的字段之前,首先请你阅读Palo Alto Networks的这篇文章,该文先容了容器的内部结构,以及Job和Silo工具之间的关系。

第一个有趣的设置标签是RunInSilo,该标签触发vmcompute中的代码流,该代码流将导致我们进入下一个客栈跟踪:

从客栈中,我们可以领会到,每当盘算系统吸收到筒仓设置时,它就会通过container!WcCreateContainer挪用来确立和设置容器。作为其设置的一部门,它还通过FLTLIB!FilterSendMessage与wcifs.sys驱动程序举行通讯,我们将在短期内注释此驱动程序及其目的。

第二个有趣的功效是VirtualSmb标签,用于为我们前面提到的已安装基础层路径确立响应的共享,后面我们很快也会再讲到这一点。

容器隔离(Container Isolation)

正如我们在客栈跟踪中所看到的,容器的确立包罗使用wcifs.sys驱动程序Windows容器隔离FS筛选器驱动程序打开 \WcifsPort端口上的筛选器通讯通道,这是用户模式代码与过滤器驱动程序举行通讯的常用方式。

这个微型过滤器驱动程序在容器文件系统虚拟化的实现中具有主要的作用。该驱动程序在用户和主机中均经受此角色。

文件系统过滤器驱动程序通常异常庞大,这也不破例。幸运的是,Google Project Zero的James Forshaw最近写了一篇很棒的文章,注释了Windows FS筛选器驱动程序的低级设计,这有助于我们领会案例的逻辑。

我们可以将驱动程序逻辑分为两部门:

驱动程序设置:设置取决于驱动程序是在客户机系统上照样在主机系统上运行。

处置操作回调,例如WcPreCreate,WcPostCreate,WcPreRead和WcPostRead。这些回调包罗主要逻辑、数据操作和适当的重定向。

我们将注释该驱动程序用来领会沙盒生态系统的一些方式。

初始设置

用户设置

如上所述,主机和用户都使用此驱动程序,然则方式差异。

用户通过注册表吸收一组用于其初始设置的参数。其中一些参数位于HKLM\SYSTEM\CurrentControlSet\Control 和HKLM\SYSTEM\CurrentControlSet\Control\BootContainer,如下所示:

HKLM\SYSTEM\CurrentControlSet\Control 设置值

HKLM\SYSTEM\CurrentControlSet\Control\BootContainer设置值

你可能会注重到IO_REPARSE_TAG_WCI_1(代码0x90001018),我们之前在“真实的” VHDx文件中看到过。该标签以及IO_REPARSE_TAG_WCI_LINK_1(我们在BaseLayer.vhdx中将其视为重新剖析标签)一起被硬编码到wcifs!WcSetBootConfiguration方式中:

WcSetBootConfiguration中的硬编码重剖析标签值

用户设置的第二个更主要的部门是在wcifs!WcSetupV *** bUnionContext中,在这里它确立了一个称为团结上下文的虚拟化层。在后台,驱动程序将自界说数据存储在多个上下文工具上,并使用适当的NT API(FltGetInstanceContext,PsGetSiloContext和FltGetFileContext)接见它们。这些自界说工具包罗AVL树和哈希表,以有用地查找虚拟化层。

WcSetupV *** bUnionContext方式具有两个更有趣的构件。一个是属于该层的vSMB路径,另一个是HOST_LAYER_ID GUID,我们先前在剖析的MFT和形貌虚拟机的JSON中看到过:

WcSetupV *** bUnionContext中的硬编码vSMB路径

HOST_LAYER_ID的硬编码GUID

当我们深入研究时,我们看到有迹象解释使用虚拟SMB方式在用户和主机之间共享文件。很快,我们将看到vSMB是实现基础层和映射文件夹共享的主要方式。

主机设置

对于主机系统,主要设置发生在父盘算历程vmcompute,启动容器确立并将自界说新闻发送到\ WcifsPort时。这将触发wcifs!WcPortMessage,这是发送到该特定端口的任何新闻的回调例程。

以下是该服务发送给筛选器驱动程序的新闻的部门重构:

ContextData字段还包罗团结应映射的装备路径

操作回调

在注册历程中,筛选器驱动程序为其要阻挡的每个操作提供一组回调。过滤器治理器在每个文件操作之前/之后挪用这些回调,如下所示。

微型过滤器架构

在不花太多精神研究手艺细节的情形下,驱动程序界说并处置了两个自界说的重剖析标签:

IO_REPARSE_TAG_WCI_1:这是主要标签,指示磁盘上的文件实例是虚拟的,而且可以在其内部结构中找到真实路径,此“转换”的示例用法如下:

1.用户将文件从其内陆路径C:\Windows\system32\kernel32.dll转换为vSMB路径\Device\vm *** b\VSMB-{dcc079ae-60ba-4d07-847c-3493609c0870}\os\Windows\System32\kernel32.dll。

2.主机从基础层装备路径C:\ProgramData\Microsoft\Windows\Containers\BaseImages\0949cec7-8165-4167-8c7d-67cf14eeede0\BaseLayer\Files\Windows\System32\en-US\apphelp.dll.mui 转换文件到真实路径C:\Windows\System32\en-US\apphelp.dll.mui。

这种转换异常有趣,由于它主要发生在包罗此重剖析标签的基础层的空系统文件夹中(例如en-US文件夹)。

IO_REPARSE_TAG_WCI_LINK_1:据我们所知,此标签仅在主机上使用,并从基础层装备路径 C:\ProgramData\Microsoft\Windows\Containers\BaseImages\0949cec7-8165-4167-8c7d-67cf14eeede0\BaseLayer\Files\Windows\System32\kernel32.dll 到真实路径 C:\Windows\System32\kernel32.dll。与上一点相比,此示例DLL文件条目确实存在于基础层中,并具有重剖析标签。

vSMB是操作系统基础层共享的主要方式,这一发现异常令人惊讶。既然我们知道这是生态系统中至关主要的通讯方式,那么下一步自然是要深入研究其内部结构。

(v)SMB文件共享

,

足球免费推荐

免费足球贴士网(www.zq68.vip)是国内最权威的足球赛事报道、预测平台。免费提供赛事直播,免费足球贴士,免费足球推介,免费专家贴士,免费足球推荐,最专业的足球心水网。

,

在沙盒安装历程中,我们注重到vmcompute通过将CreateFileW挪用到存储提供程序装备来确立多个虚拟共享,并发送IOCTL 0x240328。这样的挪用的示例路径可能看起来如下所示: \??\STORVSP\VSMB\??\C:\ProgramData\Microsoft\Windows\Containers\BaseImages\0949cec7-8165-4167-8c7d-67cf14eeede0\BaseLayer\Files。

确立这些共享的方式是 vmcompute!ComputeService::Storage::OpenV *** bRootShare。我们可以在下一个客栈跟踪中看到它的流程:

另外,当我们使用WSB文件设置将主机文件夹映射到用户时,将挪用相同的方式。例如,映射Sysinternals文件夹将导致对驱动程序的下一个挪用:\??\STORVSP\VSMB\??\C:\Users\hyperv-root\Desktop\SysinternalsSuite。

通过(v)SMB接见文件

确立这些共享后,我们可以通过确立的别名在用户中接见它们。我们可以使用type下令来打印主机的内核32.dll,下一个路径是\\.\vm *** b\VSMB-{dcc079ae-60ba-4d07-847c-3493609c0870}\os\Windows\System32\kernel32.dll:

接见vSMB共享

为了提供vSMB文件,作为VM事情历程一部门的vmusrv模块确立了事情线程。此模块是用户模式vSMB服务器,它通过vmusrv!VSmbpWorkerRecvLoop例程直接从VMBus请求数据包,然后继续处置数据包。

服务确立文件操作

每当vmusrv收到“确立SMB”请求时,它都市向存储提供程序驱动程序提议一个新请求。这样的挪用可能看起来像这样:

与存储提供者的通讯是通过代码为0x240320的IOCTL完成的,而引用的句柄是在初始化阶段打开的vSMB路径:

引用了IOCTL的句柄

若是我们仔细考察storvsp!VspV *** bCommonRelativeCreate,我们会看到每次执行后都市挪用nt!IoCreateFileEx。该挪用包罗所需文件的相对路径以及一个附加的RootDirectory字段,该字段示意已安装的基础层VHDx中的\ Files文件夹:

通过storvsp.sys.执行IoCrateFileEx

服务读/写操作

读/写操作由 vmusrv!CFSObject::Read/vmusrv!CFSObject::Write中的事情线程执行。若是文件足够小,则线程仅在句柄上执行ReadFile / WriteFile。否则,它将文件映射到内存,并通过VMBus上的RDMA有用地传输文件。在vmusrv!SrvConnectionExecuteRdmaTransfer上执行此传输,而RDMA通讯是使用IOCTL 0x3EC0D3或0x3EC08C与RootVMBus装备(主机VMBus装备名)完成的。

与\ Device \ RootVmBus \ rdma \ 494通讯以举行读/写操作

用户到主机(Guest-to-Host)流程

基于本文中注释Storvsc.sys / Storvsp.sys关系的一些看法,我们可以将所有先前的手艺块组合到下一个文件接见流。

文件接见流程

1.我们使用下令类型打开并打印kernel32.dll文件的内容,这是一个系统文件,因此沙盒不拥有其副本,而是使用主机的副本。

2.由于用户系统不知道该文件不存在,因此它将通过文件系统驱动程序客栈(直到存储驱动程序客栈)执行正常的文件接见。

3.Hyper-V存储使用方Storvsc.sys是一个微型端口驱动程序,这意味着它充当用户的虚拟存储,它通过VMBus吸收并转发SCSI请求。

4.存储提供程序Storvsp.sys具有事情线程,该线程在storvsp!VspPvtKmclProcessingComplete上通过VMBus侦听新新闻。

5.提供程序剖析VMBus请求,并将其转达给vhdparser!NVhdParserExecuteScsiRequestDisk,后者执行VHD剖析器驱动程序vhdmp.sys。

6.最终,vhdmp.sys通过过滤器治理器接见sandbox.vhdx的物理实例,并执行读/写操作。在本例中,它将读取用户文件系统过滤器治理器请求的数据,该数据将返回到过滤器治理器以举行进一步剖析。

7.如前所述,返回的条目使用WCI 重新剖析标签和主机层GUID举行了符号。当wcifs.sys在文件上执行其确立后(post-create)操作时,它将查找该装备的团结上下文,并将文件工具替换为下一个:\Device\vm *** b\VSMB-{dcc079ae-60ba-4d07-847c-3493609c0870}\os\Windows\System32\kernel32.dll。

8.\ Device \ vm *** b装备被确立为SMB共享,因此筛选器治理器像接见其他任何通俗共享一样对其举行接见。在后台,它通过VMBus向主机执行SMB请求。

9.vSMB用户模式服务器vmusrv.dll在其事情线程方式vmusrv!SmbWorkerThread中轮询\\.\VMbus\装备以查找新新闻。

10.如前所述,在确立操作中,服务器通过已安装的操作系统基础层句柄上的IOCTL与存储提供程序举行通讯:\Device\STORVSP\VSMB\??\C:\ProgramData\Microsoft\Windows\Containers\BaseImages\0949cec7-8165-4167-8c7d-67cf14eeede0\BaseLayer\Files。

11.存储提供程序通过IoCreateFileEx执行文件请求,该请求是相对的,而且包罗已安装的操作系统层的RootDirectory,这将触发过滤器治理器在已安装的操作系统层中打开文件。

12.与步骤(7)相似,返回的条目包罗一个WCI reparse标签,该标签使wcifs.sys在post-create方式中更改文件工具。它将文件工具更改为其物理路径:C:\Windows\System32\kernel32.dll。

13.接见主机kernel32.dll文件,然后返回到用户。

14.对于ReadFile操作,wcifs.sys驱动程序将上下文状态保留在文件工具的顶部,以辅助其执行读/写操作。此外,辅助线程vmusrv通过直接接见文件或通过顶级VMBus上的RDMA执行读取请求。

现实历程要庞大得多,因此我们实验着重于对虚拟化至关主要的组件。

沙盒还允许通过其设置将文件夹从主机映射到用户,这样的文件夹吸收vSMB路径的唯一别名,而且接见类似于操作系统层。唯一的区别是该路径是由bindflt.sys在用户过滤器治理器中更改的。

例如,若是我们将SysinternalsSuite文件夹映射到用户Desktop文件夹,则路径

C:\Users\WDAGUtilityAccount\Desktop\SysinternalsSuite\Procmon.exe更改为\Device\vm *** b\VSMB-{dcc079ae-60ba-4d07-847c-3493609c0870}\db64085bcd96aab59430e21d1b386e1b37b53a7194240ce5e3c25a7636076b67\Procmon.exe,它使历程的其余部门保持稳固。

自界说沙盒

本研究的目的之一是凭证需要修改基础层的内容,在领会了其基础结构后,自界说沙盒的功效似乎很容易。

只需几个简朴的步骤即可实现自界说历程:

1.住手确立和维护基础层的服务CmService,当服务被卸载时,它也会删除基础层安装。

2.安装基础层位于C:\ProgramData\Microsoft\Windows\Containers\BaseImages\0949cec7-8165-4167-8c7d-67cf14eeede0\BaseLayer.vhdx文件中,可以通过双击或使用diskmgmt.msc适用程序来完成。

3.对基础层举行修改,在我们的案例中,我们添加了所有FLARE安装后(post-installation)文件。

4.卸载基础层。

5.启动CmService。

6.启动沙盒的那一刻,我们实现了很棒的FLARE VM!

FLARE VM是一款免费开放的基于Windows的平循分发版,专为逆向工程师,恶意软件剖析师,取证职员和渗透测试职员而设计。受到基于Linux的开放源代码启发,如Kali Linux,REMnux等,FLARE VM提供了一个完全设置的平台,包罗Windows平安工具的周全集成,如调试器、反汇编器、反编译器、静态和动态剖析工具、网络剖析和操作、网络评估、开发、破绽评估应用程序等等。

本文翻译自:https://research.checkpoint.com/2021/playing-in-the-windows-sandbox/

Max pool官网

Max pool官网(www.ipfs8.vip)是FiLecoin致力服务于使用FiLecoin存储和检索数据的官方权威平台。IPFS官网实时更新FiLecoin(FIL)行情、当前FiLecoin(FIL)矿池、FiLecoin(FIL)收益数据、各类FiLecoin(FIL)矿机出售信息。并开放FiLecoin(FIL)交易所、IPFS云矿机、IPFS矿机出售、租用、招商等业务。

网友评论