程序人生 - 吓人!半夜,这个程序从虚拟机里跑出来了!

简介: 程序人生 - 吓人!半夜,这个程序从虚拟机里跑出来了!

夜黑风高,两个不速之客又一次来到了一片新的土地。

“老二,总算进来了,咱们依计行事,你去扫描硬盘上的文件,看看有没有有价值的,我去修改开机启动项,把咱们加进去”

“等一下,老大,我感觉有点不对劲”

“哪里不对劲了?”,老大问到。

“我们去过的其他地方都很热闹,这里怎么这么安静?你看,连QQ、微信这些进程都没有!”,老二说到。

老大环顾四周,也察觉到了一丝异常。

稍等了一小会儿,老大突然惊呼:“不好!这里是个虚拟机,咱们掉入虚拟机中了!”

“你怎么看出这是一个虚拟机的?”,老二不解的问到。

“你看,那里有个vmware的进程,注册表里还有一堆vmware的标记”

“那怎么办?完蛋了,咱们要被人扒的干干净净了~”,老二一脸焦急。

老大眉头紧锁,来回踱步,突然面露喜色说到:“别着急,临行前,主人偷偷给了我一个锦囊,叮嘱我在紧急时候打开”

“那还等什么?赶紧拿出来啊!”

老大从兜里掏出了锦囊,里面有一纸信,两人认真的看了起来。

片刻之后,老大大声笑道:“老弟!稳了!”

老二一脸问号,没太明白,“大哥,恕我眼拙,这怎么就稳了?”

“你看这里,主人交代了虚拟机逃逸大法,告诉我们如何从虚拟机中逃离”

“大哥,小声一点,小心被发现了。咱们快开始行动吧,晚了说不定就来不及了”

“别急,让我仔细研究一下”

信纸上密密麻麻写了一大堆,看起来有些复杂的样子,两个人刚刚放松的眉头又慢慢皱了起来。

没一会儿,老二失去了耐心,“大哥,这也太复杂了,我是看不懂了,靠你了”

“我明白了,虚拟机会和外面的真实世界通信,咱们只要抓住通信过程中的漏洞,把我们的指令代码参杂在通信数据中,让外面世界负责通信的一端执行这些指令代码,咱们就能传输过去,逃逸到外面的真实世界去!”

“原来如此,可咱上哪里去找这样的漏洞呢?”

“有了,看这里,主人给我们找了好几个漏洞,真是太贴心了!”

CVE-2016-7461

CVE-2017-4901

CVE-2019-14378

“这一串串字符和数字是什么意思?”,老二问到。

“这个呀,叫漏洞编号,CVE是Common Vulnerabilities and Exposures,公共漏洞披露的意思,第二个是年份,第三个就是具体的漏洞编号了。

这每年有那么多软件被发现漏洞,为了管理方便就给它们统一分配了编号。”

“那赶紧的,选一个来开干吧!”

“让我看看,就选第二个吧,这是属于VMware的漏洞,版本也合适,还没有被修复,二弟,咱们的机会来了!”

说完,老大按照信纸上的描述,开始忙活起来,准备起一会儿要用的数据和代码。

“老大,这个漏洞的原理是什么啊,趁着你准备的功夫,你给我讲讲呗~”

“主人的信上说了,VMware有一个backdoor的通信接口,可以用来虚拟机内部操作系统和外面系统进行通信,复制和拖放就是使用它来传输文件的。而这个backdoor的代码写的有漏洞,咱们只要精心构造好数据,它在拷贝的时候就会造成堆溢出,就有机会执行我们的指令代码啦!”

“牛皮!主人真牛皮”,老二感叹道!

“快别闲着了,快来帮我准备数据吧!”

新世界

又过了一会儿。

“大哥,都准备好了吗?”

“已经按照信上的方法都准备妥当了,二弟,来吧,咱们就要出去了,抓紧我”

老大拿出了刚才将精心准备的代码,小心翼翼的点击执行,只听一阵电流的嘶嘶声响,二人化成一串比特流传输到了外面的VMware进程中。

正如计划的一般,漏洞成功的触发!执行了他们提前编写的指令代码,二人成功的来到外面计算机的文件目录下。

稍等了一会儿,两人慢慢从刚才的眩晕中缓了过来。

“老大,咱们成功了!”

“哈哈!总算出来了”

两个家伙高兴的紧紧抱在了一起。

