虚拟机去虚拟化及检测技术攻防
虚拟机安全监控机制

虚拟机安全监控机制
虚拟机安全监控机制是指对虚拟机进行监控和保护的技术手段。
这些机制旨在提高虚拟机的安全性和防范攻击的风险。
以下是一些虚拟机安全监控机制的参考内容。
1. 反病毒软件
反病毒软件是一种常见的虚拟机安全监控机制。
它可以扫描虚拟机中的文件,监测潜在的病毒,并在检测到病毒时进行清除。
虚拟机管理员应该始终使用最新版本的反病毒软件,并更新病毒数据库。
2. 虚拟机防火墙
虚拟机防火墙是一种保护虚拟机免受入侵和网络攻击的机制。
它可以对虚拟机中的网络流量进行监控,并阻止非法的入侵尝试。
虚拟机管理员应该根据需要配置防火墙规则,并监控它们的运行情况。
3. 安全补丁程序
安全补丁程序是指开发商发布的一种程序更新,可以修复虚拟机中存在的漏洞和安全问题。
虚拟机管理员应该及时安装最新的安全补丁程序,以确保虚拟机的安全性。
4. 虚拟机加密
虚拟机加密是一种保护虚拟机中的数据免受非授权访问的机制。
使用虚拟机加密,管理员可以加密虚拟机的存储卷,确保敏感数据不会被恶意用户窃取。
5. 安全基线设置
安全基线是指对虚拟机进行安全配置的标准。
管理员可以指定虚拟机应符合哪些安全要求。
这包括密码策略、网络访问控制、用户账户管理等方面。
根据安全基线设置,管理员可以提高虚拟机的安全性。
总之,虚拟机安全监控机制可以帮助虚拟机管理员更好地保护虚拟机的安全。
管理员应该采取多种安全机制,确保虚拟机的安全性。
解决虚拟机网络隔离与安全性问题的服务器虚拟化技巧

解决虚拟机网络隔离与安全性问题的服务器虚拟化技巧引言:在现代信息技术的急剧发展中,服务器虚拟化技术成为大型企业和云计算领域广泛采用的重要技术。
然而,随着虚拟机数量的增加,虚拟机网络隔离和安全性问题也日益凸显。
本文将介绍一些解决虚拟机网络隔离和安全性问题的服务器虚拟化技巧。
一、使用虚拟网络设备实现网络隔离在虚拟化环境中,使用虚拟交换机和虚拟局域网来实现虚拟机之间的网络隔离非常重要。
虚拟交换机可以将虚拟机划分为若干个不同的网络,从而通过策略和规则限制虚拟机之间的通讯。
虚拟局域网则可以将虚拟机连接到不同的网络服务,从而增强网络的安全性。
通过使用虚拟网络设备,可以有效地隔离虚拟机之间的通信,并且提供更高的网络安全性。
二、采用虚拟机防火墙技术增强安全性虚拟机防火墙是一种为虚拟机提供防火墙保护的技术。
它可以对虚拟机的网络流量进行监控和过滤,防止恶意攻击和未经授权访问。
虚拟机防火墙可以通过虚拟内核模块或者虚拟机独立运行的软件来实现。
通过将虚拟机防火墙部署在虚拟化环境中,可以提供更高级别的网络安全保护,保护虚拟机免受网络攻击的威胁。
三、使用虚拟机加密技术保护数据的安全性在服务器虚拟化环境中,数据的安全性非常重要。
虚拟机加密技术可以通过对虚拟机中的敏感数据进行加密,保护数据在传输和存储过程中不被非法访问。
虚拟机加密技术可以在虚拟机创建时自动对虚拟硬盘进行加密,并且提供安全的密钥管理。
通过使用虚拟机加密技术,可以有效地保护虚拟机中的敏感数据,增强数据的安全性。
四、采用虚拟机入侵检测系统提升安全性虚拟机入侵检测系统是一种用于实时监控虚拟机环境中的安全事件的技术。
它可以检测虚拟机中的异常行为和攻击,及时发出警报并采取相应的措施。
虚拟机入侵检测系统主要包括行为分析和日志分析两个部分。
行为分析可以检测虚拟机中的不正常行为,如异常流量、突然增加的资源消耗等;而日志分析可通过监控和分析虚拟机的日志,发现潜在的安全威胁。
结论:随着虚拟机数量的增加,服务器虚拟化环境中的网络隔离和安全性问题变得越来越重要。
如何防范虚拟化环境中的计算机病

