tokenpocket官网正版app下载|sandbox是什么

作者: tokenpocket官网正版app下载
2024-03-07 20:58:18

Sandbox(用于安全的运行程序的机制)_百度百科

box(用于安全的运行程序的机制)_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心Sandbox是一个多义词,请在下列义项上选择浏览(共2个义项)展开添加义项Sandbox播报讨论上传视频用于安全的运行程序的机制收藏查看我的收藏0有用+10本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。Sandbox(沙箱)是指一种技术,在这种技术中,软件运行在操作系统受限制的环境中。由于该软件在受限制的环境中运行,即使一个闯入该软件的入侵者也不能无限制访问操作系统提供设施;获得该软件控制权的黑客造成的损失也是有限的。此外,如果攻击者要获得对操作系统的完全控制,他们就不得不攻克沙箱限制。Sandbox也提供深度防御,许多PaaS系统都提供了一个实时运行环境,它的核心就是一个沙箱应用程序,如Azu re和Google App Engine。 [1]中文名沙箱外文名Sandbox目录1简介2维护沙箱安全3示例内容简介播报编辑在计算机安全领域,沙箱是一种用于安全的运行程序的机制。它常常用来执行那些非可信的程序。非可信程序中的恶意代码对系统的影响将会被限制在沙箱内而不会影响到系统的其它部分。沙箱技术按照一定的安全策略,通过严格限制非可信程序对系统资源的使用来实现隔离。沙箱技术在实际应用中已经有多种实现方案。例如Janus,Chakravyuha,BlueBox,Cerb等系统采用拦截系统调用的方式实现。通过拦截系统调用来限制沙箱中的程序对某些重要资源的使用。这些资源是指那些对系统安全起关键作用的资源,一旦被非法使用,便会对系统安全造成严重影响。Strata系统通过一种称之为软件动态转换(Software Dynamic Translation)的技术实现沙箱。与拦截系统调用一样,软件动态转换的目的也是通过动态转换来完成对沙箱中程序的资源使用进行限制。 [2]沙箱技术按照安全策略来限制程序对系统资源的使用,进而防止其对系统进行破坏,其有效性依赖于所使用的安全策略的有效性。由于沙箱技术是通过限制非可信程序对某些资源的访问来防止非可信程序对系统进行破坏的,因此,如果安全策略过于严格,对非可信进程的行为限制过多,则会影响到非可信进程的运行。如果安全策略过于简单,则又无法有效地防范攻击。 [2]维护沙箱安全播报编辑以Java为例。从安全角度考虑,小应用程序对系统的利用是有范围限制的,一般通俗地称之为“沙箱”。意译过来是指小应用程序不能做某些事情,因为Java不允许它们做。以下是Java小应用程序不能做到的: [3]1、除了它们的出处外,建立与其它主机的连接(使它们不能连接其它系统获取或发送未授权代码)。 [3]2、阅读所有系统特性(不允许它们进入可能产生危险或受到限制的区域)。 [3]3、定义本身方式或调用库(使它们在运行时间不能更改自身代码)。 [3]4、在运行它们的主机卜读写文件(使它们不能传递病毒、特洛伊木马和间谍程序)。 [3]这些限制是防止小应用程序危害系统安全和数据的完整性。这种设计最初是为了防止代码破译者为达到自己罪恶的目的,使用Java基本功能将代码从一台计算机转移到另一台计算机。 [3]示例内容播报编辑通过在受限操作系统环境中执行软件来实现沙箱,从而控制进程可以使用的资源(例如,文件描述符,存储器,文件系统空间等)。 [4]Sandbox实现的示例包括以下内容: [4]GoogleSandboxed API 。 [4]监狱:网络访问限制和受限制的文件系统命名空间。Jails最常用于虚拟主机。 [4]基于规则的执行使用户能够完全控制哪些进程被启动,生成(由其他应用程序生成),或者允许将代码注入其他应用程序并通过让系统为用户或程序分配访问级别来访问网络。一套坚定的规则。它还可以控制文件/注册表安全性(哪些程序可以读写文件系统/注册表)。在这样的环境中,病毒和特洛伊木马感染计算机的机会较少。SELinux和Apparmor安全框架是Linux的两个这样的实现。 [4]Native Client是一个Sandbox,用于高效安全地在浏览器中运行已编译的C和C ++代码,与用户的操作系统无关。 [4]能力系统可以被认为是一种细粒度的沙盒机制,其中程序在生成时被赋予不透明的令牌,并且能够根据它们持有的令牌来执行特定的事物。基于功能的实现可以在从内核到用户空间的各个级别上工作。基于功能的用户级Sandbox的示例涉及Web浏览器中的HTML呈现。 [4]安全计算模式(seccomp)是一个内置在Linux内核中的Sandbox。在严格模式下激活时,seccomp仅允许write(),read(),exit()和sigreturn()系统调用。 [4]HTML5具有用于iframe的“Sandbox”属性。 [4]Java虚拟机包括一个Sandbox,用于限制不受信任代码的操作,例如Java applet。 [4].NET公共语言运行时提供代码访问安全性以强制限制不受信任的代码。 [4]软件故障隔离(SFI),允许通过将所有存储,读取和跳转汇编指令打包到隔离的内存段来运行不受信任的本机代码。 [4]Windows Vista和更高版本包括运行的“低”模式进程,称为“用户帐户控制”(UAC),它只允许写入特定目录和注册表项。 [4]Sandbox的一些用例包括以下内容: [4]在线评判系统,用于在编程竞赛中测试程序。 [4]新一代的pastebins允许用户在pastebin的服务器上执行粘贴的代码片段。 [4]新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

浏览器沙箱(sandBox)到底是什么? - 知乎

浏览器沙箱(sandBox)到底是什么? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册Google Chrome前端开发网页浏览器安全沙箱浏览器沙箱(sandBox)到底是什么?希望能通俗地讲一下其概念与作用关注者103被浏览127,714关注问题​写回答​邀请回答​好问题 2​1 条评论​分享​5 个回答默认排序知乎用户“沙盒”技术与主动防御技术原理截然不同。主动防御是发现程序有可疑行为时立即拦截并终止运行。“沙盒”技术则是发现可疑行为后让程序继续运行,当发现的确是病毒时才会终止。“沙盒”技术的实践运用流程是:让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分表演,“沙盒”会记下它的每一个动作;当疑似病毒充分暴露了其病毒属性后,“沙盒”就会执行“回滚”机制:将病毒的痕迹和动作抹去,恢复系统到正常状态。如果您还不懂,那说的再简单一些。想象一下,在一个装满了平整细沙的盒子里,我们可以尽情随意地在上面作画、涂写,无论画的好坏,最后轻轻一抹,沙盒又回到了原来的平整状态。沙盒的魅力就在于他允许你出错,还可以给你改正的机会。参考资料:http://www.cnblogs.com/hanhang/archive/2011/10/06/2199974.html发布于 2012-02-13 16:47​赞同 74​​1 条评论​分享​收藏​喜欢收起​十二不急于相信,不急于否定​ 关注操作系统层面的沙盒的含义就是操作系统对进程的可访问的内存地址所做的限制,限制进程可访问的内存在其被分配的内存地址区间内,而不允许操作其他的内存地址,从而提供安全层面的防护。到浏览器层面,本质原理没多大变化,实践层面可能会根据浏览器环境有所变化,比如限制脚本操作本页面之外的其他页面的DOM,限制访问非同源文档,限制向非同源服务器发送ajax等等,目的依然是安全。以chromium为例。chromium是多进程架构,浏览器前端界面由browser进程管理,各个web page的tab属于renderer进程管理。chromium的sandbox是将renderer进程作为防护对象。browser进程会给每个renderer进程分配资源,但这些renderer进程只能访问被分配的资源,不能访问未被分配的资源。这里资源的概念比较广泛,具体到可访问的DOM(对应内存中的对象),或抽象到origin scope等。实现层面的话,可以类比Linux下文件系统的权限位,浏览器会对每个web page实现对应的权限位,w3c HTML规范里 [Sandbox](https://www.w3.org/WebPlatform/docs/html51/browsers.html#sandboxing) 有相关内容。编辑于 2017-01-03 13:21​赞同 21​​添加评论​分享​收藏​喜欢

沙盒(计算机术语)_百度百科

算机术语)_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心沙盒是一个多义词,请在下列义项上选择浏览(共5个义项)展开添加义项沙盒播报讨论上传视频计算机术语收藏查看我的收藏0有用+10沙盒(英语:sandbox,又译为沙箱),计算机专业术语,在计算机安全领域中是一种安全机制,为运行中的程序提供的隔离环境。通常是作为一些来源不可信、具破坏力或无法判定程序意图的程序提供实验之用。中文名沙盒外文名Sandbox应用环境受限的安全环境作    用限制授予应用程序的代码访问权限目录1简介2具体实现3参见简介播报编辑沙盒通常严格控制其中的程序所能访问的资源,比如,沙盒可以提供用后即回收的磁盘及内存空间。在沙盒中,网络访问、对真实系统的访问、对输入设备的读取通常被禁止或是严格限制。从这个角度来说,沙盒属于虚拟化的一种。沙盒中的所有改动对操作系统不会造成任何损失。通常,这种技术被计算机技术人员广泛用于测试可能带毒的程序或是其他的恶意代码。具体实现播报编辑沙盒将软件运行于一个受限的系统环境中,控制程序可使用的资源(如文件描述符、内存、磁盘空间等)。以下是一些沙盒的具体实现:软件监狱(Jail):限制网络访问、受限的文件系统名字空间。软件监狱最常用于虚拟主机上。基于规则的执行:通过系统安全机制,按照一系列预设规则给用户及程序分配一定的访问权限,完全控制程序的启动、代码注入及网络访问。也可控制程序对于文件、注册表的访问。在这样的环境中,病毒木马感染系统的几率将会减小。Linux中,安全增强式Linux和AppArmor正使用了这种策略。虚拟机:模拟一个完整的宿主系统,可以如运行于真实硬件一般运行虚拟的操作系统(客户系统)。客户系统只能通过模拟器访问宿主的资源,因此可算作一种沙盒。主机本地沙盒:安全研究人员十分依赖沙盒技术来分析恶意软件的行为。通过创建一个模拟真实桌面的环境,研究人员就能够观察恶意软件是如何感染一台主机的。若干恶意软件分析服务使用了沙盒技术。在线判题系统:用于编程竞赛中的程序测试。安全计算模式(seccomp):Linux内核内置的一个沙盒。启用后,seccomp仅允许write()、read()、exit()和sigreturn()这几个系统调用。 [1]参见播报编辑chroot虚拟系统Sandboxie新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

