FEATURED · 精选文章

AD-control-paths源代码解析:AceFilter插件如何实现Active Directory权限过滤逻辑

发布时间 / 2026/8/9 19:03:59
来源 / 创域科博编辑部
栏目 / 资讯中心
AD-control-paths源代码解析:AceFilter插件如何实现Active Directory权限过滤逻辑 AD-control-paths源代码解析AceFilter插件如何实现Active Directory权限过滤逻辑【免费下载链接】AD-control-pathsActive Directory Control Paths auditing and graphing tools项目地址: https://gitcode.com/gh_mirrors/ad/AD-control-pathsAD-control-paths是一款强大的Active Directory Control Paths审计和图形化工具而AceFilter插件作为其核心组件承担着Active Directory权限过滤的关键功能。本文将深入解析AceFilter插件的工作原理帮助新手和普通用户理解其如何实现复杂的权限过滤逻辑。AceFilter插件的核心架构与工作流程AceFilter插件采用模块化设计主要由三大类插件组成导入器importers、过滤器filters和写入器writers。这种架构使得权限过滤过程高度灵活且可扩展。图AD-control-paths数据处理流程展示了AceFilter在整个数据处理链中的位置和作用从上图可以看出AceFilter在数据处理流程中处于关键位置负责接收导入器传来的ACEAccess Control Entries数据经过过滤处理后再由写入器输出结果。导入器Importers数据输入的第一道关卡导入器的主要功能是从不同来源导入Active Directory数据包括ACE列表、对象列表和架构信息。在AceFilter中导入器的实现位于Dump/Src/AceFilter/AceFilterPlugins/Importers/目录下目前支持LdapDump、Loopback和Sysvol三种导入方式。以LdapDump导入器为例其源代码文件为Dump/Src/AceFilter/AceFilterPlugins/Importers/LdapDump/LdapDump.c。导入器需要实现一系列接口函数如GetNextAce、GetNextObject和GetNextSchema用于获取不同类型的数据。在主程序中通过解析命令行参数--importers来指定要加载的导入器。代码会遍历所有加载的导入器为ACE、对象和架构数据分别选择合适的导入器for (i 0; i options.plugins.numberOfImporters; i) { if (importerAce PLUGIN_MAX_IMPORTERS options.plugins.importers[i].functions.GetNextAce) { LOG(Info, SUB_LOG(_T(Using %s to import ACE)), PLUGIN_GET_NAME(options.plugins.importers[i])); importerAce i; } // 类似地选择对象和架构导入器 }过滤器Filters权限过滤的核心逻辑过滤器是AceFilter实现权限过滤的核心部分位于Dump/Src/AceFilter/AceFilterPlugins/Filters/目录下。目前提供了多种过滤器如AceMask、AceType、AdmSdHolder、ControlAd等覆盖了不同的过滤需求。每个过滤器都需要实现FilterAce函数该函数接收一个ACE对象并返回一个布尔值表示该ACE是否通过过滤。例如AceType过滤器可以筛选特定类型的ACE如ACCESS_ALLOWED而Inherited过滤器可以排除继承的权限。在主程序的处理循环中会依次应用所有加载的过滤器for (i 0; i options.plugins.numberOfFilters; i) { filterRet options.plugins.filters[i].functions.FilterAce(gc_PluginApiTable, ace); passedFilters options.plugins.filters[i].inverted ? !filterRet : filterRet; if (!passedFilters) { LOG(All, _T(Ace %u was filtered by %s), aceCount, PLUGIN_GET_NAME(options.plugins.filters[i])); break; } }值得注意的是AceFilter支持过滤器的反转功能通过--invert-filters参数可以将指定过滤器的结果取反。这为复杂的过滤需求提供了更大的灵活性。写入器Writers过滤结果的输出写入器负责将通过过滤的ACE数据以特定格式输出位于Dump/Src/AceFilter/AceFilterPlugins/Writers/目录下。目前支持FullyResolved、Loopback、MasterMailboxRelation和MasterSlaveRelation等写入器。当ACE通过所有过滤器后主程序会调用所有加载的写入器的WriteAce函数将ACE数据输出if (passedFilters) { keptAceCount; LOG(All, _T(Ace %u passed all filters), aceCount); for (i 0; i options.plugins.numberOfWriters; i) { options.plugins.writers[i].functions.WriteAce(gc_PluginApiTable, ace); } }缓存机制提升过滤效率的关键为了提高过滤效率AceFilter实现了完善的缓存机制包括对象缓存和架构缓存。这些缓存在处理大量ACE数据时能够显著提升性能。对象缓存的构建过程如下static void ConstructObjectCache(_In_ PPLUGIN_IMPORTER importer) { IMPORTED_OBJECT obj { 0 }; DWORD objCount 0; importer-functions.ResetReading(gc_PluginApiTable, ImporterObject); while (importer-functions.GetNextObject(gc_PluginApiTable, obj)) { obj.computed.number objCount; CacheInsertObject(obj); importer-functions.FreeObject(gc_PluginApiTable, obj); } CacheActivateObjectCache(); }类似地架构缓存也会在需要时构建。这些缓存使得过滤器在处理ACE时能够快速查找相关对象和架构信息避免了重复的计算和查询。实际应用如何使用AceFilter进行权限过滤使用AceFilter进行权限过滤非常简单只需在命令行中指定导入器、过滤器和写入器即可。例如以下命令将使用LdapDump导入器应用AceType和Inherited过滤器并通过FullyResolved写入器输出结果git clone https://gitcode.com/gh_mirrors/ad/AD-control-paths cd AD-control-paths AceFilter --importersLdapDump --filtersAceType,Inherited --writersFullyResolved -- typeACCESS_ALLOWED这个命令将筛选出所有非继承的ACCESS_ALLOWED类型的ACE并以完全解析的格式输出。总结AceFilter插件的价值与扩展AceFilter插件通过模块化的设计实现了灵活而强大的Active Directory权限过滤功能。其核心价值在于模块化架构导入器、过滤器和写入器的分离使得功能扩展变得简单。灵活的过滤逻辑支持多种过滤条件和过滤器反转满足复杂的权限审计需求。高效的缓存机制对象缓存和架构缓存显著提升了处理大量数据时的性能。对于开发者而言可以通过在相应目录下添加新的插件来扩展AceFilter的功能。例如要添加一个新的过滤器只需在Dump/Src/AceFilter/AceFilterPlugins/Filters/目录下创建新的过滤器实现并确保其导出FilterAce函数。AceFilter插件为AD-control-paths项目提供了强大的权限过滤能力是Active Directory安全审计的重要工具。通过本文的解析希望能帮助读者更好地理解其工作原理和使用方法。【免费下载链接】AD-control-pathsActive Directory Control Paths auditing and graphing tools项目地址: https://gitcode.com/gh_mirrors/ad/AD-control-paths创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