误入陷阱
夜黑风高,两个不速之客又一次来到了一片新的土地。web
“老二,总算进来了,我们依计行事,你去扫描硬盘上的文件,看看有没有有价值的,我去修改开机启动项,把我们加进去”算法
“等一下,老大,我感受有点不对劲”编程
“哪里不对劲了?”,老大问到。安全
“咱们去过的其余地方都很热闹,这里怎么这么安静?你看,连QQ、微信这些进程都没有!”,老二说到。微信
老大环顾四周,也察觉到了一丝异常。app
稍等了一小会儿,老大忽然惊呼:“很差!这里是个虚拟机,我们掉入虚拟机中了!”编程语言
“你怎么看出这是一个虚拟机的?”,老二不解的问到。编辑器
“你看,那里有个vmware的进程,注册表里还有一堆vmware的标记”flex

“那怎么办?完蛋了,我们要被人扒的干干净净了~”,老二一脸焦急。云计算
老大眉头紧锁,来回踱步,忽然面露喜色说到:“别着急,临行前,主人偷偷给了我一个锦囊,叮嘱我在紧急时候打开”
“那还等什么?赶忙拿出来啊!”
老大从兜里掏出了锦囊,里面有一纸信,两人认真的看了起来。
片刻以后,老大大声笑道:“老弟!稳了!”
老二一脸问号,没太明白,“大哥,恕我眼拙,这怎么就稳了?”
“你看这里,主人交代了虚拟机逃逸大法,告诉咱们如何从虚拟机中逃离”

“大哥,小声一点,当心被发现了。我们快开始行动吧,晚了说不定就来不及了”
“别急,让我仔细研究一下”
信纸上密密麻麻写了一大堆,看起来有些复杂的样子,两我的刚刚放松的眉头又慢慢皱了起来。
没一下子,老二失去了耐心,“大哥,这也太复杂了,我是看不懂了,靠你了”
“我明白了,虚拟机会和外面的真实世界通讯,我们只要抓住通讯过程当中的漏洞,把咱们的指令代码参杂在通讯数据中,让外面世界负责通讯的一端执行这些指令代码,我们就能传输过去,逃逸到外面的真实世界去!”

“原来如此,可咱上哪里去找这样的漏洞呢?”
“有了,看这里,主人给咱们找了好几个漏洞,真是太贴心了!”
CVE-2016-7461 CVE-2017-4901 CVE-2019-14378
“这一串串字符和数字是什么意思?”,老二问到。
“这个呀,叫漏洞编号,CVE就Common Vulnerabilities and Exposures
,公共漏洞披露的意思,第二个是年份,第三个就是具体的漏洞编号了。这每一年有那么多软件被发现漏洞,为了管理方便就给它们统一分配了编号。”
“那赶忙的,选一个来开干吧!”
“让我看看,就选第二个吧,这是属于VMware的漏洞,版本也合适,尚未被修复,二弟,我们的机会来了!”
说完,老大按照信纸上的描述,开始忙活起来,准备起一下子要用的数据和代码。
“老大,这个漏洞的原理是什么啊,趁着你准备的功夫,你给我讲讲呗~”
“主人的信上说了,VMware有一个backdoor的通讯接口,能够用来虚拟机内部操做系统和外面系统进行通讯,复制和拖放就是使用它来传输文件的。而这个backdoor的代码写的有漏洞,我们只要精心构造好数据,它在拷贝的时候就会形成堆溢出,就有机会执行咱们的指令代码啦!”
“牛皮!主人真牛皮”,老二感叹道!
“快别闲着了,快来帮我准备数据吧!”
新世界
又过了一下子。
“大哥,都准备好了吗?”
“已经按照信上的方法都准备稳当了,二弟,来吧,我们就要出去了,抓紧我”
老大拿出了刚才将精心准备的代码,当心翼翼的点击执行,只听一阵电流的嘶嘶声响,二人化成一串比特流传输到了外面的VMware进程中。
正如计划的通常,漏洞成功的触发!执行了他们提早编写的指令代码,二人成功的来到外面计算机的文件目录下。
稍等了一下子,两人慢慢从刚才的眩晕中缓了过来。
“老大,我们成功了!”
“哈哈!总算出来了”
两个家伙高兴的牢牢抱在了一块儿。
“好了,这下我们开始干正事吧,已经耽误了很多时间了,主人还在等咱们的消息呢”
“好嘞,开始干活”
两人开始忙活起来,争分夺秒地实行他们的计划,然而,很快他们又发现了不对劲。
“老大,这里怎么仍是有vmware的进程啊?我们不是逃出来了吗?”
“废话,刚才咱就从那里面跑出来的啊”
“不对,你快过来看看”
老大闻讯赶了过去,仔细查看后,再一次环顾四周,倒吸了一口凉气。
“二弟,完了,这里好像仍是一个虚拟机···”

故事灵感
这个故事的灵感来自于知乎上的一个提问:操做系统可否知道本身处于虚拟机中?
下面是个人回答:
虚拟化技术通过了大概三个时期的发展:
从早期的二进制指令翻译技术(以早期VMware为表明) 经过修改操做系统代码中的特殊指令调用(以XEN为表明) CPU支持的硬件虚拟化(VT-x技术为表明) 尤为是硬件虚拟化技术的出现让虚拟化技术出现了井喷之势,VirtualBox、VMWare(新)、KVM纷纷涌现,必定程度上加速了云计算时代的到来。 关于虚拟化技术的发展,能够参考个人这篇文章:
说到问题自己,经历三个时期的发展,虚拟化能力愈来愈逼近于一个真实的硬件环境,但即使如此,操做系统想要知道本身是否是在一个虚拟机中仍然是易如反掌。
说操做系统可能不那么容易理解。我们换一个场景:一个木马病毒开发者想要知道攻击目标是否是一台虚拟机?
这个问题是更具备现实意义的,病毒木马若是处于虚拟机中,则大几率是正在被安全研究人员进行分析,一个好的开发者,这个时候是要懂得隐藏意图的,不能被看穿。
这就是病毒木马经常使用的反虚拟机技术。
具体的检测手段有不少,但核心思想就是不一样的虚拟机会有不一样的特征,你须要作的就是去找到这些特征。好比特殊的IO设备、特殊的文件目录、特殊的注册表项、特殊的进程名称等等。
固然,说了这么多仍是经过一些表面现象来判断是否是在虚拟机中,那倘若这些都没有,如何作到真正的“感知”呢?
仍是有办法。
真正的物理机和虚拟机总归是有不一样的,这个方向能够从“侧信道”来作一些思考,如执行一段算法花费的时间,执行一段特殊代码形成的硬件波动等等。
虚拟机并非绝对安全的,要知道,虚拟机中的程序代码和真实主机上的程序们同样,都是被物理CPU在执行,只不过被硬件、软件等机制进行了“强制隔离”罢了。
而一旦这些机制出现了纰漏,恶意程序也就有机会从虚拟机中逃出来了!
故事的结尾,他俩好不容易从虚拟机里逃了出来,却发现仍然处在另外一个虚拟机中。
这样的情节有没有以为很熟悉呢?猜一部电影,欢迎你们评论区留言~
往期TOP5文章

本文分享自微信公众号 - 编程技术宇宙(xuanyuancoding)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。