我在用户模式进程中运行以下代码段,当Windows用户帐户登录到工作站时启动。或者,换句话说,它的路径放在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
注册表项中。
代码应该确定我的用户进程的mandatory integrity level。它是这样的:
DWORD getMIL()
{
//Try to get integrity level
//-1 Unknown
//SECURITY_MANDATORY_UNTRUSTED_RID 0x00000000 Untrusted.
//SECURITY_MANDATORY_LOW_RID 0x00001000 Low integrity.
//SECURITY_MANDATORY_MEDIUM_RID 0x00002000 Medium integrity.
//SECURITY_MANDATORY_MEDIUM_PLUS_RID SECURITY_MANDATORY_MEDIUM_RID + 0x100 Medium high integrity.
//SECURITY_MANDATORY_HIGH_RID 0X00003000 High integrity.
//SECURITY_MANDATORY_SYSTEM_RID 0x00004000 System integrity.
//SECURITY_MANDATORY_PROTECTED_PROCESS_RID 0x00005000 Protected process.
DWORD dwIntgtyLvl = -1;
HANDLE hToken;
if(OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY, &hToken))
{
DWORD dwSizeIntgtyLvl = 0;
if(!GetTokenInformation(hToken, TokenIntegrityLevel, NULL, dwSizeIntgtyLvl, &dwSizeIntgtyLvl) &&
::GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
BYTE* pbIntgtyLvl = new BYTE[dwSizeIntgtyLvl];
if(pbIntgtyLvl)
{
TOKEN_MANDATORY_LABEL* pTML = (TOKEN_MANDATORY_LABEL*)pbIntgtyLvl;
DWORD dwSizeIntgtyLvl2;
if(GetTokenInformation(hToken, TokenIntegrityLevel, pTML, dwSizeIntgtyLvl, &dwSizeIntgtyLvl2) &&
dwSizeIntgtyLvl2 <= dwSizeIntgtyLvl)
{
dwIntgtyLvl = *GetSidSubAuthority(pTML->Label.Sid,
(DWORD)(UCHAR)(*GetSidSubAuthorityCount(pTML->Label.Sid)-1));
}
//Free mem
delete[] pbIntgtyLvl;
pbIntgtyLvl = NULL;
}
}
::CloseHandle(hToken);
}
return dwIntgtyLvl;
}
在正常的事件流中,我希望获得0x2000
的{{1}}或SECURITY_MANDATORY_MEDIUM_RID
的{{1}},但如果我有一个Windows用户帐户已经登录,如果我随后切换用户,并使用其他用户帐户登录,则上面的方法将获得强制完整性级别的0x3000
值。
有谁知道这个价值代表什么?
答案 0 :(得分:5)
在Windows Integrity Mechanism Design上的MSDN页面底部对其进行了描述:
RID以0x1000的间隔分隔,以便将来定义其他级别。分离还允许为略高于中等的流程分配完整性级别:例如,以满足特定的系统设计目标。
...
使用标准的UIAccess权限启动的应用程序 为用户分配了稍高的完整性级别值 访问令牌。 UIAccess的访问令牌完整性级别 标准用户的申请是中等诚信的价值 级别,加上0x10的增量。更高的完整性级别 UIAccess应用程序阻止同一桌面上的其他进程 打开UIAccess过程对象的中等完整性级别
答案 1 :(得分:4)
您没有考虑完整性级别使用值范围,其中可以为其完整性级别在值范围内分配令牌/进程。您正在寻找特定的值。
不受信任的完整性可以是SECURITY_MANDATORY_UNTRUSTED_RID
(包括)和SECURITY_MANDATORY_LOW_RID
之间的任何值(不包括在内)。
低完整性可以是SECURITY_MANDATORY_LOW_RID
(包括)和SECURITY_MANDATORY_MEDIUM_RID
之间的任何值(不包括在内)。
中等完整性可以是SECURITY_MANDATORY_MEDIUM_RID
(包括)和SECURITY_MANDATORY_HIGH_RID
之间的任何值(不包括在内)。这是你在你的例子中看到的。
高完整性可以是SECURITY_MANDATORY_HIGH_RID
(包括)和SECURITY_MANDATORY_SYSTEM_RID
之间的任何值(不包括在内)。
任何等于或高于SECURITY_MANDATORY_SYSTEM_RID
的值都保留给系统。
文档中有一个表格显示:
Windows Integrity Mechanism Design
Table 2 Defined integrity levels and corresponding values Value Description Symbol 0x0000 Untrusted level SECURITY_MANDATORY_UNTRUSTED_RID 0x1000 Low integrity level SECURITY_MANDATORY_LOW_RID 0x2000 Medium integrity level SECURITY_MANDATORY_MEDIUM_RID 0x3000 High integrity level SECURITY_MANDATORY_HIGH_RID 0x4000 System integrity level SECURITY_MANDATORY_SYSTEM_RID
答案 2 :(得分:0)
这是一个命名列表: Well-known SIDs
import React from "react";
import "./styles.css";
import Calendar from "react-calendar";
class App extends React.Component {
state = {
date: new Date(),
classes: [
{ id: 1, name: "foo1" },
{ id: 2, name: "foo2" }
],
displayClasses: false
};
onChange = date => this.setState({ date });
displayClasses = () => {
this.setState({ displayClasses: true });
};
render() {
let classes = null;
if (this.state.displayClasses) {
classes = this.state.classes.map(cl => {
return <li key={cl.id}>{cl.name}</li>;
});
}
return (
<div className="App">
<Calendar
onChange={this.onChange}
value={this.state.date}
onClickDay={this.displayClasses}
/>
<br />
<ul>{classes}</ul>
</div>
);
}
}
export default App;
但是,如在其他答案中所述,两个列出的项目之间的值是有效的,并且如果必须命名它们,则应选择较低的值名称(例如511应该命名为| SID | Name | DEC | HEX | BIN |
|-------------- |----------------------------------- |------- |------ |----------------: |
| S-1-16-0 | Untrusted Mandatory Level | 0 | 0000 | 0 |
| S-1-16-4096 | Low Mandatory Level | 512 | 0200 | 1000000000 |
| S-1-16-8192 | Medium Mandatory Level | 8192 | 2000 | 10000000000000 |
| S-1-16-8448 | Medium Plus Mandatory Level | 8448 | 2100 | 10000100000000 |
| S-1-16-12288 | High Mandatory Level | 12288 | 3000 | 11000000000000 |
| S-1-16-16384 | System Mandatory Level | 16384 | 4000 | 100000000000000 |
| S-1-16-20480 | Protected Process Mandatory Level | 20480 | 5000 | 101000000000000 |
| S-1-16-28672 | Secure Process Mandatory Level | 28672 | 7000 | 111000000000000 |
而不是{{1 }}。
进程只能与具有相同或更低完整性级别的系统对象进行交互。