SimpleAtor(“ Simple-Ator”)是一种创新的以Windows为中心的X64用户模式应用程序模拟器,它利用Windows 10 Spring Update(1803)中添加的几个新功能,也称为“ Redstone 4”,在Windows 10 10月10日更新(1809)中进行了其他改进(1809),AKA“ Redstone 5”。
也就是说,SimpleTor依赖于:
它是指概念概念,以构建如何更简单,更快的沙盒爆炸环境,以及甚至不需要访客操作系统的无服务器工作负载(AWS lambdas / azure功能)的更多资源有限的容器(AWS lambdas / azure功能)。
可以使用Visual Studio 2017和最新的Windows SDK(1809)构建SimpleAtor。请注意,不能使用较旧的SDK,因为它们不支持较新的WHVP定义,而SimplEator本身仅支持运行的64位Windows 10系统构建17763或更高(Redstone 5/1809)。
跟踪系统调用的主监视器窗口,此处显示,显示从测试访客应用程序显示控制台输出:
寄存器窗口,可以在模拟器有断言/问题时使用(UI线程将冻结,因此“不响应”消息):
最后,如果启用peb中的FLG_SHOW_LDR_SNAPS flag,调试窗口将显示从加载程序中呼叫DbgPrint (否则,任何其他dbgprint调用都会显示出任何其他dbgprint调用):
TBD TBD添加链接
几十年来,开发人员一直在写作和利用仿真技术,为什么还要写另一个仿真器呢?
首先,在Windows的心脏中引入实际的虚拟化API是一个鲜为人知的戏剧性(以积极的方式)转移到Hyper-V平台的先前封闭性质。尽管通过虚拟化基础架构设备(VID)库有无证的API和IOCTL,但受支持且稳定的Win32层是一个受欢迎的改进。 QEMU现在已经支持使用WHVP进行加速,而VirtualBox 6.0也可能会在此支持的情况下发货(它已经在存储库中实现)。只有VMware独自站立和反抗。在这个主题上,学习如何利用这个新的API并不一定是一个简单的话题,因此我想学习并与他人分享这些新接口如何工作。
其次,在查看仿真技术时,通常会有三种现代驱动力来使用:
我的主要兴趣是看第三个子弹 - 到目前为止,它已经通过完整的系统模拟来实现,其中一些自定义实现使用了过度订阅模型,但仍然带来了很多复杂性 - 一个很好的例子是大多数防病毒模拟器,例如在Windows辩护人中实现的模拟器(请参阅一些出色的研究[此处]和[此处]和[此处])。此外,熟悉QILIN的研究人员可能已经看到了许多简单的Python绑定,它们很容易建立在其基础上,以便通过利用QEMU作为完整的系统模拟器来快速“旋转” Windows进程,但没有主要的OS图像。
我决定追求另一条途径 - 一种“用户模式窗口”的实现,在这里绘制的唯一二进制文件将是主机的OS装载机(ntdll.dll)和目标二进制文件,以及将提供256 GB地址空间,在其中提供256 GB的地址空间,可以在宾客映射和sand bobles中使用本机的1:1访问权限,并在sand box中遇到了sand bobers of sand of sand of sand of sand'''sand''sand'sand''沙箱)。只要模拟器将为加载程序和系统DLL提供基本的内核结构数据结构,主机就可以以本机速度运行,只有特权环转换导致退出。
然后,为简单起见,系统呼叫提供商拦截了来宾VM进行的系统调用,并且可以以三种方式之一:
根据性能,复杂性,兼容性和安全性之间的需求,需要少于500行的代码来实施上面的子弹1和2的足够的子弹1和2,以获取一个简单的测试应用程序,以加载,显示“ Hello World”消息并退出,并在处理其系统呼叫方面存在许多潜在的安全问题。代码库的加倍可能实际上可以减轻系统调用中的大多数安全问题(减去主机OS内核中的实际漏洞 - 沙盒可能会减轻这些漏洞)。
但是,即使在1000行代码中,由于所有系统调用最终都被本地发送到操作系统,SimplEator的行为更像是在Linux上的CGroup上的“ SecComp”实现,而不是我们今天看到的更为复杂的模拟器。
最后,值得指出的是,对云计算/容器化空间有新的兴趣,以最大程度地减少运行工作负载所需的资源,例如Amazon Lambdas或Azure功能,这些功能是在容器中运行的无服务器件,这些代码仍需要旋转整个访客操作系统。通过更严格地控制SimpleAtor提供的安全边界,人们可以想象能够将JVM或.NET Core作为专用应用程序运行而无需完整的访客操作系统。
TBD TBD
关于SimpleAtor如何实现独特的来宾执行环境,有3个主要的有趣部分(对我来说),这使运行Windows应用程序变得更加简单:
创建具有与内核MiCreatePebOrTeb功能相同的数据的PEB和TEB的创建
在来宾和主机地址之间创建1:1映射,并利用新的“地址要求”功能锁定对该范围的分配。请注意,目前,SimpleAtor在0x7FFE0000处映射正宗的KUSER_SHARED_DATA区域,这意味着,由于更新了SystemTime和InterruptTime字段,这些时间是由访客VM“看到”的,这些字段是由主机保留的。隔离该区域将需要一个定期计时器才能模拟更新此值。
映射真实的Ntdll.dll映像并利用主机OS系统呼叫本机上执行大部分加载过程,从而访问INT 2E , SYSCALL和INT 2C环转换。
此外,从模块化的基础上,SimpleTor由三个二进制组成:
Simpleator.exe实现了调试监视器。该组件负责显示监视器,调试和注册窗口的UI,托管一个命名的管道,该管道允许模拟器与其进行通信,并使用适当的环境加载仿真器(这意味着设置256 GB地址预留,将来,这也意味着沙盒)。Provider.dll实现了Windows 10 1809(RS5)和Windows 10 1903(19H1)的系统调用提供商,当前的构建受支持。Emulator.exe实现了实际WHVP加速模拟器代码。它主要负责与管道上的调试监视器进行通信,处理环形转换代码与系统呼叫提供商进行交谈,并执行Ntdll.dll Loader库和目标应用程序二进制的初始地址空间设置和PE加载。 首先,您必须安装Windows管理程序平台,该平台还需要安装和启用Hyper-V。您可以使用以下命令行:这样做:
Dism /Online /Enable-Feature /FeatureName:HypervisorPlatform
或通过以下启动GUI:
OptionalFeatures.exe
然后检查“ Hyper-V”和“ Windows Hypervisor平台”复选框,如下屏幕截图所示。
您必须拥有任何这些命令的管理权。
显然,请确保您的硬件支持硬件虚拟化技术(例如Intel VT-X)。
如果您想了解有关我的研究或工作的更多信息,我邀请您在http://www.alex-ionescu.com上查看我的博客,以及我的培训与咨询公司WinSider Sensidars&Solutions Inc.,网址为http://www.windows-internals.com。
TBD TBD
SimplEator旨在最大程度地减少代码大小和复杂性 - 这确实是以稳健性和最重要的安全性为代价的。例如,在当前实施中, NtCreateFile , NtOpenFile和NtWriteFile已完全传递到主机OS内核,这意味着“恶意”有效负载可以覆盖主机模拟器进程可以访问的磁盘上的任何文件,因为主机周围没有其他SAND盒。
此外,请注意,仅实施了严格的最小系统调用,以获取Testapp.exe应用程序以启动,打印其文本和退出。运行更复杂的应用程序(例如Cmd.exe将需要更多的工作,尤其是因为某些API期望通过LPC与CSRS建立连接,并返回特定数据。当前,SimpleAtor假装这是一个安全的VTL-1保护过程,它极大地限制了一些来宾API尝试执行的操作,因此,某些呼叫彻底崩溃(例如,例如,某些地方周围的某些人)。
需要更复杂的仿真和修改来宾地址空间才能解除此类API使用。
SimpleAtor不会执行很多错误检查,验证和异常处理。它不是为生产使用而设计的强大软件,而是参考代码库。
Copyright 2018 Alex Ionescu. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided
that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and
the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
and the following disclaimer in the documentation and/or other materials provided with the
distribution.
THIS SOFTWARE IS PROVIDED BY ALEX IONESCU ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ALEX IONESCU
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those of the authors and
should not be interpreted as representing official policies, either expressed or implied, of Alex Ionescu.