一文彻底搞懂windows10和11的沙盒(Sandbox)功能及自定义配置沙盒 - 知乎

一文彻底搞懂windows10和11的沙盒(Sandbox)功能及自定义配置沙盒 - 知乎切换模式写文章登录/注册一文彻底搞懂windows10和11的沙盒(Sandbox)功能及自定义配置沙盒红头发蓝胖子​为技术问题,提供简单解决方案Windows 沙盒提供了轻型桌面环境,可以安全地在隔离状态下运行应用程序。 安装在 Windows 沙盒环境下的软件保持“沙盒”状态,并且与主机分开运行。沙盒是临时的。 关闭后,系统将删除所有软件和文件以及状态。 每次打开应用程序时,都会获得沙盒的全新实例。安装在主机上的软件和应用程序不会直接出现在沙盒中。 如果需要在 Windows 沙盒环境中运行特定的应用程序,则相应的应用程序必须就是安装在沙盒环境中才行。Windows 沙盒具有以下属性:Windows 自带功能:此功能所需的一切内容都包含在 Windows 10 专业版和企业版中。 无需单独下载 。原生:每次 Windows 沙盒运行时,都像全新安装的 Windows 一样干净。无痕:设备上不会保留任何内容。 当用户关闭应用程序时,系统会丢弃所有内容。安全:使用基于硬件的虚拟化进行内核隔离。 它依赖 Microsoft 虚拟机监控程序运行单独的内核,可将 Windows 沙盒与主机隔离。高效: 采用集成的内核计划程序、智能内存管理和虚拟 GPU。Windows 沙盒默认启用网络连接。开启windows沙盒的必备条件Windows 10 专业版、企业版或教育版 18305 或 Windows 11(Windows 家庭版当前暂不支持 Windows 沙盒)AMD64 或(截至Windows 11 内部版本 22483)ARM64 体系结构BIOS 中启用的虚拟化功能至少 4GB 内存(建议使用 8GB)至少 1GB 可用硬盘空间(建议使用固态硬盘)至少双核 CPU(建议使用超线程四核)如何查看windows版本  按下快捷键,win+R,输入cmd,确定,打开命令窗口,输入msinfo32,注意要在英文状态下输入,回车。然后在弹出的窗口中就可以看到系统的具体版本号了。  按下快捷键,win+R,输入cmd,确定,打开命令窗口,输入ver,回车。  按下快捷键,win+R,输入winver,确定。  开启沙盒1,点击开始菜单--输入“控制面板”2,控制面板中,打开程序3,在程序中,点击 启用或关闭windows功能,找到windows沙盒,打上√。点击确定沙盒中安装软件,进行测试1,打开windows沙盒点击开始菜单--输入 windows sandbox,点击打开2,下载安装软件比如QQ,独立安装在windows沙盒中。并不会出现在主机上。当然主机上的软件火绒也同样不会出现在windows沙盒中。3,关闭沙盒点击关闭windows沙盒程序,会提示,关闭windows沙盒后,其所有内容都将放弃并永久丢失。windows和沙盒之间的数据传输windows沙盒和主机系统之间是无法通过拖拽传输数据的可以通过复制粘贴,直接复制主机上的文件,然后粘贴在windows沙盒中即可windows沙盒网络如何通信windows沙盒和主机之间的网络通信,使用的是Hyper-V Network。采用了Hyper-V网络虚拟化技术,通过虚拟网卡和主机进行通信。windows沙盒网关地址指向主机上的Hyper-V虚拟网卡的地址。windows沙盒,是否支持多开实例不支持多开。运行一个windows沙盒后,再次打开Windows Sandbox。会提示如下报错。仅允许一个运行的Windows沙盒高级技巧:自定义沙盒Windows 沙盒支持简单的配置文件,这些文件为 Sandbox 提供最少的自定义参数集。 此功能可用于Windows 10版本 18342 或Windows 11。 Windows 沙盒配置文件的格式设置为 XML,并通过.wsb文件扩展名与 Sandbox 关联。配置文件使用户能够控制Windows 沙盒的以下方面:**vGPU (虚拟化 GPU) **:启用或禁用虚拟化 GPU。 如果禁用 vGPU,沙盒将使用 Windows 高级光栅化平台 (WARP) 。网络:在沙盒中启用或禁用网络访问。映射的文件夹:使用读取或写入权限从主机共享文件夹。 公开主机目录可能会允许恶意软件影响系统或窃取数据。登录命令:启动Windows 沙盒时执行的命令。音频输入:将主机的麦克风输入共享到沙盒中。视频输入:将主机的网络摄像头输入共享到沙盒中。受保护的客户端:将 RDP 会话上增强的安全设置放置到沙盒。打印机重定向:将打印机从主机共享到沙盒中。剪贴板重定向:与沙盒共享主机剪贴板,以便可以来回粘贴文本和文件。内存(以 MB 为单位):要分配给沙盒的内存量(以兆字节为单位)。创建配置文件若要创建配置文件,请执行以下操作:打开纯文本编辑器或源代码编辑器 (,例如记事本、Visual Studio Code等)插入以下行:

在两行之间添加适当的配置文本。 有关详细信息,请参阅正确的语法和下面的示例。保存具有所需名称的文件,但请确保其文件名扩展名为 .wsb。 在记事本中,应将文件名和扩展插件括在双引号内,例如 "My config file.wsb"。使用配置文件若要使用配置文件,请双击它,根据其设置开始Windows 沙盒。 也可以通过命令行调用它,如下所示:C:\Temp> MyConfigFile.wsb 关键字、值和限制vGPU启用或禁用 GPU 共享。value支持的值:启用:在沙盒中启用 vGPU 支持。禁用:在沙盒中禁用 vGPU 支持。 如果设置此值,沙盒将使用软件呈现,这可能比虚拟化 GPU 慢。默认 此值是 vGPU 支持的默认值。 目前,此默认值表示已禁用 vGPU。 备注:启用虚拟化 GPU 可能会增加沙盒的攻击面。网络启用或禁用沙盒中的网络。 可以禁用网络访问,以减少沙盒暴露的攻击面。value支持的值:禁用:在沙盒中禁用网络。默认值:此值是网络支持的默认值。 此值通过在主机上创建虚拟交换机来启用网络,并通过虚拟 NIC 将沙盒连接到它。 备注:启用网络可以向内部网络公开不受信任的应用程序。映射的文件夹一个文件夹数组,每个文件夹表示主机上将共享到指定路径的沙盒中的位置。 目前不支持相对路径。 如果未指定路径,文件夹将映射到容器用户的桌面。

absolute path to the host folder

absolute path to the sandbox folder

value

...

HostFolder:指定要共享到沙盒中的主机上的文件夹。 该文件夹必须已存在于主机上,否则容器将无法启动。沙盒文件夹:指定要将文件夹映射到的沙盒中的目标。 如果文件夹不存在,则会创建该文件夹。 如果未指定沙盒文件夹,文件夹将映射到容器桌面。ReadOnly:如果 为 true,则强制从容器内对共享文件夹进行只读访问。 支持的值: true/false。 默认值为 false。 备注:从主机映射的文件和文件夹可能会被沙盒中的应用入侵,或者可能会影响主机。登录命令指定在沙盒登录后自动调用的单个命令。 沙盒中的应用在容器用户帐户下运行。 容器用户帐户应为管理员帐户。command to be invoked命令:容器中要在登录后执行的可执行文件或脚本的路径。备注:尽管非常简单的命令 ((例如启动可执行文件或脚本) )有效,但应将涉及多个步骤的更复杂的方案放入脚本文件中。 此脚本文件可通过共享文件夹映射到容器,然后通过 LogonCommand 指令执行。音频输入启用或禁用沙盒的音频输入。value支持的值:启用:在沙盒中启用音频输入。 如果设置了此值,沙盒将能够接收用户的音频输入。 使用麦克风的应用程序可能需要此功能。禁用:禁用沙盒中的音频输入。 如果设置了此值,沙盒将无法接收用户的音频输入。 使用麦克风的应用程序可能无法在此设置中正常运行。默认值:此值是音频输入支持的默认值。 目前,此默认值表示已启用音频输入。 备注:向容器公开主机音频输入可能会有安全影响。视频输入启用或禁用沙盒的视频输入。value支持的值:启用:在沙盒中启用视频输入。禁用:在沙盒中禁用视频输入。 使用视频输入的应用程序可能无法在沙盒中正常工作。默认值:此值是视频输入支持的默认值。 目前,此默认值表示已禁用视频输入。 使用视频输入的应用程序可能无法在沙盒中正常工作。 备注:向容器公开主机视频输入可能会产生安全影响。受保护的客户端将更多安全设置应用到沙盒远程桌面客户端,减少其攻击面。value支持的值:启用:在受保护的客户端模式下运行 Windows 沙盒。 如果设置了此值,沙盒将运行并启用额外的安全缓解措施。禁用:在标准模式下运行沙盒,而无需额外的安全缓解措施。默认值:此值是受保护客户端模式的默认值。 目前,此默认值表示沙盒未在受保护的客户端模式下运行。 备注:此设置可能会限制用户在沙盒中复制/粘贴文件的能力。打印机重定向启用或禁用从主机到沙盒的打印机共享。value支持的值:启用:启用将主机打印机共享到沙盒。禁用:在沙盒中禁用打印机重定向。 如果设置了此值,沙盒将无法从主机查看打印机。默认值:此值是打印机重定向支持的默认值。 目前,此默认值表示已禁用打印机重定向。剪贴板重定向启用或禁用与沙盒共享主机剪贴板。value支持的值:禁用:在沙盒中禁用剪贴板重定向。 如果设置了此值,则会限制在沙盒中复制/粘贴。默认值:此值是剪贴板重定向的默认值。 目前, 默认情况下允许在主机和沙盒之间复制/粘贴。内存(以 MB 为单位)指定沙盒可以使用 MB (MB) 的内存量。value如果指定的内存值不足以启动沙盒,则会自动将其增加到所需的最小量。sandbox配置实例1以下配置文件可用于轻松测试沙盒内下载的文件。 若要实现此测试,将禁用网络和 vGPU,并允许沙盒对共享下载文件夹进行只读访问。 为方便起见,登录命令会在沙盒中打开下载文件夹。

Disable

Disable

C:\Users\Public\Downloads

C:\Users\WDAGUtilityAccount\Downloads

true

explorer.exe C:\users\WDAGUtilityAccount\Downloads

