操作系统层面的沙盒的含义就是操作系统对进程的可访问的内存地址所做的限制,限制进程可访问的内存在其被分配的内存地址区间内,而不允许操作其他的内存地址,从而提供安全层面的防护。
浏览器层面的沙盒本质原理没多大变化,实践层面可能会根据浏览器环境有所变化,比如限制脚本操作本页面之外的其他页面的DOM,限制访问非同源文档,限制向非同源服务器发送ajax等等,目的依然是安全。
以chromium为例。chromium是多进程架构,浏览器前端界面由browser进程管理,各个web page的tab属于renderer进程管理。chromium的sandbox是将renderer进程作为防护对象。browser进程会给每个renderer进程分配资源,但这些renderer进程只能访问被分配的资源,不能访问未被分配的资源。这里资源的概念比较广泛,具体到可访问的DOM(对应内存中的对象),或抽象到origin scope等。实现层面的话,可以类比Linux下文件系统的权限位,浏览器会对每个web page实现对应的权限位,w3c HTML规范里 Sandbox 有相关内容。
主动防御是发现程序有可疑行为时立即拦截并终止运行。
沙盒技术是发现可疑行为后让程序继续运行,当发现的确是病毒时才会终止。
沙盒技术的实践运用流程是:让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分表演,“沙盒”会记下它的每一个动作;当疑似病毒充分暴露了其病毒属性后,“沙盒”就会执行“回滚”机制:将病毒的痕迹和动作抹去,恢复系统到正常状态。