現(xiàn)Active Directory權(quán)限過(guò)濾邏輯)
AD-control-paths源代碼解析AceFilter插件如何實(shí)現(xiàn)Active Directory權(quán)限過(guò)濾邏輯【免費(fèi)下載鏈接】AD-control-pathsActive Directory Control Paths auditing and graphing tools項(xiàng)目地址: https://gitcode.com/gh_mirrors/ad/AD-control-pathsAD-control-paths是一款強(qiáng)大的Active Directory Control Paths審計(jì)和圖形化工具而AceFilter插件作為其核心組件承擔(dān)著Active Directory權(quán)限過(guò)濾的關(guān)鍵功能。本文將深入解析AceFilter插件的工作原理幫助新手和普通用戶理解其如何實(shí)現(xiàn)復(fù)雜的權(quán)限過(guò)濾邏輯。AceFilter插件的核心架構(gòu)與工作流程AceFilter插件采用模塊化設(shè)計(jì)主要由三大類插件組成導(dǎo)入器importers、過(guò)濾器filters和寫入器writers。這種架構(gòu)使得權(quán)限過(guò)濾過(guò)程高度靈活且可擴(kuò)展。圖AD-control-paths數(shù)據(jù)處理流程展示了AceFilter在整個(gè)數(shù)據(jù)處理鏈中的位置和作用從上圖可以看出AceFilter在數(shù)據(jù)處理流程中處于關(guān)鍵位置負(fù)責(zé)接收導(dǎo)入器傳來(lái)的ACEAccess Control Entries數(shù)據(jù)經(jīng)過(guò)過(guò)濾處理后再由寫入器輸出結(jié)果。導(dǎo)入器Importers數(shù)據(jù)輸入的第一道關(guān)卡導(dǎo)入器的主要功能是從不同來(lái)源導(dǎo)入Active Directory數(shù)據(jù)包括ACE列表、對(duì)象列表和架構(gòu)信息。在AceFilter中導(dǎo)入器的實(shí)現(xiàn)位于Dump/Src/AceFilter/AceFilterPlugins/Importers/目錄下目前支持LdapDump、Loopback和Sysvol三種導(dǎo)入方式。以LdapDump導(dǎo)入器為例其源代碼文件為Dump/Src/AceFilter/AceFilterPlugins/Importers/LdapDump/LdapDump.c。導(dǎo)入器需要實(shí)現(xiàn)一系列接口函數(shù)如GetNextAce、GetNextObject和GetNextSchema用于獲取不同類型的數(shù)據(jù)。在主程序中通過(guò)解析命令行參數(shù)--importers來(lái)指定要加載的導(dǎo)入器。代碼會(huì)遍歷所有加載的導(dǎo)入器為ACE、對(duì)象和架構(gòu)數(shù)據(jù)分別選擇合適的導(dǎo)入器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; } // 類似地選擇對(duì)象和架構(gòu)導(dǎo)入器 }過(guò)濾器Filters權(quán)限過(guò)濾的核心邏輯過(guò)濾器是AceFilter實(shí)現(xiàn)權(quán)限過(guò)濾的核心部分位于Dump/Src/AceFilter/AceFilterPlugins/Filters/目錄下。目前提供了多種過(guò)濾器如AceMask、AceType、AdmSdHolder、ControlAd等覆蓋了不同的過(guò)濾需求。每個(gè)過(guò)濾器都需要實(shí)現(xiàn)FilterAce函數(shù)該函數(shù)接收一個(gè)ACE對(duì)象并返回一個(gè)布爾值表示該ACE是否通過(guò)過(guò)濾。例如AceType過(guò)濾器可以篩選特定類型的ACE如ACCESS_ALLOWED而Inherited過(guò)濾器可以排除繼承的權(quán)限。在主程序的處理循環(huán)中會(huì)依次應(yīng)用所有加載的過(guò)濾器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支持過(guò)濾器的反轉(zhuǎn)功能通過(guò)--invert-filters參數(shù)可以將指定過(guò)濾器的結(jié)果取反。這為復(fù)雜的過(guò)濾需求提供了更大的靈活性。寫入器Writers過(guò)濾結(jié)果的輸出寫入器負(fù)責(zé)將通過(guò)過(guò)濾的ACE數(shù)據(jù)以特定格式輸出位于Dump/Src/AceFilter/AceFilterPlugins/Writers/目錄下。目前支持FullyResolved、Loopback、MasterMailboxRelation和MasterSlaveRelation等寫入器。當(dāng)ACE通過(guò)所有過(guò)濾器后主程序會(huì)調(diào)用所有加載的寫入器的WriteAce函數(shù)將ACE數(shù)據(jù)輸出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); } }緩存機(jī)制提升過(guò)濾效率的關(guān)鍵為了提高過(guò)濾效率AceFilter實(shí)現(xiàn)了完善的緩存機(jī)制包括對(duì)象緩存和架構(gòu)緩存。這些緩存在處理大量ACE數(shù)據(jù)時(shí)能夠顯著提升性能。對(duì)象緩存的構(gòu)建過(guò)程如下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(); }類似地架構(gòu)緩存也會(huì)在需要時(shí)構(gòu)建。這些緩存使得過(guò)濾器在處理ACE時(shí)能夠快速查找相關(guān)對(duì)象和架構(gòu)信息避免了重復(fù)的計(jì)算和查詢。實(shí)際應(yīng)用如何使用AceFilter進(jìn)行權(quán)限過(guò)濾使用AceFilter進(jìn)行權(quán)限過(guò)濾非常簡(jiǎn)單只需在命令行中指定導(dǎo)入器、過(guò)濾器和寫入器即可。例如以下命令將使用LdapDump導(dǎo)入器應(yīng)用AceType和Inherited過(guò)濾器并通過(guò)FullyResolved寫入器輸出結(jié)果git clone https://gitcode.com/gh_mirrors/ad/AD-control-paths cd AD-control-paths AceFilter --importersLdapDump --filtersAceType,Inherited --writersFullyResolved -- typeACCESS_ALLOWED這個(gè)命令將篩選出所有非繼承的ACCESS_ALLOWED類型的ACE并以完全解析的格式輸出。總結(jié)AceFilter插件的價(jià)值與擴(kuò)展AceFilter插件通過(guò)模塊化的設(shè)計(jì)實(shí)現(xiàn)了靈活而強(qiáng)大的Active Directory權(quán)限過(guò)濾功能。其核心價(jià)值在于模塊化架構(gòu)導(dǎo)入器、過(guò)濾器和寫入器的分離使得功能擴(kuò)展變得簡(jiǎn)單。靈活的過(guò)濾邏輯支持多種過(guò)濾條件和過(guò)濾器反轉(zhuǎn)滿足復(fù)雜的權(quán)限審計(jì)需求。高效的緩存機(jī)制對(duì)象緩存和架構(gòu)緩存顯著提升了處理大量數(shù)據(jù)時(shí)的性能。對(duì)于開發(fā)者而言可以通過(guò)在相應(yīng)目錄下添加新的插件來(lái)擴(kuò)展AceFilter的功能。例如要添加一個(gè)新的過(guò)濾器只需在Dump/Src/AceFilter/AceFilterPlugins/Filters/目錄下創(chuàng)建新的過(guò)濾器實(shí)現(xiàn)并確保其導(dǎo)出FilterAce函數(shù)。AceFilter插件為AD-control-paths項(xiàng)目提供了強(qiáng)大的權(quán)限過(guò)濾能力是Active Directory安全審計(jì)的重要工具。通過(guò)本文的解析希望能幫助讀者更好地理解其工作原理和使用方法。【免費(fèi)下載鏈接】AD-control-pathsActive Directory Control Paths auditing and graphing tools項(xiàng)目地址: https://gitcode.com/gh_mirrors/ad/AD-control-paths創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考