-
-
[原创][翻译]规避技术: 固件表
-
发表于: 2021-5-31 16:17 9106
-
备注
原文地址:900K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6W2N6X3q4K6K9h3!0F1M7#2)9J5k6h3y4Z5k6h3y4C8M7r3!0A6L8Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6@1k6h3y4Z5L8X3W2I4N6h3g2K6i4K6u0r3k6X3W2J5L8i4N6S2M7X3g2Q4x3X3c8@1j5h3u0D9k6i4y4Q4x3X3g2Z5N6r3#2D9
原文标题:Evasions: Firmware tables
更新日期:2021年5月31日
此文后期:根据自身所学进行内容扩充
因自身技术有限,只能尽自身所能翻译国外技术文章,供大家学习,若有不当或可完善的地方,希望可以指出,用于共同完善这篇文章。
目录
固件表的检测方法
1. 检查原始固件表中是否存在特定的字符串
1.1. Windows Vista+
1.2. Windows XP
2. 检查原始SMBIOS固件表中是否存在特定字符串
2.1. Windows Vista+
2.2. Windows XP
反制措施
归功于
固件表的检测方法
如果操作系统是在虚拟环境下运行的,那么操作系统会使用一些特殊的内存区域,其中包含特定的伪装。根据操作系统版本的不同,可以使用不同的方法转储这些内存区域。
固件表是通过SYSTEM_FIRMWARE_TABLE_INFORMATION对象检索的。它的定义如下:
1. 检查原始固件表中是否存在特定的字符串
扫描检索到的固件表以确定是否存在特定字符串。
根据Windows的版本,不同的功能被用于这种检查。见下面的代码样本。
1.1. Windows Vista+
代码样本:
此代码样本归功于:VMDE项目
识别标志:
如果函数
NtQuerySystemInformation
包含:
第1个参数等于76 (SystemFirmwareTableInformation)
第2个参数的sfti->ProviderSignature字段被初始化为'FIRM'并且 sffti ->Action字段初始化为1
那么这就表明应用程序试图使用这种规避技术。
1.2. Windows XP
代码样本:
识别标志:
如果以下函数包含csrss.exe进程的PID作为其第3个参数:
HANDLE hCSRSS = OpenProcess(..., csrss_pid)
并在其后调用以下函数:
NtReadVirtualMemory(hCSRSS, 0xC0000, ...)
其中包含:
第一个参数等于csrss.exe的句柄
第2个参数等于0xC0000
那么这就表明应用程序试图使用这种规避技术。
检测表:
检查原始固件表中是否存在以下字符串:
检测
字符串
Parallels
Parallels(R)
VirtualBox
Innotek
Oracle
VirtualBox
VirtualPC
S3 Corp.
VMware
VMware
2. 检查原始SMBIOS固件表中是否存在特定字符串
检索的固件表被扫描,以确定是否存在特定的字符串。
根据Windows的版本,不同的功能被用于这种检查。见下面的代码样本。
2.1. Windows Vista+
代码样本:
这个代码样本归功于:VMDE项目
识别标志:
如果函数:
NtQuerySystemInformation
包含:
第1个参数等于76 (SystemFirmwareTableInformation)
第二个参数的sfti->ProviderSignature字段被初始化为'RSMB'并且sfti->Action字段被初始化为1。
那么这就表明应用程序试图使用这种规避技术。
2.2. Windows XP
代码样本:
识别标志:
如果以下函数包含csrss.exe进程的PID作为其第3个参数:
HANDLE hCSRSS = OpenProcess(..., csrss_pid)
并在其后调用以下函数:
NtReadVirtualMemory(hCSRSS, 0xE0000, ...)
其中包含:
第一个参数等于csrss.exe句柄
第二个参数等于0xE0000
那么这就表明应用程序试图使用这种规避技术。
检测表:
检查原始SMBIOS固件表中是否存在以下字符串:
检测
字符串
Parallels
Parallels Software International
VirtualBox
Innotek