注意事项:对应的文件夹目录一定要正确,否则无法打开windows sandbox,会有报错提示。 C:\Users\Public\Downloads,对应你本机的文件夹目录。Sandbox配置实例2以下配置文件在沙盒中安装Visual Studio Code,这需要稍微复杂的 LogonCommand 安装。两个文件夹映射到沙盒中;第一个 (SandboxScripts) 包含 VSCodeInstall.cmd,它将安装并运行Visual Studio Code。 (CodingProjects) 的第二个文件夹假定包含开发人员想要使用Visual Studio Code修改的项目文件。这2个文件夹需要在主机目录下创建。C:\SandboxScriptsC:\CodingProjects由于Visual Studio Code安装程序脚本已映射到沙盒中,LogonCommand 可以引用它。VSCodeInstall.cmdREM Download Visual Studio Code

curl -L "https://update.code.visualstudio.com/latest/win32-x64-user/stable" --output C:\users\WDAGUtilityAccount\Desktop\vscode.exe

REM Install and run Visual Studio Code

C:\users\WDAGUtilityAccount\Desktop\vscode.exe /verysilent /suppressmsgboxesVSCode.wsb

C:\SandboxScripts

true

C:\CodingProjects

false

C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts\VSCodeInstall.cmd

运行后VSCode.wsb,沙盒中自动下载并运行vscode如何使用你的配置启动沙盒文件完成后,保存文件并为其提供 .wsb 文件扩展名。例如,如果文本编辑器将其另存为沙盒.txt,请将其另存为 Sandbox.wsb。若要使用你的设置启动 Windows 沙盒,请双击 .wsb 文件。你可以将其放在桌面上,也可以在“开始”菜单中创建它的快捷方式。 码字不易,觉得有点用就点个赞吧 编辑于 2022-08-31 17:36Windows 10Windows11沙盒​赞同 61​​11 条评论​分享​喜欢​收藏​申请

什么是沙箱技术?沙箱技术的原理是什么? - 华为

什么是沙箱技术?沙箱技术的原理是什么? - 华为

本站点使用Cookies,继续浏览表示您同意我们使用Cookies。

Cookies和隐私政策>

技术支持

运营商入口

公告

中文

English

首页

信息速查

IP知识百科

在线课堂

产品智能选型

首页

信息速查

产品智能选型

IP知识百科

中文

English

登录

提示

确定

取消

IP知识百科

IP知识百科

>

沙箱技术

什么是沙箱技术?

在计算机领域中,沙箱技术(Sandboxing)是一种用于隔离正在运行程序的安全机制,其目的是限制不可信进程或不可信代码运行时的访问权限。沙箱的名称来源于儿童所玩的沙盒游戏,在沙盒中,孩子们可以自由运用想象力搭建一个与外界隔绝的小世界,正如沙箱会为待执行的程序提供了一个虚拟环境。这个虚拟环境中包含一些虚拟的硬件和软件资源,如文件系统、网络、操作系统等,使应用程序或进程可以在该环境中运行。在沙箱中运行的程序只能访问沙箱给它加载的资源,而不会影响到外部的应用、系统或平台,避免其对计算机中的其他程序或数据造成永久的更改。沙箱应用在网络安全领域,可以通过隔离沙箱中的病毒文件,以达到识别未知攻击的效果。

目录

沙箱技术的原理

沙箱技术的应用

沙箱技术的价值

云沙箱与硬件沙箱的区别

沙箱技术在华为FireHunter6000系列沙箱中的实践

更多

收起

沙箱技术的原理

沙箱主要应用到了三类技术:虚拟化技术、访问控制技术与防躲避技术。

虚拟化技术虚拟化技术(Virtualization)是一种资源管理技术。通过虚拟化,计算机的很多实体资源,包括CPU、内存、磁盘空间等,都会被抽象化后成为可供分割和重新组合的状态,让用户可以自己重新分配电脑硬件资源。如图所示,在沙箱中会使用虚拟化技术为不可信的资源构建封闭的运行环境,在保证不可信资源功能正常运行的同时提供安全防护。简而言之,即是沙箱中被隔离的可疑或待测程序会使用沙箱中的资源运行,以保证沙箱外资源的安全,不影响沙箱外其他程序的运行。

沙箱是如何工作的

沙箱根据虚拟化层次的不同,可以被分为系统级别的沙箱和容器级别的沙箱。系统级别的沙箱即是一种特殊的虚拟机(Virtual Machine),往往会虚拟化一个完整的计算机软件架构,即在沙箱内部有完整的一套虚拟设备和操作系统。容器级别的沙箱不同于此,该种类型的沙箱仅仅只是一个部署在某个应用程序周围的一个容器(Container),容器内包括了被隔离的文件和程序及这些文件或程序可能会使用到的资源。容器级别的沙箱相较于系统级别的沙箱,占用的内存和硬盘空间都是更小的。 沙箱之所以被认为是一种特殊的虚拟机或容器,是因为沙箱相较于通常意义上的虚拟机或容器,更侧重于安全隔离,目的是让沙箱中所做的任何操作对外界不造成影响,重点在于不让沙箱内部影响到沙箱外部。通常意义上的虚拟机或容器更侧重于应用部署,目的是隔离出一个单独的部署环境,使得外界的变化对容器内部应用的正常运行不造成影响,重点在于不让容器外部影响到内部。

访问控制技术当沙箱环境中的程序需要去访问一些沙箱外的、但对其运行有必要的资源时,就需要访问控制规则去限制程序的行为。沙箱的访问控制往往由程序监控器与访问控制规则引擎等部分组成。程序监控器监控沙箱内程序的运行,并将监控到的行为提交给访问规则控制引擎。访问规则控制引擎会根据规则,判断是否允许程序使用沙箱外的特定资源。

防躲避技术当恶意软件在运行时检测到自己处于沙箱环境中,会采取一系列措施来规避沙箱的检测和分析,沙箱一般需具备如下防躲避技术防止恶意软件躲避:

对病毒隐藏虚拟机固定字符串的硬件注册表信息

对病毒打开虚拟机或者内核调试器为驱动程序创建的符号链接的动作,返回“不存在”

对病毒隐藏虚拟机中独有的服务进程

对病毒隐藏虚拟机中独有的应用软件信息

拦截系统序列号注册表查询动作,返回某个不会被怀疑的序列号

沙箱技术的应用

在网络安全场景中,沙箱主要被应用于病毒检测及避免软件未知漏洞的蔓延。

传统的病毒检测技术基于病毒特征库扫描,对于未知病毒不具有检测和防御的能力。当一个未知病毒未被添加到病毒特征库时,基于特征库的反病毒产品会将病毒认为是正常文件而不对其进行拦截,导致用户终端被病毒感染入侵。这种被动的防御方式已经不能适应现在种类繁多、日新月异的病毒攻击,而将沙箱技术运用于病毒检测,正是解决了这种问题。沙箱可以将可疑文件或程序隔离在沙箱内部,并诱导可疑文件或程序在沙箱环境中运行。在运行过程中,沙箱将检查每个命令在激活情况下的状况并查找任何可疑行为,例如自我复制、覆盖文件以及其他在病毒中常见的操作。若检测到高风险的动作,则可判定为危险文件或程序。

因此,沙箱能够有效地构筑对未知病毒的安全防线,化被动防御为主动防御,对零日攻击或高级持续性威胁都能起到较好的防护作用。沙箱检测过程如图1-2所示。

此外,网络安全专家也可以通过沙箱技术来分析恶意软件的行为。安全专家可以在沙箱环境中观测恶意软件的行为和进程,分析恶意软件是怎样感染目标主机的。这样,安全专家既可以对这些威胁进行详尽的学习,并将研究成果应用于后续的恶意软件防护之中,也不会让威胁对主机造成实际的影响。

沙箱检测过程

沙箱技术的价值

沙箱技术的价值体现在如下几个方面:

保护主机与操作系统在沙箱环境中运行未知可疑文件,降低了主机被病毒感染入侵的风险。

抵御零日漏洞等未知威胁基于特征检测的传统安全防御手段只能识别已知威胁,且存在应对快速演进的威胁滞后时间较长的弱点。对于未知威胁软件利用零日漏洞,沙箱隔离是有效的保护网络的方法。通过将威胁隔离在沙箱环境中,可以有效阻断威胁在内网的传播与扩散。

与防火墙等其他安全设备进行协同防护沙箱可以和企业网络中部署的其他安全设备,如防火墙、入侵防御、反病毒软件或终端安全软件等进行协同防护。在沙箱识别出未知威胁后,可以通过情报共享给其他的安全设备,有助于在全网阻断相似的威胁。

预防未来的攻击安全研究专家可以对沙箱环境中的新威胁进行研究,在虚拟环境里观察新威胁如何入侵感染主机的方式,并将研究成果应用于未来对威胁的防御之中。

云沙箱与硬件沙箱的区别

根据部署方式的区别,沙箱可以被分为硬件沙箱与云沙箱两种。尽管部署方式不同,这两种沙箱的功能是相同的,都可以起到对未检测程序或未知威胁隔离、测试的作用。

硬件沙箱硬件沙箱即是部署在物理服务器上的沙箱,会在物理设备上检验可疑的文件、URL和代码。硬件沙箱的一个弊端在于,对于规模较大或有大量远程办公人员的企业,这些未连接公司内网的终端就不再受到沙箱的保护。硬件沙箱的另一个弊端在于,由于要部署在物理服务器上,物理设备的购置、管理与维护的成本使得云沙箱比硬件沙箱更为经济。硬件沙箱适用于独立的政企园区,或有数据不出局点要求的客户。

云沙箱云沙箱即是不依托于物理设备,部署在云上的沙箱。当沙箱部署在云上时,可以确保任何云下的、公司内网中的物理设备不会受到沙箱检测的恶意文件或软件的影响。此外,云沙箱对于企业网络内设备的保护不受地理位置的限制,即,即使有远程办公人员,这些人员所使用的设备也可以受到云沙箱的保护。由于云沙箱不需要被部署在物理服务器上,大大节省了购置、管理与维护物理服务器的成本。云沙箱适用于可以数据出局的客户场景,即客户允许文件上送至厂商的云沙箱的场景。

沙箱技术在华为FireHunter6000系列沙箱中的实践

华为FireHunter6000系列沙箱产品是华为推出的新一代高性能APT威胁检测系统,可以精确识别未知恶意文件。通过直接还原网络流量并提取文件或依靠下一代防火墙提取的文件,在虚拟的环境内进行分析,实现对未知恶意文件的检测。

