沙箱:概述

作者:anhkgg
日期:2019年10月4日

最早接触沙箱,对它的印象就是:sandboxie

因为学的是安全相关专业,在网上下载东西非常谨慎,就算通过了杀毒软件扫描,但是也怕有后门或者其他东西,毕竟我也可以静态过掉杀软。

很多软件没有官网,各种下载站的东西真的是让人不放心。

所以在下载某些软件后,只要不影响功能,基本都会用sandboxie来运行软件。如果不行,则放到虚拟机里。

所以我对沙箱最初的概念就是:sandboxie,它是一个轻量级虚拟机,软件的操作都不会影响真正的系统,包括文件、注册表等等资源,可以放肆地想干嘛干嘛。

那时当然是不怎么知道sanboxie是怎么做的。

题外话:最近因为微软的关系,sanboxie已选宣布免费,后续还可能开源,感兴趣的可以关注关注。

沙箱

注:沙箱现在的概念非常杂,某些分析平台后端也叫沙箱,主要关注的行为获取,我这里说的不一样。

那么沙箱究竟是怎么做的呢?

一句话概括的话就是:沙箱内万物基于重定向

重定向,顾名思义,就是重新指定方向,也就是说沙箱能够做到让沙箱内软件操作的文件、注册表等路径重定向到其他位置(沙箱指定位置),这样软件本来想操作的资源就不会被访问或者操作,保证资源的安全性。

这也就是我使用沙箱跑一些不明软件的原因,万一软件被恶意修改过,存在病毒,想破坏系统关键文件,也就不可能了。

言归正传。

重定向我们还有个高级的词叫做“虚拟化”,也可以称作"隔离",说到底沙箱就是为程序提供一个虚拟化环境,也就是隔离环境,并保证程序所有操作都在这个隔离环境内。

再举一个简单的例子理解一下重定向。如果程序要删除c:\boot.ini,沙箱如何做到隔离,保证文件不被删除呢。

  1. 沙箱hook ZwDeleteFile,函数是HOOK_ZwDeleteFile。
  2. 在HOOK_ZwDeleteFile中,讲路径c:\boot.ini加上一个前缀c:\sandbox\boot.ini,转到沙箱内文件路径。
  3. c:\sandbox\boot.ini不存在,会先把c:\boot.ini拷贝到沙箱内。
  4. 然后调用原始ZwDeleteFile,删除c:\sandbox\boot.ini。
NTSTATUS HOOK_ZwDeleteFile(
  POBJECT_ATTRIBUTES ObjectAttributes
) {
   AddPrefix(ObjectAttributes->ObjectName, L"sandbox");//路径加上沙箱前缀
   if(!PathFileExists(ObjectAttributes->ObjectName.Buffer)) {
      CopyFile();//拷贝进来
   }
   return OrigZwDeleteFile(ObjectAttributes);
}

如此就完成了一个简单的删除文件的隔离。

一个完备的沙箱一般需要虚拟化(隔离)处理这些东西:

  1. 文件
  2. 注册表
  3. DCOM(RPCSS)
  4. 服务
  5. 其他如:窗口、类名、消息、token等。
  6. 进程、线程安全
  7. 全局钩子、注入等防护
  8. 驱动加载
  9. ...

下面对比较重要的几个内容进行一下阐述。

文件重定向

保证沙箱内程序创建、修改、删除、读取等文件操作都在沙箱内,不会影响系统中真实的文件。

功能实现方式由很多,主要可以按下面分为:

  1. 用户态实现,hook ntdll.dll文件相关函数,然后路径重定向
  2. 内核态实现,ssdt hook文件相关函数,或者minifilter等技术

用户态实现较为简单,语义更清晰,但是强度不够,有很多方式穿透ntdll.dll这层的文件操作函数,导致文件重定向(隔离)失败,比如用户态通过直接扇区读写来修改文件。

内核态如果使用minifilter来实现,强度基本就够了。

不过sandboxie是在用户态实现的。

注册表重定向

保证沙箱内程序创建、修改、删除、读取等注册表操作都在沙箱内,不会影响系统中真实的注册表信息。

同样,和文件重定向一样,也可以在用户态或内核态使用不同的技术完成,先不细说。

DCOM虚拟化

其实做DCOM虚拟化,最主要是为了防止沙箱内程序逃逸。

所谓逃逸,就是沙箱无法控制沙箱内程序行为,程序可以绕过沙箱,对系统造成破坏。

逃逸的方式有很多,对于支持DCOM的程序,就是其中一种。

举个例子,在wordpad.exe(写字板)插入对象-画笔图片,会启动mspaint,可以看到mspaint是svchost.exe -k DcomLaunch的子进程。

dcom.png

什么意思呢?

一般来说,如果在沙箱中启动wordpad.exe,wordpad.exe的子进程默认也会进入沙箱,但通过DCOM启动的mspaint就没法拉入沙箱了,它不是wordpad.exe子进程。

所以,此时需要虚拟化DCOM,让沙箱内启动一个DCOM服务,这样wordpad.exe直接和沙箱内DCOM通信,启动子进程mspaint.exe,作为沙箱内DCOM服务的子进程,自然也被拉入沙箱内。

如此做到组织逃逸。

这里面涉及到很多技术细节,如RPC,后面细说。

服务虚拟化

其实服务也是逃逸沙箱的一种方式,但是也可以说如果沙箱不支持服务虚拟化,某些程序就不能在沙箱内正常工作。

所以不管出于那种原因考虑,沙箱都得实现服务虚拟化。

至于说服务也能逃逸是怎么回事呢?

很简单,程序通过服务API创建一个服务,然后启动服务,对应服务程序就没法被沙箱接管,逃出沙箱控制。

实现就是接管服务相关API了。

其他

剩下的其他内容,暂时也不分析了,如果有时间,后面继续分享。

最后

前面说的内容都是如何完成虚拟化的东西,一个成熟的沙箱肯定还包括其他很多东西,比如多沙箱的支持、沙箱清理、安全浏览器等等,不过这些都不在我们重点讨论范围,毕竟这些只有在实际产品才会考虑的问题,我们这里只是研究沙箱核心相关的技术。

另外,针对每种重定向技术细节后续会慢慢详细分享,敬请关注。

最后,再来一张简单的沙箱框图。

sandbox.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容