这是[信安成长计划]的第 24 篇文章

0x00 目录

0x01 介绍

0x02 逆向分析 Win10_x64_20H2

0x03 总结

0x04 参考文章

最近因为一些事情,拖更了三个周,大家见谅啊,后面还会开始一些其他的系列内容,还等着大家来捧场了。

现在我们接着之前的进度,继续完成 Windows 原理的学习。

在刚开始的时候,我们介绍了强制完整性控制的机制,这次就来看一下在实际的权限检查当中是如何进行的。

0x01 介绍

这次也还是接着上一次的 ObpGrantAccess 函数往后分析了,根据名字也很容易能够判断出这里的作用

不清楚为什么从 ObpGrantAccess 分析的,可以去看一下上一篇文章的介绍部分

0x02 逆向分析 Win10_x64_20H2

在进入函数以后,就是一堆保存堆栈、赋值等等操作

紧接着会有一些权限的判断,这些也暂时不是现在的关键

接着判断 SACL 中是否有有效内容,获取前的最后的判断

然后就是我们非常熟悉的内容了是否是相对地址,忘记这块内容的可以参考之前关于访问控制列表的文章

获取到完整性等级相关的 ACE

接着就从 ACE 当中获取到需要的内容

紧接着就是我们非常熟悉的函数 SepCopyTokenIntegrity,这个在刚开始分析强制完整性控制的时候有分析过

它的主要操作就是根据 Token 中的 IntegrityLevelIndex,从 UserAndGroups 当中得到当前的完整性等级

然后就是最关键的比较了,对两个 Sid 进行比较

根据分析可以知道 r12 就是通过 SepCopyTokenIntegrity 从当前的 Token 中取出的完整性等级信息

另一个 rbp,就是从 SACL 当中取出来的完整性等级

r12 的来源就是当前上下文的 Token 信息

而 SACL 的来源并不在当前,一直往前追,可以看到它是从 SeAccessCheck 的 rcx 当中来的,根据描述也能明白这个是被访问对象的信息

这样也就基本完成了对完整性信息的检测,对于 RtlEqualSid 函数,之前也进行过分析,这里也就不再提及了

0x03 总结

在之前我也一直有一个疑问,我刚开始是通过 SepCopyTokenIntegrity 来得到进程的完整性等级的,但是为什么网上有很多的资料都说完整性等级是存储在 SACL 当中的。

从这里也就可以得知,两个取出来的都是完整性等级信息,不过它们所代表的情况是不一样的。

在进行权限验证的时候,会通过 SepCopyTokenIntegrity 取出当前的完整性等级,然后从目标对象的 SACL 当中获得目标的完整性等级,然后进行相应的判断和验证。

0x04 参考文章

1.https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-token_mandatory_policy

2.https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-seaccesscheck

3.https://docs.microsoft.com/zh-cn/windows-hardware/drivers/ddi/ntifs/ns-ntifs-_security_descriptor

4.https://docs.microsoft.com/en-us/windows-hardware/drivers/ifs/security-descriptor-control

5.https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-ace_header

Windows原理深入学习系列-强制完整性检查的更多相关文章

  1. Windows原理深入学习系列-强制完整性控制

    欢迎关注微信公众号:[信安成长计划] 0x00 目录 0x01 介绍 0x02 完整性等级 0x03 文件读取测试 0x04 进程注入测试 0x05 原理分析 Win10_x64_20H2 0x06 ...

  2. Windows原理深入学习系列-信任等级检查

    这是[信安成长计划]的第 23 篇文章 0x00 目录 0x01 介绍 0x02 逆向分析 Win10_x64_20H2 0x03 WinDBG 0x04 参考文章 在之前的时候,一直以为 SACL ...

  3. Windows原理深入学习系列-访问控制列表

    这是[信安成长计划]的第 19 篇文章 0x00 目录 0x01 介绍 0x02 DACL 0x03 创建DACL 0x04 文件读取测试 0x05 进程注入测试 0x06 原理分析 Win10_x6 ...

  4. Windows原理深入学习系列-访问控制列表-关于安全描述符的补充

    这是[信安成长计划]的第 20 篇文章 0x00 目录 0x01 安全描述符的结构 0x02 两个结构的不同点 0x03 真正的查询方案 0x04 参考文章 0x01 安全描述符的结构 在上一篇文章中 ...

  5. Windows原理深入学习系列-特权

    这是[信安成长计划]的第 21 篇文章 0x00 目录 0x01 介绍 0x02 结构分析 0x03 进程注入测试 0x04 参考文章 0x01 介绍 在 Token 当中还存在一个特别重要的内容-- ...

  6. Windows原理深入学习系列-Windows内核提权

    这是[信安成长计划]的第 22 篇文章 0x00 目录 0x01 介绍 0x02 替换 Token 0x03 编辑 ACL 0x04 修改 Privileges 0x05 参考文章 继续纠正网上文章中 ...

  7. Git 之Windows环境下学习系列

    Git .SVN .TFS   相同点 不同点 Git     版本控制 优点: 分布式版本控制.无需联网就能版本提交 开源 缺点 入门学习难度高 SVN   优点: 集中式版本控制. 个人开源 缺点 ...

  8. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  9. 转:深入Java集合学习系列:HashSet的实现原理

    0.参考文献 深入Java集合学习系列:HashSet的实现原理 1.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特 ...

随机推荐

  1. mybatis连接sql

    mysql6以上  com.mysql.cj.jdbc.Driver

  2. java-数据类型拓展

    import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;public class Demo03 { public static ...

  3. C语言知识点的实例

    编译环境:Visual Studio 2012 编程语言:C @ 目录 1.memcpy与'/0' 2.volatile的使用 3.数字转字符 4.memcpy len 与指针加减 len 的区别 5 ...

  4. 【Java分享客栈】Java程序员为争一口气熬夜硬刚CSS实现掘金首页

    前言 如果我做不了最厉害的Java工程师,那我就做Java工程师中最厉害的前端工程师. 前段时间,我默默给自己又喂了这碗心灵鸡汤-- 我不是很厉害的Java工程师,哪怕我已经工作八年,我依然觉得自己和 ...

  5. luoguP6623 [省选联考 2020 A 卷] 树(trie树)

    luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...

  6. 团队vue基础镜像选择思考

    前端镜像可以考虑使用nginx或者openresty; 镜像 大小 说明 nginx:1.20.2-alpine 8.41 MB 最小最新版本 nginx:1.21.4 50.95 MB 最新版本 n ...

  7. Oracle问题解决记录

    一.前言 oracle这么一个庞大的东西,出点问题真是太常见了.开个博客,用于记录遇到的问题吧. 持续更新. 二.问题列表 归档日志满,引起的问题. 一台服务器,用了很久了,某天,出现了磁盘空间占满的 ...

  8. String 和StringBuffer、StringBuilder的区别?

    Java提供了:String.StringBuffer和StringBuilder,它们都是CharSequence的实现类,都可以作为字符串使用. String代表了字符序列不可变的字符串:而Str ...

  9. DateUtils互转工具类

    public class DateUtils { /** * 取系统默认时区ID */ private static final ZoneId ZONE_ID; static { ZONE_ID = ...

  10. jinfo介绍

    1. jinfo 1.1 简介 jinfo用于打印java的配置信息,这些配置信息包括: java system properties jvm命令行参数 通过查看这些配置信息,可以了解java进程的运 ...