华为FireHunter6000系列沙箱产品凭借独有的ADE高级威胁检测引擎,与下一代防火墙配合,面对高级恶意软件,通过信誉扫描、实时行为分析等本地和云端技术,分析和收集软件的静态及动态行为,对“灰度”流量实时检测、阻断和报告呈现,有效避免未知威胁攻击的迅速扩散和企业核心信息资产损失,特别适用于金融、政府机要部门、能源、高科技等关键用户。

FireHunterADE高级威胁检测引擎的技术原理如图1-3所示:

ADE高级威胁检测引擎技术原理

文件检测经过信誉体系评分、静态检测、启发式检测、虚拟机执行,最终在威胁分析引擎进行对各个检测结果进行关联、联合分析和威胁判定,最终给出威胁检测结果。其中,涉及到沙箱技术的为启发式检测与虚拟机执行。ADE高级威胁检测引擎使用基于Euler+Wine虚拟环境的Windows深度行为分析沙箱,可以动态执行、分析样本,其具有如下特征:

深度解析文件基础信息数据,检测异常格式、异常信息。

动态执行,提取文件关键行为数据,如关键API函数、恶意操作、异常通信信息等。

关键内存监控:及时监控恶意软件运行过程申请、释放的关键动态内存,挖掘恶意IOC、恶意代码信息。

监视文件运行时动态行为数据,包括进程操作、文件操作、网络操作等等。

防逃逸:支持操作系统逃逸、时间逃逸、注册表逃逸、调试逃逸、网络逃逸等各类主流逃逸手段,保证恶意行为正确触发。

细颗粒度监控:支持监控全部Windows API调用,看到的数据足够丰富,提供更优的检测效果。

FireHunter6000系列沙箱通过Windows深度行为分析沙箱技术,使用动态行为人工智能检测,相较人工行为签名提取,病毒检出率显著提升。

参考资源

1FireHunter6000系列产品描述

2FireHunter系统介绍

3《网络安全防御技术与实践》

Your browser does not support the video tag.

相关词条

反病毒

恶意软件

计算机病毒

高级持续性威胁

词条统计

作者:

朱思邈

最近更新:

2024-01-03

浏览次数:

6768

平均得分:

页内导航

沙箱技术的原理

沙箱技术的应用

沙箱技术的价值

云沙箱与硬件沙箱的区别

沙箱技术在华为FireHunter6000系列沙箱中的实践

问卷调研

帮助中心

在线客服

分享链接

意见反馈

分享链接到:

意见反馈

关注我们

关于华为

华为公司简介

关于企业业务

查找中国办事处

新闻中心

市场活动

信任中心

如何购买

售前在线咨询

提交项目需求

查找经销商

向经销商询价

合作伙伴

成为合作伙伴

合作伙伴培训

合作伙伴政策

资源

华为“懂行”体验店

e直播

博客

资料中心

视频中心

电子期刊

成功案例

快速链接

互动社区

华为云

华为智能光伏

华为商城

华为招聘

版权所有 © 华为技术有限公司 1998-2023。 保留一切权利。粤A2-20044005号

隐私保护

|

法律声明

|

网站地图

|

容器技术与沙盒技术在原理上有什么区别? - 知乎

容器技术与沙盒技术在原理上有什么区别? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册虚拟化沙盒(计算机安全)Docker容器虚拟化容器技术与沙盒技术在原理上有什么区别?Container与sandbox在实现原理上的区别是啥?关注者25被浏览25,873关注问题​写回答​邀请回答​好问题 2​1 条评论​分享​4 个回答默认排序Wang Xu​容器基础设施+开源​ 关注不同的名词,有的地方 container 也叫 sandbox,有的时候虚机也叫 sandbox,有的时候虚机也叫 container,有的时候…… 当然,目前看因为 docker 和所谓的 app container 比较火,所以,container 一词更流行一点,但其实呢,这都不是指实现原理上的差异。顺便说,在程序里起变量名的时候,有时候不愿意特指 container 还是 vm,会用一个更中立一点的 sandbox目前在 docker 的网络模型 CNM 里,一个 net ns 貌似叫一个 sandbox,而在 k8s 里,经常把一个 pod ,刚好也对应一个 net ns,叫一个 sandbox,不过这东西,实际上随便你怎么叫,在对应的上下文里不要讲错就行了利益相关:做虚拟化容器的: 如何评价 hyper_? - Wang Xu 的回答编辑于 2016-10-26 15:31​赞同 5​​添加评论​分享​收藏​喜欢收起​NanoLink纳秒科技专注GPU引擎、数字人虚拟化技术、串流、云桌面技术​ 关注一、什么是沙盒——sandbox介绍沙盒也叫沙箱,英文sandbox,顾名思义可以看做是一种容器,里面所做的一切都可以推倒重来,军事上常用沙盒来进行一些战争区域的地形模拟。在计算机领域指一种虚拟技术,它实际上是一种安全体系,且多用于计算机安全技术。其原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中。当某个程序试图发挥作用时,安全软件可以先让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何危害。它也可以让进程之间被逻辑隔离,在沙盒中执行的程序不实际修改或防止被修改系统的数据内容,如注册表、硬盘数据等。通常这种技术被计算机技术人员广泛使用,尤其是计算机反病毒行业,沙盒是一个观察计算机病毒的重要环境。现在沙盒一般都有部分或完整的类似HIPS的程序控制功能,程序的一些高危活动会被禁止,如安装驱动,底层磁盘操作等。目前沙盒主要有两大类,一是采用虚拟技术的传统沙盒,另一个就是采用策略限制的沙盒。传统沙盒的典型代表之一就是sandboxie。看看它是怎么描述自己的,你就知道什么是沙盒了。1.1sandboxie当你运行一个程序时,程序会读取硬盘上的数据,这时数据由硬盘流向程序然后数据经过处理很显示后再由程序写回到硬盘中。  如果你运行一个游戏程序,它会先读取保存在硬盘中的数据记录,然后在你玩游戏的过程中显示出来,最后再写回硬盘以待下次使用。sandboxie的作用就是改变了程序写入数据的地点,不让它写回到硬盘中,而是写到由sandboxie创造的一个虚拟区域。上图展示了sandboxie的关键特性:一个虚拟的存储区域,或者称为沙盒。在读取数据时,数据由硬盘穿过沙盒到达程序,这个不受影响。但是在程序写入数据时,这些数据都被保存在沙盒中而不会写入到硬盘。如果你在沙盒环境下运行一个游戏,sandboxie会从硬盘读取数据并保存,然后游戏读取沙盒中的数据来满足它的需要。但是当游戏想写入数据时,sandboxie会拦截写入并把数据转移到沙盒中。sandboxie会在一个被称为sandbox(沙盒)的隔离的虚拟区域运行程序。程序在此区域内运行不会受到影响,但是不能对系统做出永久的实际改变,程序所做的所有对文件和注册表的改动都仅仅在沙盒中有效。除了sandboxie这种利用虚拟技术的沙盒,还有另外一种采用策略限制的软件也可以称之为沙盒,因为它也具有可以恢复所有程序所生成的文件和注册表键值的功能,称之为ROLLBACK(回滚),而对于修改和删除操作和传统沙盒不同的是采用的是策略限制。典型代表有DefenseWall。1.2、DefenseWallDefenseWall(DW)与sandboxie不同,它没有采用虚拟技术,所以在DW中运行的程序所生成的文件和注册表键值都是实机生成,DW会对它们进行追踪,所有这些生成的东西都受到策略限制。如在DW内的一个程序生成了一个可执行文件,当运行这个可执行文件时,这个文件会被DW追踪到自动加入非信任区,受到策略限制,这样一来确保了该文件不会对你的系统造成损害。而对系统重要文件和注册表键值的修改和删除同样会受到策略限制,禁止非信任程序进行操作。而传统沙盒对修改删除的操作是采用的虚拟化重定向技术,也就是说所有的修改删除操作都是在虚拟区域中完成,真正的文件和注册表是没有被修改或删除的。从技术上说DW更接近于传统HIPS,只是增加了对生成项的追踪限制功能,所以它是一个比较另类的沙盒。1.3、AppVolumesAppVolumes是沙盒的另一种扩展应用,它和sandboixe一样采用虚拟技术,但与之有着截然相反的应用方式,sandboxie的作用域是用户指定的程序,以及它创建的子程序,而AppVolumes的作用域是整个系统,它采用了一种很有意思用法,预先在一个Windows环境中开启沙盒模式,在沙盒中安装各种应用程序,再把重定向生成的数据打包起来,分发到其他Windows系统中,这样达到的效果就是其他Windows系统可以免安装就可以使用预先记录的软件,是一种全新的软件批量部署的技术手段。二、沙盒实现原理本文重点讲解Windows内核级虚拟技术沙盒的实现原理,其他平台的原理也大致相同,只是使用的实现方法有所差异。2.1文件重定向Windows系统提供两种方式来实现文件重定向:方式1: File System Filter Drivers文件系统过滤驱动程序是一个可选的驱动程序,该驱动程序将增加或修改文件系统的行为。它是一个内核模式组件,作为内核执行的一部分运行,可以改变文件系统的I/O操作。设定相关的属性,过滤驱动可以记录日志,监视,修改,甚至可以防止文件操作。典型的应用程序的文件系统过滤器的驱动程序,包括防病毒程序,加密程序和分层存储管理系统方式2: File System Minifilter Drivers由系统提供的Filter manager内核模式驱动程序,符合传统的文件系统过滤驱动模型,并公开了文件系统过滤驱动程序所需的功能。利用这一功能,第三方开发者可以编写微过滤驱动的开发,这是比传统的文件系统过滤驱动程序更简单,从而缩短开发过程而生产更高质量、更强大的驱动程序。本文只着重介绍Minifilter的原理。2.2 Minifilter介绍:由过滤管理器安装Windows中,加载并激活。过滤器管理器将微过滤驱动附加到目标卷的文件系统堆栈。系统中可同时有多个微过滤驱动共存,通过设定加载顺序来现实不同的功能。例如,一个防病毒过滤器的驱动程序应该比一个其他过滤器驱动程序更早加载, 所以它可以检测到病毒和消毒文件。系统为不同的功能类型定义了相应的加载顺序(altitude 属性)。下图显示了一个简化的I/O堆栈与过滤管理器和三个微过滤驱动。过滤管理器还提供了一系列FltXxx功能接口,简化了微过滤驱动程序的代码编写。FltCreateFileFltReadFileFltWriteFile...2.3 微过滤器管理器模型的优点更好地控制过滤波器的加载顺序不像传统的过滤驱动程序,微过滤驱动可以在任何时间加载,并加载到在适当的位置。动态卸载的能力不像传统的过滤驱动程序,无法动态卸载,微过滤驱动可随时卸下,同时如果需要的话,也可以防止自己被卸载。只响应有必要的操作过滤管理器使用一种微过滤驱动可以选择哪些类型的I/O操作回调模型(基于IRP,快速I/O,或fsfilter)过滤。微过滤驱动只需要接收已注册的回调例程I/O请求。可以忽略某些类型的操作,例如分页I/O和缓存I/O。更高效的使用内核堆栈过滤器管理器进行了优化以减少内核堆栈使用量,采用回调模型大大降低了堆栈上的微过滤驱动的影响,同时减少了递归I/O的影响。减少冗余代码过滤器管理器优化了文件名的处理,以及多处理器的支持,这使得锁定更高效,更不容易出错。降低复杂度该过滤器管理器简化了过滤I/O请求,通过提供常用功能的支持例程,例如命名、上下文管理、用户模式和内核模式之间的通信以及文件系统之间的区别。并且自动帮助微过虑驱动完成某些工作,如待它列举和附加到文件系统栈。更好的易扩展性因为微过滤驱动只登记需要处理的I/O操作,对新业务的支持可以添加到过滤管理器而不影响现有微过滤驱动。支持多平台一个微过滤驱动可以运行在任何版本的Windows,支持过滤管理器。更好的支持用户模式应用程序过滤器管理器提供了常用的功能对用户的服务模式和控制微过滤驱动的工作程序。过滤器管理器用户模式库,filterlib.dll,使得用户模式服务或控制程序和微过滤驱动之间的通讯。filterlib.dll还提供了管理工具界面。2.4 文件重定向现实通过调用FltRegisterFilter来注册Minifilter驱动,以下是注册时需要输入的主要参数信息FltRegisterFilter(driverObject, &fltRegistration, &SnapFltFilter);2.4.1 需要处理的管理例程NanosFilterUnload:卸载例程NanosFilterInstanceSetup:新卷到达例程NanosFilterInstanceQueryTeardown:卷拆卸询问例程NanosFilterInstanceTeardownStart:卷开始拆卸例程NanosFilterInstanceTeardownComplete:卷完成拆卸例程NanosFilterGenerateFileName:文件名缓存生成例程NanosNormalizeNameComponentCallback:文件名标准化例程NanosTxNotificationCallback:事务处理提示例程NansNormalizeNameComponentExCallback:文件名标准化附加例程2.4.2 需要处理的IRPIRP_MJ_SHUTDOWN:系统关机命令IRP_MJ_CREATE:文件创建或打开命令,文件的任何操作,都是从这里开始NanosFileCreatePreCallback:文件创建或打开之前将调用此例程,文件重定向的关键代码片断如下FLT_PREOP_CALLBACK_STATUS NanosFileCreatePreCallback(PFLT_CALLBACK_DATA Cbd, PCFLT_RELATED_OBJECTS FltObjects, PVOID *CompletionContext)

