码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Windows原理深入学习系列-强制完整性检查


    这是[信安成长计划]的第 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

  • 相关阅读:
    大语言模型-LLM简介
    【晨读算法】为什么经常看到使用朴素贝叶斯公式的时候把分母忽略了?
    IDC报告:国内游戏云市场,腾讯云用量规模位列第一
    【华为OD机试python】分割数组的最大差值【2023 B卷|100分】
    HTML5期末大作业:HTML+CSS茶叶官网网页设计实例 企业网站制作
    NextJS开发:shadcn/ui中Button组件扩展增加图标
    SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
    开源利器:it-tools 项目介绍
    简要解析@SpringBootApplication
    数据资产如何入表?有哪些步骤
  • 原文地址:https://www.cnblogs.com/SecSource/p/16134155.html
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号