Windows安全的心脏:揭秘访问控制模型如何决定谁能动我的奶酪

admin 2025年6月18日00:26:43评论0 views字数 2919阅读9分43秒阅读模式
Windows安全的心脏:揭秘访问控制模型如何决定谁能动我的奶酪

大家好,我是你们的技术探险家!上上篇文章中有小伙伴反映对windows访问控制模型不太了解,那么今天我们一起来学习一下这块儿基础内容。

你是否曾双击一个文件,却被一个无情的“拒绝访问”弹窗挡在门外?或者在配置共享文件夹时,被那张密密麻麻的“安全”选项卡搞得晕头转向?

这些日常操作的背后,隐藏着 Windows 安全体系最核心、最精妙的机制——访问控制模型 (Access Control Model)。它就像一个极其严谨的安保系统,在电光火石之间,精确地判断“你是谁”、“你想做什么”以及“你是否有权这么做”。

今天,就让我们一起深入这座“安全城堡”的心脏,揭开这套系统神秘的面纱。

🔑 第一部分:“你是谁?”—— 安全主体与它们的“身份证”(SID)

在 Windows 的世界里,能被授予权限的任何实体,无论是用户账户用户组还是计算机账户,都被称为 安全主体 (Security Principal)

而每个安全主体都拥有一个独一无二、终身不变的“身份证号码”,这就是 SID (Security Identifier)

  • SID 是什么?

    它是一串类似 S-1-5-21-xxxxxxxxxx-yyyyyyyyyy-zzzzzzzzzz-1001 的字符串。你的用户名“张三”可以改成“李四”,但你的 SID 永远不会变。Windows 在进行权限判断时,只认 SID,不认用户名

  • 为什么重要?

    这保证了身份的唯一性。即使你删除了一个叫 test 的用户,然后又创建了一个同名的 test 用户,它们的 SID 也绝不相同。系统不会把新用户误认为是旧用户。

  • 一些著名的 SID:

    • S-1-5-18: 代表 Local System (系统自身),拥有极高权限。
    • S-1-1-0: 代表 Everyone (所有人),一个需要被高度警惕的身份。

🎟️ 第二部分:“你能去哪?”—— 访问令牌 (Access Token) 的奥秘

当你成功登录系统后,Windows 不会让你拿着永久的“身份证”(SID) 到处跑。相反,它会为你生成一个临时的“门禁卡”或“通行证”,这就是 访问令牌 (Access Token)

  • 它是如何生成的?

    在你输入密码通过验证的那一刻,系统中的 LSA (Local Security Authority) 进程会为你创建一个访问令牌。之后,你启动的每一个程序,都会自动佩戴上这个令牌的副本。

  • 令牌里有什么?

    这张“通行证”上写满了关于你身份的关键信息:

    1. 你的用户 SID:证明你是谁。
    2. 你所属的所有组的 SID:这是关键!它列出了你是“管理员组”、“财务组”、“研发组”等所有家庭/团队的成员。
    3. 用户特权 (Privileges):列出了你能执行的特殊系统级操作,比如 SeShutdownPrivilege (关机权限)。
    4. 其他安全上下文信息...

核心概念:当你尝试访问一个文件时,你并不是直接出示你的“身份证”(SID),而是把你身上佩戴的这张包含了你所有身份信息(用户SID、组SID等)的**“通行证”(Access Token)**递给门口的“保安”。

📜 第三部分:“规则是什么?”—— 安全描述符与访问控制列表 (ACL)

现在,我们来到了“门口”。每一个需要被保护的 Windows 对象(文件、文件夹、注册表项、打印机等)都自带一个“保安”和一本“规则手册”,这套东西合称为 安全描述符 (Security Descriptor)