{

UNICODE_SIRING NewFileName; //将要重定向的目标文件路径

...

FileObject = Cbd->Iopb->TargetFileObject;

status = IoReplaceFileObjectName(

FileObject ,

NewFileName.Buffer,

NewFileName.Length); //替换文件对象的名称

if (status < 0)

{

FileObject->FileName = NewFileName;

NewFileName.Length = 0;

NewFileName.MaximumLength = 0;

NewFileName.Buffer = 0;

}

Cbd->IoStatus.Status = STATUS_REPARSE; //告诉系统重新分析文件对象的名称,将对新文件名发起一个新的I/O请求。

当原始文件存在时,如果需要修改,则需要把原始文件复制到重定向路径。NanosFileCreatePostCallback:系统操作完成文件创建或打开后回调此例程,其中主要是处理各种文件错误信息,以及正常完成时可创建上下文以供下面文件相关的例程使用。IRP_MJ_NETWORK_QUERY_OPEN:打开网络路径IRP_MJ_SET_INFORMATION:设置文件信息,比如删除文件,重命名文件,更改文件大小等NanosFileSetInformationPreCallback:在实现文件重定向功能时,这里主要处理文件的删除及重命名。删除文件时,如果删除的文件不是重定向创建的或修改过,此时不能删除真实的文件,而是设置一个标识,说明此文件已经被用户删除,在列举文件时,检查到此标识的文件就从列举结果中去除。当删除目录时要组合真实目录和重定向后的目录,只要其中一方有文件存在,就不允许删除目录。当重命名文件时,除了判断原始路径是不否有同名文件,同时还要判断重定向后的目录中是否有同名文件。NanosFileSetInformationPostCallback:当系统实际操作完成后将调用此例程,如果是重命名文件,则需要更新上下文中的数据以匹配新路径。IRP_MJ_DIRECTORY_CONTROL:目录操作命令,列举子目录及文件NanosDirectoryControlPreCallback:列举目录时要组合原始路径和重定向路径中的全部内容。IRP_MJ_QUERY_VOLUME_INFORMATION:卷信息查询命令NanosQueryVolumeInfoPreCallback:在查询卷的可用空间时,要根据重定向的目标目录的剩余空间大小来提供正常的卷空间。IRP_MJ_QUERY_INFORMATION:文件信息查询命令比如文件创建修改时间,文件大小等NanosQueryFileInfoPreCallback:2.4.3 上下文回调例程FLT_CONTEXT_REGISTRATION ContextRegistration[] = {

{ FLT_STREAMHANDLE_CONTEXT/*0x10*/, 0, NanosContextCleanup, sizeof(SNAP_STREAM_HANDLE_CONTEXT), 'rdvS', 0, 0, 0 },

{ FLT_STREAM_CONTEXT/*8*/, 0, NanosContextCleanup, sizeof(SNAP_STREAM_CONTEXT), 'rdvS', 0, 0, 0 },

{ FLT_VOLUME_CONTEXT/*1*/, 0, NanosContextCleanup, sizeof(SNAP_VOLUME_CONTEXT), 'rdvS', 0, 0, 0 },

{ FLT_INSTANCE_CONTEXT/*2*/, 0, NanosContextCleanup, 4, 'rdvS', 0, 0, 0 },

{ FLT_CONTEXT_END/*0xFFFF*/, 0, 0, 0, 0, 0, 0, 0 },

};FLT_STREAMHANDLE_CONTEXT流句柄上下文,也就是大家常见的FO(File Object)的上下文,一个文件可以对应多个FO,属一对多的关系,每个FO对就指定的权限等。在文件重定向的实现中,可以用此上下文来保存真实文件和重定向文件的句柄。FLT_STREAM_CONTEXT流上下文,也就是大家常用的FCB(File Control Block)的上下文, 文件和FCB是一对一的关系。在此上下文中我们可以保存原始路径及重定向的路径信息。FLT_VOLUME_CONTEXT卷上下文,卷就是大家通常看的C、D、E盘以及网络路径,一般情况下一个卷对应一个微过滤驱动实例对象, 在实际应用中经常用Instance Context来代替Volume Context。FLT_INSTANCE_CONTEXT实例上下文,也就是微过滤驱动在文件系统的设备堆栈上创建的一个过滤器实例。三、注册表重定向从WindowsXP开始,系统就提供了注册表过滤驱动的框架,从Vista开始此框架功能更加强大,足以完成注册表重定向的功能。3.1 注册过滤驱动CmRegisterCallbackEx注册表过滤驱动程序是内核模式驱动程序,用来过滤注册表调用,如反病毒软件的驱动组件。通过注册CmRegisterCallbackEx允许注册表过滤驱动程序来过滤任何线程调用注册表的功能。通过回调例程接收每个注册表操作通知在系统操作之前。reg_ xxx_key_information数据结构包含有关每个注册表操作信息。回调例程也能够阻止注册表操作。当系统完成操作后,回调例程也会收到通知。系统中可注册多个滤驱动程序,按照注册时的输入的加载顺序,每个驱动程序都可以过滤注册表操作。驱动程序可以完全处理注册表操作(或将请求的操作重定向到一个不同的操作),并可以防止系统操作。驱动程序可以将上下文信息分配给单独的注册表操作或键值对象。驱动可以修改注册表操作的输出参数和返回值。reg_ xxx_key_information数据结构为每个不同的操作提供额外的成员。3.2 需要处理的回调例程regRoutineTable[RegNtPreQueryValueKey] = NanosRegNtPreQueryValueKeyCallback;

regRoutineTable[RegNtPreEnumerateValueKey] = NanosRegNtPreEnumerateValueKeyCallback;

regRoutineTable[RegNtPreQueryMultipleValueKey] = NanosRegNtPreQueryMultipleValueKeyCallback;

regRoutineTable[RegNtPreDeleteValueKey] = NanosRegNtPreDeleteValueKeyCallback;

regRoutineTable[RegNtPreDeleteKey] = NanosRegNtPreDeleteKeyCallback;

regRoutineTable[RegNtPreRenameKey] = NanosRegNtPreRenameKeyCallback;

regRoutineTable[RegNtPostRenameKey] = NanosRegNtPostRenameKeyCallback;

regRoutineTable[RegNtPreEnumerateKey] = NanosRegNtPreEnumerateKeyCallback;

regRoutineTable[RegNtPreQueryKey] = NanosRegNtPreQueryKeyCallback;

regRoutineTable[RegNtPostQueryKey] = NanosRegNtPostQueryKeyCallback;

regRoutineTable[RegNtPreSetValueKey] = NanosRegNtPreSetValueKeyCallback;

regRoutineTable[RegNtPreCreateKeyEx] = NanosRegNtPreCreateKeyExCallback;

regRoutineTable[RegNtPreOpenKeyEx] = NanosRegNtPreOpenKeyExCallback;

regRoutineTable[RegNtCallbackObjectContextCleanup] = NanosRegNtCallbackObjectContextCleanupCallback;

regRoutineTable[RegNtPreQueryKeySecurity] = NanosRegNtPreQueryKeySecurityCallback;

regRoutineTable[RegNtPreSetKeySecurity] = NanosRegNtPreSetKeySecurityCallback;如果回调例程返回STATUS_SUCCESS,配置管理器会继续处理注册表操作。如果回调例程返回STATUS_CALLBACK_BYPASS,配置管理器停止处理注册表操作并返回到调用线程STATUS_SUCCESS。如果回调例程返回一个状态值,NT_SUCCESS(status)为FALSE(除了STATUS_CALLBACK_BYPASS),配置管理器停止处理注册表操作并返回指定的值返回到调用线程。RegNtPreQueryValueKey:查询Value前回调RegNtPreEnumerateValueKey:列举Value前回调——列举Value时需要组合原始路径和重定向路径的内容。RegNtPreQueryMultipleValueKey:列举多个Value前回调列举Value时需要组合原始路径和重定向路径的内容。RegNtPreDeleteValueKey:删除Value前回调删除Value时,如果是操作没有重定向的Value,则不能真正执行删除操作,而是设置一个标记,表示已经删除RegNtPreDeleteKey:删除Key前回调删除Key时,如果是操作没有重定向的Key,则不能真正执行删除操作,而是设置一个标记,表示已经删除。RegNtPreRenameKey:重命名Key前回调RegNtPostRenameKey:重命名Key后回调重命名后在此回调里更新上下文信息。RegNtPreEnumerateKey:列举Key前回调列举Key时需要组合原始路径和重定向路径的内容。RegNtPreQueryKey:查询Key前回调RegNtPostQueryKey:查询Key后回调系统实际查询过后,需要结合原始Key的数据和重定向后Key的数据来修正返回结果,比如获取KeyCachedInformation, KeyFullInformation类型的数据时。RegNtPreSetValueKey:修改Value前回调在修改Value时,需要把原始的Key的内容先得到重定向的Key中,再修改指定的Value的内容。RegNtPreCreateKeyEx:创建Key前回调typedef struct _REG_CREATE_KEY_INFORMATION_V1 {

PUNICODE_STRING CompleteName;

PVOID RootObject;

PVOID ObjectType;

ULONG Options;

PUNICODE_STRING Class;

PVOID SecurityDescriptor;

PVOID SecurityQualityOfService;

ACCESS_MASK DesiredAccess;

ACCESS_MASK GrantedAccess;

PULONG Disposition;

PVOID *ResultObject;

PVOID CallContext;

PVOID RootObjectContext;

PVOID Transaction;

ULONG_PTR Version;

PUNICODE_STRING RemainingName;

ULONG Wow64Flags;

ULONG Attributes;

KPROCESSOR_MODE CheckAccessMode;

} REG_CREATE_KEY_INFORMATION_V1;创建Key时首先调用到此例程,重定向时就创建到自定义的位置,并把Key对象保存到ResultObject中,然后返回STATUS_CALLBACK_BYPASS。调用CmSetCallbackObjectContext来设置Key对象的上下文。RegNtPreOpenKeyEx:打开Key前回调RegNtCallbackObjectContextCleanup:上下文清理回调RegNtPreQueryKeySecurity:查询Key安全信息前回调RegNtPreSetKeySecurity:修改Key安全信息前回调更完整的重定向也包括重定向安全信息的修改,在此接口中处理。根据沙盒的特性,软件沙盒需要实现以下例主要逻辑新建、修改及删除操作都是在特定的虚拟区域生效,原始数据不受任何影响。数据的呈现是原始数据叠加上重定向后的数据的合集。重命名、删除等操作需要考虑对原始数据和重定向数据的影响。可以任意撤销重定向的修改内容。文件操作和注册表操作的逻辑是一致四、基于Windows沙箱的应用场景之一 – App Volume(应用分层)把任何正常安装的Windows应用打包成一个便携的虚拟磁盘。此后不再需要进一步的安装过程就可以将应用发布成百上千次到任何目标。应用更新、与其他应用组合、回滚操作以及弃用都一样的简便。应用分层最好的便捷的企业应用生命周期管理方式。App Volume是沙盒的另一种扩展应用,它和sandboxie一样采用虚拟技术,但与之有着截然相反的应用方式,sandboxie的作用域是用户指定的程序,以及它创建的子程序,而AppVolumes的作用域是整个系统,它采用了一种很有意思用法,预先在一个Windows环境中开启沙盒模式,在沙盒中安装各种应用程序,再把重定向生成的数据打包起来,分发到其他Windows系统中,这样达到的效果就是其他Windows系统可以免安装就可以使用预先记录的软件,是一种全新的软件分发的技术手段,并且可以对用户数据采用同样的方式来采用数据漫游,系统、应用、用户数据分层处理,所以也叫做应用分层技术。应用分成的技术在云桌面领域的用的场景相对的,除了批量软件分发之外,还有就是在还原模式虚拟环境中,怎么保留用户一些特殊文件或者注册表配置。 比如用户保存浏览器标签。打印机配置等市场上最好的应用分层工具有哪些? 应用分层市场有三款主要的产品:VMware App Volume、Liquidware Labs FlexApp以及Citrix提供的产品。Citrix正在使用今年早些时候收购的UniDesk的技术替代现有的AppDisk产品。App Volume核心其就是在于前文所介绍的 文件重定向和注册表重定向技术对沙盒感兴趣、有需要的朋友,欢迎交流发布于 2023-09-01 10:51​赞同 4​​1 条评论​分享​收藏​喜欢收起​​

解读Sandbox:它不是一个游戏 - 知乎

解读Sandbox:它不是一个游戏 - 知乎切换模式写文章登录/注册解读Sandbox:它不是一个游戏泰昇宇链点击蓝字 关注我们 2022 新年快乐 引言最近一段时间做咨询,被问的最多的一个问题就是“Sandbox怎么玩?”如果这个问题能够回答,那么前提条件是Sandbox是一个游戏。那Sandbox是不是个游戏呢?还真不完全是。那Sandbox是什么呢?今天我们就来聊一聊。1什么是Sandbox?在说Sandbox是什么之前,我们的先说一款已经很流行的游戏——《我的世界》《我的世界》是一款3D第一人称沙盒游戏。玩家可以在三维空间中自由地创造和破坏不同种类的方块,用想象力建立并探索一个专属于玩家的世界。游戏画风独特,主打积木马赛克风。Sandbox沿袭了《我的世界》的积木马赛克风格,并将游戏元素的设计交给艺术家,同时将游戏的开发交给开发者。这样,艺术家可以将设计出的游戏元素包装成NFT卖给开发者,而开发者则推广自己开发的游戏项目吸引游戏玩家加入到Sandbox中。所以说,Sandbox不是一个游戏,而是一个平台。那么,这个平台包括什么呢?2Sandbox平台Sandbox平台主要包括两个重要的工具:模型编辑器和游戏制作器。 模型编辑器 在聊模型编辑器之前,我们先了解一下模型是什么?模型就是类似上图这种用像素方块堆叠起来游戏元素。而模型编辑器就是创建这种游戏元素的工具。Sandbox提供的模型编辑工具叫VoxEdit。使用这个工具,模型创作者可以创建飞机模型、游戏人物模型,也可以用这个工具创建其它游戏相关的组件。那么,创作完游戏模型有什么用呢?首先,如果模型创作者也是游戏开发者的话,他就可以把模型用到游戏里。或者,如果模型创作者不开发游戏的话,那么他就可以把模型挂到NFT交易平台。游戏开发者,则可以从NFT交易平台购买模型,并使用到游戏中。而游戏的开发是需要采用下面介绍的游戏制作器。 游戏制作器 ​这个游戏制作器叫GameMaker。在游戏制作器中,开发者不但可以设计游戏中看到的场景,也可以控制虚拟人物的属性,还可以编辑敌我双方如何打斗。游戏的玩法由游戏开发者设计,游戏的价值在于游戏开发者的创意和游戏中的价值体系。在游戏制作器中,玩家还可以免费体验游戏开发者开发的游戏雏形。那么游戏开发完了怎么发布呢?Sandbox要求,开发的游戏需要绑定到土地上。3Sandbox的土地土地是Sandbox玩家最关心的概念。要想了解Sandbox的土地,需要先看一下这张由Sandbox定义的地图:这是一张“横向408个格子,纵向也是408格子”的地图,每个格子叫一个地块(或者叫1x1的地块),算起来一共166464(408x408=166464)个地块。Sandbox公司为了维持运营,制定了一个规则,游戏需要绑定到地块上才能发布。那么游戏地块的价值是如何定义的呢?这就要看土地的位置了。在Sandbox上,已经有很多游戏开发者制作了游戏,并购买了地块。游戏是需要运营的,运营较好的游戏会吸引更多的玩家。因为Sandbox会开放邻居地块的穿梭功能,所以好游戏周围的地块会更有价值。上图就是当虚拟形象走到地块边缘时候,弹出的“可以穿梭”的提示。这个功能的开放就给地块之间的引流带来了可能。4Sandbox还有哪些概念? Sandbox ALPHA Sandbox有许多游戏开发者,而Sandbox本身也是一个游戏开发者。Sandbox开发的官方游戏叫Sandbox Alpha。第一季的Alpha已于2011年底结束,大家正在等待Alpha的第二季开启。无论是第一季和第二季,要想进入这个官方游戏,需要使用通行证(Alpha Pass)。这个通行证当然不是免费的,在价格最高的时候,一度高达5445美元左右。当然,Sandbox还提供了几个不需要通行证就可以体验的Alpha的游戏,大家可以在第二季开始以后体验一下。 市场 Sandbox的市场是Sandbox完成经济闭环的重要部分。无论是模型创作者做的模型,还是Sandbox官方售卖或者是游戏创作者专卖的土地,都要在市场里完成交易。Sandbox的交易主要在OpenSea这个平台上完成。OpenSea的内容较多,我们会准备一篇文章专门跟大家聊聊OpenSea。5总结现在我们回到最开始,回答“Sandbox怎么玩?”这个问题。作为一个玩家,要想玩Sandbox,就需要关注Sandbox中的游戏项目,每个项目其实就是一个游戏,游戏是否好玩,是否能够边玩边赚钱(Play to Earn)完全是看游戏项目的规则。关于 泰昇宇链 泰昇宇链会一直关注Web3.0的发展,并通过剖析这个全新的领域中的项目向大家讲解Web3.0相关的新理念、新技术,为大家提供一手的白话技术解读,欢迎大家持续关注!发布于 2022-01-09 11:52游戏开发者游戏行业《我的世界》中国版​赞同 8​​添加评论​分享​喜欢​收藏​申请

沙盒游戏_百度百科

_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心沙盒游戏播报讨论上传视频一种游戏类型收藏查看我的收藏0有用+10沙盒游戏(Sandbox Games)是由沙盘游戏演变而来,自成一种游戏类型,由一个或多个地图区域构成,往往包含多种游戏要素,包括角色扮演,动作、射击、驾驶等等。能够改变或影响甚至创造世界是沙盒游戏的特点。创造是该类型游戏的核心玩法,利用游戏中提供的物件制造出玩家自己独创的东西。中文名沙盒游戏外文名Sandbox Games主要特征能够改变或影响甚至创造游戏中的世界核心思想创造性沙盒代表作Minecraft(我的世界)目录1游戏简介2游戏举例3游戏区别游戏简介播报编辑沙盒游戏(Sandbox Games)是由沙盘游戏慢慢演变而来。严格意义上来说,只有模拟类游戏才是纯粹的沙盒游戏,诸如过山车大亨、模拟城市等,而文明、钢铁雄心等则是沙盘游戏。但广义上来说,把玩家化身入游戏中以自身的力量改变世界的也可以做为沙盒游戏。沙盒游戏大多无主线剧情,普遍以玩家生存为第一目标,探索和建设为第二目标,最后改变世界达成某项成就为最终目标。游戏举例播报编辑比较有影响力的沙盒游戏有以下:我的世界/Minecraft(2009年Mojang AB公司出品游戏)Gmod/Garry's mod(FacePunch Studio开发,Valve Software发行)泰拉瑞亚/Terraria (Relogic出品)饥荒/Don't Starve(Klei Entertainment出品)环世界(新译名:边缘世界)/Rimworld(Ludeon Studios出品)星球探险家/Planet Explorer(Pathea Games出品)cube魔方世界/cubeworld(Picroma出品)宝藏世界/Trove(Trion Worlds出品)乐高无限/Lego is infinite(腾讯出品)勇者斗恶龙:建造者2(SE光荣特库摩出品)打造世界/Craft The World (Black Maple Games出品)沙盒游戏(4张)游戏区别播报编辑与开放世界游戏的区别改变,影响或创造游戏中的世界是该类型游戏的核心玩法,所以只有能够改变或影响甚至创造世界的游戏才是沙盒游戏。而高自由度,随机突发事件,地图巨大,交互性强等特性,不单单只有沙盒游戏可以实现,开放世界类型的游戏也可以实现,所以这两个游戏类型很容易让人混淆。不过这两者也是可以共存的,诸如我的世界就是一个开放世界沙盒游戏。而诸如GTA、魔法门、重装机兵等游戏,就是开放世界游戏,而并非沙盒游戏(因为玩家并不能改变游戏中的世界)。与生存游戏的区别虽然沙盒游戏大部分是生存游戏,但是并非生存游戏都是沙盒游戏。简单地说,如果你不但能够砍树,还能种树,而且树会长大,你种树的区域又能随意变换,这就是沙盒生存游戏。如果你只能够砍树不能够种树,而且东西必须放在指定的几个地方的话,那这就只是生存游戏而非沙盒生存游戏。与沙盘游戏的区别战略沙盘游戏,如文明、钢铁雄心、王国风云、三国志等,这些都是在固定的地图上进行发展战斗,而并不能改变地图,或者只能在特定区域进行指定的预设变化。不过从概念上来说,这些游戏的编辑器模式倒算得上是沙盒游戏(不严谨)。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

浅析 JavaScript 沙箱机制 - 知乎

浅析 JavaScript 沙箱机制 - 知乎首发于ELab团队切换模式写文章登录/注册浅析 JavaScript 沙箱机制Elab字节跳动大力教育前端团队,负责教育全线产品前端开发工作。说到沙箱,我们的脑海中可能会条件反射地联想到上面这个画面并瞬间变得兴致满满,不过很可惜本文并不涉及“我的世界”(老封面党了),下文将逐步介绍“浏览器世界”的沙箱。什么是沙箱在计算机安全中,沙箱(Sandbox)是一种用于隔离正在运行程序的安全机制,通常用于执行未经测试或不受信任的程序或代码,它会为待执行的程序创建一个独立的执行环境,内部程序的执行不会影响到外部程序的运行。例如,下列场景就涉及了沙箱这一抽象的概念:我们开发的页面程序运行在浏览器中,程序只能修改浏览器允许我们修改的那部分接口,我们无法通过这段脚本影响到浏览器之外的状态,在这个场景下浏览器本身就是一个沙箱。浏览器中每个标签页运行一个独立的网页,每个标签页之间互不影响,这个标签页就是一个沙箱。......沙箱有什么应用场景上述介绍了一些较为宏观的沙箱场景,其实在日常的开发中也存在很多的场景需要应用这样一个机制:执行 JSONP 请求回来的字符串时或引入不知名第三方 JS 库时,可能需要创造一个沙箱来执行这些代码。Vue 模板表达式的计算是运行在一个沙盒之中的,在模板字符串中的表达式只能获取部分全局对象,这一点官方文档有提到,详情可参阅源码。在线代码编辑器,如 CodeSanbox 等在线代码编辑器在执行脚本时都会将程序放置在一个沙箱中,防止程序访问/影响主页面。许多应用程序提供了插件(Plugin)机制,开发者可以书写自己的插件程序实现某些自定义功能。开发过插件的同学应该知道开发插件时会有很多限制条件,这些应用程序在运行插件时需要遵循宿主程序制定的运行规则,插件的运行环境和规则就是一个沙箱。例如下图是 Figma 插件的运行机制:总而言之,只要遇到不可信的第三方代码,我们就可以使用沙箱将代码进行隔离,从而保障外部程序的稳定运行。如果不做任何处理地执行不可信代码,在前端中最直观的副作用/危害就是污染、篡改全局 window 状态,影响主页面功能甚至被 XSS 攻击。// 子应用代码

window.location.href = 'www.diaoyu.com'

Object.prototype.toString = () => {

console.log('You are a fool :)')

}

document.querySelectorAll('div').forEach(node => node.classList.add('hhh'))

sendRequest(document.cookie)

...

如何实现一个 JS 沙箱要实现一个沙箱,其实就是去制定一套程序执行机制,在这套机制的作用下沙箱内部程序的运行不会影响到外部程序的运行。 最简陋的沙箱 要实现这样一个效果,最直接的想法就是程序中访问的所有变量均来自可靠或自主实现的上下文环境而不会从全局的执行环境中取值, 那么要实现变量的访问均来自一个可靠上下文环境,我们需要为待执行程序构造一个作用域:// 执行上下文对象

const ctx =

func: variable => {

console.log(variable)

},

foo: 'foo'

}

