windows 进程降权和提权代码示例(2)

强制完整性控制 - Win32 应用程序 |Microsoft 学习

一、强制完整性控制

  • 03/26/2021
  • 7 个参与者
反馈

本文内容

  1. 诚信标签
  2. 进程创建
  3. 强制性政策

强制完整性控制 (MIC) 提供了一种用于控制对安全对象的访问的机制。此机制是对自主访问控制的补充,在根据对象的自主访问控制列表 (DACL) 评估访问检查之前评估访问权限。

MIC 使用完整性级别和强制策略来评估访问权限。为安全主体和安全对象分配完整性级别,以确定其保护或访问级别。例如,具有低完整性级别的主体无法写入具有中等完整性级别的对象,即使该对象的 DACL 允许对主体进行写入访问。

Windows 定义了四个完整性级别:低、中、高和系统。标准用户接收中等,高级用户接收高。您启动的进程和您创建的对象将获得您的完整性级别(中或高),如果可执行文件的级别较低,则为低;系统服务接收系统完整性。缺少完整性标签的对象将作系统视为中等对象;这可以防止低完整性代码修改未标记的对象。此外,Windows 确保以低完整性级别运行的进程无法访问与应用程序容器关联的进程。

诚信标签

完整性标签指定安全对象和安全主体的完整性级别。完整性标签由完整性 SID 表示。安全对象的完整性 SID 存储在其系统访问控制列表 (SACL) 中。SACL 包含一个 SYSTEM_MANDATORY_LABEL_ACE 访问控制条目 (ACE),该条目又包含完整性 SID。任何没有完整性 SID 的对象都被视为具有中等完整性。

安全主体的完整性 SID 存储在其访问令牌中。访问令牌可以包含一个或多个完整性 SID。

有关定义的完整性 SID 的详细信息,请参阅已知 SID。

进程创建

当用户尝试启动可执行文件时,将创建新进程,并将用户完整性级别和文件完整性级别降至最低。这意味着新进程的执行永远不会比可执行文件的完整性更高。如果管理员用户执行低完整性程序,则新进程的令牌将以低完整性级别运行。这有助于保护启动不可信代码的用户免受该代码执行的恶意行为的侵害。用户数据处于典型的用户完整性级别,针对此新进程进行写保护。

强制性政策

安全对象 SACL 中的 SYSTEM_MANDATORY_LABEL_ACE ACE 包含一个访问掩码,该掩码指定向完整性级别低于对象的主体授予的访问权限。为此访问掩码定义的值为 SYSTEM_MANDATORY_LABEL_NO_WRITE_UPSYSTEM_MANDATORY_LABEL_NO_READ_UP 和 SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP。默认情况下,系统使用 SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 访问掩码创建每个对象。

每个访问令牌还指定一个强制策略,该策略在创建令牌时由本地安全机构 (LSA) 设置。此策略由与令牌关联的 TOKEN_MANDATORY_POLICY 结构指定。可以通过调用 GetTokenInformation 函数来查询此结构,并将 TokenInformationClass 参数的值设置为 TokenMandatoryPolicy

二、降至指定权限运行进程办法:设置进程完整性级别即可。

