
我通往信息安全的道路始于一个令人惊讶的发现:“安全≠加密”。 现在,这种说法看起来简单而明显,在第一年就意识到这一事实,产生了与精神原子弹可比的效果。 信息安全受到扩展主题领域边界的攻击:事实证明,加密只是防御的一道防线,最后还存在法律,组织和物理上的限制。 理论方面之一是“所有信息安全问题均由主体对对象的访问来描述”。 他记忆,画出了凭证和自由访问模式,被告知,通过和遗忘。
我专门研究Windows应用程序的安全性。 通常,对完全不同的访问权限的研究占了研究的很大一部分。 为了使搜索奇怪或不正确的访问权限的过程自动化,我必须了解SDDL(安全描述符定义语言)。 谁有兴趣学习以SDDL形式读取权限(例如,类似
O:SYG:SYD:(A ;; CCLCSWLOCRRC ;;; IU)(A ;; CCLCSWLOCRRC ;;; SU)(A ;; CCLCSWRPWPDTLOLOCRRC ;;; SY) (A ;; CCDCLCSWRPWPDTLOCRSDRCWDWO ;;; BA) ),并熟悉使用此格式的描述符的实用程序,欢迎使用cat。
SDDL格式
SDDL是一个字符串,以文本形式描述访问权限。 最常见的情况包括3个部分:所有者,组和DACL访问权限。 有时会添加SACL部分-审计部分(如果对象的操作符合SACL规则,则会创建一个系统事件,该事件很容易被各种系统跟踪)。 描述符如下所示:
O:<所有者> G:<组> D:<DACL访问规则> S:<SACL审核规则>

因此,以上示例可以分解如下:
- O:SY
- G:SY
- D:(A ;; CCLCSWLOCRRC ;;; IU)(A ;; CCLCSWLOCRRC ;; SU)(A ;; CCLCSWRPWPDTLOCRRCRC ;; SY)(A ;; CCDCLCSWRPWPDTLOCRSDRCWDRC ;;; BA)
所有者和组可以表示为用户或OS的组的SID,也可以表示为特殊缩写。 例如,在这种情况下,所有者和组SY是本地系统帐户(NT AUTHORITY \ SYSTEM)。 缩写词列表(不幸的是,并不详尽)可以在
这里找到。
访问规则由DACL标志和ACE(访问控制项)字符串的枚举组成。
这里介绍了ACE的详细分析,我们认为最重要的。 每条ACE行都用括号括起来,括号内的数据用分号分隔。
最感兴趣的是第一,第三和最后一组。 这是访问类型(允许的“ A”,禁止的“ D”),操作列表和访问主题的名称。 上面示例中的第一个DACL规则:(A ;; CCLCSWLOCRRC ;;; IU),我们将详细考虑。

- “ A”-规则允许对主体采取行动;
- “ CC”,“ LC”,“ SW”,“ LO”,“ CR”,“ RC”-允许的动作列表;
- “ IU”-此缩写表示“交互式登录的用户”组。
仍然有待了解究竟允许什么。 这些神秘的“ CC”,“ LC”,“ SW”,“ LO”,“ CR”,“ RC”是什么意思?
在这里,我们在等待另一个陷阱-并非总是可以通过减少来精确地指出行动。 可以说,它们是特定于上下文的。 例如,如果我们在谈论使用服务的权利,那么WP就是“停止服务”,如果是关于文件,则是“执行”,如果是关于文件夹,则是“遍历”(如果不可能,则按名称访问文件夹中的文件)列出内容)。 一些描述在
这里 ,一些
在这里 ,世界在一个线程上。
嘿,您非常想念DACL标志,ACE标志,继承是的,的确如此,这都是非常重要和有趣的,但是并不普遍。 我专注于大众。 如果是异常标志的单一表现形式,则在手动模式下将更易于理解。
自动化技术
Sysinternals实用程序确实对我有帮助,即
进程监视器和
访问检查 (也称为procmon和accesschk)。 第一个允许您实时查看文件和注册表访问,第二个允许您从操作系统收集有关安全描述符的信息。
顺便说一句,在OS本身中,如果没有人看到,则具有权限的窗口如下所示:

不幸的是,不能通过缩小对特定操作的权限请求来过滤accesschk的输出。 Process Monitor仅显示特定时刻的实际呼叫,并且您得到的请求没有受到直接影响过于准确。 另外,我想提供一个备忘录来说明什么样的用户组是
NO或
NS ,以及CC和RC后面隐藏着什么样的动作。
因此诞生了一个简单的实用程序,用于查看和过滤SDDL记录。
使用方法
使用该实用程序很简单,只需三个步骤:
- 获取SDDL记录。
- 定义规则过滤器。
- 查看报告。

阅读有关每个步骤的更多信息。
获取SDDL。 要获取SDDL记录,可以使用实用程序中内置的功能(按钮1、2、3或4),或下载先前收到的列表(按钮5)。 请注意,访问权限的请求是代表启动SDDL Viewer的用户提出的,因此在某些情况下,值得以普通用户和管理员身份运行该程序。 好吧,通常,带有SDDL行的字段是可编辑的-您至少可以手动重写它。
过滤根据两个参数进行:用户组和访问权限。 组和用户列表基于SDDL中提到的所有用户。 请注意“翻译SID(6)”复选框-如果已安装,则用户和组的SID将在可能的情况下转换为相对于当前计算机的名称。 权限列表排列得更加巧妙-您需要选择权限类别(如果SDDL充满了实用程序本身,则将自动选择必要的类别)。此外,权限列表中更清楚地突出显示了SDDL中存在的权限。
该报告只是解密SDDL和应用过滤器的结果。 如果在列表中选择每行,则可以找到更详细的信息(是的,正是我使用此功能才发现问题,这引起了
对.NET内部的
一些研究 )。
总结
源代码可在
github上找到 。 二进制文件也位于“
发行”部分。
我的公用事业计划:
- 在SDDL的输入字段中添加搜索-仍然仅过滤是不够的。
- 添加启动参数,使构建报告时无需使用可视部件。
- 也许您应该从进程,共享文件夹和打印机中添加SDDL填充?
我很高兴听到评论中的建议。