图来自误入陷阱的Pexels《二哥,我终于进来了,还是按计划办吧,你去扫描硬盘里的文件看看有没有值,我就修改启动项把我们加进去。“等一下,老大,我感觉不太对。”“怎么了?”老大问道,“我们去过的其他地方都很热闹,怎么这里这么安静?”你看,QQ微信之类的进程都没有!”老二说道。这是虚拟机,我们掉进虚拟机里了!”“你怎么知道这是虚拟机的?”二哥不解的问道。注册表中的标志。”“那我们该怎么办?完了,我们要被坑了~”老二一脸着急。老大皱着眉头,来回踱步,忽然笑眯眯的说道:“你放心,临走之前,少爷偷偷的给了我一个药包,让我有急事打开。”“那你还等什么?快拿出来!”老大从口袋里掏出工具包,里面是一封信,两人认真的看了起来。稳定!”老二一脸问号,不太明白,“大哥,请问,怎么稳定?大法,告诉我们如何从虚拟机中逃脱吧。”“兄弟,小点声,小心被发现,我们还是赶紧行动吧,说不定就来不及了。”“放心,让我仔细研究一下。”信纸上写了很多密密麻麻的字迹,看着有些复杂,两人刚刚松开的眉头又慢慢皱了起来。过了一会儿,老二没了耐心,“哥,这个太复杂了,我看不懂,看你的了。”“我明白了,虚拟机是和外面的真实世界进行通信的,我们只需要抓住通信过程中的漏洞,将我们的指令代码混入通信数据中,让外界负责通信的那端执行这些指令代码即可,而我们将它可以传送,逃到外面的真实世界!”“我明白了,但是我们去哪里找这样的漏洞呢?”“是的,看这里,师父给我们找了好几个漏洞,太贴心了!”CVE-2016-7461CVE-2017-4901CVE-2019-14378“这串字符和数字是什么意思?”老二问。”这个叫漏洞编号,CVE的意思是CommonVulnerabilitiesandExposures,就是公开漏洞披露的意思。第二个是年份,第三个是具体的漏洞编号,每年发现的软件漏洞那么多。为了方便大家管理层给他们分配编号就行了。”“快,选一个开始工作吧!”“我看看,就选第二个吧,这个是VMware的漏洞,版本也合适,还没修好,二哥,我们的机会来了!”说完老板就按照信纸上的描述开始工作,准备后面要用到的数据和代码。“老大,这个漏洞的原理是什么,你准备的时候说说吧~”“老大的信里说VMware有一个后门通信接口,可以用来和虚拟机内部操作系统通信外部系统,复制和拖放是用来传输文件的,但是这个后门的代码是有漏洞的,只要我们小心构造数据,在复制的时候就会造成堆溢出,就有机会执行我们的命令代码在这里!”“牛皮!师父真牛皮”,老二感叹道!“别闲着,快来帮我准备资料!”新世界过去了一会儿。“哥,你都准备好了吗?”“按照信上的方法都准备好了,二哥,走吧,我们要出去了,快点!”老大拿出刚才精心准备好的代码,小心翼翼的点击执行,只听一阵嘶嘶的电流声,两人化为一串串的比特流传送到外面的VMware进程中.按照计划,漏洞被成功触发!执行完事先写好的指令代码后,两人顺利的进入了外接电脑的文件目录。等了一会儿,两人才从刚才的眩晕中慢慢回过神来。“老大,我们成功了!”“哈哈!终于出来了。”两个小伙子高兴地抱在了一起。“好了,现在说正事吧,都过去不少时间了,少爷还在等我们的消息呢。”“好了,开始工作吧!”两人开始忙起来,争分夺秒地实施计划,但很快他们就发现了不对劲。“老大,怎么这里还有vmware的进程?我们不是逃走了吗?”“废话,我们刚刚才从那里跑出来的”!“没有,过来看看”……老板闻讯赶了过来,仔细查看了一下,又看了看四周,深吸了一口气。“二哥,完了,这里好像是虚拟机……”故事灵感这个故事的灵感来源于知乎上的一个问题:操作系统能知道自己在虚拟机中吗?下面是我的回答:虚拟化技术大概经历了三个发展阶段:从早期的二进制指令翻译技术(早期的VMware为代表)到操作系统代码中特殊指令调用的修改(以XEN为代表)CPU支持硬件虚拟化(以VT-x技术为代表),尤其是硬件虚拟化技术的出现更是掀起了虚拟化技术的井喷之势,VirtualBox、VMWare(新)、KVM的应运而生,在一定程度上加速了虚拟化技术的到来云计算时代。说到问题本身,经过三个时期的发展,虚拟化能力越来越接近真实的硬件环境,但即便如此,操作系统还是很容易知道自己是不是在虚拟机中。说操作系统可能不是那么容易理解。我们换个场景:一个木马病毒开发者想知道攻击目标是不是虚拟机?这个问题比较现实。如果病毒木马在虚拟机中,大概率是在被安全研究人员分析,好的开发者此时一定懂得隐藏自己的意图,不能被识破。这是病毒木马常用的反虚拟机技术。具体的检测方法有很多,但核心思想是不同的虚拟机有不同的特征,你需要做的就是找到这些特征。比如特殊的IO设备、特殊的文件目录、特殊的注册表项、特殊的进程名等。当然说了这么多,我们还是通过一些表面现象来判断是否在虚拟机中。如果没有这个东西,又怎么能达到真正的“感知”呢?还有办法。真实的物理机和虚拟机总是不同的。在这个方向上,我们可以从“边信道”做一些思考,比如执行一个算法所花费的时间,执行一段特殊代码所带来的硬件波动等等。虚拟机不是绝对安全的。要知道,虚拟机中的程序代码和真实主机上的程序一样,都是由物理CPU执行的,只是被硬件、软件等机制“强制隔离”。而一旦这些机制出现漏洞,恶意程序就有机会逃出虚拟机!故事的最后,他们终于从虚拟机中逃了出来,却发现自己还在另一个虚拟机中。这样的剧情是不是感觉似曾相识?猜一部电影,欢迎大家在评论区留言~作者:轩辕志峰编辑:陶家龙来源:转载自公众号编程科技宇宙(ID:xuanyuancoding)