// showpriv_03.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include <Windows.h>
#include <tchar.h>
#include <sddl.h>
#pragma comment(lib, "Advapi32.lib")void CreateIntegritySidProcess(LPCWSTR wszIntegritySid)
{BOOL bRet = FALSE;HANDLE hToken = NULL;HANDLE hNewToken = NULL;// Notepad is used as an exampleWCHAR wszProcessName[MAX_PATH] = L"C:\\Windows\\System32\\Notepad.exe";PSID pIntegritySid = NULL;TOKEN_MANDATORY_LABEL TIL = { 0 };PROCESS_INFORMATION ProcInfo = { 0 };STARTUPINFO StartupInfo = { 0 };ULONG ExitCode = 0;__try{if (FALSE == OpenProcessToken(GetCurrentProcess(), MAXIMUM_ALLOWED, &hToken)){__leave;}//复制tokenif (FALSE == DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL,SecurityImpersonation, TokenPrimary, &hNewToken)){__leave;}//根据已知sid获取完整性级别TIL.Label.Sid
/*
// Mandatory Label Authority.
#define SECURITY_MANDATORY_LABEL_AUTHORITY          {0,0,0,0,0,16}
#define SECURITY_MANDATORY_UNTRUSTED_RID            (0x00000000L)
#define SECURITY_MANDATORY_LOW_RID                  (0x00001000L)
#define SECURITY_MANDATORY_MEDIUM_RID               (0x00002000L)
#define SECURITY_MANDATORY_MEDIUM_PLUS_RID          (SECURITY_MANDATORY_MEDIUM_RID + 0x100)
#define SECURITY_MANDATORY_HIGH_RID                 (0x00003000L)
#define SECURITY_MANDATORY_SYSTEM_RID               (0x00004000L)
#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID    (0x00005000L)
*/if (FALSE == ConvertStringSidToSid(wszIntegritySid, &pIntegritySid)){__leave;}TIL.Label.Attributes = SE_GROUP_INTEGRITY;TIL.Label.Sid = pIntegritySid;// Set the process integrity levelif (FALSE == SetTokenInformation(hNewToken, TokenIntegrityLevel, &TIL,sizeof(TOKEN_MANDATORY_LABEL) + GetLengthSid(pIntegritySid))){__leave;}bRet = CreateProcessAsUser(hNewToken, NULL,wszProcessName, NULL, NULL, FALSE,0, NULL, NULL, &StartupInfo, &ProcInfo);}__finally{if (NULL != pIntegritySid){LocalFree(pIntegritySid);pIntegritySid = NULL;}if (NULL != hNewToken){CloseHandle(hNewToken);hNewToken = NULL;}if (NULL != hToken){CloseHandle(hToken);hToken = NULL;}}printf("%ls bRet:%d\n", wszIntegritySid, bRet);//%ls打印宽字符
}int _tmain(int argc, _TCHAR* argv[])
{// INTEGRITY_LEVEL_SYSTEM:      "S-1-16-16384" System Mandatory Level
// INTEGRITY_LEVEL_HIGH:        "S-1-16-12288" High Mandatory Level
// INTEGRITY_LEVEL_MEDIUM:      "S-1-16-8192"  Medium Mandatory Level
// INTEGRITY_LEVEL_MEDIUM_LOW:  "S-1-16-6144"
// INTEGRITY_LEVEL_LOW:         "S-1-16-4096"  Low Mandatory Level
// INTEGRITY_LEVEL_BELOW_LOW:   "S-1-16-2048"
// INTEGRITY_LEVEL_UNTRUSTED:   "S-1-16-0"     Untrusted Mandatory Level//
// Mandatory Label Authority.
//
/*
#define SECURITY_MANDATORY_LABEL_AUTHORITY          {0,0,0,0,0,16}
#define SECURITY_MANDATORY_UNTRUSTED_RID            (0x00000000L)
#define SECURITY_MANDATORY_LOW_RID                  (0x00001000L)
#define SECURITY_MANDATORY_MEDIUM_RID               (0x00002000L)
#define SECURITY_MANDATORY_MEDIUM_PLUS_RID          (SECURITY_MANDATORY_MEDIUM_RID + 0x100)
#define SECURITY_MANDATORY_HIGH_RID                 (0x00003000L)
#define SECURITY_MANDATORY_SYSTEM_RID               (0x00004000L)
#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID    (0x00005000L)*///创建不同权限的进程CreateIntegritySidProcess(L"S-1-16-16384");//system权限进程CreateIntegritySidProcess(L"S-1-16-12288");//high权限进程CreateIntegritySidProcess(L"S-1-16-8192");//medium权限进程CreateIntegritySidProcess(L"S-1-16-4096");//low权限进程CreateIntegritySidProcess(L"S-1-16-6144");//INTEGRITY_LEVEL_MEDIUM_LOWCreateIntegritySidProcess(L"S-1-16-2048");//INTEGRITY_LEVEL_BELOW_LOWCreateIntegritySidProcess(L"S-1-16-0");//INTEGRITY_LEVEL_UNTRUSTEDsystem("puase");return 0;
}

三、看下实际效果:

授权) (模拟级别 - Win32 apps | Microsoft Learn

注意:DuplicateTokenEx [in] TokenType主令牌和模拟令牌限制,具体参考官网介绍:
        if (FALSE == DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL,
            SecurityImpersonation, TokenPrimary, &hNewToken))
        {
            __leave;
        }

DuplicateTokenEx 函数 (securitybaseapi.h) - Win32 apps | Microsoft Learn

DuplicateTokenEx 函数 (securitybaseapi.h)

  • 项目
  • 2023/08/25

