我无法在Windows中找到有关不受信任的完整性级别的大量信息,并对此有一些疑问:
canvas.on('selection:cleared',function(e){/**Put ur code here...*/});
ACE
到SYSTEM_MANDATORY_LABEL_NO_WRITE_UP
MandatoryLevelUntrusted
的创建时间内给出了安全描述符?当我尝试时,它会因0xc0000022
(访问被拒绝)而失败,而使用MandatoryLevelLow
则效果很好。答案 0 :(得分:2)
是否存在不受信任的完整性级别进程可以创建的位置 命名对象? (互斥,事件等)。
默认情况下 - 没有。具有不受信任的令牌(线程或进程)的代码只能在Untrusted Mandatory Level
的目录中创建对象 - 没有一个标准文件夹具有这种标签。有些人Low Mandatory Level
但不信任 - 不。
但您可以自己轻松创建此文件夹。使用Untrusted Mandatory Level
和NULL
DACL - 不受信任的代码可以在此文件夹中创建对象。
NTSTATUS CreateUntrustedFolder(PHANDLE phObject, PCUNICODE_STRING ObjectName)
{
ULONG cb = MAX_SID_SIZE;
PSID UntrustedSid = (PSID)alloca(MAX_SID_SIZE);
if (CreateWellKnownSid(WinUntrustedLabelSid, 0, UntrustedSid, &cb))
{
PACL Sacl = (PACL)alloca(cb += sizeof(ACL) + sizeof(ACE_HEADER) + sizeof(ACCESS_MASK));
InitializeAcl(Sacl, cb, ACL_REVISION);
if (AddMandatoryAce(Sacl, ACL_REVISION, 0, 0, UntrustedSid))
{
SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);
SetSecurityDescriptorSacl(&sd, TRUE, Sacl, FALSE);
OBJECT_ATTRIBUTES oa = { sizeof(oa), 0, (PUNICODE_STRING)ObjectName, OBJ_CASE_INSENSITIVE|OBJ_OPENIF, &sd };
return ZwCreateDirectoryObject(phObject, DIRECTORY_ALL_ACCESS, &oa);
}
}
return STATUS_UNSUCCESSFUL;
}
关于不受信任的代码创建 - 如果开始时将标记为不可信完整性级别的标记启动 - 进程无法启动。当 ntdll.dll 尝试加载 kernel32.dll 时,它会尝试使用\KnownDlls\kernel32.dll
打开SECTION_MAP_WRITE
部分,但此对象有{{1与Low Mandatory Level
- 因此不受信任的代码失败打开此部分具有写访问权限。
因此,您最初需要使用SYSTEM_MANDATORY_LABEL_NO_WRITE_UP
创建流程,然后设置不受信任的级别
Low Mandatory Level
不受信任的完整性级别进程是否能够打开现有的 命名对象
这取决于对象标签(级别和掩码),代码完整性级别和所需访问。如果代码完整性级别> =对象标签级别 - 我们可以打开对象(如果 dacl 让这样做)。否则需要寻找对象标签掩码和所需的访问权限。例如,对象具有ULONG SetProcessUntrusted(HANDLE hProcess)
{
TOKEN_MANDATORY_LABEL tml = { { (PSID)alloca(MAX_SID_SIZE), SE_GROUP_INTEGRITY } };
ULONG cb = MAX_SID_SIZE;
HANDLE hToken;
if (!CreateWellKnownSid(WinUntrustedLabelSid, 0, tml.Label.Sid, &cb) ||
!OpenProcessToken(hProcess, TOKEN_ADJUST_DEFAULT, &hToken))
{
return GetLastError();
}
ULONG dwError = NOERROR;
if (!SetTokenInformation(hToken, TokenIntegrityLevel, &tml, sizeof(tml)))
{
dwError = GetLastError();
}
CloseHandle(hToken);
return dwError;
}
Low Mandatory Level
和代码SYSTEM_MANDATORY_LABEL_NO_WRITE_UP
- 此代码可以打开具有读取和执行访问权限的对象,但无法打开它以进行写入访问