【问题标题】:Loading image into enclave memory将图像加载到 enclave 内存中
【发布时间】:2018-01-25 15:55:57
【问题描述】:

我正在尝试使用允许将 DLL 加载到 enclave 内存中的新 Windows 1709 功能。

我没有找到 ANY 文档或这样做的示例。 据我了解,这些是实现它的步骤:

  1. 使用IsEnclaveTypeSupported 检查是否支持 VBS(仅 VBS 支持 enclave 映像)enclave 类型。

  2. 使用CreateEnclave函数创建飞地。

  3. 使用LoadEnclaveImage函数将图像加载到enclave内存中。

这是我尝试使用的代码 sn-p:

HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessPid());
BOOL vbsSupport = IsEnclaveTypeSupported(ENCLAVE_TYPE_VBS); //returns TRUE
ENCLAVE_CREATE_INFO_VBS vci = { 0 };
vci.Flags = 1;
LPVOID lpAddress = CreateEnclave(h, NULL, 0x10000, NULL, ENCLAVE_TYPE_VBS, &vci, sizeof(ENCLAVE_CREATE_INFO_VBS), NULL);

调用CreateEnclave返回NULL并将最后一个错误码设置为0x32(不支持该请求)。

任何想法如何使它工作?

【问题讨论】:

  • 经过进一步调查,我发现了一些非常奇怪的东西。在 64 位编译上述代码时,对 createEnclave 的调用永远不会返回。此外,计算机卡住了,即使使用 Process Hacker 或 Procexp 也无法关闭应用程序。 kthread似乎陷入了死锁。我在超过 4 台不同的完全更新的计算机上尝试了以下操作(即使没有启用 VBS/SGX)。

标签: windows visual-c++ msdn enclave


【解决方案1】:

是否启用了 Hyper-V? 飞地需要它才能工作。

【讨论】:

  • 当然可以。在启用它之前,IsEnclaveTypeSupported 返回 FALSE。启用 hyper-v 和安全启动后,IsEnclaveTypeSupported 返回 TRUE。
  • 我的尝试有效,但我无法在 dll 中找到 LoadEnclaveImage 函数。
  • 您必须更新到最新的 Windows SDK 才能找到这些功能
  • 检查 vertdll.dll 导出,您会发现该函数不存在。基本上我什至找不到 api-ms-win-core-enclave-l1-1-0.dll。关于您的问题,0x10000 的大小可能是错误的(我尝试使用 1MB 并且它有效)。
  • 我在 kernelbase.dll 中找到了它。但是它不会加载一个dll文件,它说它没有签名(即使我签名了)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多