如何防范虚拟化环境中的计算机病虚拟化技术的广泛应用,使得企业和个人都能够利用更少的物理设备运行多个虚拟机,提高了硬件资源的利用率和灵活性。
然而,随之而来的是虚拟化环境中计算机病毒的威胁。
本文将探讨如何防范虚拟化环境中的计算机病毒,并提供一些有效的防护策略。
一、保持虚拟化平台安全1. 更新和修补漏洞:定期更新和修补虚拟化平台的操作系统和软件,以确保及时修复已知的安全漏洞。
同时,建议使用最新版本的虚拟化软件,因为它们通常具有更好的安全性能和功能。
2. 强化访问控制:建立良好的用户和管理员访问控制策略,限制虚拟机和管理接口的访问权限。
使用强密码和多因素身份验证方式,确保只有授权人员能够访问虚拟化平台。
3. 检测和预防恶意软件:安装和配置专业的反病毒软件和恶意软件防护工具,及时检测和清除可能存在的病毒和恶意软件。
二、加强虚拟机安全管理1. 分隔敏感数据:将敏感数据存储在独立的虚拟机中,并限制数据的访问权限。
通过配置虚拟机网络隔离,可以减少恶意软件在虚拟机之间的传播。
2. 定期备份和恢复:建立有效的数据备份和恢复策略,定期对关键的虚拟机进行备份,以防止数据丢失。
同时,测试并验证备份的完整性和可恢复性,确保在病毒袭击或硬件故障发生时能够快速恢复虚拟机。
3. 监控虚拟机活动:使用虚拟机管理工具来监控虚拟机的活动,及时发现异常行为和潜在的安全威胁。
建立警报系统,及时通知管理员进行相应的调查和响应。
三、加强网络安全保护1. 安全网络架构:配置虚拟网络和物理网络的安全策略,使用防火墙和入侵检测系统保护虚拟化环境免受外部攻击。
同时,对网络流量进行监测和分析,及时发现并阻止恶意流量。
2. 更新网络设备:定期更新虚拟化环境中的网络设备(如交换机和路由器)的固件和软件,以修复可能存在的安全漏洞。
禁用不必要的服务和协议,减少攻击面。
3. 强化网络隔离:使用虚拟局域网(VLAN)和虚拟专用网络(VPN)等网络隔离技术,将虚拟机和物理设备分隔开来,降低横向攻击的风险。
虚拟机网络安全防护的攻防对策(四)

