论坛首页 开源情报交流区 阅读主题

[原创]简单的"DACLs 和 ACEs"利用之阻塞进程句柄

324 浏览 17 回复
#1 楼主 2026-06-01 21:08:48
微软对于DACLs 和 ACEs描述Windows 访问控制机制:每个 Windows 内核对象(例如文件、进程、线程等)都有一个安全描述符(Security Descriptor)。安全描述符包含了自主访问控制列表(DACL)以及其他安全信息。DACL 是一系列访问控制条目(ACE)的列表,每个 ACE 定义了特定的用户或组对该对象的操作权限。DACL 和 ACE 的工作原理:DACL: DACL 就像一个对象的“访问权限清单”,它决定了谁可以对这个对象执行哪些操作。ACE: 每个 ACE 都是 DACL 中的一个条目,它包含以下信息:受托人 (Trustee): 可以是用户、组或特殊账户(例如“Everyone”、“SYSTEM”)。访问权限 (Access Mask): 指定允许或拒绝的操作类型(例如读取、写入、执行、删除、查询信息等)。ACE 类型 (Type): 可以是允许访问(Allow ACE)或拒绝访问(Deny ACE)。访问控制过程:当一个进程尝试访问一个对象时,Windows 会检查对象的安全描述符。系统会提取 DACL 并遍历其中的 ACE,检查 ACE 的受托人是否与请求进程的访问令牌匹配。如果找到匹配的 允许 ACE,并且允许了请求的全部权限,则授予访问权限,并停止检查。如果找到匹配的 拒绝 ACE,则拒绝访问权限,并停止检查。如果检查完所有 ACE 都找不到匹配的允许 ACE,则拒绝访问。拒绝 ACE 优先: 如果既有允许 ACE 也有拒绝 ACE,则拒绝 ACE 优先。ACE 顺序重要: ACE 在 DACL 中的顺序很重要,因为系统是按照顺序检查 ACE,直到授予或拒绝访问。如何阻止其他进程打开句柄:要阻止其他进程打开你的进程句柄,你需要修改你进程的安全描述符中的 DACL,添加一个拒绝访问的 ACE。这个 ACE 需要满足以下条件:受托人: 你需要决定拒绝哪个用户或组的访问,通常拒绝当前用户本身或者所有用户的访问。访问权限: 你需要拒绝所有进程访问权限 (PROCESS_ALL_ACCESS)。使用 SetSecurityInfo 设置 DACL:SetSecurityInfo 函数允许你修改内核对象的安全描述符,包括 DACL。当使用 SetSecurityInfo 设置 DACL_SECURITY_INFORMATION 时,它会用你提供的新的 DACL 替换 原有的 DACL。
也是正因为如此,原有的全部被替换,所以仅仅剩下一个拒绝的. 最后附上代码:
被替换DACL的进程(保护进程)进行OpenProcess的进程(攻击进程):#include <windows.h>

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-285347.htm
#2 2026-06-01 21:08:48
mark
#3 2026-06-01 21:08:48
感谢分享!帖子深入解析了Windows进程访问控制,并附代码。如需更直观理解,可用思维导图梳理流程。


最后于 2025-6-17 15:15
被mb_cizqyhuh编辑

,原因:
#4 2026-06-01 21:08:48
mark
#5 2026-06-01 21:08:48
牛逼牛逼
#6 2026-06-01 21:08:48
mark
#7 2026-06-01 21:08:48
不能阻止DEBUGGER打开进程
#8 2026-06-01 21:08:48
wwwq
#9 2026-06-01 21:08:48
mark
#10 2026-06-01 21:08:48
mark
#11 2026-06-01 21:08:48
学习学习
#12 2026-06-01 21:08:48
mark
#13 2026-06-01 21:08:48
mark
#14 2026-06-01 21:08:48
mark
#15 2026-06-01 21:08:48
也太厉害了吧
#16 2026-06-01 21:08:48
Thank so much!
‹ 上一页 1 2 下一页 ›

请登录后参与讨论

立即登录 注册账号