
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過濾器可以排除繼承的權限。在主程序的處理循環(huán)中會依次應用所有加載的過濾器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權限過濾功能。其核心價值在于模塊化架構導入器、過濾器和寫入器的分離使得功能擴展變得簡單。靈活的過濾邏輯支持多種過濾條件和過濾器反轉滿足復雜的權限審計需求。高效的緩存機制對象緩存和架構緩存顯著提升了處理大量數據時的性能。對于開發(fā)者而言可以通過在相應目錄下添加新的插件來擴展AceFilter的功能。例如要添加一個新的過濾器只需在Dump/Src/AceFilter/AceFilterPlugins/Filters/目錄下創(chuàng)建新的過濾器實現并確保其導出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創(chuàng)作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考