分享

进程安全和访问权限

 羊玉wngbx 2021-06-02

流程安全和访问权限

  • Microsoft Windows 安全模型使您能够控制对进程对象的访问。有关安全性的更多信息,请参阅访问控制模型

当用户登录时,系统会在身份验证过程中收集一组唯一标识用户的数据,并将其存储在访问令牌中此访问令牌描述与用户关联的所有进程的安全上下文。进程的安全上下文是提供给进程或创建进程的用户帐户的一组凭据。

您可以使用令牌为使用CreateProcessWithTokenW函数的进程指定当前安全上下文您可以在调用CreateProcessCreateProcessAsUserCreateProcessWithLogonW函数时为进程指定安全描述符如果您指定NULL,则该进程将获得一个默认安全描述符。进程的默认安全描述符中的 ACL 来自创建者的主要令牌或模拟令牌。

要检索进程的安全描述符,请调用GetSecurityInfo函数。要更改进程的安全描述符,请调用SetSecurityInfo函数。

进程对象的有效访问权限包括标准访问权限和一些特定于进程的访问权限。下表列出了所有对象使用的标准访问权限。

表格1
价值意义
DELETE(0x00010000L)需要删除对象。
READ_CONTROL (0x00020000L)需要读取对象的安全描述符中的信息,不包括 SACL 中的信息。要读取或写入 SACL,您必须请求ACCESS_SYSTEM_SECURITY访问权限。有关详细信息,请参阅SACL 访问权限
SYNCHRONIZE(0x00100000L)使用对象进行同步的权利。这使线程能够等待,直到对象处于信号状态。
WRITE_DAC (0x00040000L)需要修改对象的安全描述符中的 DACL。
WRITE_OWNER (0x00080000L)需要更改对象的安全描述符中的所有者。

下表列出了特定于进程的访问权限。

表 2
意义
PROCESS_ALL_ACCESS过程对象的所有可能访问权限。Windows Server 2003 和 Windows XP:在 Windows Server 2008 和 Windows Vista 上PROCESS_ALL_ACCESS标志的大小增加。如果为 Windows Server 2008 和 Windows Vista 编译的应用程序在 Windows Server 2003 或 Windows XP 上运行,则PROCESS_ALL_ACCESS标志太大并且指定此标志的函数失败并显示ERROR_ACCESS_DENIED为避免此问题,请指定操作所需的最小访问权限集。如果必须使用PROCESS_ALL_ACCESS,请将 _WIN32_WINNT 设置为您的应用程序所针对的最低操作系统(例如,#define _WIN32_WINNT _WIN32_WINNT_WINXP)。有关详细信息,请参阅使用 Windows 标头
PROCESS_CREATE_PROCESS (0x0080)需要创建进程。
PROCESS_CREATE_THREAD (0x0002)需要创建线程。
PROCESS_DUP_HANDLE (0x0040)需要使用DuplicateHandle复制句柄
PROCESS_QUERY_INFORMATION (0x0400)需要检索有关进程的某些信息,例如其令牌、退出代码和优先级类(请参阅OpenProcessToken)。
PROCESS_QUERY_LIMITED_INFORMATION (0x1000)需要检索有关进程的某些信息(请参阅GetExitCodeProcessGetPriorityClassIsProcessInJobQueryFullProcessImageName)。具有PROCESS_QUERY_INFORMATION访问权限的句柄被自动授予PROCESS_QUERY_LIMITED_INFORMATIONWindows Server 2003 和 Windows XP:不支持此访问权限。
PROCESS_SET_INFORMATION (0x0200)需要设置有关进程的某些信息,例如其优先级类(请参阅SetPriorityClass
PROCESS_SET_QUOTA (0x0100)需要使用SetProcessWorkingSetSize设置内存限制
PROCESS_SUSPEND_RESUME (0x0800)需要暂停或恢复进程
PROCESS_TERMINATE (0x0001)需要使用 TerminateProcess 终止进程。.
PROCESS_VM_OPERATION (0x0008)需要对进程的地址空间执行操作(请参阅VirtualProtectExWriteProcessMemory
PROCESS_VM_READ (0x0010)需要使用ReadProcessMemory读取进程中的内存.
PROCESS_VM_WRITE (0x0020)需要使用WriteProcessMemory 写入进程中的内存.
SYNCHRONIZE (0x00100000L)需要使用等待函数等待进程终止

要打开另一个进程的句柄并获得完全访问权限,您必须启用SeDebugPrivilege权限。有关更多信息,请参阅更改令牌中的权限

CreateProcess函数返回的句柄具有对进程对象的PROCESS_ALL_ACCESS访问权限。当您调用OpenProcess函数时,系统会根据进程安全描述符中的 DACL检查请求的访问权限当您调用GetCurrentProcess函数时,系统会返回一个伪句柄,其中包含 DACL 允许调用者的最大访问权限。

如果要读取或写入对象的 SACL,可以请求对进程对象ACCESS_SYSTEM_SECURITY访问权限。有关详细信息,请参阅访问控制列表 (ACL)SACL 访问权限

警告

具有此处提到的某些访问权限的进程可以使用它们来获得其他访问权限。例如,如果进程 A 具有进程 B 的句柄,并且具有PROCESS_DUP_HANDLE访问权限,则它可以复制进程 B 的伪句柄。这将创建一个对进程 B 具有最大访问权限的句柄。有关伪句柄的更多信息,请参阅GetCurrentProcess

受保护的进程

Windows Vista 引入了受保护的进程以增强对数字权限管理的支持。系统限制对受保护进程和受保护进程的线程的访问。

不允许从进程到受保护进程的以下标准访问权限:

  • 删除

  • READ_CONTROL

  • WRITE_DAC

  • WRITE_OWNER

不允许从进程到受保护进程的以下特定访问权限:

  • PROCESS_ALL_ACCESS

  • PROCESS_CREATE_PROCESS

  • PROCESS_CREATE_THREAD

  • PROCESS_DUP_HANDLE

  • PROCESS_QUERY_INFORMATION

  • PROCESS_SET_INFORMATION

  • PROCESS_SET_QUOTA

  • PROCESS_VM_OPERATION

  • PROCESS_VM_READ

  • PROCESS_VM_WRITE

PROCESS_QUERY_LIMITED_INFORMATION权被引入到提供访问的信息可以通过一个子集PROCESS_QUERY_INFORMATION

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多