虚拟机网络安全防护的攻防对策随着科技的发展,虚拟化技术在企业和个人用户中得到广泛应用。
虚拟机作为一种节省资源和提高效率的技术,已经成为了现代计算的重要组成部分。
然而,虚拟机网络的安全问题也日益引起人们的关注。
本文将探讨虚拟机网络安全防护的攻防对策,帮助读者更好地理解和应对这一问题。
一、虚拟机网络安全的威胁虚拟机网络面临的安全威胁主要包括以下几个方面:1. 虚拟机逃逸:虚拟机逃逸是指攻击者通过利用虚拟机软件或硬件的漏洞,从一个虚拟机中获得对宿主机或其他虚拟机的控制权限。
一旦攻击者控制了虚拟机,将会对整个虚拟环境造成威胁。
2. 虚拟机间攻击:虚拟机之间的网络通信会增加网络攻击的可能性。
攻击者可以通过虚拟机网络流量进行监听、劫持以及攻击其他虚拟机,从而获取敏感信息或破坏网络系统的稳定性。
3. 未授权访问:虚拟机的管理和控制由管理员进行,但存在管理员权限被恶意利用的风险。
攻击者可以通过获取管理员权限来控制虚拟机,进而访问敏感数据或者影响其他虚拟机的正常运行。
二、防御虚拟机网络安全的策略针对虚拟机网络的安全威胁,以下是几个重要的防御策略:1. 更新和漏洞修复:定期更新和修复虚拟机和虚拟化软件的漏洞是确保虚拟机网络安全的基本措施。
及时安装官方发布的补丁和更新,可以有效地减少攻击者利用已知漏洞的机会。
2. 强化虚拟机网络的访问控制:采取严格的访问控制是防止未授权访问的关键。
可以使用虚拟局域网(VLAN)和虚拟防火墙等技术,将虚拟机进行分区,并限制不同区域之间的访问。
3. 加密虚拟机网络流量:通过使用加密传输协议(如SSL / TLS)对虚拟机之间的网络流量进行加密,可以防止攻击者对网络数据的窃取和篡改。
4. 监控和日志分析:建立完善的监控系统,对虚拟机网络进行实时监控,并对日志进行定期分析,及时发现异常行为和安全事件。
通过监控和日志分析,可以更早地发现和应对潜在的安全威胁。
5. 虚拟机安全加固:对虚拟机操作系统和应用程序进行安全加固也是防御虚拟机网络安全威胁的重要手段。
虚拟化安全威胁及防范手段

虚拟化安全威胁及防范手段虚拟化技术的发展为企业带来了许多便利,但同时也带来了新的安全威胁。
在虚拟化环境中,虚拟机之间共享物理资源,这种共享可能会导致安全隐患。
因此,了解虚拟化安全威胁及相应的防范手段对于保护企业数据的安全至关重要。
首先,虚拟化安全威胁主要包括以下几点:1. 虚拟机逃逸:攻击者可以通过利用虚拟机软件或硬件的漏洞从一个虚拟机逃逸到另一个虚拟机或宿主机,使其获得未经授权的访问权限。
2. 虚拟机间网络嗅探:攻击者在虚拟化环境中获取网络传输的数据包并进行分析,从而窃取敏感信息。
3. 资源竞争:在虚拟化环境中可能发生不同虚拟机之间对物理资源的争夺,导致性能下降或服务不可用。
4. 虚拟机克隆攻击:攻击者复制虚拟机并以此进行恶意活动,破坏系统安全。
为了有效应对虚拟化安全威胁,企业可以采取以下防范手段:1. 隔离网络:在虚拟化环境中建立网络隔离,确保不同虚拟机之间的网络流量不能直接互通,减少网络嗅探的风险。
2. 安全审计:定期对虚拟机进行安全审计,检查是否存在潜在的安全漏洞或异常活动,及时发现并解决问题。
3. 使用虚拟化安全软件:选择可信赖的虚拟化安全软件,对虚拟机进行全面保护,包括入侵检测、漏洞扫描等功能。
4. 更新和维护虚拟机:及时安装最新的安全补丁和更新,保持虚拟机的安全性和稳定性。
5. 加强访问控制:限制对虚拟机的访问权限,采取适当的授权措施,确保只有授权人员才能访问虚拟化环境。
总的来说,虚拟化技术为企业带来了很多好处,但也带来了新的安全挑战。
企业在部署虚拟化环境时,务必重视虚拟化安全威胁的防范工作,采取相应的措施保护企业数据的安全。
通过合理的安全策略和有效的安全措施,可以降低虚拟化安全威胁对企业造成的影响,确保系统的安全稳定运行。
虚拟机去虚拟化教程

