对沙箱最初的概念就是:sandboxie,它是一个轻量级虚拟机,软件的操作都不会影响真正的系统,包括文件、注册表等等资源,在里面可以放肆地想干嘛干嘛。
沙箱的概念非常杂,某些分析平台后端也叫沙箱,主要关注的行为获取,一句话概括的话就是:沙箱内万物基于重定向。
重定向,顾名思义,就是重新指定方向,也就是说沙箱能够做到让沙箱内软件操作的文件、注册表等路径重定向到其他位置(沙箱指定位置),这样软件本来想操作的资源就不会被访问或者操作,保证资源的安全性。
这也就是我使用沙箱跑一些不明软件的原因,万一软件被恶意修改过,存在病毒,想破坏系统关键文件,也就不可能了。
重定向我们还有个高级的词叫做“虚拟化”,也可以称作”隔离“,说到底沙箱就是为程序提供一个虚拟化环境,也就是隔离环境,并保证程序所有操作都在这个隔离环境内。
一个完备的沙箱一般需要虚拟化(隔离)处理这些东西:
保证沙箱内程序创建、修改、删除、读取等文件操作都在沙箱内,不会影响系统中真实的文件。
功能实现方式由很多,主要可以按下面分为:
用户态实现较为简单,语义更清晰,但是强度不够,有很多方式穿透ntdll.dll这层的文件操作函数,导致文件重定向(隔离)失败,比如用户态通过直接扇区读写来修改文件。
内核态如果使用minifilter来实现,强度基本就够了。
不过sandboxie是在用户态实现的。
保证沙箱内程序创建、修改、删除、读取等注册表操作都在沙箱内,不会影响系统中真实的注册表信息。
同样,和文件重定向一样,也可以在用户态或内核态使用不同的技术完成,先不细说。
其实做DCOM虚拟化,最主要是为了防止沙箱内程序逃逸。
所谓逃逸,就是沙箱无法控制沙箱内程序行为,程序可以绕过沙箱,对系统造成破坏。
逃逸的方式有很多,对于支持DCOM的程序,就是其中一种。
举个例子,在wordpad.exe(写字板)插入对象-画笔图片,会启动mspaint,可以看到mspaint是svchost.exe -k DcomLaunch的子进程。
一般来说,如果在沙箱中启动wordpad.exe,wordpad.exe的子进程默认也会进入沙箱,但通过DCOM启动的mspaint就没法拉入沙箱了,它不是wordpad.exe子进程。
所以,此时需要虚拟化DCOM,让沙箱内启动一个DCOM服务,这样wordpad.exe直接和沙箱内DCOM通信,启动子进程mspaint.exe,作为沙箱内DCOM服务的子进程,自然也被拉入沙箱内。
如此做到阻止逃逸。
这里面涉及到很多技术细节,如RPC,后面细说。
其实服务也是逃逸沙箱的一种方式,但是也可以说如果沙箱不支持服务虚拟化,某些程序就不能在沙箱内正常工作。
所以不管出于那种原因考虑,沙箱都得实现服务虚拟化。至于说服务也能逃逸是怎么回事呢?
很简单,程序通过服务API创建一个服务,然后启动服务,对应服务程序就没法被沙箱接管,逃出沙箱控制。
实现就是接管服务相关API了。
二者的出发点不一样。沙箱的目的为了你在沙箱里面做的任何操作,都对外界没有任何影响。你可以随便搞。容器是为了你部署应用方便,为你隔离出来一个单独的环境,外界的变化不会影响你的应用的正常运行。一个是不会让里面影响到外面,一个是不会让外界影响到里面。而且容器里面的服务是会对容器外提供的
作为一台功能齐全的 NAS,它在你的工作场上甚至能够发挥更大的作用。小型的办公室或工作室可以考虑一下我们桌面机型,为什么呢?
2023年7月更新以下信息可能過時瞭 騰訊搞出一個NT新架構QQ 有需要的可以轉戰瞭2019年9月更新騰訊近期已在微軟應用商店Microso...
学术期刊《ACM Transactions on Multimedia Computing Communications and Applications》这是一份档案期刊,有印刷版和数字 ...
中國聚偏二氯乙烯薄膜行業發展現狀及前景預測報告2024 VS 2029年1 聚偏二氯乙烯薄膜市場概述1.1 聚偏二氯乙烯薄膜行業概述及...