Isolated User Mode (IUM) Processes(MSDN翻译)

Windows 10引入了一个名为虚拟安全模式(Virtual Secure Mode VSM)的安全功能。VSM利用Hyper-V虚拟机管理程序和二级地址转换(Second Level Address Translation SLAT)来创建一组称为虚拟信任级别(Virtual Trust Levels VTL)的模式。这种新的软件架构创建了一个安全边界,以防止在一个VTL中运行的进程访问另一个VTL的内存。这种隔离的有利于减少内核漏洞以及保护密码哈希值和Kerberos密钥等数据。

Diagram1分别描述了在CPU ring0和ring 3中运行的内核模式代码和用户模式代码这种传统模型。在这种新模式中,传统模式运行的代码在VTL0中执行,它无法访问特权更高的VTL1,在VTL1中运行着安全内核和独立用户模式(Isolated User Mode IUM)代码。VTL是分层的,这意味着在VTL1中运行的任何代码都比在VTL0中运行的代码具有更高的特权。

VTL isolation由Hyper-V创建,它在启动时使用SLAT分配内存。当系统运行时,它动态地继续使用SLAT分配内存,SLAT分配的内存就能保护安全内核指定需要VTL0保护的内存,这些内存将用于保存保密数据。由于为两个VTL分配了独立的内存块,因此通过为VTL1和VTL0分配具有适当访问权限的专用内存块,为VTL1创建了安全的运行时环境。

Trustlets

Trustlets(也称为可信进程、安全进程或IUM进程)是指运行在VSM中作为IUM进程运行的程序。Trustles通过marshalling调用数据到运行在VTL0 ring 0中的Windows内核来完成系统调用。VSM创建了一个小型执行环境,其中包括在VTL1中执行的小型安全内核(与运行在VTL0中的内核和驱动程序相隔离)。明显的安全优势是将VTL1中的trustlet用户模式页面与VTL0内核中运行的驱动程序隔离开来。即使VTL0的内核模式被恶意软件破坏,VTL0中程序也无法访问IUM进程页面。

启用VSM后,本地安全机构(Local Security Authority LSASS)环境作为trustlet运行。LSASS管理本地系统策略、用户验证和审计,同时处理敏感的安全数据,如密码hash和Kerberos密钥。为了利用VSM的安全优势,一个名为LSAISO.exe(LSA isolation)的信任程序在VTL1中运行,并通过RPC通道与在VTL0中运行的LSASS.exe通信。LSAISO保密数据先吧被加密,再在发送到运行在VSM正常模式下的LSASS,并且LSAISO的页面被保护免受运行在VTL0中的恶意代码的攻击。

Isolated User Mode (IUM) Implications

IUM进程不能被附加,这限制了调试VTL1代码。这包括内存转储的事后调试以及为实时调试附加调试工具。它还包括特权帐户或内核驱动程序试图将DLL加载到IUM进程、注入线程或提供用户模式APC。这些操作可能导致整个系统的不稳定。调用有害Trustlet安全的Windows APIs可能会以意想不到的方式失败。例如,将DLL加载到Trustlet中会使它在VTL0中可用,但在VTL1中不可用。如果目标线程在Trustlet中,QueueUserApc可能会自动失败。其他API,如CreateRemoteThread、VirtualAllocEx和Read/WriteProcessMemory,在用于Trustlets时也不会像预期的那样工作。

下面的示例代码来防止调用任何试图向IUM进程附加或注入代码的函数。包括调用trustlet中代码的APC队列的内核驱动程序。

Remarks

如果IsSecureProcess的返回状态为success,要检查SecureProcess _Out_ parameter以确定该进程是否为IUM进程。IUM进程被系统标记为“安全进程”。TRUE意味着目标进程的类型是IUM。

NTSTATUS
IsSecureProcess(
   _In_ HANDLE ProcessHandle,
   _Out_ BOOLEAN *SecureProcess
   )
{
   NTSTATUS status;

       // definition included in ntddk.h  
   PROCESS_EXTENDED_BASIC_INFORMATION extendedInfo = {0};
 
   PAGED_CODE(); 
  
   extendedInfo.Size = sizeof(extendedInfo);

   // Query for the process information  
   status = ZwQueryInformationProcess(
                  ProcessHandle, ProcessBasicInformation, &extendedInfo,
                  sizeof(extendedInfo), NULL);

   if (NT_SUCCESS(status)) {
      *SecureProcess = (BOOLEAN)(extendedInfo.IsSecureProcess != 0);
   }
 
          return status;
}

Windows10的, “Windows Driver Kit - Windows 10.0.15063.0”,包含了PROCESS _ EXTENDED _ BASIC _ INFORMATION结构的定义。结构的更新版本在ntddk.h中用新的IsSecureProcess字段定义。

typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION {
    SIZE_T Size;    // Ignored as input, written with structure size on output
    PROCESS_BASIC_INFORMATION BasicInfo;
    union {
        ULONG Flags;
        struct {
            ULONG IsProtectedProcess : 1;
            ULONG IsWow64Process : 1;
            ULONG IsProcessDeleting : 1;
            ULONG IsCrossSessionCreate : 1;
            ULONG IsFrozen : 1;
            ULONG IsBackground : 1;
            ULONG IsStronglyNamed : 1;
            ULONG IsSecureProcess : 1;
            ULONG IsSubsystemProcess : 1;
            ULONG SpareBits : 23;
        } DUMMYSTRUCTNAME;
    } DUMMYUNIONNAME;
} PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值