虚拟机去虚拟化教程虚拟机去虚拟化是一种重要的技术,可以提高计算资源的利用率,并简化管理和维护的工作。
本文将介绍虚拟机去虚拟化的基本概念和实施步骤。
首先,我们来了解一下虚拟机去虚拟化的基本概念。
虚拟机去虚拟化是指将一个运行在虚拟机中的操作系统迁移到物理机上运行,使其直接访问硬件资源,不经过虚拟化层的转换。
这种方式可以提高系统性能,并降低资源占用。
实施虚拟机去虚拟化的步骤如下:1.备份虚拟机:在进行去虚拟化之前,首先要对虚拟机中的数据进行备份,以防止数据丢失或损坏。
2.选择合适的物理机:选择一台性能良好的物理机作为目标机器,以保证迁移后的系统能够正常运行。
3.安装操作系统:在目标机器上安装与虚拟机中操作系统相同的版本,以确保驱动程序的兼容性。
4.迁移虚拟机:使用虚拟机管理工具将虚拟机中的磁盘文件迁移到目标机器上,并将虚拟机的配置文件复制到目标机器上。
5.调整系统配置:根据目标机器的硬件配置,适当调整系统的配置,以优化系统的性能和稳定性。
6.测试系统:在目标机器上运行迁移后的系统,通过对系统进行全面测试,确保系统的稳定性和完整性。
7.切换生产环境:在目标机器上成功测试后,将虚拟机中的生产环境数据迁移至目标机器上,切换到目标机器上运行。
虚拟机去虚拟化是一项复杂的工作,需要具备一定的技术知识和实践经验。
在实施过程中,应注意备份数据、选择合适的目标机器、正确安装操作系统、顺利迁移虚拟机、适配系统配置、全面测试系统以及成功切换生产环境等关键步骤。
总之,虚拟机去虚拟化是一项重要的技术,可以提高计算资源的利用率,并简化管理和维护的工作。
通过本文的介绍,希望读者能够了解虚拟机去虚拟化的基本概念和实施步骤,更好地应用这一技术。
虚拟机网络安全防护的攻防对策(五)

虚拟机网络安全防护的攻防对策近年来,随着云计算和虚拟化技术的迅猛发展,虚拟机网络安全成为了一个备受关注的话题。
虚拟机网络是指在虚拟化环境中运行的一组虚拟机实例之间建立的网络连接。
然而,由于虚拟机网络本质上是虚拟化软件的一个实现,它也带来了一些安全隐患。
本文将讨论虚拟机网络安全防护的攻防对策。
一、攻击面的扩大虚拟机网络的攻击面相较于传统的物理网络更加宽广。
在传统网络中,攻击者需要直接侵入物理服务器才能进行攻击,而在虚拟机网络中,攻击者可以通过一个虚拟机实例入侵整个虚拟化环境。
这种攻击面的扩大使得虚拟机网络安全面临更大的挑战。
为了应对这种挑战,企业和组织需要采取一系列的防护措施。
二、虚拟机网络安全防护措施1. 虚拟防火墙虚拟防火墙是虚拟机网络安全防护的重要组成部分。
虚拟防火墙可以通过策略和规则控制虚拟网络流量,保护虚拟机实例免受恶意流量的攻击。
虚拟防火墙还可以监控虚拟机之间的通信,发现和阻止潜在的攻击行为。
2. 虚拟隔离虚拟隔离是保护虚拟机网络安全的一种有效手段。
通过将不同的虚拟机实例隔离在不同的虚拟网络中,可以防止恶意虚拟机实例对其他实例造成的攻击。
虚拟隔离还可以限制虚拟机之间的通信,减少攻击者在虚拟环境中的活动空间。
3. 虚拟机安全更新虚拟机安全更新是保证虚拟机网络安全的基础。
虚拟机环境中的软件和驱动程序需要定期更新,以修复已知的漏洞和安全问题。
同时,及时更新虚拟机补丁和安全更新也能提高虚拟机网络的整体安全性。
4. 虚拟机监控和日志分析虚拟机监控和日志分析是及时发现和回应安全事件的重要手段。
通过实时监控虚拟机网络的网络流量和系统行为,可以及时识别潜在的安全风险。
日志分析则可以帮助分析师对虚拟机网络中的攻击行为进行溯源,并寻找相关的安全事件线索。
三、防御措施面临的挑战然而,虚拟机网络安全防护也面临着一些挑战。
首先,作为虚拟化技术的一个子集,虚拟机网络存在与虚拟化技术相关的安全隐患。
例如,虚拟化软件本身可能存在漏洞,攻击者可以利用这些漏洞绕过虚拟机网络的防护措施。
虚拟机网络安全防护的攻防对策(九)

