有没有办法从虚拟机内识别您的代码正在虚拟机内运行?
我想有或多或少简单的方法来识别特定的虚拟机系统,特别是如果虚拟机安装了提供商的扩展(例如 VirtualBox 或 VMWare)。但是有没有一个通用的方法来识别你不是直接在CPU上运行的呢?
对此的大量研究致力于检测所谓的“蓝色药丸”攻击,即主动尝试逃避检测的恶意虚拟机管理程序。
检测虚拟机的经典技巧是填充 ITLB,运行一条指令must进行虚拟化(当将控制权交给虚拟机管理程序时,必然会清除此类处理器状态),然后运行更多代码来检测 ITLB 是否仍然填充。第一篇论文位于here http://www.symantec.com/avcenter/reference/Virtual_Machine_Threats.pdf,以及一个相当丰富多彩的解释研究人员的博客 http://web.archive.org/web/20080213212608/http://www.matasano.com/log/930/side-channel-detection-attacks-against-unauthorized-hypervisors/和替代方案Wayback Machine 博客文章链接(图片已损坏) http://web.archive.org/web/20080720153608/http://www.matasano.com/log/930/side-channel-detection-attacks-against-unauthorized-hypervisors/.
对此讨论的底线是,总有一种方法可以检测恶意虚拟机管理程序,并且检测不试图隐藏的虚拟机管理程序要简单得多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)