安全描述符主要包含两本重要的“名单”:

  1. DACL (Discretionary Access Control List) - 自主访问控制列表

    • 这是决定“是否放行”的核心。它就是那本详细的“访客规则手册”。
    • 手册里写满了一条条的规则,每一条规则被称为一个 ACE (Access Control Entry)
  2. SACL (System Access Control List) - 系统访问控制列表

    • 这不是用来控制访问的,而是**“审计规则手册”**。
    • 它定义了当某些人对这个文件做了某些事(比如“张三删除了它”),是否需要在系统的安全日志里记上一笔,供管理员事后审查。

ACE:规则手册里的每一行

每个 ACE 都非常明确,格式为:“[允许/拒绝] [某个SID] 进行 [某种操作]”

  • 例如:
    • Allow SID(张三) Read (允许张三读取)
    • Deny SID(访客组) Write (拒绝访客组写入)
    • Allow SID(管理员组) FullControl (允许管理员组完全控制)

👮‍♂️ 第四部分:“最终审判”—— 完整的访问检查流程

好了,所有角色都已登场。现在,让我们把整个流程串起来,看看当你双击一个文件时,Windows 是如何决定你的命运的。

场景:用户 Alice (属于 Users 组) 尝试写入report.docx 文件。

  1. 【出示通行证】Alice 的程序代表她,向操作系统内核请求写入 report.docx。程序同时递上了 Alice 的访问令牌 (Access Token)。这个令牌上清晰地写着:“我是 Alice (SID: ...-1001),我也是 Users 组 (SID: ...-545) 的成员”。

  2. 【保安审查规则】内核的安全引用监视器 (SRM) 拦下了这个请求。它找到了 report.docx 文件的安全描述符,并开始翻阅里面的 DACL (规则手册)

  3. 【逐条比对规则】SRM 会从上到下,逐一检查 DACL 中的每一条 ACE 规则:

    • 如果没有匹配的“拒绝”规则,SRM 会继续查找“允许”规则。
    • 它会把所有与 Alice 的令牌 SID 匹配的 Allow 规则都累加起来。
    • 比如,它找到一条 Allow SID(Users组) Read,又找到一条 Allow SID(Alice) Write。那么 Alice 的累加权限就是“读”和“写”。
    • SRM 会查看 ACE 中的 SID,是否与 Alice 的访问令牌中的任何一个 SID (她的用户 SID 或她所属的任何组的 SID) 匹配。
    • 如果找到一条匹配的 Deny Write (拒绝写入) 规则,审查立即结束,访问被拒绝!
    • 首先,检查所有“拒绝”规则。

    • 然后,检查所有“允许”规则。

  4. 【做出判决】

    • 在检查完所有 ACE 后,SRM 将 Alice 累加得到的“允许权限”与她最初请求的“写入权限”进行比较。
    • 因为累加权限中包含了“写入”,所以请求通过,访问被允许
    • 如果在检查完整个 DACL 后,仍然没有找到足够的 Allow 权限来满足请求,那么访问将同样被拒绝

黄金法则总结

  1. “拒绝”拥有最高优先权,一票否决。
  2. “允许”权限可以累加。
  3. 没有明确允许,就是隐式拒绝。

结语

从“你是谁”(SID),到“你有什么凭证”(Access Token),再到“规则是什么”(ACL/ACE),最后到“如何裁决”,这一整套精密的访问控制模型,构成了 Windows 安全的坚固心脏。

理解了这个过程,你下次再遇到“拒绝访问”时,就不会再感到困惑。你将能像一名真正的系统管理员一样,清晰地分析出问题所在:是用户的组身份不够?还是文件夹的 ACL 规则设置有误?或是被一条隐藏的“拒绝”规则挡住了去路?

掌握了它,你就掌握了 Windows 世界中最核心的“权力游戏”规则。

原文始发于微信公众号(格格巫和蓝精灵):Windows安全的心脏:揭秘访问控制模型如何决定“谁能动我的奶酪”

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月18日00:26:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Windows安全的心脏:揭秘访问控制模型如何决定谁能动我的奶酪https://cn-sec.com/archives/4172651.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息