大佬教程收集整理的这篇文章主要介绍了Windows原理深入学习系列-强制完整性检查,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是[信安成长计划]的第 24 篇文章
0x01 介绍
0x02 逆向分析 Win10_x64_20H2
0x03 总结
0x04 参考文章
最近因为一些事情,拖更了三个周,大家见谅啊,后面还会开始一些其他的系列内容,还等着大家来捧场了。
现在我们接着之前的进度,继续完成 Windows 原理的学习。
在刚开始的时候,我们介绍了强制完整性控制的机制,这次就来看一下在实际的权限检查当中是如何进行的。
这次也还是接着上一次的 ObpGrantAccess 函数往后分析了,根据名字也很容易能够判断出这里的作用
不清楚为什么从 ObpGrantAccess 分析的,可以去看一下上一篇文章的介绍部分
在进入函数以后,就是一堆保存堆栈、赋值等等操作
紧接着会有一些权限的判断,这些也暂时不是现在的关键
接着判断 SACL 中是否有有效内容,获取前的最后的判断
然后就是我们非常熟悉的内容了是否是相对地址,忘记这块内容的可以参考之前关于访问控制列表的文章
获取到完整性等级相关的 ACE
接着就从 ACE 当中获取到需要的内容
紧接着就是我们非常熟悉的函数 SepCopyTokenIntegrity,这个在刚开始分析强制完整性控制的时候有分析过
它的主要操作就是根据 Token 中的 IntegrityLevelIndex,从 UserAndGroups 当中得到当前的完整性等级
然后就是最关键的比较了,对两个 Sid 进行比较
根据分析可以知道 r12 就是通过 SepCopyTokenIntegrity 从当前的 Token 中取出的完整性等级信息
另一个 rbp,就是从 SACL 当中取出来的完整性等级
r12 的来源就是当前上下文的 Token 信息
而 SACL 的来源并不在当前,一直往前追,可以看到它是从 SeAccessCheck 的 rcx 当中来的,根据描述也能明白这个是被访问对象的信息
这样也就基本完成了对完整性信息的检测,对于 RtlEqualSid 函数,之前也进行过分析,这里也就不再提及了
在之前我也一直有一个疑问,我刚开始是通过 SepCopyTokenIntegrity 来得到进程的完整性等级的,但是为什么网上有很多的资料都说完整性等级是存储在 SACL 当中的。
从这里也就可以得知,两个取出来的都是完整性等级信息,不过它们所代表的情况是不一样的。
在进行权限验证的时候,会通过 SepCopyTokenIntegrity 取出当前的完整性等级,然后从目标对象的 SACL 当中获得目标的完整性等级,然后进行相应的判断和验证。
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原理深入学习系列-强制完整性检查全部内容,希望文章能够帮你解决Windows原理深入学习系列-强制完整性检查所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。