“好了,这下咱们开始干正事吧,已经耽误了不少时间了,主人还在等我们的消息呢”

“好嘞,开始干活”

两人开始忙活起来,争分夺秒地实行他们的计划,然而,很快他们又发现了不对劲。

“老大,这里怎么还是有vmware的进程啊?咱们不是逃出来了吗?”

“废话,刚才咱就从那里面跑出来的啊”

“不对,你快过来看看”

老大闻讯赶了过去,仔细查看后,再一次环顾四周,倒吸了一口凉气。

“二弟,完了,这里好像还是一个虚拟机···”

故事灵感

这个故事的灵感来自于知乎上的一个提问:操作系统能否知道自己处于虚拟机中?

虚拟机并不是绝对安全的,要知道,虚拟机中的程序代码和真实主机上的程序们一样,都是被物理CPU在执行,只不过被硬件、软件等机制进行了“强制隔离”罢了。

而一旦这些机制出现了纰漏,恶意程序也就有机会从虚拟机中逃出来了!

故事的结尾,他俩好不容易从虚拟机里逃了出来,却发现仍然处在另一个虚拟机中。

目录
相关文章
|
4月前
|
Java
程序计数器和虚拟机栈
这篇文章介绍了Java虚拟机(JVM)的内存结构,特别解释了程序计数器(Program Counter Register)的作用,即用来记录下一条JVM指令的执行地址和行号。
程序计数器和虚拟机栈
|
4月前
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
|
6月前
|
存储 Java C++
Java虚拟机(JVM)在执行Java程序时,会将其管理的内存划分为几个不同的区域
【6月更文挑战第24天】Java JVM管理内存分7区:程序计数器记录线程执行位置;虚拟机栈处理方法调用,每个线程有独立栈;本地方法栈服务native方法;Java堆存储所有对象实例,垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息;运行时常量池存储常量;直接内存不属于JVM规范,通过`java.nio`手动管理,不受GC直接影响。
50 5
|
6月前
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
69 2
|
6月前
|
监控 算法 Java
Java虚拟机(JVM)使用多种垃圾回收算法来管理内存,以确保程序运行时不会因为内存不足而崩溃。
【6月更文挑战第20天】Java JVM运用多种GC算法,如标记-清除、复制、标记-压缩、分代收集、增量收集、并行收集和并发标记,以自动化内存管理,防止因内存耗尽导致的程序崩溃。这些算法各有优劣,适应不同的性能和资源需求。垃圾回收旨在避免手动内存管理,简化编程。当遇到内存泄漏,可以借助VisualVM、JConsole或MAT等工具监测内存、生成堆转储,分析引用链并定位泄漏源,从而解决问题。
55 4
|
安全 Java Linux
08-JVM的内存结构之程序计数器和虚拟机栈
接下来我们继续深入第二个环节,也就是JVM的内存结构,很多人想到BAT等大厂去面试,但是现在互联网大厂面试几乎都会考核JVM相关知识的积累,所在在了解完了JVM的类加载机制之后,我们有必要一起来学习下JVM的内存区域划分。
94 0
08-JVM的内存结构之程序计数器和虚拟机栈
|
存储 缓存 安全
【jvm系列-03】精通运行时数据区私有区域---虚拟机栈、程序计数器、本地方法栈
【jvm系列-03】精通运行时数据区私有区域---虚拟机栈、程序计数器、本地方法栈
79 0
|
存储 缓存 安全
<JVM上篇:内存与垃圾回收篇>03-程序计数器 | 虚拟机栈(四)
<JVM上篇:内存与垃圾回收篇>03-程序计数器 | 虚拟机栈
<JVM上篇:内存与垃圾回收篇>03-程序计数器 | 虚拟机栈(四)
|
存储 Java 编译器
<JVM上篇:内存与垃圾回收篇>03-程序计数器 | 虚拟机栈(三)
<JVM上篇:内存与垃圾回收篇>03-程序计数器 | 虚拟机栈
<JVM上篇:内存与垃圾回收篇>03-程序计数器 | 虚拟机栈(三)
|
存储 Java 编译器
<JVM上篇:内存与垃圾回收篇>03-程序计数器 | 虚拟机栈(二)
<JVM上篇:内存与垃圾回收篇>03-程序计数器 | 虚拟机栈
<JVM上篇:内存与垃圾回收篇>03-程序计数器 | 虚拟机栈(二)