// 最简陋的沙箱

function poorestSandbox(code, ctx) {

eval(code) // 为执行程序构造了一个函数作用域

}

// 待执行程序

const code = `

ctx.foo = 'bar'

ctx.func(ctx.foo)

`

poorestSandbox(code, ctx) // bar

这样的一个沙箱要求源程序在获取任意变量时都要加上执行上下文对象的前缀,这显然是非常不合理的,因为我们没有办法控制第三方的行为,是否有办法去掉这个前缀呢? 非常简陋的沙箱(With) 使用 with 声明可以帮我们去掉这个前缀,with 会在作用域链的顶端添加一个新的作用域,该作用域的变量对象会加入 with 传入的对象,因此相较于外部环境其内部的代码在查找变量时会优先在该对象上进行查找。// 执行上下文对象

const ctx = {

func: variable => {

console.log(variable)

},

foo: 'foo'

}

// 非常简陋的沙箱

function veryPoorSandbox(code, ctx) {

with(ctx) { // Add with

eval(code)

}

}

// 待执行程序

const code = `

foo = 'bar'

func(foo)

`

veryPoorSandbox(code, ctx) // bar

这样一来就实现了执行程序中的变量在沙箱提供的上下文环境中查找先于外部执行环境的效果。问题来了,在提供的上下文对象中没有找到某个变量时,代码仍会沿着作用域链一层一层向上查找,这样的一个沙箱仍然无法控制内部代码的执行。我们希望沙箱中的代码只在手动提供的上下文对象中查找变量,如果上下文对象中不存在该变量则直接报错或返回 undefined。 没那么简陋的沙箱(With + Proxy) 为了解决上述抛出的问题,我们借助 ES2015 的一个新特性—— Proxy,Proxy 可以代理一个对象,从而拦截并定义对象的基本操作。Proxy 中的 get 和 set 方法只能拦截已存在于代理对象中的属性,对于代理对象中不存在的属性这两个钩子是无感知的。因此这里我们使用 Proxy.has() 来拦截 with 代码块中的任意变量的访问,并设置一个白名单,在白名单内的变量可以正常走作用域链的访问方式,不在白名单内的变量会继续判断是否存在沙箱自行维护的上下文对象中,存在则正常访问,不存在则直接报错。由于 has 会拦截 with 代码块中所有的变量访问,而我们只是想监控被执行代码块中的程序,因此还需要转换一下手动执行代码的形式 :// 构造一个 with 来包裹需要执行的代码,返回 with 代码块的一个函数实例