反馈

本文内容

  1. 语法
  2. parameters
  3. 返回值
  4. 注解

显示另外 2 个

DuplicateTokenEx 函数创建一个复制现有令牌的新访问令牌。 此函数可以创建 主令牌 或 模拟令牌。

语法

C++复制

BOOL DuplicateTokenEx([in]           HANDLE                       hExistingToken,[in]           DWORD                        dwDesiredAccess,[in, optional] LPSECURITY_ATTRIBUTES        lpTokenAttributes,[in]           SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,[in]           TOKEN_TYPE                   TokenType,[out]          PHANDLE                      phNewToken
);

parameters

[in] hExistingToken

使用TOKEN_DUPLICATE访问权限打开的访问令牌的句柄。

[in] dwDesiredAccess

指定新令牌的请求访问权限。 DuplicateTokenEx 函数将请求的访问权限与现有令牌的任意访问控制列表 (DACL) 进行比较,以确定授予或拒绝了哪些权限。 若要请求与现有令牌相同的访问权限,请指定零。 若要请求对调用方有效的所有访问权限,请指定MAXIMUM_ALLOWED。

有关访问令牌访问权限的列表,请参阅 Access-Token 对象的访问权限。

[in, optional] lpTokenAttributes

指向 SECURITY_ATTRIBUTES 结构的指针,该结构指定新令牌 的安全描述符 ,并确定子进程是否可以继承令牌。 如果 lpTokenAttributes 为 NULL,则令牌将获取默认安全描述符,并且无法继承句柄。 如果安全描述符包含 系统访问控制列表 (SACL) ,则令牌ACCESS_SYSTEM_SECURITY访问权限,即使 未在 dwDesiredAccess 中请求也是如此。

若要在新令牌的安全描述符中设置所有者,调用方的进程令牌必须具有 SE_RESTORE_NAME 权限集。

[in] ImpersonationLevel

指定 SECURITY_IMPERSONATION_LEVEL 枚举中的值,该值指示新标记的模拟级别。

[in] TokenType

指定 TOKEN_TYPE 枚举中的下列值之一。

展开表

含义

TokenPrimary

新令牌是可在 CreateProcessAsUser 函数中使用的主令牌。

TokenImpersonation

新令牌是模拟令牌。

[out] phNewToken

指向接收新令牌的 HANDLE 变量的指针。

使用完新令牌后,调用 CloseHandle 函数以关闭令牌句柄。

返回值

如果函数成功,该函数将返回非零值。

如果函数失败,则返回零。 要获得更多的错误信息,请调用 GetLastError。

注解

DuplicateTokenEx 函数允许创建可在 CreateProcessAsUser 函数中使用的主令牌。 这允许模拟客户端的服务器应用程序创建具有客户端 安全上下文 的进程。 请注意, DuplicateToken 函数只能创建对 CreateProcessAsUser 无效的模拟令牌。

下面是使用 DuplicateTokenEx 创建 主令牌的典型方案。 服务器应用程序创建一个线程,该线程调用某个模拟函数(如 ImpersonateNamedPipeClient)来模拟客户端。 然后,模拟线程调用 OpenThreadToken 函数来获取自己的令牌,该令牌是具有客户端安全上下文的 模拟令牌 。 线程在调用 DuplicateTokenEx 时指定此模拟令牌,并指定 TokenPrimary 标志。 DuplicateTokenEx 函数创建具有客户端安全上下文的主令牌