虚拟机网络安全防护的攻防对策随着云计算和虚拟化技术的快速发展,虚拟机的使用已经成为了各行各业的普遍趋势。
然而,虚拟机的网络安全问题也逐渐显现,攻击者有更多的机会通过网络入侵虚拟机环境。
为了保证虚拟机的网络安全,我们需要采取一系列的防护措施。
一、虚拟机网络防御1. 网络分割和隔离为了防止攻击者通过虚拟机进行横向渗透,我们可以将虚拟机网络进行细分,根据不同的业务需求设立不同的虚拟网络。
每个虚拟网络都有自己的安全策略和访问控制规则,以及独立的防火墙和入侵检测系统,从而实现虚拟机之间的隔离,减少攻击面。
2. 虚拟机安全策略为了保证虚拟机的网络安全,我们需要制定一系列的安全策略。
首先,我们可以限制虚拟机对外部网络的访问权限,仅开放必要的端口和协议,以减少攻击者的入侵机会。
其次,我们可以监控虚拟机的网络流量,及时发现异常行为并做出相应的响应。
此外,定期更新虚拟机的操作系统和应用程序,修复漏洞,以减少安全风险。
3. 虚拟机入侵检测和防御系统为了提高虚拟机的网络安全防护能力,我们可以部署入侵检测和防御系统。
入侵检测系统可以监控虚拟机的网络流量和行为,并及时发现潜在的恶意行为。
防御系统可以对网络流量进行深度检测和过滤,阻止恶意流量进入虚拟机网络。
通过使用这些系统,我们可以提高虚拟机的安全性,防止未知的威胁进入虚拟机环境。
二、虚拟机网络攻击1. 虚拟机逃逸攻击虚拟机逃逸攻击是指攻击者通过利用虚拟机监控器或虚拟机管理程序的漏洞,从虚拟机环境中逃脱并进入宿主机或其他虚拟机。
为了防止虚拟机逃逸攻击,我们可以通过更新和修补虚拟化软件来修复漏洞。
此外,我们还可以启用虚拟机安全功能,如硬件隔离和内存保护,以增加虚拟机逃逸的难度。
2. 虚拟机间攻击虚拟机间攻击是指攻击者通过网络或共享资源等方式,在不同的虚拟机之间进行攻击。
为了防止虚拟机间攻击,我们可以采取网络隔离和访问控制的措施,限制不同虚拟机之间的通信。
同时,我们还可以部署入侵检测系统,及时发现虚拟机间的异常行为并采取相应的应对措施。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在当今信息安全领域,特别是恶意软件分析中,经常需要利用到虚拟机技术,以提高病毒分析过程的安全性以及硬件资源的节约性,因此它在恶意软件领域中是应用越来越来广泛。
这里我们所谓的虚拟机(Virtual Machine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
通过虚拟机软件(比如VMware,Virtual PC ,VirtualBox),你可以在一台物理计算机上模拟出一台或多台虚拟的计算机,这些虚拟机完全就像真正的计算机那样进行工作,例如你可以安装操作系统、安装应用程序、访问网络资源等等。
攻击者为了提高恶意程序的隐蔽性以及破坏真实主机的成功率,他们都在恶意程序中加入检测虚拟机的代码,以判断程序所处的运行环境。
当发现程序处于虚拟机(特别是蜜罐系统)中时,它就会改变操作行为或者中断执行,以此提高反病毒人员分析恶意软件行为的难度。
本文主要针对基于Intel CPU的虚拟环境VMware中的Windows XP SP3系统进行检测分析,并列举出当前常见的几种虚拟机检测方法。
方法一:通过执行特权指令来检测虚拟机Vmware为真主机与虚拟机之间提供了相互沟通的通讯机制,它使用“IN”指令来读取特定端口的数据以进行两机通讯,但由于IN指令属于特权指令,在处于保护模式下的真机上执行此指令时,除非权限允许,否则将会触发类型为“EXCEPTION_PRIV_INSTRUCTION”的异常,而在虚拟机中并不会发生异常,在指定功能号0A(获取VMware版本)的情况下,它会在EBX中返回其版本号“VMXH”;而当功能号为0x14时,可用于获取 VMware内存大小,当大于0时则说明处于虚拟机中。
VMDetect正是利用前一种方法来检测VMware的存在,其检测代码分析如下:代码:bool IsInsideVMWare(){ bool rc = true; __try { __asm {push edx push ecx push ebx mov eax, 'VMXh' mov ebx, 0 //将 ebx设置为非幻数’VMXH’的其它值mov ecx, 10 // 指定功能号,用于获取VMWare版本,当它为0x14时用于获取VMware内存大小mov edx, 'VX' // 端口号in eax, dx // 从端口dx读取 VMware版本到eax//若上面指定功能号为0x14时,可通过判断eax中的值是否大于0,若是则说明处于虚拟机中cmp ebx, 'VMXh' // 判断ebx中是否包含VMware版本’VMXh’,若是则在虚拟机中setz [rc] // 设置返回值pop ebx pop ecx pop edx } } __except(EXCEPTION_EXECUTE_HANDLER) / / 如果未处于VMware中,则触发此异常{ rc = false; } return rc;}测试结果:图1如图1所示,VMDetect成功检测出VMWare的存在。
方法二:利用IDT基址检测虚拟机利用IDT基址检测虚拟机的方法是一种通用方式,对VMware和Virtual PC均适用。
中断描述符表 IDT(Interrupt Descriptor Table)用于查找处理中断时所用的软件函数,它是一个由256项组成的数据,其中每一中断对应一项函数。
为了读取IDT基址,我们需要通过SIDT指令来读取IDTR(中断描述符表寄存器,用于IDT在内存中的基址),SIDT指令是以如下格式来存储IDTR的内容:代码:typedef struct{ WORD IDTLimit; // IDT的大小WORD LowIDTbase; // IDT的低位地址WORD HiIDTbase; // IDT的高位地址} IDTINFO;由于只存在一个IDTR,但又存在两个操作系统,即虚拟机系统和真主机系统。
为了防止发生冲突,VMM(虚拟机监控器)必须更改虚拟机中的IDT 地址,利用真主机与虚拟机环境中执行sidt指令的差异即可用于检测虚拟机是否存在。
著名的“红丸”(redpill)正是利用此原理来检测VMware的。
Redpill 作者在VMware上发现虚拟机系统上的IDT地址通常位于0xFFXXXXXX,而Virtual PC通常位于0xE8XXXXXX,而在真实主机上正如图2所示都位于0x80xxxxxx。
Redpill仅仅是通过判断执行SIDT指令后返回的第一字节是否大于0xD0,若是则说明它处于虚拟机,否则处于真实主机中。
Redpill的源码甚是精简,源码分析如下:代码:#include <stdio.h>int main () { unsigned char m[2+4], rpill [] = "\x0f \x01\x0d\x00\x00\x00\x00\xc3"; //相当于SIDT[adrr],其中addr用于保存IDT地址*((unsigned*)&rpill[3]) = (unsigned)m; //将sidt[addr]中的addr设为m的地址((void(*)())&rpill)(); //执行SIDT指令,并将读取后IDT地址保存在数组m中printf ("idt base: %#x\n", *((unsigned*)&m[2])); //由于前2字节为IDT大小,因此从m[2]开始即为IDT地址if (m[5]>0xd0) printf ("Inside Matrix!\n", m[5]); //当IDT基址大于 0xd0xxxxxx时则说明程序处于VMware中else printf ("Not in Matrix.\n"); return 0;}测试结果如图2所示:图2利用此IDT检测的方法存在一个缺陷,由于IDT的值只针对处于正在运行的处理器而言,在单CPU中它是个常量,但当它处于多CPU时就可能会受到影响了,因为每个CPU都有其自己的IDT,这样问题就自然而然的产生了。
针对此问题,Offensive Computing组织成员提出了两种应对方法,其中一种方法就是利用Redpill反复地在系统上循环执行任务,以此构造出一张当前系统的IDT值变化统计图,但这会增加CPU负担;另一种方法就是 windows API函数SetThreadAffinityMask()将线程限制在单处理器上执行,当执行此测试时只能准确地将线程执行环境限制在本地处理器,而对于将线程限制在VM处理器上就可能行不通了,因为VM是计划在各处理器上运行的,VM线程在不同的处理器上执行时,IDT值将会发生变化,因此此方法也是很少被使用的。
为此,有人提出了使用LDT的检测方法,它在具有多个CPU的环境下检测虚拟机明显优于IDT 检测方法,该方法具体内容参见下节内容。
方法三:利用LDT和GDT的检测方法在《Intel®64 and IA-32 Architecture Software Developer’s Manual Volume 3 A: System Programming Guide》第二章的Vol.3 2-5 一页(我的Intel开发手册是2008版的)中对于LDT和GDT的描述如下(以下内容为个人翻译):在保护模式下,所有的内存访问都要通过全局描述符表(GDT)或者本地描述符表(LDT)才能进行。
这些表包含有段描述符的调用入口。
各个段描述符都包含有各段的基址,访问权限,类型和使用信息,而且每个段描述符都拥有一个与之相匹配的段选择子,各个段选择子都为软件程序提供一个GDT或LDT索引(与之相关联的段描述符偏移量),一个全局/本地标志(决定段选择子是指向GDT还是LDT),以及访问权限信息。
若想访问段中的某一字节,必须同时提供一个段选择子和一个偏移量。
段选择子为段提供可访问的段描述符地址(在GDT 或者LDT 中)。
通过段描述符,处理器从中获取段在线性地址空间里的基址,而偏移量用于确定字节地址相对基址的位置。
假定处理器在当前权限级别(CPL)可访问这个段,那么通过这种机制就可以访问在GDT 或LDT 中的各种有效代码、数据或者堆栈段,这里的CPL是指当前可执行代码段的保护级别。
……GDT的线性基址被保存在GDT寄存器(GDTR)中,而LDT的线性基址被保存在LDT寄存器(LDTR)中。
由于虚拟机与真实主机中的GDT和LDT并不能相同,这与使用IDT的检测方法一样,因此虚拟机必须为它们提供一个“复制体”。
关于GDT和LDT的基址可通过SGDT和SLDT指令获取。
虚拟机检测工具Scoopy suite的作者Tobias Klein经测试发现,当LDT基址位于0x0000(只有两字节)时为真实主机,否则为虚拟机,而当GDT基址位于0xFFXXXXXX时说明处于虚拟机中,否则为真实主机。
具体实现代码如下:代码:#include <stdio.h>void LDTDetect(void){ unsigned short ldt _addr = 0; unsigned char ldtr[2]; _asm sldt ldtr ldt_addr = *((unsigned short *)&ldtr); printf("LDT BaseAddr: 0x%x\n", ldt_addr); if(ldt_addr == 0x0000) { printf("Native OS\n"); } else printf("Inside VMware\n");}void GDTDetect(void){ unsigned int gdt_addr = 0; unsigned char gdtr[4];_asm sgdt gdtr gdt_addr = *((unsigned int *)&gdtr[2] ); printf("GDT BaseAddr:0x%x\n", gdt_addr); if((gdt_a ddr >> 24) == 0xff) { printf("Inside VMwar e\n"); } else printf("Native OS\n");}in t main(void){ LDTDetect(); GDTDetect(); return 0;}测试结果如图3所示:图3方法四:基于STR的检测方法在保护模式下运行的所有程序在切换任务时,对于当前任务中指向TSS的段选择器将会被存储在任务寄存器中,TSS中包含有当前任务的可执行环境状态,包括通用寄存器状态,段寄存器状态,标志寄存器状态,EIP寄存器状态等等,当此项任务再次被执行时,处理器就会其原先保存的任务状态。