function withedYourCode(code) {

code = 'with(globalObj) {' + code + '}'

return new Function('globalObj', code)

}

// 可访问全局作用域的白名单列表

const access_white_list = ['Math', 'Date']

// 待执行程序

const code = `

Math.random()

location.href = 'xxx'

func(foo)

`

// 执行上下文对象

const ctx = {

func: variable => {

console.log(variable)

},

foo: 'foo'

}

// 执行上下文对象的代理对象

const ctxProxy = new Proxy(ctx, {

has: (target, prop) => { // has 可以拦截 with 代码块中任意属性的访问

if (access_white_list.includes(prop)) { // 在可访问的白名单内,可继续向上查找

return target.hasOwnProperty(prop)

}

if (!target.hasOwnProperty(prop)) {

throw new Error(`Invalid expression - ${prop}! You can not do that!`)

}

return true

}

})

// 没那么简陋的沙箱

function littlePoorSandbox(code, ctx) {

withedYourCode(code).call(ctx, ctx) // 将 this 指向手动构造的全局代理对象

}

littlePoorSandbox(code, ctxProxy)

// Uncaught Error: Invalid expression - location! You can not do that!

到这一步,其实很多较为简单的场景就可以覆盖了(eg: Vue 的模板字符串),那如果想要实现 CodeSanbox 这样的 web 编辑器呢?在这样的编辑器中我们可以任意使用诸如 document、location 等全局变量且不会影响主页面。从而又衍生出另一个问题——如何让子程序使用所有全局对象的同时不影响外部的全局状态呢? 天然的优质沙箱(iframe) 听到上面这个问题 iframe 直呼内行,iframe 标签可以创造一个独立的浏览器原生级别的运行环境,这个环境由浏览器实现了与主环境的隔离。在 iframe 中运行的脚本程序访问到的全局对象均是当前 iframe 执行上下文提供的,不会影响其父页面的主体功能,因此使用 iframe 来实现一个沙箱是目前最方便、简单、安全的方法。试想一个这样的场景:一个页面中有多个沙箱窗口,其中有一个沙箱需要与主页面共享几个全局状态(eg: 点击浏览器回退按钮时子应用也会跟随着回到上一级),另一个沙箱需要与主页面共享另外一些全局状态(eg: 共享 cookie 登录态)。虽然浏览器为主页面和 iframe 之间提供了 postMessage 等方式进行通信,但单单使用 iframe 来实现这个场景是比较困难且不易维护的。 应该能用的沙箱(With + Proxy + iframe) 为了实现上述场景,我们把上述方法缝合一下即可:利用 iframe 对全局对象的天然隔离性,将 iframe.contentWindow 取出作为当前沙箱执行的全局对象将上述沙箱全局对象作为 with 的参数限制内部执行程序的访问,同时使用 Proxy 监听程序内部的访问。维护一个共享状态列表,列出需要与外部共享的全局状态,在 Proxy 内部实现访问控制。// 沙箱全局代理对象类

