精华内容
下载资源
问答
  • 设置NT安全描述符所有者的Helper类
  • 开发者不愿意触碰的一个东西:安全描述符 有一些Win32 API会带有一个可选的安全描述符(LPSECURITY_ATTRIBUTES)参数,大多数开发者为了简便传入了一个NULL值,这表明:API将获取一个默认的安全描述符。那么,这个...

    开发者不愿意触碰的一个东西:安全描述符

    有一些Win32 API会带有一个可选的安全描述符(LPSECURITY_ATTRIBUTES)参数,大多数开发者为了简便传入了一个NULL值,这表明:API将获取一个默认的安全描述符。那么,这个默认的安全描述符,到底是一个什么东西呢?今天来说道说道。

    当然,当我们碰到麻烦,第一个应该去的地方就应该是MSDN。

    里面是这么解释的:默认的DACL来自可继承的ACE(如果对象在一个层次结构中,例如文件系统或者注册表),否则,默认的DACL来自对象创建者的主Token或者模拟的Token。

    那么,什么是主Token呢?
    实际上,我也不知道。让我们写个小程序来研究研究吧。

     

    好吧,我承认,我写这篇文章的主要目的就是为了调用这个API: ConvertSecurityDescriptorToStringSecurityDescriptor。
    它可能是Win32 API中名字最长的一个函数了。如果你的眼力好的话,可能也看出来了,我在代码里使用了NT变量的命名风格,而不是常用的匈牙利风格。(我也只是玩玩而已啦)

    如果你执行上面的代码,则你应该会得到如下面所展示的一行东西:

     

    (这是个什么玩意?) 是的,我一开始也会这样问自己。

    让我们来翻译翻译:
    > “D: ” – 这里表明是一段DACL的开始。
    > “(A;;GA;;;S-…)” – 允许(Allow)我对”S-“的所有访问(Generic All)。默认情况下,每个用户对他们自己创建的进程拥有所有访问权限。
    > “(A;;GA;;;SY)” – 允许对”Local System”的所有访问(Generic All)。

    在接下来的文章中,我可能还会再翻译翻译DACL中那段最长的部分”S-“,请拭目以待。

    总结

    一般,我也是为了方便(其实是不想花时间研究),传入一个默认的安全描述符。
    在大多数情况下,这都能正常工作。
    但是,万一,有一天,你的应用场景中需要传入一个自定义的安全描述符,则可能就需要花些功夫研究研究本文里说的这个玩意儿了。
    也即:出来混,迟早都是要还的。

    最后

    Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
    本文来自:《What is the default security descriptor?》

    展开全文
  • 在获得对系统的访问权限后,对于尚未提升特权的攻击者,系统会授予什么级别的访问权限呢? 与其在主机上进行试验,...本文的目标就是建立一种审计方法,用于暴露由安全描述符错误配置的潜在风险。在建立方法之后...

    在获得对系统的访问权限后,对于尚未提升特权的攻击者,系统会授予什么级别的访问权限呢?

    与其在主机上进行试验,最终被系统提示拒绝访问,并在测试过程中会产生嘈杂的日志,不如选择一个更好的策略,那就是首先了解 Windows 授予非特权用户的权限。

    在 Windows 中,几乎所有的访问权限都由安全描述符控制。 本文的目标就是建立一种审计方法,用于暴露由安全描述符错误配置的潜在风险。 在建立方法之后,我们将把它应用到一个实际的用例中: 在Windows 事件日志中,哪些潜在的可滥用访问权限被授予给了无特权组? 为了回答这些问题,我们应该定义如下两点:

    · 什么是错误配置?

    · 什么是“可滥用的”访问权限?

    在回答这些问题之前,让我们首先建立获取安全描述符的方法。

    本博文的目标受众: 任何已经熟悉安全描述符、访问控制列表和 SACL 的人都希望形式化他们的自动化审计方法。 对于那些不熟悉这些概念的读者可以阅读下文中的参考资料章节中的资源。

    获取安全描述符

    众所周知,像文件、目录和注册表项这样的东西可以通过安全描述符进行安全保护,但是我们如何确定所有的安全保护项呢? 对于初学者来说,内核认为许多东西是“可保护的” ,我们将这些东西称为可保护对象。 KTV有几种方法可以枚举安全对象类型,但我个人认为最简单的方法是使用 James Forshaw 的 NtObjectManager PowerShell 模块中的 Get-NtType cmdlet。 在没有任何参数的情况下运行 Get-NtType 会在我的 Windows 10主机上返回以下安全对象:

    ActivationObject, ActivityReference, Adapter, ALPC Port, Callback, Composition, Controller, CoreMessaging, CoverageSampler, DebugObject, Desktop, Device, Directory, DmaAdapter, Driver, DxgkCompositionObject, DxgkCurrentDxgProcessObject, DxgkDisplayManagerObject, DxgkSharedBundleObject, DxgkSharedKeyedMutexObject, DxgkSharedProtectedSessionObject, DxgkSharedResource, DxgkSharedSwapChainObject, DxgkSharedSyncObject, EnergyTracker, EtwConsumer, EtwRegistration, EtwSessionDemuxEntry, Event, File, FilterCommunicationPort, FilterConnectionPort, IoCompletion, IoCompletionReserve, IRTimer, Job, Key, KeyedEvent, Mutant, NdisCmState, Partition, PcwObject, PowerRequest, Process, Profile, PsSiloContextNonPaged, PsSiloContextPaged, RawInputManager, RegistryTransaction, Section, Semaphore, Session, SymbolicLink, Thread, Timer, TmEn, TmRm, TmTm, TmTx, Token, TpWorkerFactory, Type, UserApcReserve, VRegConfigurationContext, WaitCompletionPacket, WindowStation, WmiGuid

    然而,返回的安全对象似乎都与我们的特定用例(事件日志)无关。 因此,问题依然存在,事件日志安全吗? 直观来说,微软必须考虑这方面的安全性,例如,无特权的用户无法查看或清除 安全事件日志。 此时此刻,开始谷歌搜索可能是明智之举。 在搜索“事件日志安全描述符”时,出现了以下与之相关的文章:

    · Eventlog Key

    在这篇文章中,作者引用了通过“ CustomSD”注册表值设置自定义安全描述符的功能。并且作者还引用了“Isolation”注册表值文档中的默认安全权限。

    既然我们知道可以将安全描述符应用于事件日志,那么我们如何检索它们呢? 幸运的是,当你在 PowerShell 调用 Get-WinEvent -ListLog 时,它将为每个事件日志返回一个 EventLogConfiguration 对象,该对象包含 SecurityDescriptor  属性。

    > Get-WinEvent -ListLog Security | Select -ExpandProperty SecurityDescriptor

    O:BAG:SYD:(A;;CCLCSDRCWDWO;;;SY)(A;;CCLC;;;BA)(A;;CC;;;ER)

    作为参考,上面的字符串是一个 SDDL 字符串,这是一种方便表示安全描述符的方法。 像 ConvertFrom-SddlString 这样的工具对于理解它们非常有用。

    作为一个喜欢了解底层 Win32 API 的人,我选择使用 dnSpy  追踪 SecurityDescriptor 属性的实现,可以发现系统在 wevtapi.dll 中调用了 EvtGetChannelConfigProperty 函数并指定 EvtChannelConfigAccess 枚举值。 了解调用相关 Win32 API 函数的 DLL 也是有价值的,因为它指向了 Windows SDK 中的各个头文件(在本例中为 winevt.h) ,这些头文件通常会提供 MSDN 文档以外的有价值的信息。

    现在,如果我们要审计事件日志安全描述符,我们需要知道系统对它们应用了什么访问权限

    确定相关的访问权限

    对于事件日志访问控制条目,我们需要理解访问权限掩码的四个部分:

    · 特定于对象的访问权限——特定于安全对象的权限,在本例中为事件日志。

    · 标准访问权限 ——适用于安全描述符本身的权限。

    · 通用访问权限 ——与标准的和特定的对象权限相对应的权限。

    · SACL 访问权限 —— 控制日志记录和对对象授予或拒绝访问的权限。

    至于特定对象的访问权限,这里有说明文档。 不过,有时候访问权限会被添加或删除,但文档并不会更新。 这就是为什么我更喜欢了解相应的 Windows SDK 头文件—— winevt.h,奇热它有最新的对象特定的访问权限定义:

     

    #define EVT_READ_ACCESS    0x1
    #define EVT_WRITE_ACCESS   0x2
    #define EVT_CLEAR_ACCESS   0x4
    #define EVT_ALL_ACCESS     0x7

     

    对于那些不熟悉按位操作的用户, EVT_ALL_ACCESS 是二进制“或”操作EVT_READ_ACCESS | EVT_WRITE_ACCESS | EVT_CLEAR_ACCESS的结果。

    现在,映射通用访问权限通常有点棘手。 通用访问权限用于映射一个或多个标准和特定于对象的访问权限。 对于“鲜为人知”的安全对象,要么缺乏通用权限的映射说明文档,要么根本不存在,对于事件日志,这也不例外。 因此,在没有文档或头文件提供这些信息的情况下,我们只能在代码中寻找答案。 不过你可能要问的第一个问题是,“在什么代码里找答案? ” 我们必须用一些猜测和直觉来回答这个问题。 我采取的方法是使用前面解释过的“ CustomSD”关键词,我们在 dll 中搜索一下这个关键词,因为它与事件日志安全强相关。 一旦我找到了这个引用,那么与通用访问权限相关的代码可能就位于搜索结果的附近。 我使用下面的 PowerShell 代码来识别候选的 DLL 文件:

     

    $EventLogAccess = ls C:\Windows\System32\*.dll | sls 'CustomSD' -Encoding unicode
    $EventLogAccess.Path | Sort -Unique

     

    运行结果如下:

     

    C:\Windows\System32\acmigration.dll
    C:\Windows\System32\aeinv.dll
    C:\Windows\System32\apphelp.dll
    C:\Windows\System32\appraiser.dll
    C:\Windows\System32\d3d9.dll
    C:\Windows\System32\drvstore.dll
    C:\Windows\System32\dxdiagn.dll
    C:\Windows\System32\dxgi.dll
    C:\Windows\System32\generaltel.dll
    C:\Windows\System32\kernel32.dll
    C:\Windows\System32\opengl32.dll
    C:\Windows\System32\setupapi.dll
    C:\Windows\System32\vbsapi.dll
    C:\Windows\System32\vfluapriv.dll
    C:\Windows\System32\wevtsvc.dll

    在我看来,最相关的 DLL 是 wevtsvc.DLL,即与事件日志服务相关联的 DLL。

    在用符号将 wetsvc.dll 加载到 IDA 中时,对“ CustomSD”的一个交叉引用将我带入到“ channelconfidgreader::GetChannelAccessSddl”函数。

    Windows 安全描述符审计方法探究:审查事件日志安全性

    虽然这个函数和它的交叉引用没有产生任何与通用访问权限相关的东西,但是 GetDefaultSDDL 函数非常有趣,在稍微进行逆向之后,我可以看到事件日志服务在没有应用自定义安全描述符的情况下定义了以下安全描述符

     

    安全日志
    O:BAG:SYD:(A;;CCLCSDRCWDWO;;;SY)(A;;CCLC;;;BA)(A;;CC;;;ER)
    系统日志
    O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x3;;;BO)(A;;0x5;;;SO)(A;;0x1;;;IU)(A;;0x3;;;SU)(A;;0x1;;;S-1-5-3)(A;;0x2;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)
    应用程序日志
    O:BAG:SYD:(A;;0x2;;;S-1-15-2-1)(A;;0x2;;;S-1-15-3-1024-3153509613-960666767-3724611135-2725662640-12138253-543910227-1950414635-4190290187)(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x7;;;SO)(A;;0x3;;;IU)(A;;0x3;;;SU)(A;;0x3;;;S-1-5-3)(A;;0x3;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)

    这些与“Isolation”注册表值的文档有些对应,但不完全相同。 这是另一个不能依赖相关说明文档的例子,即使你想要一个精确的结果。 现在我们已经有了围绕默认事件日志安全描述符的上下文,这将很快成为解释为什么这么多事件日志应用了相同的安全描述符的相关内容。 回到通用访问权限,尽管问题很复杂。

    在查找 wevtsvc.dll 二进制文件时,我偶然发现了对内部函数 EvtCheckAccess 中的 AccessCheck  函数的调用:

    Windows 安全描述符审计方法探究:审查事件日志安全性

    在看到这个调用并参考文档后,我可以看到这个函数是用于检查任何可以支持应用安全描述符的对象的访问。 它还需要一个 GenericMapping 参数。 在这种情况下,wevtsvc.dll 提供了一个由 GENERIC_MAPPING  结构组成的必须需要的全局变量 AccessCheck。 在 IDA 中,显示的内容如下:

    Windows 安全描述符审计方法探究:审查事件日志安全性

     

    现将其翻译如下:

    · GENERIC_READ 映射到EVT_READ_ACCESS

    · GENERIC_WRITE 映射到EVT_WRITE_ACCESS

    · GENERIC_EXECUTE 没有映射到任何特定于对象的访问权限

    · GENERIC_ALL 映射到EVT_ALL_ACCESS

    这就对了,现在你就可以在网上找到相关的文档了。

    现在,我们就已经拥有了围绕审计事件日志安全描述符构建自动化所需的所有组件。

    滥用访问权限的考虑

    枚举目标安全对象所支持的所有访问权限的工作完成后,你就可以开始考虑每个访问权限对没有执行特权升级的攻击者有哪些好处。 经过考虑后,我提出了对每个事件日志访问权限的影响,如下:

    特定对象访问权限的含义:

    · EVT_READ_ACCESS: 授予用户或组读取特定事件日志中的事件的能力。 如果事件日志有可能存储敏感信息,那么就有可能被滥用。 此外,大多数事件日志都有从任何进程的上下文中写入的事件,因此,xise攻击者就有机会从非特权用户的上下文中读取特权进程写入的事件日志。

    · EVT_WRITE_ACCESS: 授予用户或组将事件写入特定事件日志的能力。 通过使用事件日志的写操作 API,攻击者就可以生成假的事件日志记录,这可能会给人一种“良好的”假象。 它们还可能考虑在恶意的执行操作之后向事件日志中注入正常的日志记录,导致攻击者实际执行的恶意操作的上下文日志滚动并丢失。 攻击者还可能选择将数据写入事件日志,作为一种不受安全产品隔离查杀的原始数据存储机制。

    · EVT_CLEAR_ACCESS: 授予用户或组清除特定事件日志的能力。 非特权用户永远不应该被授予这种权限。 但是,有个缓解检测的控件是系统事件日志(来源: EventLog)中的 ID 104 事件,这个事件指示了何时清除特定的事件日志。

    标准访问权限的含义:

    · WRITE_DAC: 授予用户或组从自主 ACL (DACL)中添加 / 删除 / 修改访问控制项的能力。 事件日志的实际含义是允许攻击者在非特权上下文中执行授予攻击者自己对特定事件日志的读、写 或清除访问权操作。 它们还可以删除他们想要删除的任何其他用户或组的访问权限,例如,让其他用户无法读取事件日志。

    · WRITE_OWNER: 允许用户 或 组拥有安全描述符的所有权。 此时用户或 组拥有完全的控制权限,但实际的攻击场景是将对象的所有权分配给一个无特权的攻击者,然后修改 DACL 以适应攻击者的需要。

    本文不打算详尽列出所有攻击者可能操作授予的访问权限。 攻击者滥用授予的访问权限的程度取决于以下因素:

    · 攻击者控制的特定对象

    · 攻击者的具体目标

    · 攻击者的创造力

    安全描述符的审计方法

    对于表示安全描述符审计的方式,我更喜欢的是对允许访问的用户 或 组的主体的访问权限进行分组。 例如,我特别想知道“ NT AUTHORITY\Authenticated Users”组(一个无特权的组)被授予了哪些事件日志访问权限。 下面是我编写的 PowerShell 代码:

    让我们使用 PowerShell 看看授权的访问权限:

    Windows 安全描述符审计方法探究:审查事件日志安全性

    在检查了每个对象之后,我发现系统对“ NT AUTHORITY\INTERACTIVE”组授予的事件日志读写访问权限的数量最多:

    > $PGrouping['NT AUTHORITY\INTERACTIVE'].LogFileRead.Count 415

    现在,从攻击和研究的角度来看,将由你来确定哪些事件日志对于以“NT AUTHORITY\INTERACTIVE”身份运行的非特权攻击者具有特殊价值——即任何授予交互式登录令牌的用户。 例如,如果一个防御者正在捕获 PowerShell 脚本块日志,一个非特权用户已经拥有了读取所有 PowerShell 脚本内容的权限,包括在特权上下文中记录的内容,其中可能包括纯文本凭证。

    最后,值得一提的是,由于事件日志的自定义安全描述符是作为注册表值应用的,因此你还需要确保与审计相关的注册表项的安全性,并确保非特权用户无法将自己的自定义安全描述符写入注册表。

    合理化默认的安全描述符

    基于我们之前对默认的安全描述符的研究结果,我还没有评估非特权用户具有读取大多数事件日志的能力所带来的风险,也许这至少可以解释为什么这么多日志被授予了他们所拥有的访问权限。 下面的代码用于列出所有应用了默认的“Application”隔离安全性的事件日志:

     

    > $ApplicationEventLogsDefaultSDDL = 'O:BAG:SYD:(A;;0x2;;;S-1-15-2-1)(A;;0x2;;;S-1-15-3-1024-3153509613-960666767-3724611135-2725662640-12138253-543910227-1950414635-4190290187)(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x7;;;SO)(A;;0x3;;;IU)(A;;0x3;;;SU)(A;;0x3;;;S-1-5-3)(A;;0x3;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)'
    > Get-WinEvent -ListLog * | Where-Object { $_.SecurityDescriptor -eq $ApplicationEventLogsDefaultSDDL }

    正如预期的那样,输出的应用程序事件日志中出现了几乎所有的事件日志。 了解了这些信息,无论是作为微软还是作为一个防御者,对那些被看作敏感的事件日志应用我们定制的、限制性更强的安全描述符可能是明智之举,比如“ Microsoft-Windows-PowerShell/Operational”日志。

    对安全描述符 SACL 的研究

    在我审计事件日志安全描述符的过程中,没有任何文档表明事件日志支持 SACL。 幸运的是,在内部函数 EvtCheckAccess 中有两个相关的代码片段: GetSecurityDescriptorSacl 和 AccessCheckAndAuditAlarm

    Windows 安全描述符审计方法探究:审查事件日志安全性

    现在,既然知道了这里存在处理 SACL 的代码,那么我们就可以假设 SACL 是受支持的。 此时,我可以尝试将带有 SACL 的自定义安全描述符应用于事件日志,但是我很想先弄清楚“Channel”参数指向了什么。 后来,我发现这个参数指向的是以下注册表项:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security\Security\ObjectNames

    Windows 安全描述符审计方法探究:审查事件日志安全性

    所以看起来这些都是支持 SACL 日志记录的对象类型! 我还确定,这些 DWORD 值指的是 msobjs.dll 中的消息表索引,事件日志在记录相关 SACL 访问权限时从中提取这些索引。 我写了一个粗略的脚本来提取这些值。 附录 B 中列出了所有受支持的可保护对象的转储消息字符串。例如,我提取出了以下与“ Channel”对象类型相关的消息字符串:

     

    Channel read message
    Channel write message
    Channel query information
    Channel set information
    Undefined Access (no effect) Bit 4
    Undefined Access (no effect) Bit 5
    Undefined Access (no effect) Bit 6
    Undefined Access (no effect) Bit 7
    Undefined Access (no effect) Bit 8
    Undefined Access (no effect) Bit 9
    Undefined Access (no effect) Bit 10
    Undefined Access (no effect) Bit 11
    Undefined Access (no effect) Bit 12
    Undefined Access (no effect) Bit 13
    Undefined Access (no effect) Bit 14
    Undefined Access (no effect) Bit 15

     

    这些字符串应该也是有什么含义的,因为没有消息的1-3位,特定于对象的访问权限只能达到7(EVT_ALL_ACCESS) ,这是 111 的二进制形式,长度是三位。 但是,根据这些消息,并不能完全弄清楚哪些访问权限对应于“ Channel query information”和“ Channel set information”。 不管怎么样,至少现在有了这些知识,你就可以知道可以记录哪些SACL访问权限了!!

    总结

    我希望这篇文章能够有助于我突出说明审计事件日志安全描述符和任何安全对象类型的方法。 本文还应突出说明在文件不完整或不存在的情况下进行此类审计所面临的挑战。

    作为另一个示例,我使用本文提出的方法来识别%windr% 下的所有可写的子目录。 

    我也使用本文提出的这种方法来理解、审计和发现 ETW 提供商和跟踪会话中的错误配置,我在2019年的 Recon 大会的演讲中提到过: 

    除了这些,还有很多安全对象类型值得研究!

    最后,这篇文章是由 SpecterOps  和 Palantir 合作完成的。 通过这种伙伴关系分配的时间资源促进了我与你们分享这一信息,我对此表示感谢!

    参考资料

    · 使用 SACL 检测 Windows 端点入侵行为

    · 如何设计一个用于活动目录的 DACL 后门

    附录 A: NT AUTHORITY\INTERACTIVE 可读可写事件日志

     

    在撰写本文时,以下事件日志具有应用于它们的默认“Application”隔离安全描述符,从而导致非特权的“NT AUTHORITY\INTERACTIVE”组的成员具有读写权限。由读者决定这些事件日志可能包含或不包含有价值的或敏感的信息的程度。

    授予读访问权限的事件日志:

     

    AMSI/Operational
    Application
    ForwardedEvents
    HardwareEvents
    Key Management Service
    Microsoft-AppV-Client/Admin
    Microsoft-AppV-Client/Operational
    Microsoft-AppV-Client/Virtual Applications
    Microsoft-Client-Licensing-Platform/Admin
    Microsoft-User Experience Virtualization-Agent Driver/Operational
    Microsoft-User Experience Virtualization-App Agent/Operational
    Microsoft-User Experience Virtualization-IPC/Operational
    Microsoft-User Experience Virtualization-SQM Uploader/Operational
    Microsoft-Windows-AAD/Operational
    Microsoft-Windows-AllJoyn/Operational
    Microsoft-Windows-All-User-Install-Agent/Admin
    Microsoft-Windows-AppHost/Admin
    Microsoft-Windows-AppID/Operational
    Microsoft-Windows-ApplicabilityEngine/Operational
    Microsoft-Windows-Application Server-Applications/Admin
    Microsoft-Windows-Application Server-Applications/Operational
    Microsoft-Windows-Application-Experience/Program-Compatibility-Assistant
    Microsoft-Windows-Application-Experience/Program-Compatibility-Troubleshooter
    Microsoft-Windows-Application-Experience/Program-Inventory
    Microsoft-Windows-Application-Experience/Program-Telemetry
    Microsoft-Windows-Application-Experience/Steps-Recorder
    Microsoft-Windows-ApplicationResourceManagementSystem/Operational
    Microsoft-Windows-AppLocker/EXE and DLL
    Microsoft-Windows-AppLocker/MSI and Script
    Microsoft-Windows-AppLocker/Packaged app-Deployment
    Microsoft-Windows-AppLocker/Packaged app-Execution
    Microsoft-Windows-AppModel-Runtime/Admin
    Microsoft-Windows-AppReadiness/Admin
    Microsoft-Windows-AppReadiness/Operational
    Microsoft-Windows-AppXDeployment/Operational
    Microsoft-Windows-AppXDeploymentServer/Operational
    Microsoft-Windows-AppxPackaging/Operational
    Microsoft-Windows-AssignedAccess/Admin
    Microsoft-Windows-AssignedAccess/Operational
    Microsoft-Windows-AssignedAccessBroker/Admin
    Microsoft-Windows-AssignedAccessBroker/Operational
    Microsoft-Windows-Audio/CaptureMonitor
    Microsoft-Windows-Audio/GlitchDetection
    Microsoft-Windows-Audio/Informational
    Microsoft-Windows-Audio/Operational
    Microsoft-Windows-Audio/PlaybackManager
    Microsoft-Windows-Authentication User Interface/Operational
    Microsoft-Windows-Authentication/AuthenticationPolicyFailures-DomainController
    Microsoft-Windows-Authentication/ProtectedUser-Client
    Microsoft-Windows-Authentication/ProtectedUserFailures-DomainController
    Microsoft-Windows-Authentication/ProtectedUserSuccesses-DomainController
    Microsoft-Windows-BackgroundTaskInfrastructure/Operational
    Microsoft-Windows-BackgroundTransfer-ContentPrefetcher/Operational
    Microsoft-Windows-Backup
    Microsoft-Windows-Base-Filtering-Engine-Connections/Operational
    Microsoft-Windows-Base-Filtering-Engine-Resource-Flows/Operational
    Microsoft-Windows-Biometrics/Operational
    Microsoft-Windows-BitLocker/BitLocker Management
    Microsoft-Windows-BitLocker/BitLocker Operational
    Microsoft-Windows-BitLocker-DrivePreparationTool/Admin
    Microsoft-Windows-BitLocker-DrivePreparationTool/Operational
    Microsoft-Windows-Bits-Client/Analytic
    Microsoft-Windows-Bits-Client/Operational
    Microsoft-Windows-Bluetooth-BthLEEnum/Operational
    Microsoft-Windows-Bluetooth-BthLEPrepairing/Operational
    Microsoft-Windows-Bluetooth-Bthmini/Operational
    Microsoft-Windows-Bluetooth-MTPEnum/Operational
    Microsoft-Windows-Bluetooth-Policy/Operational
    Microsoft-Windows-BranchCache/Operational
    Microsoft-Windows-BranchCacheSMB/Operational
    Microsoft-Windows-CertificateServicesClient-CredentialRoaming/Operational
    Microsoft-Windows-CertificateServicesClient-Lifecycle-System/Operational
    Microsoft-Windows-CertificateServicesClient-Lifecycle-User/Operational
    Microsoft-Windows-CertPoleEng/Operational
    Microsoft-Windows-CloudStorageWizard/Operational
    Microsoft-Windows-CloudStore/Debug
    Microsoft-Windows-CloudStore/Operational
    Microsoft-Windows-CodeIntegrity/Operational
    Microsoft-Windows-Compat-Appraiser/Operational
    Microsoft-Windows-Containers-BindFlt/Operational
    Microsoft-Windows-Containers-Wcifs/Operational
    Microsoft-Windows-Containers-Wcnfs/Operational
    Microsoft-Windows-CoreApplication/Operational
    Microsoft-Windows-CoreSystem-SmsRouter-Events/Operational
    Microsoft-Windows-CorruptedFileRecovery-Client/Operational
    Microsoft-Windows-CorruptedFileRecovery-Server/Operational
    Microsoft-Windows-Crypto-DPAPI/BackUpKeySvc
    Microsoft-Windows-Crypto-DPAPI/Debug
    Microsoft-Windows-Crypto-DPAPI/Operational
    Microsoft-Windows-DAL-Provider/Operational
    Microsoft-Windows-DataIntegrityScan/Admin
    Microsoft-Windows-DataIntegrityScan/CrashRecovery
    Microsoft-Windows-DateTimeControlPanel/Operational
    Microsoft-Windows-Deduplication/Diagnostic
    Microsoft-Windows-Deduplication/Operational
    Microsoft-Windows-Deduplication/Scrubbing
    Microsoft-Windows-DeviceGuard/Operational
    Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider/Admin
    Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider/Operational
    Microsoft-Windows-Devices-Background/Operational
    Microsoft-Windows-DeviceSetupManager/Admin
    Microsoft-Windows-DeviceSetupManager/Operational
    Microsoft-Windows-DeviceSync/Operational
    Microsoft-Windows-DeviceUpdateAgent/Operational
    Microsoft-Windows-Dhcp-Client/Admin
    Microsoft-Windows-Dhcp-Client/Operational
    Microsoft-Windows-Dhcpv6-Client/Admin
    Microsoft-Windows-Dhcpv6-Client/Operational
    Microsoft-Windows-Diagnosis-DPS/Operational
    Microsoft-Windows-Diagnosis-PCW/Operational
    Microsoft-Windows-Diagnosis-PLA/Operational
    Microsoft-Windows-Diagnosis-Scheduled/Operational
    Microsoft-Windows-Diagnosis-Scripted/Admin
    Microsoft-Windows-Diagnosis-Scripted/Operational
    Microsoft-Windows-Diagnosis-ScriptedDiagnosticsProvider/Operational
    Microsoft-Windows-Diagnostics-Networking/Operational
    Microsoft-Windows-DiskDiagnostic/Operational
    Microsoft-Windows-DiskDiagnosticDataCollector/Operational
    Microsoft-Windows-DiskDiagnosticResolver/Operational
    Microsoft-Windows-DisplayColorCalibration/Operational
    Microsoft-Windows-DNS-Client/Operational
    Microsoft-Windows-DriverFrameworks-UserMode/Operational
    Microsoft-Windows-DSC/Admin
    Microsoft-Windows-DSC/Operational
    Microsoft-Windows-DxgKrnl-Admin
    Microsoft-Windows-DxgKrnl-Operational
    Microsoft-Windows-EapHost/Operational
    Microsoft-Windows-EapMethods-RasChap/Operational
    Microsoft-Windows-EapMethods-RasTls/Operational
    Microsoft-Windows-EapMethods-Sim/Operational
    Microsoft-Windows-EapMethods-Ttls/Operational
    Microsoft-Windows-EDP-Application-Learning/Admin
    Microsoft-Windows-EDP-Audit-Regular/Admin
    Microsoft-Windows-EDP-Audit-TCB/Admin
    Microsoft-Windows-Energy-Estimation-Engine/EventLog
    Microsoft-Windows-ESE/Operational
    Microsoft-Windows-EventCollector/Operational
    Microsoft-Windows-Fault-Tolerant-Heap/Operational
    Microsoft-Windows-FeatureConfiguration/Operational
    Microsoft-Windows-FileHistory-Core/WHC
    Microsoft-Windows-FMS/Operational
    Microsoft-Windows-Folder Redirection/Operational
    Microsoft-Windows-Forwarding/Operational
    Microsoft-Windows-GenericRoaming/Admin
    Microsoft-Windows-glcnd/Admin
    Microsoft-Windows-HelloForBusiness/Operational
    Microsoft-Windows-HomeGroup Control Panel/Operational
    Microsoft-Windows-HomeGroup Listener Service/Operational
    Microsoft-Windows-HomeGroup Provider Service/Operational
    Microsoft-Windows-HostGuardianClient-Service/Admin
    Microsoft-Windows-HostGuardianClient-Service/Operational
    Microsoft-Windows-HostGuardianService-CA/Admin
    Microsoft-Windows-HostGuardianService-CA/Operational
    Microsoft-Windows-HostGuardianService-Client/Admin
    Microsoft-Windows-HostGuardianService-Client/Operational
    Microsoft-Windows-HotspotAuth/Operational
    Microsoft-Windows-HttpService/Log
    Microsoft-Windows-HttpService/Trace
    Microsoft-Windows-Hyper-V-Guest-Drivers/Admin
    Microsoft-Windows-Hyper-V-Guest-Drivers/Operational
    Microsoft-Windows-Hyper-V-VMSP-Admin
    Microsoft-Windows-Hyper-V-VmSwitch-Operational
    Microsoft-Windows-IdCtrls/Operational
    Microsoft-Windows-IKE/Operational
    Microsoft-Windows-International/Operational
    Microsoft-Windows-International-RegionalOptionsControlPanel/Operational
    Microsoft-Windows-Iphlpsvc/Operational
    Microsoft-Windows-IPxlatCfg/Operational
    Microsoft-Windows-KdsSvc/Operational
    Microsoft-Windows-Kerberos/Operational
    Microsoft-Windows-Kernel-ApphelpCache/Operational
    Microsoft-Windows-Kernel-Boot/Operational
    Microsoft-Windows-Kernel-EventTracing/Admin
    Microsoft-Windows-Kernel-IO/Operational
    Microsoft-Windows-Kernel-PnP/Configuration
    Microsoft-Windows-Kernel-Power/Thermal-Operational
    Microsoft-Windows-Kernel-ShimEngine/Operational
    Microsoft-Windows-Kernel-StoreMgr/Operational
    Microsoft-Windows-Kernel-WDI/Operational
    Microsoft-Windows-Kernel-WHEA/Errors
    Microsoft-Windows-Kernel-WHEA/Operational
    Microsoft-Windows-Known Folders API Service
    Microsoft-Windows-LanguagePackSetup/Operational
    Microsoft-Windows-LinkLayerDiscoveryProtocol/Operational
    Microsoft-Windows-LSA/Operational
    Microsoft-Windows-MediaFoundation-Performance/SARStreamResource
    Microsoft-Windows-MemoryDiagnostics-Results/Debug
    Microsoft-Windows-Mobile-Broadband-Experience-Parser-Task/Operational
    Microsoft-Windows-Mobile-Broadband-Experience-SmsRouter/Admin
    Microsoft-Windows-ModernDeployment-Diagnostics-Provider/Admin
    Microsoft-Windows-ModernDeployment-Diagnostics-Provider/Autopilot
    Microsoft-Windows-ModernDeployment-Diagnostics-Provider/ManagementService
    Microsoft-Windows-Mprddm/Operational
    Microsoft-Windows-MSPaint/Admin
    Microsoft-Windows-MUI/Admin
    Microsoft-Windows-MUI/Operational
    Microsoft-Windows-Ncasvc/Operational
    Microsoft-Windows-NcdAutoSetup/Operational
    Microsoft-Windows-NCSI/Operational
    Microsoft-Windows-NDIS/Operational
    Microsoft-Windows-NdisImPlatform/Operational
    Microsoft-Windows-NetworkLocationWizard/Operational
    Microsoft-Windows-NetworkProfile/Operational
    Microsoft-Windows-NetworkProvisioning/Operational
    Microsoft-Windows-NlaSvc/Operational
    Microsoft-Windows-Ntfs/Operational
    Microsoft-Windows-Ntfs/WHC
    Microsoft-Windows-NTLM/Operational
    Microsoft-Windows-OfflineFiles/Operational
    Microsoft-Windows-OneBackup/Debug
    Microsoft-Windows-OneX/Operational
    Microsoft-Windows-OOBE-Machine-DUI/Operational
    Microsoft-Windows-OtpCredentialProvider/Operational
    Microsoft-Windows-PackageStateRoaming/Operational
    Microsoft-Windows-Partition/Diagnostic
    Microsoft-Windows-PerceptionRuntime/Operational
    Microsoft-Windows-PerceptionSensorDataService/Operational
    Microsoft-Windows-PersistentMemory-Nvdimm/Operational
    Microsoft-Windows-PersistentMemory-PmemDisk/Operational
    Microsoft-Windows-PersistentMemory-ScmBus/Certification
    Microsoft-Windows-PersistentMemory-ScmBus/Operational
    Microsoft-WindowsPhone-Connectivity-WiFiConnSvc-Channel
    Microsoft-Windows-Policy/Operational
    Microsoft-Windows-PowerShell/Admin
    Microsoft-Windows-PowerShell/Operational
    Microsoft-Windows-PowerShell-DesiredStateConfiguration-FileDownloadManager/Operational
    Microsoft-Windows-PrintBRM/Admin
    Microsoft-Windows-PrintService/Admin
    Microsoft-Windows-PrintService/Operational
    Microsoft-Windows-PriResources-Deployment/Operational
    Microsoft-Windows-Program-Compatibility-Assistant/Analytic
    Microsoft-Windows-Program-Compatibility-Assistant/CompatAfterUpgrade
    Microsoft-Windows-Provisioning-Diagnostics-Provider/Admin
    Microsoft-Windows-Provisioning-Diagnostics-Provider/AutoPilot
    Microsoft-Windows-Provisioning-Diagnostics-Provider/ManagementService
    Microsoft-Windows-Proximity-Common/Diagnostic
    Microsoft-Windows-PushNotification-Platform/Admin
    Microsoft-Windows-PushNotification-Platform/Operational
    Microsoft-Windows-RasAgileVpn/Operational
    Microsoft-Windows-ReadyBoost/Operational
    Microsoft-Windows-ReadyBoostDriver/Operational
    Microsoft-Windows-ReFS/Operational
    Microsoft-Windows-Regsvr32/Operational
    Microsoft-Windows-RemoteApp and Desktop Connections/Admin
    Microsoft-Windows-RemoteApp and Desktop Connections/Operational
    Microsoft-Windows-RemoteAssistance/Admin
    Microsoft-Windows-RemoteAssistance/Operational
    Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Admin
    Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational
    Microsoft-Windows-RemoteDesktopServices-RemoteFX-Manager/Admin
    Microsoft-Windows-RemoteDesktopServices-RemoteFX-Manager/Operational
    Microsoft-Windows-RemoteDesktopServices-RemoteFX-Synth3dvsc/Admin
    Microsoft-Windows-RemoteDesktopServices-RemoteFX-Synth3dvsp/Admin
    Microsoft-Windows-RemoteDesktopServices-SessionServices/Operational
    Microsoft-Windows-Remotefs-Rdbss/Operational
    Microsoft-Windows-Resource-Exhaustion-Detector/Operational
    Microsoft-Windows-Resource-Exhaustion-Resolver/Operational
    Microsoft-Windows-RestartManager/Operational
    Microsoft-Windows-RetailDemo/Admin
    Microsoft-Windows-RetailDemo/Operational
    Microsoft-Windows-RRAS/Operational
    Microsoft-Windows-SearchUI/Operational
    Microsoft-Windows-SecureAssessment/Operational
    Microsoft-Windows-Security-Adminless/Operational
    Microsoft-Windows-Security-Audit-Configuration-Client/Operational
    Microsoft-Windows-Security-EnterpriseData-FileRevocationManager/Operational
    Microsoft-Windows-Security-ExchangeActiveSyncProvisioning/Operational
    Microsoft-Windows-Security-IdentityListener/Operational
    Microsoft-Windows-Security-LessPrivilegedAppContainer/Operational
    Microsoft-Windows-Security-Mitigations/KernelMode
    Microsoft-Windows-Security-Mitigations/UserMode
    Microsoft-Windows-SecurityMitigationsBroker/Admin
    Microsoft-Windows-SecurityMitigationsBroker/Operational
    Microsoft-Windows-Security-Netlogon/Operational
    Microsoft-Windows-Security-SPP-UX-GenuineCenter-Logging/Operational
    Microsoft-Windows-Security-SPP-UX-Notifications/ActionCenter
    Microsoft-Windows-Security-UserConsentVerifier/Audit
    Microsoft-Windows-SENSE/Operational
    Microsoft-Windows-SenseIR/Operational
    Microsoft-Windows-ServiceReportingApi/Debug
    Microsoft-Windows-SettingSync/Debug
    Microsoft-Windows-SettingSync/Operational
    Microsoft-Windows-SettingSync-Azure/Debug
    Microsoft-Windows-SettingSync-Azure/Operational
    Microsoft-Windows-SettingSync-OneDrive/Debug
    Microsoft-Windows-SettingSync-OneDrive/Operational
    Microsoft-Windows-ShellCommon-StartLayoutPopulation/Operational
    Microsoft-Windows-Shell-ConnectedAccountState/ActionCenter
    Microsoft-Windows-Shell-Core/ActionCenter
    Microsoft-Windows-Shell-Core/AppDefaults
    Microsoft-Windows-Shell-Core/LogonTasksChannel
    Microsoft-Windows-Shell-Core/Operational
    Microsoft-Windows-SmartCard-Audit/Authentication
    Microsoft-Windows-SmartCard-DeviceEnum/Operational
    Microsoft-Windows-SmartCard-TPM-VCard-Module/Admin
    Microsoft-Windows-SmartCard-TPM-VCard-Module/Operational
    Microsoft-Windows-SmartScreen/Debug
    Microsoft-Windows-SMBDirect/Admin
    Microsoft-Windows-SMBWitnessClient/Admin
    Microsoft-Windows-SMBWitnessClient/Informational
    Microsoft-Windows-StateRepository/Operational
    Microsoft-Windows-Storage-ATAPort/Admin
    Microsoft-Windows-Storage-ATAPort/Operational
    Microsoft-Windows-Storage-ClassPnP/Admin
    Microsoft-Windows-Storage-ClassPnP/Operational
    Microsoft-Windows-Storage-Disk/Admin
    Microsoft-Windows-Storage-Disk/Operational
    Microsoft-Windows-StorageManagement/Operational
    Microsoft-Windows-StorageSpaces-Driver/Diagnostic
    Microsoft-Windows-StorageSpaces-Driver/Operational
    Microsoft-Windows-StorageSpaces-ManagementAgent/WHC
    Microsoft-Windows-StorageSpaces-SpaceManager/Diagnostic
    Microsoft-Windows-StorageSpaces-SpaceManager/Operational
    Microsoft-Windows-Storage-Storport/Admin
    Microsoft-Windows-Storage-Storport/Health
    Microsoft-Windows-Storage-Storport/Operational
    Microsoft-Windows-Storage-Tiering/Admin
    Microsoft-Windows-Store/Operational
    Microsoft-Windows-Storsvc/Diagnostic
    Microsoft-Windows-SystemSettingsThreshold/Operational
    Microsoft-Windows-TaskScheduler/Maintenance
    Microsoft-Windows-TaskScheduler/Operational
    Microsoft-Windows-TCPIP/Operational
    Microsoft-Windows-TerminalServices-ClientUSBDevices/Admin
    Microsoft-Windows-TerminalServices-ClientUSBDevices/Operational
    Microsoft-Windows-TerminalServices-LocalSessionManager/Admin
    Microsoft-Windows-TerminalServices-LocalSessionManager/Operational
    Microsoft-Windows-TerminalServices-PnPDevices/Admin
    Microsoft-Windows-TerminalServices-PnPDevices/Operational
    Microsoft-Windows-TerminalServices-Printers/Admin
    Microsoft-Windows-TerminalServices-Printers/Operational
    Microsoft-Windows-TerminalServices-RDPClient/Operational
    Microsoft-Windows-TerminalServices-RemoteConnectionManager/Admin
    Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational
    Microsoft-Windows-TerminalServices-ServerUSBDevices/Admin
    Microsoft-Windows-TerminalServices-ServerUSBDevices/Operational
    Microsoft-Windows-Time-Service/Operational
    Microsoft-Windows-Time-Service-PTP-Provider/PTP-Operational
    Microsoft-Windows-Troubleshooting-Recommended/Admin
    Microsoft-Windows-Troubleshooting-Recommended/Operational
    Microsoft-Windows-TWinUI/Operational
    Microsoft-Windows-TZSync/Operational
    Microsoft-Windows-TZUtil/Operational
    Microsoft-Windows-UAC/Operational
    Microsoft-Windows-UniversalTelemetryClient/Operational
    Microsoft-Windows-User Control Panel/Operational
    Microsoft-Windows-User Device Registration/Admin
    Microsoft-Windows-User Profile Service/Operational
    Microsoft-Windows-User-Loader/Operational
    Microsoft-Windows-UserPnp/ActionCenter
    Microsoft-Windows-UserPnp/DeviceInstall
    Microsoft-Windows-VDRVROOT/Operational
    Microsoft-Windows-VerifyHardwareSecurity/Admin
    Microsoft-Windows-VerifyHardwareSecurity/Operational
    Microsoft-Windows-VHDMP-Operational
    Microsoft-Windows-Volume/Diagnostic
    Microsoft-Windows-VolumeSnapshot-Driver/Operational
    Microsoft-Windows-VPN/Operational
    Microsoft-Windows-VPN-Client/Operational
    Microsoft-Windows-Wcmsvc/Operational
    Microsoft-Windows-WDAG-PolicyEvaluator-CSP/Operational
    Microsoft-Windows-WDAG-PolicyEvaluator-GP/Operational
    Microsoft-Windows-WDAG-Service/Operational
    Microsoft-Windows-WebAuth/Operational
    Microsoft-Windows-WebAuthN/Operational
    Microsoft-Windows-WebIO-NDF/Diagnostic
    Microsoft-Windows-WEPHOSTSVC/Operational
    Microsoft-Windows-WER-PayloadHealth/Operational
    Microsoft-Windows-WFP/Operational
    Microsoft-Windows-Win32k/Operational
    Microsoft-Windows-Windows Defender/Operational
    Microsoft-Windows-Windows Defender/WHC
    Microsoft-Windows-Windows Firewall With Advanced Security/Firewall
    Microsoft-Windows-Windows Firewall With Advanced Security/FirewallDiagnostics
    Microsoft-Windows-Windows Firewall With Advanced Security/FirewallVerbose
    Microsoft-Windows-WindowsBackup/ActionCenter
    Microsoft-Windows-WindowsColorSystem/Operational
    Microsoft-Windows-WindowsSystemAssessmentTool/Operational
    Microsoft-Windows-WindowsUIImmersive/Operational
    Microsoft-Windows-WindowsUpdateClient/Operational
    Microsoft-Windows-WinHTTP-NDF/Diagnostic
    Microsoft-Windows-WinINet-Capture/Analytic
    Microsoft-Windows-WinINet-Config/ProxyConfigChanged
    Microsoft-Windows-Winlogon/Operational
    Microsoft-Windows-WinNat/Oper
    Microsoft-Windows-WinRM/Operational
    Microsoft-Windows-Winsock-AFD/Operational
    Microsoft-Windows-Winsock-NameResolution/Operational
    Microsoft-Windows-Winsock-WS2HELP/Operational
    Microsoft-Windows-Wired-AutoConfig/Operational
    Microsoft-Windows-WLAN-AutoConfig/Operational
    Microsoft-Windows-WMI-Activity/Operational
    Microsoft-Windows-WMPNSS-Service/Operational
    Microsoft-Windows-Wordpad/Admin
    Microsoft-Windows-WorkFolders/Operational
    Microsoft-Windows-WorkFolders/WHC
    Microsoft-Windows-Workplace Join/Admin
    Microsoft-Windows-WPD-ClassInstaller/Operational
    Microsoft-Windows-WPD-CompositeClassDriver/Operational
    Microsoft-Windows-WPD-MTPClassDriver/Operational
    Microsoft-Windows-WWAN-SVC-Events/Operational
    OpenSSH/Admin
    OpenSSH/Operational
    RemoteDesktopServices-RemoteFX-SessionLicensing-Admin
    RemoteDesktopServices-RemoteFX-SessionLicensing-Operational
    Setup
    SMSApi
    System
    Windows PowerShell

    授予写访问权限的事件日志:

     

    AMSI/Operational
    Application
    ForwardedEvents
    HardwareEvents
    Key Management Service
    Microsoft-AppV-Client/Virtual Applications
    Microsoft-Client-Licensing-Platform/Admin
    Microsoft-User Experience Virtualization-App Agent/Operational
    Microsoft-User Experience Virtualization-IPC/Operational
    Microsoft-User Experience Virtualization-SQM Uploader/Operational
    Microsoft-Windows-AAD/Operational
    Microsoft-Windows-AllJoyn/Operational
    Microsoft-Windows-All-User-Install-Agent/Admin
    Microsoft-Windows-AppHost/Admin
    Microsoft-Windows-ApplicabilityEngine/Operational
    Microsoft-Windows-Application Server-Applications/Admin
    Microsoft-Windows-Application Server-Applications/Operational
    Microsoft-Windows-Application-Experience/Program-Compatibility-Assistant
    Microsoft-Windows-Application-Experience/Program-Compatibility-Troubleshooter
    Microsoft-Windows-Application-Experience/Program-Inventory
    Microsoft-Windows-Application-Experience/Program-Telemetry
    Microsoft-Windows-Application-Experience/Steps-Recorder
    Microsoft-Windows-ApplicationResourceManagementSystem/Operational
    Microsoft-Windows-AppLocker/MSI and Script
    Microsoft-Windows-AppLocker/Packaged app-Deployment
    Microsoft-Windows-AppModel-Runtime/Admin
    Microsoft-Windows-AppReadiness/Admin
    Microsoft-Windows-AppReadiness/Operational
    Microsoft-Windows-AppXDeployment/Operational
    Microsoft-Windows-AppXDeploymentServer/Operational
    Microsoft-Windows-AppxPackaging/Operational
    Microsoft-Windows-AssignedAccess/Admin
    Microsoft-Windows-AssignedAccess/Operational
    Microsoft-Windows-AssignedAccessBroker/Admin
    Microsoft-Windows-AssignedAccessBroker/Operational
    Microsoft-Windows-Audio/PlaybackManager
    Microsoft-Windows-Authentication User Interface/Operational
    Microsoft-Windows-BackgroundTaskInfrastructure/Operational
    Microsoft-Windows-BackgroundTransfer-ContentPrefetcher/Operational
    Microsoft-Windows-Base-Filtering-Engine-Connections/Operational
    Microsoft-Windows-BitLocker/BitLocker Management
    Microsoft-Windows-BitLocker/BitLocker Operational
    Microsoft-Windows-Bits-Client/Analytic
    Microsoft-Windows-BranchCache/Operational
    Microsoft-Windows-BranchCacheSMB/Operational
    Microsoft-Windows-CertificateServicesClient-CredentialRoaming/Operational
    Microsoft-Windows-CertificateServicesClient-Lifecycle-User/Operational
    Microsoft-Windows-CertPoleEng/Operational
    Microsoft-Windows-CloudStorageWizard/Operational
    Microsoft-Windows-CloudStore/Debug
    Microsoft-Windows-CloudStore/Operational
    Microsoft-Windows-Compat-Appraiser/Operational
    Microsoft-Windows-CoreApplication/Operational
    Microsoft-Windows-CoreSystem-SmsRouter-Events/Operational
    Microsoft-Windows-CorruptedFileRecovery-Client/Operational
    Microsoft-Windows-DAL-Provider/Operational
    Microsoft-Windows-DataIntegrityScan/Admin
    Microsoft-Windows-DataIntegrityScan/CrashRecovery
    Microsoft-Windows-DateTimeControlPanel/Operational
    Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider/Admin
    Microsoft-Windows-DeviceManagement-Enterprise-Diagnostics-Provider/Operational
    Microsoft-Windows-Devices-Background/Operational
    Microsoft-Windows-DeviceSync/Operational
    Microsoft-Windows-Dhcp-Client/Admin
    Microsoft-Windows-Dhcp-Client/Operational
    Microsoft-Windows-Dhcpv6-Client/Admin
    Microsoft-Windows-Dhcpv6-Client/Operational
    Microsoft-Windows-Diagnosis-PCW/Operational
    Microsoft-Windows-Diagnosis-PLA/Operational
    Microsoft-Windows-Diagnosis-Scheduled/Operational
    Microsoft-Windows-Diagnosis-Scripted/Admin
    Microsoft-Windows-Diagnosis-Scripted/Operational
    Microsoft-Windows-Diagnosis-ScriptedDiagnosticsProvider/Operational
    Microsoft-Windows-Diagnostics-Networking/Operational
    Microsoft-Windows-DiskDiagnosticResolver/Operational
    Microsoft-Windows-DisplayColorCalibration/Operational
    Microsoft-Windows-DNS-Client/Operational
    Microsoft-Windows-DSC/Admin
    Microsoft-Windows-DSC/Operational
    Microsoft-Windows-EapHost/Operational
    Microsoft-Windows-EapMethods-RasChap/Operational
    Microsoft-Windows-EapMethods-RasTls/Operational
    Microsoft-Windows-EapMethods-Sim/Operational
    Microsoft-Windows-EapMethods-Ttls/Operational
    Microsoft-Windows-EDP-Application-Learning/Admin
    Microsoft-Windows-EDP-Audit-Regular/Admin
    Microsoft-Windows-EDP-Audit-TCB/Admin
    Microsoft-Windows-Energy-Estimation-Engine/EventLog
    Microsoft-Windows-ESE/Operational
    Microsoft-Windows-FeatureConfiguration/Operational
    Microsoft-Windows-FileHistory-Core/WHC
    Microsoft-Windows-Folder Redirection/Operational
    Microsoft-Windows-Forwarding/Operational
    Microsoft-Windows-GenericRoaming/Admin
    Microsoft-Windows-glcnd/Admin
    Microsoft-Windows-HelloForBusiness/Operational
    Microsoft-Windows-HomeGroup Control Panel/Operational
    Microsoft-Windows-HomeGroup Listener Service/Operational
    Microsoft-Windows-HomeGroup Provider Service/Operational
    Microsoft-Windows-HostGuardianClient-Service/Admin
    Microsoft-Windows-HostGuardianClient-Service/Operational
    Microsoft-Windows-HostGuardianService-CA/Admin
    Microsoft-Windows-HostGuardianService-CA/Operational
    Microsoft-Windows-HostGuardianService-Client/Admin
    Microsoft-Windows-HostGuardianService-Client/Operational
    Microsoft-Windows-HotspotAuth/Operational
    Microsoft-Windows-HttpService/Log
    Microsoft-Windows-HttpService/Trace
    Microsoft-Windows-IdCtrls/Operational
    Microsoft-Windows-International/Operational
    Microsoft-Windows-International-RegionalOptionsControlPanel/Operational
    Microsoft-Windows-Iphlpsvc/Operational
    Microsoft-Windows-IPxlatCfg/Operational
    Microsoft-Windows-Kernel-ApphelpCache/Operational
    Microsoft-Windows-Known Folders API Service
    Microsoft-Windows-LinkLayerDiscoveryProtocol/Operational
    Microsoft-Windows-MediaFoundation-Performance/SARStreamResource
    Microsoft-Windows-Mobile-Broadband-Experience-Parser-Task/Operational
    Microsoft-Windows-Mobile-Broadband-Experience-SmsRouter/Admin
    Microsoft-Windows-ModernDeployment-Diagnostics-Provider/Admin
    Microsoft-Windows-ModernDeployment-Diagnostics-Provider/Autopilot
    Microsoft-Windows-ModernDeployment-Diagnostics-Provider/ManagementService
    Microsoft-Windows-Mprddm/Operational
    Microsoft-Windows-MSPaint/Admin
    Microsoft-Windows-Ncasvc/Operational
    Microsoft-Windows-NcdAutoSetup/Operational
    Microsoft-Windows-NCSI/Operational
    Microsoft-Windows-NDIS/Operational
    Microsoft-Windows-NetworkLocationWizard/Operational
    Microsoft-Windows-NetworkProfile/Operational
    Microsoft-Windows-NetworkProvisioning/Operational
    Microsoft-Windows-NlaSvc/Operational
    Microsoft-Windows-OfflineFiles/Operational
    Microsoft-Windows-OneBackup/Debug
    Microsoft-Windows-OneX/Operational
    Microsoft-Windows-OOBE-Machine-DUI/Operational
    Microsoft-Windows-OtpCredentialProvider/Operational
    Microsoft-Windows-PackageStateRoaming/Operational
    Microsoft-Windows-PerceptionRuntime/Operational
    Microsoft-Windows-PerceptionSensorDataService/Operational
    Microsoft-WindowsPhone-Connectivity-WiFiConnSvc-Channel
    Microsoft-Windows-PowerShell/Admin
    Microsoft-Windows-PowerShell/Operational
    Microsoft-Windows-PowerShell-DesiredStateConfiguration-FileDownloadManager/Operational
    Microsoft-Windows-PrintBRM/Admin
    Microsoft-Windows-PrintService/Admin
    Microsoft-Windows-PrintService/Operational
    Microsoft-Windows-PriResources-Deployment/Operational
    Microsoft-Windows-Provisioning-Diagnostics-Provider/Admin
    Microsoft-Windows-Provisioning-Diagnostics-Provider/AutoPilot
    Microsoft-Windows-Provisioning-Diagnostics-Provider/ManagementService
    Microsoft-Windows-Proximity-Common/Diagnostic
    Microsoft-Windows-PushNotification-Platform/Admin
    Microsoft-Windows-PushNotification-Platform/Operational
    Microsoft-Windows-RasAgileVpn/Operational
    Microsoft-Windows-ReadyBoost/Operational
    Microsoft-Windows-Regsvr32/Operational
    Microsoft-Windows-RemoteApp and Desktop Connections/Admin
    Microsoft-Windows-RemoteApp and Desktop Connections/Operational
    Microsoft-Windows-RemoteAssistance/Admin
    Microsoft-Windows-RemoteAssistance/Operational
    Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Admin
    Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational
    Microsoft-Windows-RemoteDesktopServices-RemoteFX-Manager/Admin
    Microsoft-Windows-RemoteDesktopServices-RemoteFX-Manager/Operational
    Microsoft-Windows-RemoteDesktopServices-SessionServices/Operational
    Microsoft-Windows-Remotefs-Rdbss/Operational
    Microsoft-Windows-Resource-Exhaustion-Resolver/Operational
    Microsoft-Windows-RestartManager/Operational
    Microsoft-Windows-RetailDemo/Admin
    Microsoft-Windows-RetailDemo/Operational
    Microsoft-Windows-RRAS/Operational
    Microsoft-Windows-SearchUI/Operational
    Microsoft-Windows-SecureAssessment/Operational
    Microsoft-Windows-Security-Audit-Configuration-Client/Operational
    Microsoft-Windows-Security-EnterpriseData-FileRevocationManager/Operational
    Microsoft-Windows-Security-ExchangeActiveSyncProvisioning/Operational
    Microsoft-Windows-Security-IdentityListener/Operational
    Microsoft-Windows-Security-Mitigations/UserMode
    Microsoft-Windows-SecurityMitigationsBroker/Admin
    Microsoft-Windows-SecurityMitigationsBroker/Operational
    Microsoft-Windows-Security-SPP-UX-GenuineCenter-Logging/Operational
    Microsoft-Windows-Security-SPP-UX-Notifications/ActionCenter
    Microsoft-Windows-SENSE/Operational
    Microsoft-Windows-SenseIR/Operational
    Microsoft-Windows-SettingSync/Debug
    Microsoft-Windows-SettingSync/Operational
    Microsoft-Windows-SettingSync-Azure/Debug
    Microsoft-Windows-SettingSync-Azure/Operational
    Microsoft-Windows-SettingSync-OneDrive/Debug
    Microsoft-Windows-SettingSync-OneDrive/Operational
    Microsoft-Windows-ShellCommon-StartLayoutPopulation/Operational
    Microsoft-Windows-Shell-ConnectedAccountState/ActionCenter
    Microsoft-Windows-Shell-Core/ActionCenter
    Microsoft-Windows-Shell-Core/AppDefaults
    Microsoft-Windows-Shell-Core/LogonTasksChannel
    Microsoft-Windows-Shell-Core/Operational
    Microsoft-Windows-SmartCard-Audit/Authentication
    Microsoft-Windows-SmartCard-DeviceEnum/Operational
    Microsoft-Windows-SmartScreen/Debug
    Microsoft-Windows-SMBWitnessClient/Admin
    Microsoft-Windows-SMBWitnessClient/Informational
    Microsoft-Windows-StateRepository/Operational
    Microsoft-Windows-StorageManagement/Operational
    Microsoft-Windows-StorageSpaces-ManagementAgent/WHC
    Microsoft-Windows-StorageSpaces-SpaceManager/Diagnostic
    Microsoft-Windows-StorageSpaces-SpaceManager/Operational
    Microsoft-Windows-Storage-Tiering/Admin
    Microsoft-Windows-Store/Operational
    Microsoft-Windows-SystemSettingsThreshold/Operational
    Microsoft-Windows-TaskScheduler/Maintenance
    Microsoft-Windows-TaskScheduler/Operational
    Microsoft-Windows-TerminalServices-ClientUSBDevices/Admin
    Microsoft-Windows-TerminalServices-ClientUSBDevices/Operational
    Microsoft-Windows-TerminalServices-LocalSessionManager/Admin
    Microsoft-Windows-TerminalServices-LocalSessionManager/Operational
    Microsoft-Windows-TerminalServices-PnPDevices/Admin
    Microsoft-Windows-TerminalServices-PnPDevices/Operational
    Microsoft-Windows-TerminalServices-Printers/Admin
    Microsoft-Windows-TerminalServices-Printers/Operational
    Microsoft-Windows-TerminalServices-RDPClient/Operational
    Microsoft-Windows-TerminalServices-RemoteConnectionManager/Admin
    Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational
    Microsoft-Windows-TerminalServices-ServerUSBDevices/Admin
    Microsoft-Windows-TerminalServices-ServerUSBDevices/Operational
    Microsoft-Windows-Time-Service/Operational
    Microsoft-Windows-Time-Service-PTP-Provider/PTP-Operational
    Microsoft-Windows-Troubleshooting-Recommended/Admin
    Microsoft-Windows-Troubleshooting-Recommended/Operational
    Microsoft-Windows-TWinUI/Operational
    Microsoft-Windows-TZSync/Operational
    Microsoft-Windows-TZUtil/Operational
    Microsoft-Windows-UAC/Operational
    Microsoft-Windows-UniversalTelemetryClient/Operational
    Microsoft-Windows-User Control Panel/Operational
    Microsoft-Windows-User Device Registration/Admin
    Microsoft-Windows-User Profile Service/Operational
    Microsoft-Windows-User-Loader/Operational
    Microsoft-Windows-UserPnp/ActionCenter
    Microsoft-Windows-UserPnp/DeviceInstall
    Microsoft-Windows-VerifyHardwareSecurity/Admin
    Microsoft-Windows-VerifyHardwareSecurity/Operational
    Microsoft-Windows-VPN-Client/Operational
    Microsoft-Windows-Wcmsvc/Operational
    Microsoft-Windows-WDAG-PolicyEvaluator-CSP/Operational
    Microsoft-Windows-WDAG-PolicyEvaluator-GP/Operational
    Microsoft-Windows-WDAG-Service/Operational
    Microsoft-Windows-WebAuth/Operational
    Microsoft-Windows-WebAuthN/Operational
    Microsoft-Windows-WebIO-NDF/Diagnostic
    Microsoft-Windows-WEPHOSTSVC/Operational
    Microsoft-Windows-WER-PayloadHealth/Operational
    Microsoft-Windows-Windows Firewall With Advanced Security/Firewall
    Microsoft-Windows-Windows Firewall With Advanced Security/FirewallDiagnostics
    Microsoft-Windows-Windows Firewall With Advanced Security/FirewallVerbose
    Microsoft-Windows-WindowsColorSystem/Operational
    Microsoft-Windows-WindowsSystemAssessmentTool/Operational
    Microsoft-Windows-WindowsUIImmersive/Operational
    Microsoft-Windows-WinHTTP-NDF/Diagnostic
    Microsoft-Windows-WinINet-Capture/Analytic
    Microsoft-Windows-WinINet-Config/ProxyConfigChanged
    Microsoft-Windows-Winlogon/Operational
    Microsoft-Windows-WinRM/Operational
    Microsoft-Windows-Winsock-NameResolution/Operational
    Microsoft-Windows-Wired-AutoConfig/Operational
    Microsoft-Windows-WLAN-AutoConfig/Operational
    Microsoft-Windows-WMI-Activity/Operational
    Microsoft-Windows-WMPNSS-Service/Operational
    Microsoft-Windows-Wordpad/Admin
    Microsoft-Windows-WorkFolders/Operational
    Microsoft-Windows-WorkFolders/WHC
    Microsoft-Windows-Workplace Join/Admin
    Microsoft-Windows-WWAN-SVC-Events/Operational
    OpenSSH/Admin
    OpenSSH/Operational
    RemoteDesktopServices-RemoteFX-SessionLicensing-Admin
    RemoteDesktopServices-RemoteFX-SessionLicensing-Operational
    Setup
    SMSApi
    Windows PowerShell

    附录 B: 支持安全对象的 SACL 审计消息

    我在上面提到过,包含在 msobjs.dll 中的字符串可以提供一些有价值的信息,说明了哪些可保护对象支持 SACL 审计。 我提取了所有受支持的消息,并根据下面列表中的 securityobject 对它们进行分组。 希望这可以激发你在环境中应用目标 SACL 的兴趣,作为补充总体检测态势的一种方法。

    ALPC 端口:

     

    Communicate using port
    Channel:
    Channel read message
    Channel write message
    Channel query information
    Channel set information

    桌面:

     

    Read Objects
    Create window
    Create menu
    Hook control
    Journal (record)
    Journal (playback)
    Include this desktop in enumerations
    Write objects
    Switch to this desktop

    设备:

     

    Device Access Bit 0
    Device Access Bit 1
    Device Access Bit 2
    Device Access Bit 3
    Device Access Bit 4
    Device Access Bit 5
    Device Access Bit 6
    Device Access Bit 7
    Device Access Bit 8

    目录:

     

    Query directory
    Traverse
    Create object in directory
    Create sub-directory

    事件:

     

    Query event state
    Modify event state
    File, MailSlot, and NamedPipe:
    ReadData (or ListDirectory)
    WriteData (or AddFile)
    AppendData (or AddSubdirectory or CreatePipeInstance)
    ReadEA
    WriteEA
    Execute/Traverse
    DeleteChild
    ReadAttributes
    WriteAttributes
    IoCompletion:
    Query State
    Modify State

    Job:

     

    Assign process
    Set Attributes
    Query Attributes
    Terminate Job
    Set Security Attributes

    Key:

     

    Query key value
    Set key value
    Create sub-key
    Enumerate sub-keys
    Notify about changes to keys
    Create Link
    Undefined Access (no effect) Bit 6
    Undefined Access (no effect) Bit 7
    Enable 64(or 32) bit application to open 64 bit key
    Enable 64(or 32) bit application to open 32 bit key

    KeyedEvent:

     

    KeyedEvent Wait
    KeyedEvent Wake

    Mutant:

    Query mutant state

    Port and WaitablePort:

    Communicate using port

    进程:

     

    Force process termination
    Create new thread in process
    Set process session ID
    Perform virtual memory operation
    Read from process memory
    Write to process memory
    Duplicate handle into or out of process
    Create a subprocess of process
    Set process quotas
    Set process information
    Query process information
    Set process termination port

    Profile:

    Control profile

    Section:

     

    Query section state
    Map section for write
    Map section for read
    Map section for execute
    Extend size

    Semaphore:

     

    Query semaphore state
    Modify semaphore state

    符号链接:

    Use symbolic link

    线程:

     

    Force thread termination
    Suspend or resume thread
    Send an alert to thread
    Get thread context
    Set thread context
    Set thread information
    Query thread information
    Assign a token to the thread
    Cause thread to directly impersonate another thread
    Directly impersonate this thread

    计时器:

     

    Query timer state
    Modify timer state
    Token:
    AssignAsPrimary
    Duplicate
    Impersonate
    Query
    QuerySource
    AdjustPrivileges
    AdjustGroups
    AdjustDefaultDacl
    AdjustSessionID

    类型:

     

    Create instance of object type
    WindowsStation:
    Enumerate desktops
    Read attributes
    Access Clipboard
    Create desktop
    Write attributes
    Access global atoms
    Exit windows
    Unused Access Flag
    Include this windowstation in enumerations
    Read screen

    WMI 名称空间:

     

    Enable WMI Account
    Execute Method
    Full Write
    Partial Write
    Provider Write
    Remote Access
    Subscribe
    Publis
    展开全文
  • 一些没有命名的对象是安全对象,如:进程和线程,也有安全描述符SD。安全对象Securable Object是拥有SD的Windows的对象。 在 Windows系统中,其是用一个安全描述符(Security Descriptors)的结构来保存其权限的...
    安全对象Securable Object是拥有SD的Windows的对象。
    所有的被命名的Windows的对象都是安全对象。一些没有命名的对象是安全对象,如:进程和线程,也有安全描述符SD。安全对象Securable Object是拥有SD的Windows的对象。
    在 Windows系统中,其是用一个安全描述符(Security Descriptors)的结构来保存其权限的设置信息,简称为SD,其在Windows SDK中的结构名是“SECURITY_DESCRIPTOR”,这是包括了安全设置信息的结构体。一个安全描述符包含以下信息:
    ? 一个安全标识符(Security>访问控制链表(ACL)
    一个
     ACL 是一个 ACE 链表。每个 ACL 中的 ACE 标示一个托管以及指定允许的访问权限、否定或托管的设计。一个对象的安全描述符号包含两种类型的ACL ,一个是 DACL ,一个是 SACL 

    一个目录访问控制链表( DACL )标示允许或拒绝访问一个安全对象的托管。当一个进程常识访问一个安全对象的时候,系统检查对象的 DACL 中的ACE 来决定是否赋予访问权限。如果对象没有 DACL ,系统赋予完全的访问权限,如果对象的 DACL 没有 ACE ,那么系统拒绝所有访问对象的尝试,因为 DACL 不允许任何访问权限。系统检查 ACE 序列直到找到一到多个 ACE ,或者直到任何请求的访问权限被否定。更多的信息参见: DACL 怎么样控制一个对象的。对于创建 DACL 的信息,见创建一个 DACL 。

    一个系统访问控制链表( SACL )是管理员登录尝试访问一个安全对象。每个 ACE 指定一个指定的托管尝试的访问类型,这个访问会导致系统产生一个安全事件日志。一个 SACL 中的 ACE 能够产生访问尝试失败或成功的时候产生评估记录,在将来的 release 中,一个 SACL 在一个未授权用户尝试访问一个对象的时候发出一个警告。更多 SACL 的信息参见 Audit Generation 和 SACL 访问权限。

    不要尝试直接使用一个 ACL 来工作。为了确保 ACL 能够语义正确的,使用适当的函数来创建和操纵 ACL 。更多的信息参见:从 ACL 中取得信息和创建或修改一个 ACL 。

    ACL 也提供访问控制微软的 Active Directory 目录服务对象。活动目录服务接口( ADSI )包括创建和修改 ACL 内容的程序。更多信息参见:控制访问活动目录对象

    访问控制实体(ACE
    一个访问控制实体(
    ACE)是ACL中的一个元素。一个ACL可能包含0到多个ACE。每个ACE通过一个指定的托管来控制或监视一个对象。更多关于添加、删除、改变ACE,见修改ACL对象。

    Window Me/98/95:不支持访问控制

    有6种类型的ACE,三种被所有的安全对象支持,其他类型是对象特定的ACE,由目录服务对象支持。

    所有ACE类型都包含下面访问控制信息:

    1.  一个安全标示符号(SID)来标示ACE应用的托管

    2.  一个访问掩码指定ACE控制的访问权限

    3.  一个指示ACE类型的标志位

    4.  一系列位标志决定是否子容器或对象可以继承ACE从基本对象到ACL附着的对象。

    下表列出了三个所有安全对象支持的ACE类型:

    Type

    Description

    访问拒绝ACE

    用在一个DACL中拒绝到一个托管的访问权限

    访问允许ACE

    用在一个DACL中允许到托管的访问权限

    系统评估ACE

    用在SACL中,当托管尝试检查指定访问权限时产生一个评估记录

    对于对象指定的ACE,参见对象指定ACE。

    注意,系统警告ACE对象现在不支持。


    托管

    一个托管是一个用户帐户、组帐户或登录会话到一个ACE应用。每个ACL中的ACE都有一个SID来标示托管。用户帐户包含人使用的帐户或程序帐户(例如,Window服务用来登录到本地计算机的)。组帐户不能用来登录到计算机,但在ACE中非常有用,用来拒绝或允许一到多个用户帐户的访问权限。一个登录SID表示当前的登录会话用来允许和拒绝访问权限,直到用户登出。

    NT4.0和后来版本中访问控制函数使用TRUSTEE结构体来表示一个托管。这个结构体能使你用一个字符串或一个SID来表示一个托管。如果你使用一个名字,从TRUSTEE结构创建ACE的函数执行SID缓冲区分配工作并且查询SID对应的帐户名称。有两个助手函数,BuildTrusteeWithSid和BuildTrusteeWithName,可以用SID或名字来初始化一个TRUSTEE结构。BuildTrusteeWithObjectsAndSid和BuildTrusteeWithObjectsAndName允许你使用一个对象指定的ACE信息来初始化一个TRUSTEE结构体。其他3个助手函数,GetTrusteeFrorm、GetTrusteeName和GetTrusteeType,返回TRUSTEE结构各成员的值。
    Window XP/2000:TRUSTEE的ptstrName成员可以是一个指向OBJECTS_AND_NAME或OBJECTS_AND_SID结构体的指针。这些结构体说明对象指定ACE的信息,除了托管的名字和SID之外。这可以象SetEntriesInAcl和GetExplicitEntriesFromAcl这样的函数存储对象指定ACE的信息到EXPLICIT_ACCESS结构体的Trustee成员中。

    TRUSTEE结构体:

    typedef struct _TRUSTEE {
      PTRUSTEE pMultipleTrustee;
      MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
      TRUSTEE_FORM TrusteeForm;
      TRUSTEE_TYPE TrusteeType;
      LPTSTR ptstrName;

    } TRUSTEE, *PTRUSTEE;

    访问权限和访问掩码

    一个访问权限是一个标志位对应到一个特殊操作集合,这个集合表示线程可以在安全对象上执行的操作。例如:注册表键KEY_SET_VALUE访问权限,对应到线程在这个键下设置的值的能力。如果线程想在一个对象执行一个操作,但没有必要的访问权限,系统不执行操作。

    一个访问掩码是一个32位的值,它对应到对象支持的访问权限。所有的Windows NT/2000/XP 安全对象使用一个Windows访问掩码格式,这个格式包含下面的访问权限位:

    1.  通用访问权限

    2.  标准访问权限

    3.  SACL访问权限

    4.  目录服务访问权限

    当一个线程想打开一个对象的句柄,线程通常指定一个访问掩码来请求一系列的访问权限。例如,需要设置和查询注册表键的程序可以使用一个访问掩码来请求KEY_SET_VALUE和KEY_QUERY_VALUE访问权限来打开该键。

    下面表显示了操作每种类型安全对象的信息:

    对象类型

    安全描述符号函数

    NTFS上的文件或目录系统

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    命名管道和匿名管道

    GetSecurityInfoSetSecurityInfo

    控制台屏幕缓冲区

    Not supported.

    进程和线程

    GetSecurityInfoSetSecurityInfo

    文件映射对象

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Access tokens

    SetKernelObjectSecurityGetKernelObjectSecurity

    Windows管理对象 (windows工作站和桌面)

    GetSecurityInfoSetSecurityInfo

    注册表键

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Windows服务

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    本地和远程打印机

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    网络共享

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    进程间同步对象 (事件, mutexes, semaphores, and waitable timers)

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    作业对象

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo


    通用访问权限

    安全对象使用Windows 访问掩码格式,四个高位说明通用访问权限。每个安全对象类型映射到这些位到一系列标准和对象特殊访问权限。例如:一个Window文件对象映射GENERIC_READ位到READ_CONTROL和SYNCHRONIZE 标准访问权限和FILE_READ_DATA、FILE_READ_EA和FILE_READ_ATTRIBUTES对象指定访问权限。其他类型对象映射GENERIC_READ位到与类型对象适应的一些访问权限。

    你可以在你打开一个对象句柄的时候使用通用访问权限来指定需要的访问类型;这通常比指定所有对应标准和特指权限要简单。

    下表显示了通用访问权限定义的常量。

    常量

    解释

    GENERIC_ALL

    读、写和执行访问

    GENERIC_EXECUTE

    执行

    GENERIC_READ

    GENERIC_WRITE

    应用程序定义的私有安全访问对象能使用通用访问权限。

    安全描述符(SD)

    安全描述符包含了安全对象相关的安全信息。安全描述父由一个SECURITY_DESCRIPTOR结构体组成,它关联到一个安全对象。一个安全描述符包含下面的安全信息:

    1.  拥有者或基本组对象的安全ID(SIDs)

    2.  DACL指定特殊用户或组的允许或拒绝的访问权限

    3.  SACL指定对象通用评估记录尝试的访问类型

    4.  一个控制位集合,说明安全描述符的含义或它每个成员

    程序不需要直接操作安全描述符的内容。Windows API提供设置和返回安全描述符号的函数。另外,有用来创建和初始化一个新对象安全描述符号的函数。

    Windows NT 3.51和更早的版本,Windows ME/98/95:参见:低级访问控制。

    工作在活动目录对象上安全描述符程序能使用Windows的安全函数或ADSI(活动目录服务接口)提供的安全接口。更多ADSI的信息参见:访问控制如何在活动目录中工作?


    DACL是怎么控制访问对象的?

    当一个线程想访问一个安全对象时候,系统要么允许访问,要拒绝访问。如果对象没有DACL,系统赋予访问权限,否则系统查找DACL中的该线程的ACE。每个对象DACL中的ACE指定托管的访问允许或拒绝的访问权限,它可以是一个用户帐户、组帐户或登录会话。

    系统比较ACE中的托管和线程访问标记的托管标示。一个访问标记包含SID来说明用户和用户输入的组帐户。一个标记也包含一个登录SID,来表示当前的登录会话。在访问检查期间,系统忽略不可用的组SID。更多可用不可用信息以及拒绝SID,见访问标记中的SID属性。

    通常,系统使用现成饿基本访问标记来请求访问。然而,如果现成正在扮演其他用户,系统使用现成的扮演标记。

    系统家产序列中的每个ACE,直到下面的情况发生:

    1.  一个显式拒绝任何与线程访问标记中列出托管不同的访问ACE出现

    2.  线程访问标记中列出的一个或多个允许访问的ACE出现,这个标记显式赋予所有权限。

    3.  所有的ACE都检查过,并且至少一个访问权限没有显式的允许,这种情况下暗示拒绝。

    下图描述一个DACL对象允许访问一个线程而拒绝访问另一个线程。


    对于线程A,系统读ACE1并且立即拒绝访问,因为访问拒绝ACE应用到线程访问标记中的用户。这种情况下,系统并没有检查ACE2和3。对于线程B,ACE1没有应用,因此系统处理ACE2,其允许写操作,并且ACE3允许读和执行操作。

    因为系统在请求访问并显式允许或拒绝的时候停止检查,DACL中的ACE顺序非常重要。注意,如果ACE顺序与例子中的不同,系统可能分配访问权限给A。对于系统对象,操作系统定义一个首选的DACL中ACE的顺序。


    创建一个DACL

    创建适当的 DACL 是你程序开发中必要和重要的,因为一个 NULL DACL 允许所有用户所有访问权限,不要使用 NULL DACL 。

    下面例子演示了如何正常创建一个 DACL 。例子,包含一个函数, CreateMyDACL ,用安全描述符定义语言( SDDL )来定义那些赋予的和拒绝的DACL 中的访问控制。为了提供对你程序对象的不同访问,根据你的需要来修改 CreateMyDACL 。

    在例子中:

    1.       main 函数传递一个 SECURITY_ATTRIBUTES 结构体的地址给 CreateMyDACL 函数

    2.       CreateMyDACL 函数使用 SDDL 字符串来:

    ?        拒绝 guest 和匿名登录用户访问

    ?        允许授权用户的读 / 写 / 执行访问

    ?        允许管理员所有控制

    3.       更多的 SDDL 字符串格式

    4.       CreateMyDACL 函数调用 ConvertStringSecurityDescriptorToSecurityDescriptor 函数转换 SDDL 字符串为一个安全描述符。安全描述符号通过SECURITY_ATTRIBUTES 结构体的 lpSecurityDescriptor 成员来指定。 CreateMyDACL 发送 ConvertStringSecurityDescriptorToSecurityDescriptor 的返回值给 main 函数。

    5.       main 函数完成使用 SECURITY_ATTRIBUTES 结构体时, main 函数释放 lpSecurityDescriptor 成员的内存,调用 LocalFree 函数来完成。

    注意,成功编译 SDDL 函数,例如: ConvertStringSecurityDescriptorToSecurityDescriptor, 你必须定义 _WIN32_WINNT 常量为 0x0500 或更大。 SDDL在 Windows 2003 家族 ,Windows XP 和 2000 操作系统上可用。


     1#define _WIN32_WINNT 0x0500
     2
     3#include <windows.h>
     4#include <sddl.h>
     5#include <stdio.h>
     6
     7BOOL CreateMyDACL(SECURITY_ATTRIBUTES *);
     8
     9void main()
    10{
    11     SECURITY_ATTRIBUTES  sa;
    12     sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    13     sa.bInheritHandle = FALSE;  
    14     // Call function to set the DACL. The DACL
    15     // is set in the SECURITY_ATTRIBUTES 
    16     // lpSecurityDescriptor member.
    17     if (!CreateMyDACL(&sa))
    18     {
    19         // Error encountered; generate message and exit.
    20         printf("Failed CreateMyDACL\n");
    21         exit(1);
    22     }
    23
    24     // Use the updated SECURITY_ATTRIBUTES to specify
    25     // security attributes for securable objects.
    26     // This example uses security attributes during
    27     // creation of a new directory.
    28     if (0 == CreateDirectory(TEXT("C:\\MyFolder"), &sa))
    29     {
    30         // Error encountered; generate message and exit.
    31         printf("Failed CreateDirectory\n");
    32         exit(1);
    33     }
    34
    35     // Free the memory allocated for the SECURITY_DESCRIPTOR.
    36     if (NULL != LocalFree(sa.lpSecurityDescriptor))
    37     {
    38         // Error encountered; generate message and exit.
    39         printf("Failed LocalFree\n");
    40         exit(1);
    41     }
    42}
    43
    44
    45// CreateMyDACL.
    46//    Create a security descriptor that contains the DACL you want.
    47//    This function uses SDDL to make Deny and Allow ACEs.
    48//
    49// Parameter:
    50//    SECURITY_ATTRIBUTES * pSA
    51//    Pointer to a SECURITY_ATTRIBUTES structure. It is the caller's
    52//    responsibility to properly initialize the structure and to free 
    53//    the structure's lpSecurityDescriptor member when the caller has
    54//    finished using it. To free the structure's lpSecurityDescriptor 
    55//    member, call the LocalFree function.
    56// 
    57// Return value:
    58//    FALSE if the address to the structure is NULL. 
    59//    Otherwise, this function returns the value from the
    60//    ConvertStringSecurityDescriptorToSecurityDescriptor function.
    61BOOL CreateMyDACL(SECURITY_ATTRIBUTES * pSA)
    62{
    63     // Define the SDDL for the DACL. This example sets 
    64     // the following access:
    65     //     Built-in guests are denied all access.
    66     //     Anonymous logon is denied all access.
    67     //     Authenticated users are allowed read/write/execute access.
    68     //     Administrators are allowed full control.
    69     // Modify these values as needed to generate the proper
    70     // DACL for your application. 
    71     TCHAR * szSD = TEXT("D:")       // Discretionary ACL
    72        TEXT("(D;OICI;GA;;BG)")     // Deny access to built-in guests
    73        TEXT("(D;OICI;GA;;;AN)")     // Deny access to anonymous logon
    74        TEXT("(A;OICI;GRGWGX;;;AU)") // Allow read/write/execute to authenticated users
    75        TEXT("(A;OICI;GA;;;BA)");    // Allow full control to administrators
    76
    77    if (NULL == pSA)
    78        return FALSE;
    79     return ConvertStringSecurityDescriptorToSecurityDescriptor(
    80                szSD,
    81                SDDL_REVISION_1,
    82                &(pSA->lpSecurityDescriptor),
    83                NULL);
    84}
    85

    可保安全对象 

    一个安全对象有一个安全描述符。所有有名字的 Windows 对象都是安全的。有些没有名字的对象,例如:进程和线程对象也有安全描述符。对于大多数安全对象来说,你可以在创建对象的时候指定一个对象的安全描述符。例如:你能在 CreateFile 和 CreateProcess 函数中指定安全描述符。

    另外, Windows 安全函数是你能够为操作系统创建的而不是 Windows 创建的安全对象得到和设置安全信息。 Windows 安全函数也提供支持私有使用安全描述符和程序定义对象。更多关于私有安全对象信息参见客户服务器访问控制。 

    每个安全对象定义它自己的一系列访问权限,并且它拥有的映射通用访问权限。更多关于指定和通用访问权限的信息,参见对象类型总览。

    下表显示了函数来操作通用安全对象的安全信息:

    对象类型

    安全描述符函数

    NTFS文件系统的文件和目录

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Named pipes

    Anonymous pipes

    GetSecurityInfo SetSecurityInfo

    Processes

    Threads

    GetSecurityInfo SetSecurityInfo

    File-mapping objects

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Access tokens

    SetKernelObjectSecurity GetKernelObjectSecurity

    Window-management objects ( window stations and desktops)

    GetSecurityInfo SetSecurityInfo

    Registry keys

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Windows services

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Local or remote printers

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Network shares

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Interprocess synchronization objects (events, mutexes, semaphores, and waitable timers)

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Job objects

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Directory service objects

    These objects are handled by Active Directory Objects. See Active Directory Service Interfaces.


    登录会话

    一个登录绘画从用户登录到计算机时候开始。所有登录会话中的进程有相同的基本访问标记。访问标记包含登录会话相关的安全上下文,包含用户的 SID和登录标示以及登录 SID 。

     

    登录 SID 

    一个安全标示符( SID )用来表示登录会话。你可以使用 DACL 中的登录 SID 来在登录会话过程中控制访问。登录 SID 只有在用户登出的时候无效。登录 SID 是计算机运行的时候唯一的。没有其他会话有系统的 SID 。然而,可能的登录 SID 集合在计算机启动的时候被复位。为了从访问标记中返回登录SID ,为 TokenGroups 调用 GetTokenInformation 函数。

     

    访问标记 

    一个访问标记包含登录会话的安全信息。系统在用户登录的时候创建一个安全标记,每个进程执行用户由于的标记副本。标记表示用户、用户组和用户权限。系统使用标记来控制访问安全对象和控制用户在本地计算机上执行各种系统相关操作。两种访问标记:私有的和伪装的。

     

    伪装标记: 

    一个被创建来捕获客户进程安全信息、允许服务器在安全操作中伪装客户进程的访问标记。

     

    主标记:

    一个 Windows 内核创建的标记。可能分配给一个进程来表示默认的进程安全信息。

    展开全文
  • 一些没有命名的对象是安全对象,如:进程和线程,也有安全描述符SD。安全对象Securable Object是拥有SD的Windows的对象。 在 Windows系统中,其是用一个安全描述符(Security Descriptors)的结构来保存其权限的设置...
    安全对象Securable Object是拥有SD的Windows的对象。注:sd就是安全描述符 访问内核对象的时候 内核要先访问安全描述符 看是否准许访问 拥有安全描述符的内核对象就是安全对象
    所有的被命名的Windows的对象都是安全对象。一些没有命名的对象是安全对象,如:进程和线程,也有安全描述符SD。安全对象Securable Object是拥有SD的Windows的对象。
    在 Windows系统中,其是用一个安全描述符(Security Descriptors)的结构来保存其权限的设置信息,简称为SD,其在Windows SDK中的结构名是“SECURITY_DESCRIPTOR”,这是包括了安全设置信息的结构体。一个安全描述符包含以下信息
    ? 一个安全标识符(Security>访问控制链表(ACL)
    一个
     ACL 是一个 ACE 链表。每个 ACL 中的 ACE 标示一个托管(注:就是用户,系统用户还是用户组还是别的用户)以及指定允许的访问权限、掩码或者其他功能标志位(注:掩码就是32位的2进制 通过它和存有访问权限的32位按位与运算才能得到自己的访问权限)。一个对象的安全描述符号包含两种类型的ACL ,一个是 DACL ,一个是 SACL 

    一个目录访问控制链表( DACL )标示允许或拒绝访问一个安全对象的托管。当一个进程尝试访问一个安全对象的时候,系统检查对象的 DACL 中的ACE(注:DACL就是ACE链表,一种数据结构,没一个节点存放着访问权限等信息,这种链表查找起来比数组快) 来决定是否赋予访问权限。如果对象没有 DACL ,系统赋予完全的访问权限,如果对象的 DACL 没有 ACE(注:此处的区别前面是没有DACL 这里是有DACL但是没有要访问的进程的ace,我是这么认为的 ),那么系统拒绝所有访问对象的尝试,因为 DACL 不允许任何访问权限。系统检查 ACE 序列直到找到一到多个 ACE ,或者直到任何请求的访问权限被否定。更多的信息参见: DACL 怎么样控制一个对象的。对于创建 DACL 的信息,见创建一个 DACL 。

    一个系统访问控制链表( SACL )是管理员登录尝试访问一个安全对象(注:和DACL区别是前者是进程等的访问此处是网络中的用户发起对存放各种内核对象的Active Directory的访问,这个Active Directory类似于windows server 2003,一种域控制器,

    目前办公网络有工作组模式和域模式  Active Directory 就是活动目录,在域中真正干活的就是这个,他把所有加入域的计算机的所有资源集合起来,并且在用户认证方面也集中管理,并且可以做到在同一个局域网内任何一个台计算机都可以使用你的账号登陆,并且登陆后都是相同的桌面。
    )。每个 ACE 指定一个指定的托管尝试的访问类型,这个访问会导致系统产生一个安全事件日志(注:Active Directory,的ace链表规定了哪些用户可以访问的权限,当访问失败或者成功Active Directory都可以产生一些日志记录这些成功失败的信息)。一个 SACL 中的 ACE 能够产生访问尝试失败或成功的时候产生评估记录,在将来的 release 中(注:类似于进程销毁后 访问内核对象计数器减一),一个 SACL 在一个未授权用户尝试访问一个对象的时候发出一个警告。更多 SACL 的信息参见 Audit Generation 和 SACL 访问权限。

    不要尝试直接使用一个 ACL 来工作。为了确保 ACL 能够语义正确的,使用适当的函数来创建和操纵 ACL 。更多的信息参见:从 ACL 中取得信息和创建或修改一个 ACL 。

    ACL 也提供访问控制微软的 Active Directory 目录服务对象。活动目录服务接口( ADSI )包括创建和修改 ACL(注:Active Directory可以设置和修改SACL中的ace链表) 内容的程序。更多信息参见:控制访问活动目录对象

    访问控制实体(ACE
    一个访问控制实体(
    ACE)是ACL中的一个元素。一个ACL可能包含0到多个ACE。每个ACE通过一个指定的托管来控制或监视一个对象。更多关于添加、删除、改变ACE,见修改ACL对象。

    Window Me/98/95:不支持访问控制

    有6种类型的ACE,三种被所有的安全对象支持,其他类型是对象特定的ACE,由目录服务对象(注意:就是上文提到的Active Directory)支持。

    所有ACE类型都包含下面访问控制信息:

    1.  一个安全标示符号(SID)来标示ACE应用的托管

    2.  一个访问掩码指定ACE控制的访问权限

    3.  一个指示ACE类型的标志位(注意:就是上面提到的六种类型)

    4.  一系列位标志决定是否子容器或对象可以继承ACE从基本对象到ACL附着的对象。(注意:Active Directory里可以设置子容器 子容器里可以创建很多网络连接的客户端的需要的或者相关的内核对象 这个子容器可能继承父容器Active Directory的ace属性)

    下表列出了三个所有安全对象支持的ACE类型:

    Type

    Description

    访问拒绝ACE

    用在一个DACL中拒绝到一个托管的访问权限

    访问允许ACE

    用在一个DACL中允许到托管的访问权限

    系统评估ACE

    用在SACL中,当托管尝试检查指定访问权限时产生一个评估记录

    对于对象指定的ACE,参见对象指定ACE。(注意:第三种是SACL 访问Active Directory的那个 会产生记录 上文说过的)

    注意,系统警告ACE对象现在不支持。


    托管

    一个托管是一个用户帐户、组帐户或登录会话到一个ACE应用。每个ACL中的ACE都有一个SID来标示托管。用户帐户包含人使用的帐户或程序帐户(例如,Window服务用来登录到本地计算机的)。组帐户不能用来登录到计算机,但在ACE中非常有用,用来拒绝或允许一到多个用户帐户的访问权限。一个登录SID(注意:是登陆sid不是sid)表示当前的登录会话用来允许和拒绝访问权限,直到用户登出。

    NT4.0和后来版本中访问控制函数使用TRUSTEE结构体来表示一个托管这个结构体能使你用一个字符串或一个SID来表示一个托管。如果你使用一个名字,从TRUSTEE结构创建ACE的函数执行SID缓冲区分配工作并且查询SID对应的帐户名称。有两个助手函数,BuildTrusteeWithSid和BuildTrusteeWithName,可以用SID或名字来初始化一个TRUSTEE结构。BuildTrusteeWithObjectsAndSid和BuildTrusteeWithObjectsAndName允许你使用一个对象指定的ACE信息来初始化一个TRUSTEE结构体。其他3个助手函数,GetTrusteeFrorm、GetTrusteeName和GetTrusteeType,返回TRUSTEE结构各成员的值。
    Window XP/2000:TRUSTEE的ptstrName成员可以是一个指向OBJECTS_AND_NAME或OBJECTS_AND_SID结构体的指针。这些结构体说明对象指定ACE的信息,除了托管的名字和SID之外。这可以象SetEntriesInAcl和GetExplicitEntriesFromAcl这样的函数存储对象指定ACE的信息到EXPLICIT_ACCESS结构体的Trustee成员中。(注意:这几个函数就是修改或者添加已经存在的acl中的访问控制信息)

    TRUSTEE结构体:
    typedef struct _TRUSTEE {
      PTRUSTEE pMultipleTrustee;
      MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
      TRUSTEE_FORM TrusteeForm;
      TRUSTEE_TYPE TrusteeType;
      LPTSTR ptstrName;
    } TRUSTEE, *PTRUSTEE;
    


    访问权限和访问掩码

    一个访问权限是一个标志位对应到一个特殊操作集合,这个集合表示线程可以在安全对象上执行的操作。例如:注册表键KEY_SET_VALUE访问权限,对应到线程在这个键下设置的值的能力。如果线程想在一个对象执行一个操作,但没有必要的访问权限,系统不执行操作。

    一个访问掩码是一个32位的值,它对应到对象支持的访问权限。所有的Windows NT/2000/XP 安全对象使用一个Windows访问掩码格式,这个格式包含下面的访问权限位:

    1.  通用访问权限

    2.  标准访问权限

    3.  SACL访问权限

    4.  目录服务访问权限

    当一个线程想打开一个对象的句柄,线程通常指定一个访问掩码来请求一系列的访问权限。例如,需要设置和查询注册表键的程序可以使用一个访问掩码来请求KEY_SET_VALUE和KEY_QUERY_VALUE访问权限来打开该键。

    下面表显示了操作每种类型安全对象的信息:

    对象类型

    安全描述符号函数

    NTFS上的文件或目录系统

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    命名管道和匿名管道

    GetSecurityInfoSetSecurityInfo

    控制台屏幕缓冲区

    Not supported.

    进程和线程

    GetSecurityInfoSetSecurityInfo

    文件映射对象

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Access tokens

    SetKernelObjectSecurityGetKernelObjectSecurity

    Windows管理对象 (windows工作站和桌面)

    GetSecurityInfoSetSecurityInfo

    注册表键

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Windows服务

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    本地和远程打印机

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    网络共享

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    进程间同步对象 (事件, mutexes, semaphores, and waitable timers)

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    作业对象

    GetNamedSecurityInfoSetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo


    通用访问权限

    安全对象使用Windows 访问掩码格式,四个高位说明通用访问权限。每个安全对象类型映射到这些位到一系列标准和对象特殊访问权限。例如:一个Window文件对象映射GENERIC_READ位到READ_CONTROL和SYNCHRONIZE 标准访问权限和FILE_READ_DATA、FILE_READ_EA和FILE_READ_ATTRIBUTES对象指定访问权限。其他类型对象映射GENERIC_READ位到与类型对象适应的一些访问权限。

    你可以在你打开一个对象句柄的时候使用通用访问权限来指定需要的访问类型;这通常比指定所有对应标准和特指权限要简单。

    下表显示了通用访问权限定义的常量。

    常量

    解释

    GENERIC_ALL

    读、写和执行访问

    GENERIC_EXECUTE

    执行

    GENERIC_READ

    GENERIC_WRITE

    应用程序定义的私有安全访问对象能使用通用访问权限。

    安全描述符(SD)

    安全描述符包含了安全对象相关的安全信息。安全描述父由一个SECURITY_DESCRIPTOR结构体组成,它关联到一个安全对象。一个安全描述符包含下面的安全信息:

    1.  拥有者或基本组对象的安全ID(SIDs)(注意:通过sid这个键值就可以找到acl)

    2.  DACL指定特殊用户或组的允许或拒绝的访问权限

    3.  SACL指定对象通用评估记录尝试的访问类型

    4.  一个控制位集合,说明安全描述符的含义或它每个成员(注意:就是掩码)

    程序不需要直接操作安全描述符的内容。Windows API提供设置和返回安全描述符号的函数。另外,有用来创建和初始化一个新对象安全描述符号的函数。

    Windows NT 3.51和更早的版本,Windows ME/98/95:参见:低级访问控制。

    工作在活动目录对象上安全描述符程序能使用Windows的安全函数或ADSI(活动目录服务接口)提供的安全接口。更多ADSI的信息参见:访问控制如何在活动目录中工作?


    DACL是怎么控制访问对象的?

    当一个线程想访问一个安全对象时候,系统要么允许访问,要拒绝访问。如果对象没有DACL,系统赋予访问权限,否则系统查找DACL中的该线程的ACE。每个对象DACL中的ACE指定托管的访问允许或拒绝的访问权限,它可以是一个用户帐户、组帐户或登录会话。

    系统比较ACE中的托管和线程访问标记的托管标示。一个访问标记包含SID来说明用户和用户输入的组帐户。一个标记也包含一个登录SID,来表示当前的登录会话。在访问检查期间,系统忽略不可用的组SID。更多可用不可用信息以及拒绝SID,见访问标记中的SID属性。

    通常,系统使用现成饿基本访问标记来请求访问。然而,如果现成正在扮演其他用户,系统使用现成的扮演标记。

    系统家产序列中的每个ACE,直到下面的情况发生:

    1.  一个显式拒绝任何与线程访问标记中列出托管不同的访问ACE出现

    2.  线程访问标记中列出的一个或多个允许访问的ACE出现,这个标记显式赋予所有权限。

    3.  所有的ACE都检查过,并且至少一个访问权限没有显式的允许,这种情况下暗示拒绝。

    下图描述一个DACL对象允许访问一个线程而拒绝访问另一个线程。


    对于线程A,系统读ACE1并且立即拒绝访问,因为访问拒绝ACE应用到线程访问标记中的用户。这种情况下,系统并没有检查ACE2和3。对于线程B,ACE1没有应用,因此系统处理ACE2,其允许写操作,并且ACE3允许读和执行操作。

    因为系统在请求访问并显式允许或拒绝的时候停止检查,DACL中的ACE顺序非常重要。注意,如果ACE顺序与例子中的不同,系统可能分配访问权限给A。对于系统对象,操作系统定义一个首选的DACL中ACE的顺序。



    创建一个DACL

    创建适当的 DACL 是你程序开发中必要和重要的,因为一个 NULL DACL 允许所有用户所有访问权限,不要使用 NULL DACL 。

    下面例子演示了如何正常创建一个 DACL 。例子,包含一个函数, CreateMyDACL ,用安全描述符定义语言( SDDL )来定义那些赋予的和拒绝的DACL 中的访问控制。为了提供对你程序对象的不同访问,根据你的需要来修改 CreateMyDACL 。

    在例子中:

    1.       main 函数传递一个 SECURITY_ATTRIBUTES 结构体的地址给 CreateMyDACL 函数

    2.       CreateMyDACL 函数使用 SDDL 字符串来:

    ?        拒绝 guest 和匿名登录用户访问

    ?        允许授权用户的读 / 写 / 执行访问

    ?        允许管理员所有控制

    3.       更多的 SDDL 字符串格式

    4.       CreateMyDACL 函数调用 ConvertStringSecurityDescriptorToSecurityDescriptor 函数转换 SDDL 字符串为一个安全描述符。安全描述符号通过SECURITY_ATTRIBUTES 结构体的 lpSecurityDescriptor 成员来指定。 CreateMyDACL 发送 ConvertStringSecurityDescriptorToSecurityDescriptor 的返回值给 main 函数。

    5.       main 函数完成使用 SECURITY_ATTRIBUTES 结构体时, main 函数释放 lpSecurityDescriptor 成员的内存,调用 LocalFree 函数来完成。

    注意,成功编译 SDDL 函数,例如: ConvertStringSecurityDescriptorToSecurityDescriptor, 你必须定义 _WIN32_WINNT 常量为 0x0500 或更大。 SDDL在 Windows 2003 家族 ,Windows XP 和 2000 操作系统上可用。

    #define _WIN32_WINNT 0x0500
     
    #include <windows.h>
    #include <sddl.h>
    #include <stdio.h>
     
    BOOL CreateMyDACL(SECURITY_ATTRIBUTES *);
    
    void main()
    {
         SECURITY_ATTRIBUTES  sa;
         sa.nLength = sizeof(SECURITY_ATTRIBUTES);
         sa.bInheritHandle = FALSE;  
         // Call function to set the DACL. The DACL
         // is set in the SECURITY_ATTRIBUTES 
         // lpSecurityDescriptor member.
         if (!CreateMyDACL(&sa))
         {
             // Error encountered; generate message and exit.
             printf("Failed CreateMyDACL\n");
             exit(1);
         }
    
         // Use the updated SECURITY_ATTRIBUTES to specify
         // security attributes for securable objects.
         // This example uses security attributes during
         // creation of a new directory.
         if (0 == CreateDirectory(TEXT("C:\\MyFolder"), &sa))//创建一个内核对象 sa是安全描述符
         {
             // Error encountered; generate message and exit.
             printf("Failed CreateDirectory\n");
             exit(1);
         }
    
         // Free the memory allocated for the SECURITY_DESCRIPTOR.
         if (NULL != LocalFree(sa.lpSecurityDescriptor))
         {
             // Error encountered; generate message and exit.
             printf("Failed LocalFree\n");
             exit(1);
         }
    }
    
    
    // CreateMyDACL.
    //    Create a security descriptor that contains the DACL you want.
    //    This function uses SDDL to make Deny and Allow ACEs.
    //
    // Parameter:
    //    SECURITY_ATTRIBUTES * pSA
    //    Pointer to a SECURITY_ATTRIBUTES structure. It is the caller's
    //    responsibility to properly initialize the structure and to free 
    //    the structure's lpSecurityDescriptor member when the caller has
    //    finished using it. To free the structure's lpSecurityDescriptor 
    //    member, call the LocalFree function.
    // 
    // Return value:
    //    FALSE if the address to the structure is NULL. 
    //    Otherwise, this function returns the value from the
    //    ConvertStringSecurityDescriptorToSecurityDescriptor function.
    BOOL CreateMyDACL(SECURITY_ATTRIBUTES * pSA)
    {
         // Define the SDDL for the DACL. This example sets 
         // the following access:
         //     Built-in guests are denied all access.
         //     Anonymous logon is denied all access.
         //     Authenticated users are allowed read/write/execute access.
         //     Administrators are allowed full control.
         // Modify these values as needed to generate the proper
         // DACL for your application. 
         TCHAR * szSD = TEXT("D:")       // Discretionary ACL
            TEXT("(D;OICI;GA;;BG)")     // Deny access to built-in guests  禁止guest用户
            TEXT("(D;OICI;GA;;;AN)")     // Deny access to anonymous logon 意思是禁止未经授权的用户
            TEXT("(A;OICI;GRGWGX;;;AU)") // Allow read/write/execute to authenticated users 认证用户准许
            TEXT("(A;OICI;GA;;;BA)");    // Allow full control to administrators
    
        if (NULL == pSA)
            return FALSE;
         return ConvertStringSecurityDescriptorToSecurityDescriptor(//吧上面的描述符字符串转换为安全描述符
                    szSD,
                    SDDL_REVISION_1,
                    &(pSA->lpSecurityDescriptor),
                    NULL);
    }
    
    

    可保安全对象 

    一个安全对象有一个安全描述符。所有有名字的 Windows 对象都是安全的。有些没有名字的对象,例如:进程和线程对象也有安全描述符。对于大多数安全对象来说,你可以在创建对象的时候指定一个对象的安全描述符。例如:你能在 CreateFile 和 CreateProcess 函数中指定安全描述符。

    另外, Windows 安全函数是你能够为操作系统创建的而不是 Windows 创建的安全对象得到和设置安全信息。 Windows 安全函数也提供支持私有使用安全描述符和程序定义对象。(类似于私有命名空间)更多关于私有安全对象信息参见客户服务器访问控制。 

    每个安全对象定义它自己的一系列访问权限,并且它拥有的映射通用访问权限。更多关于指定和通用访问权限的信息,参见对象类型总览。

    下表显示了函数来操作通用安全对象的安全信息:

    对象类型

    安全描述符函数

    NTFS文件系统的文件和目录

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Named pipes

    Anonymous pipes

    GetSecurityInfo SetSecurityInfo

    Processes

    Threads

    GetSecurityInfo SetSecurityInfo

    File-mapping objects

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Access tokens

    SetKernelObjectSecurity GetKernelObjectSecurity

    Window-management objects ( window stations and desktops)

    GetSecurityInfo SetSecurityInfo

    Registry keys

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Windows services

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Local or remote printers

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Network shares

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Interprocess synchronization objects (events, mutexes, semaphores, and waitable timers)

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Job objects

    GetNamedSecurityInfo SetNamedSecurityInfoGetSecurityInfo,SetSecurityInfo

    Directory service objects

    These objects are handled by Active Directory Objects. See Active Directory Service Interfaces.


    登录会话

    一个登录绘画从用户登录到计算机时候开始。所有登录会话中的进程有相同的基本访问标记。访问标记包含登录会话相关的安全上下文,包含用户的 SID和登录标示以及登录 SID 。

     

    登录 SID 

    一个安全标示符( SID )用来表示登录会话。你可以使用 DACL 中的登录 SID 来在登录会话过程中控制访问。登录 SID 只有在用户登出的时候无效。登录 SID 是计算机运行的时候唯一的。没有其他会话有系统的 SID 。然而,可能的登录 SID 集合在计算机启动的时候被复位。为了从访问标记中返回登录SID ,为 TokenGroups 调用 GetTokenInformation 函数。

     

    访问标记 

    一个访问标记包含登录会话的安全信息。系统在用户登录的时候创建一个安全标记,每个进程执行用户由于的标记副本。标记表示用户、用户组和用户权限。系统使用标记来控制访问安全对象和控制用户在本地计算机上执行各种系统相关操作。两种访问标记:私有的和伪装的。

     

    伪装标记: (注意:上下这几个标记都是iacl的掩码的标志位 这个就是自己的标志位模拟别的进程的标志位  好让他访问自己的内核对象的时候  内核要先访问acl 两个一样的acl 也就访问了两个安全描述符 此时捕获到了那个进程的信息)

    一个被创建来捕获客户进程安全信息、允许服务器在安全操作中伪装客户进程的访问标记。

     

    主标记:

    一个 Windows 内核创建的标记。可能分配给一个进程来表示默认的进程安全信息。




    展开全文
  • 内核对象的安全描述符

    千次阅读 2010-06-25 09:10:00
    内核对象的安全描述符 当你需要创建、打开和操作各种内核对象的时候,系统要创建和操作若干类型的内核对象,强如存取符号对象、事件对象、文件对象、文件映射对象、I/O完成端口对象、作业对象、信箱...
  • 一些没有命名的对象是安全对象,如:进程和线程,也有安全描述符SD。安全对象Securable Object是拥有SD的Windows的对象。 在 Windows系统中,其是用一个安全描述符(Security Descriptors)的结构来保存其权限的...
  • 当一个程序访问一个资源时,需要有相应的访问权限。...每个安全对象都有一个安全描述符,里面有ACL(访问列表)。ACL由若干条ACE组成。每一条ACE标记了一条访问规则,就是一个SID(一会可以在访问者中看到它
  • 这些权利是一个安全描述符控制对象的访问令牌。如需有关安全性的详细信息,请参阅访问控制模型。 获取或设置一个访问令牌的安全描述符,调用的GetKernelObjectSecurity和SetKernelObjectSecurity功能。 当您...
  • Q: 打开exchange2007管理控制台时,提示没有读取服务器安全描述符的权限,如下图所示。 A: 您好!根据我的研究,导致该问题,可能有多种原因。我有以下建议:1. 确认登录的帐户有管理权限。请打开Exchange Management...
  • 对象安全描述符

    千次阅读 2014-01-11 16:13:21
      简称:SDDL 四个主要组件的令牌:所有者 (O:)、主要组 (G:)、DACL (D:) 和 SACL (S:) ...摘要:对基于 ACL 的安全性以及 Windows 访问控制模型的简介。 1: ACL 编辑器 介绍 在这一系列的文章中,我将讨论 Win
  • windows安全模型--令牌(token)和安全描述符 收藏 当一个程序访问一个资源时,需要有相应的访问权限。windwos安全模型中,有两个角色,一个就是访问者(进程),一个是被访问者(资源)。 资源,也可以称为安全对象...
  • 翻译:安全描述符字符串格式

    千次阅读 2007-04-10 17:30:00
    聲明:本人以學習目的翻譯此文,翻譯所用原始資料出自Windows 2003 Server R2 SDK之... 安全描述符字符串是一種用來存儲或傳輸安全描述符中的信息的文本格式,ConvertSecurityDescriptorToStringSecurityD
  • [译]为驱动设备对象设置适当的安全描述符正确的安全描述符能够让你有效的控制其他人对你的驱动设备对象的访问。通常,你可以调用:IoCreateDeviceSecure 来创建驱动设备对象并拥有正确的 DACL 权限。...
  • 关于ACL的资源 ... 访问控制列表(access control list:ACL)... 参看书籍:《C#高级编程》,《深入解析Windows》安全性相关章节。 转载于:https://www.cnblogs.com/lingshf/archive/2012/05/28/2498975.html
  • //Windows - set security to allow non-elevated apps //to access pipes created by elevated apps.SID_IDENTIFIER_AUTHORITY

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,445
精华内容 578
关键字:

安全描述符