授权) (模拟级别

  • 项目
  • 2023/06/13
  • 6 个参与者

反馈

SECURITY_IMPERSONATION_LEVEL枚举定义了四个模拟级别,用于确定服务器可以在客户端上下文中执行的操作。

展开表

模拟级别说明
SecurityAnonymous服务器无法模拟或标识客户端。
SecurityIdentification服务器可以获取客户端的标识和特权,但不能模拟客户端。
SecurityImpersonation服务器可以在本地系统上模拟客户端的安全上下文。
SecurityDelegation服务器可以在远程系统上模拟客户端的安全上下文。

命名管道、RPC 或 DDE 连接的客户端可以控制模拟级别。 例如,命名管道客户端可以调用 CreateFile 函数以打开命名管道的句柄并指定服务器的模拟级别。

当命名管道、RPC 或 DDE 连接是远程连接时,将忽略传递给 CreateFile 以设置模拟级别的标志。 在这种情况下,客户端的模拟级别由服务器启用的模拟级别确定,该级别由目录服务中的服务器帐户上的标志设置。 例如,如果为服务器启用了委派,则客户端的模拟级别也将设置为委派,即使传递给 CreateFile 的标志指定了标识模拟级别。

DDE 客户端使用具有 SECURITY_QUALITY_OF_SERVICE 结构的 DdeSetQualityOfService 函数来指定模拟级别。 SecurityImpersonation 级别是命名管道、RPC 和 DDE 服务器的默认值。 ImpersonateSelf、DuplicateToken 和 DuplicateTokenEx 函数允许调用方指定模拟级别。 使用 GetTokenInformation 函数检索 访问令牌的模拟级别。

在 SecurityImpersonation 级别,线程的大多数操作发生在线程模拟令牌的安全上下文中,而不是发生在拥有线程的进程的主令牌中。 例如,如果模拟线程打开安全对象,则系统会使用模拟令牌来检查线程的访问。 同样,如果模拟线程创建新对象(例如通过调用 CreateFile 函数),则新对象的所有者是客户端 访问令牌的默认所有者。

但是,在以下情况下,系统使用进程的主令牌,而不是调用线程的模拟令牌:

  • 如果模拟线程调用 CreateProcess 函数,则新进程始终继承进程的主标记。
  • 对于需要 SE_TCB_NAME 特权的函数(例如 LogonUser 函数),系统始终检查进程主令牌中的特权。
  • 对于需要SE_AUDIT_NAME特权的函数(例如 ObjectOpenAuditAlarm 函数),系统始终检查进程主令牌中的特权。
  • 在调用 OpenThreadToken 函数时,线程可以指定函数是使用模拟令牌还是主令牌来确定是否授予请求的访问权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6782.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Redis - Set 集合

一、基本了解 集合类型也是保存多个字符串类型的元素的&#xff0c;但和列表类型不同的是&#xff0c;集合中1&#xff09;元素之间是⽆序 的2&#xff09;元素不允许重复&#xff0c;如图2-24所⽰。⼀个集合中最多可以存储 32 2 − 1 个元素。Redis除了⽀持 集合内的增删查改…

Java教学辅助:SpringBoot平台实战技巧

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Codeforces Round 970(Div. 3) (预处理后缀, 一道适合py的题)

F. Sakurakos Box 传送门&#xff1a;Problem - 2008F - Codeforces Sakurako has a box with nn balls. Each ball has its value. She wants to bet with her friend that if the friend randomly picks two balls from the box (it could be two distinct balls, but they…

OpenDroneMap Webodm

OpenDroneMap & Webodm OpenDroneMap Webodm 开源无人机航拍系列图像及其它系列图像三维重建软件。很棒的开源无人机测绘软件OpenDroneMap,从航拍图像生成精确的地图、高程模型、3D 模型和点云。 应用领域 Mapping & Surveying 测绘和测量 从图像测量获得高精度的可…

Github 2024-11-02 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-02统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目2Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero Genera…

前端八股文(四)计网 持续更新中。。。

计网相关面试题 1.http缓存的方式 缓存是为了重复使用而被存储的&#xff0c;可以减少浏览器和服务器之间通信的次数、降低网络延迟、加速页面加载、提高用户体验性等。不但能使网页打开速度更快&#xff0c;还能减少服务器的压力。 浏览器缓存策略&#xff1a; 强缓存&…

项目一:使用 Spring + SpringMVC + Mybatis + lombok 实现网络五子棋

一&#xff1a;系统展示: 二&#xff1a;约定前后端接口 2.1 登陆 登陆请求&#xff1a; GET /login HTTP/1.1 Content-Type: application/x-www-form-urlencodedusernamezhangsan&password123登陆响应&#xff1a; 正常对象&#xff1a;正常对象会在数据库中存储&…

vue 插槽

参考文档 插槽 Slots | Vue.js 1. 基本概念 Vue的插槽&#xff08;slot&#xff09;&#xff0c;简单来说&#xff0c;就是一种 定义在组件中的 “占位符”。用于实现现组件的内容分发和复用。如下&#xff0c;是一个简单的默认插槽&#xff1a; <!-- Parent.vue --> &…

信息流不同行业账户流量池有区别吗?

在投放过程中&#xff0c;我们经常遇到这么一个问题&#xff0c;不同行业账户投放&#xff0c;流量池会有区别嘛&#xff1f;我认为是有的&#xff0c;那么对于我们而言&#xff0c;怎么样才能利用好媒体对于流量池的划分效果&#xff0c;可以从以下几个方面来进行考虑&#xf…

[Tex] Ubuntu 搭建 TexWork

更新软件库 打开终端&#xff1a; sudo apt --update sudo apt --upgrade 安装 texlive 完整版与 TexWorks 界面 sudo apt install texlive-full sudo apt install texworks

从0开始深度学习(26)——汇聚层/池化层

池化层通过减少特征图的尺寸来降低计算量和参数数量&#xff0c;同时增加模型的平移不变性和鲁棒性。汇聚层的主要优点之一是减轻卷积层对位置的过度敏感。 1 最大汇聚层、平均汇聚层 汇聚层和卷积核一样&#xff0c;是在输入图片上进行滑动计算&#xff0c;但是不同于卷积层的…

地图带你看三山五岳-基于Leaflet的重点旅游专题实现

目录 前言 一、关于三山五岳 1、三山五岳简介 2、位置信息检索 二、使用Leaflet进行WebGIS标注 1、基础数据准备 2、点位标绘 三、实际效果 1、整体效果 2、东岳泰山 3、西岳华山 4、南岳衡山 5、北岳恒山 6、 中岳嵩山 四、总结 前言 在信息技术飞速发展的今…

营销邮件策略:提升打开率和转化率的技巧!

营销邮件的发送技巧有哪些&#xff1f;如何提高营销邮件召唤力&#xff1f; 随着邮件数量的激增&#xff0c;如何确保您的营销邮件能够脱颖而出&#xff0c;提升打开率和转化率&#xff0c;成为了每个营销人员必须面对的挑战。MailBing将深入探讨一系列有效的营销邮件策略&…

libaom 源码分析:帧间运动矢量预测

AV1 帧间运动矢量预测原理 运动矢量可以被相邻块预测,这些相邻块可以是空域相邻块,或位于参考帧中的时域相邻块;通过检查所有这些块,将确定一组运动矢量预测器,并用于编码运动矢量信息。空域运动矢量预测 两组空域相邻块可以被利用寻找空域 MV 预测器,第一组包括当前块的…

轮播图【HTML+CSS+JavaScript】

给大家分享一个很好看的轮播图&#xff0c;这个也是之前看到别人写的效果感觉很好看&#xff0c;所以后面也自己实现了一下&#xff0c;在这里分享给大家&#xff0c;希望大家也可以有所收获 轮播图效果&#xff1a; 视频效果有点浑浊&#xff0c;大家凑合着看&#xff0c;大家…

OneRestore: A Universal Restoration Framework for Composite Degradation 论文阅读笔记

这是武汉大学一作单位的一篇发表在ECCV2024上的论文&#xff0c;文章代码开源&#xff0c;文章首页图如下所示&#xff0c;做混合图像干扰去除&#xff0c;还能分别去除&#xff0c;看起来很牛逼。文章是少见的做混合图像干扰去除的&#xff0c;不过可惜只包含了3种degradation…

基于Springboot的任务发布平台设计与实现(源码齐全+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。你想解决的问题&#xff0c;今天给大家介绍…

centos7 kafka高可用集群安装及测试

前言 用三台虚拟机centos7 搭建高可用集群&#xff0c;及测试方法 高可用搭建的方法&#xff0c;参考&#xff1a;https://blog.csdn.net/u011197085/article/details/134070318 高可用搭建 1、安装配置zookeeper集群 下载zookeeper 注&#xff1a;zookeeper链接如果失效&a…

30条勒索病毒处置原则

当前&#xff0c;勒索病毒在全球范围内肆虐&#xff0c;成为企业数据资产安全的头号威胁。这些狡猾的恶意软件&#xff0c;如同网络空间中的幽灵&#xff0c;不断寻找并利用系统的漏洞&#xff0c;通过加密数据或窃取敏感信息&#xff0c;向企业索取高额赎金。一旦感染&#xf…

推荐一款业内领先的建模工具:SAP PowerDesigner

SAP PowerDesigner是一款业内领先的建模工具&#xff0c;帮助您改进商务智能&#xff0c;打造更卓越的信息架构。通过该软件的元数据管理功能&#xff0c;可以构建关键信息资产的 360 度全方位视图&#xff0c;从而使数据管理、BI、数据集成和数据整合工作大获裨益。其分析功能…