class SandboxGlobalProxy {

constructor(sharedState) {

// 创建一个 iframe 对象,取出其中的原生浏览器全局对象作为沙箱的全局对象

const iframe = document.createElement('iframe', {url: 'about:blank'})

document.body.appendChild(iframe)

const sandboxGlobal = iframe.contentWindow // 沙箱运行时的全局对象

return new Proxy(sandboxGlobal, {

has: (target, prop) => { // has 可以拦截 with 代码块中任意属性的访问

if (sharedState.includes(prop)) { // 如果属性存在于共享的全局状态中,则让其沿着原型链在外层查找

return false

}

if (!target.hasOwnProperty(prop)) {

throw new Error(`Invalid expression - ${prop}! You can not do that!`)

}

return true

}

})

}

}

function maybeAvailableSandbox(code, ctx) {

withedYourCode(code).call(ctx, ctx)

}

const code_1 = `

console.log(history == window.history) // false

window.abc = 'sandbox'

Object.prototype.toString = () => {

console.log('Traped!')

}

console.log(window.abc) // sandbox

`

const sharedGlobal_1 = ['history'] // 希望与外部执行环境共享的全局对象

const globalProxy_1 = new SandboxGlobalProxy(sharedGlobal_1)

maybeAvailableSandbox(code_1, globalProxy_1)

window.abc // undefined

Object.prototype.toString() // [object Object] 并没有打印 Traped

从实例代码的结果可以看到借用 iframe 天然的环境隔离优势和 with + Proxy 强大的控制力,我们实现了沙箱内全局对象和外层的全局对象的隔离,并实现了共享部分全局属性。沙箱逃逸(Sandbox Escape)沙箱于作者而言是一种安全策略,但于使用者而言可能是一种束缚。脑洞大开的开发者们尝试用各种方式摆脱这种束缚,也称之为沙箱逃逸。因此一个沙箱程序最大的挑战就是如何检测并禁止这些预期之外的程序执行。上面实现的沙箱似乎已经满足了我们的功能,大功告成了吗?其实不然,下列操作均会对沙箱之外的环境造成影响,实现沙箱逃逸:访问沙箱执行上下文中某个对象内部属性时, Proxy 无法捕获到这个属性的访问操作。例如我们可以直接在沙箱的执行上下文中通过 window.parent 拿到外层的全局对象。// 访问沙箱对象中对象的属性时,省略了上文中的部分代码

const ctx = {

window: {

parent: {...},

...

}

}

const code = `

window.parent.abc = 'xxx'

`

window.abc // xxx

通过访问原型链实现逃逸,JS 可以直接声明一个字面量,沿着该字面量的原型链向上查找原型对象即可访问到外层的全局对象,这种行为亦是无法感知的。const code = `

({}).constructor.prototype.toString = () => {

console.log('Escape!')

}

`

({}).toString() // Escape! 预期是 [object Object]

“无瑕疵”的沙箱(Customize Interpreter) 通过上述的种种方式来实现一个沙箱或多或少存在一些缺陷,那是否存在一个趋于完备的沙箱呢?其实有不少开源库已经在做这样一件事情,也就是分析源程序结构从而手动控制每一条语句的执行逻辑,通过这样一种方式无论是指定程序运行时的上下文环境还是捕获妄想逃脱沙箱控制的操作都是在掌控范围内的。实现这样一个沙箱本质上就是实现一个自定义的解释器。function almostPerfectSandbox(code, ctx, illegalOperations) {

return myInterpreter(code, ctx, illegalOperations) // 自定义解释器

}

总结本文主要介绍了沙箱的基本概念、应用场景以及引导各位思考如何去实现一个 JavaScript 沙箱。沙箱的实现方式并不是一成不变的,应当结合具体的场景分析其需要达成的目标。除此之外,沙箱逃逸的防范同样是一件任重而道远的事,因为很难在构建的初期就覆盖所有的执行 case。没有一个沙箱的组装是一蹴而就的,就像“我的世界”一样。参考Writing a JavaScript framework - Sandboxed Code Evaluation说说 JS 中的沙箱发布于 2021-11-01 11:49安全沙箱JavaScript原生 JavaScript​赞同 52​​2 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录ELa

Windows 沙盒 - Windows Security | Microsoft Learn

Windows 沙盒 - Windows Security | Microsoft Learn

跳转至主内容

此浏览器不再受支持。

请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。

下载 Microsoft Edge

有关 Internet Explorer 和 Microsoft Edge 的详细信息

目录

退出焦点模式

使用英语阅读

保存

目录

使用英语阅读

保存

打印

Twitter

LinkedIn

Facebook

电子邮件

目录

Windows 沙盒

项目

09/23/2023

4 个参与者

适用于:

✅ Windows 11, ✅ Windows 10

反馈

本文内容

Windows 沙盒提供了轻型桌面环境,可以安全地在隔离状态下运行应用程序。 安装在 Windows 沙盒环境下的软件保持“沙盒”状态,并且与主机分开运行。

沙盒是临时的。 关闭后,系统将删除所有软件和文件以及状态。 每次打开应用程序时,都会获得沙盒的全新实例。 但请注意,自 Windows 11 版本 22H2 起,数据将通过从虚拟化环境内启动的重启而持久保存,这对于安装需要操作系统重新启动的应用程序非常有用。

安装在主机上的软件和应用程序不会直接出现在沙盒中。 如果需要在 Windows 沙盒环境中运行特定的应用程序,则相应的应用程序必须就是安装在沙盒环境中才行。

Windows 沙盒具有以下属性:

Windows 的部件:此功能所需的一切内容都包含在 Windows 10 专业版和企业版中。 无需下载 VHD。

原生:每次 Windows 沙盒运行时,都像全新安装的 Windows 一样干净。

可处置:设备上不会保留任何内容。 当用户关闭应用程序时,系统会丢弃所有内容。

安全:使用基于硬件的虚拟化进行内核隔离。 它依赖 Microsoft 虚拟机监控程序运行单独的内核,可将 Windows 沙盒与主机隔离。

高效:采用集成的内核计划程序、智能内存管理和虚拟 GPU。

重要提示

Windows 沙盒默认启用网络连接。 可以使用沙盒配置文件禁用 Windows 沙盒配置文件。

Windows 版本和许可要求

下表列出了支持Windows 沙盒的 Windows 版本:

Windows 专业版

Windows 企业版

Windows 专业教育版/SE

Windows 教育版

Windows 沙盒许可证权利由以下许可证授予:

Windows 专业版/专业教育版/SE

Windows 企业版 E3

Windows 企业版 E5

Windows 教育版 A3

Windows 教育版 A5

有关 Windows 许可的详细信息,请参阅 Windows 许可概述。

必备条件

适用于 Windows 11 版本 22H2 及更高版本的 ARM64) 或 AMD64 体系结构的 ARM64 (

BIOS 中启用的虚拟化功能

至少 4GB 内存(建议使用 8GB)

至少 1GB 可用硬盘空间(建议使用固态硬盘)

建议使用超线程 (至少两个 CPU 内核)

注意

Windows 家庭版当前不支持Windows 沙盒

安装

确保电脑使用的是 Windows 10 专业版或企业版,内部版本号为 18305 或 Windows 11。

在电脑上启用虚拟化功能。

如果你使用的是实体电脑,请确保在 BIOS 中启用了虚拟化功能。

如果使用虚拟机,则需要启用嵌套虚拟化。 如果需要,还可以更新 VM 以支持嵌套虚拟化。 在主机上运行以下 PowerShell 命令:

Set-VMProcessor -VMName -ExposeVirtualizationExtensions $true

Update-VMVersion -VMName

使用任务栏上的搜索栏,并键入打开或关闭 Windows 功能来访问 Windows 可选功能工具。 选择“Windows 沙盒”,然后点击“确定”。 如果系统提示你重启电脑,请执行此操作。

如果没有“Windows 沙盒”选项,则表示你的电脑不满足运行 Windows 沙盒的要求。 如果你认为此分析不正确,请查看先决条件列表以及步骤 1 和步骤 2。

注意

若要使用 PowerShell 启用沙盒,请以管理员身份打开 PowerShell 并运行以下命令:

Enable-WindowsOptionalFeature -FeatureName "Containers-DisposableClientVM" -All -Online

在“开始”菜单上找到并选择“Windows 沙盒”以首次运行。

注意

Windows 沙盒不遵循主机系统的鼠标设置,因此,如果主机系统设置为使用左手鼠标,则必须在Windows 沙盒启动时在Windows 沙盒中手动应用这些设置。 或者,可以使用沙盒配置文件运行登录命令来交换鼠标设置。 有关示例,请参阅 示例 3。

用途

从主机复制一份可执行文件(以及运行应用程序所需的任何其他文件),并将它们粘贴进“Windows 沙盒”窗口中。

在沙盒内运行可执行文件或安装程序。

完成实验后,关闭沙盒。 系统将会弹出一个对话框,提示你将放弃并永久删除所有沙盒内容。 选择“确定”。

确诊主机没有显示任何你在 Windows 沙盒中做出的修改。

反馈

此页面是否有帮助?

提供产品反馈

反馈

Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see: https://aka.ms/ContentUserFeedback.

提交和查看相关反馈

此产品

此页面

查看所有页面反馈

其他资源

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024

其他资源

本文内容

加州消费者隐私法案 (CCPA) 禁用图标

你的隐私选择

主题

高对比度

早期版本

博客

参与

隐私

使用条款

商标

© Microsoft 2024