本文會詳細介紹如何在Active Directory環境中快速地對配置了過多權限的網絡共享進行梳理、利用和修復。過多的共享權限可能導致企業環境中的數據暴露、權限提升和勒索軟件攻擊。另外,我們還將深入探討在主流漏洞管理和滲透測試20年之後,為什麼環境網絡共享配置權限不當還一直困擾著用戶。
最後,我將分享一個名為PowerHuntShares的新開源工具,它可以幫助簡化共享查找和糾正Active Directory環境中過多的SMB共享權限。
下面總結了在大多數Active Directory環境中經常導致大規模網絡共享暴露的根本原因。
資產管理跟踪企業環境中的動態系統非常困難,跟踪不斷變化的共享庫存和所有者則更加困難。即使身份和訪問管理(IAM)團隊通過發現找到一個網絡共享,它也會產生以下問題:
1.誰擁有它?它支持哪些應用程序或業務流程?我們可以刪除高風險訪問控制條目(ACE)嗎?我們可以一起刪除共享嗎?
2.如果你有一個正常運行的配置管理數據庫(CMDB),則可以回答大多數問題。不幸的是,並不是每個人都這樣做。
損壞的漏洞管理許多漏洞管理程序從未被構建來識別那些向經過身份驗證的域用戶提供未經授權訪問的網絡共享配置。他們的重點是識別經典的漏洞(缺失的補丁、弱密碼和應用程序問題),並優先處理不需要身份驗證的漏洞,當然這並不都是壞事。
但是,根據我的觀察,業界只是在過去五年中才對Active Directory生態系統產生了濃厚的興趣。這似乎很大程度上是因為越來越多的暴露和意識到Active Directory(AD)攻擊,這些攻擊嚴重依賴於配置,而不是缺少補丁。
我也不是說IAM團隊沒有努力完成他們的工作,但在許多情況下這是團隊管理的困境。
滲透測試人員一直都知道共享是一種風險,但在Active Directory環境中實施、管理和評估最小權限是一項不小的挑戰。即使對安全社區越來越感興趣,也很少有解決方案可以有效地清點和評估整個Active Directory域或多個域的共享訪問權限。
根據我的經驗,很少有組織一開始就執行經過身份驗證的漏洞掃描,但即使是那些確實缺少常見的過度權限、繼承權限和對環境的總結數據的發現的組織,這些環境提供了大多數IAM團隊做出良好決策所需的洞見。很長一段時間以來,人們一直過度依賴這些類型的工具,因為許多公司有這樣的印象,即它們提供了比它們在網絡共享權限方面更多的覆蓋範圍。
邊界不清大多數大型環境都有主機、網絡和Active Directory域邊界,在執行任何類型的身份驗證掃描或代理部署時都需要考慮這些邊界。試圖準確盤點和評估網絡份額的公司經常錯過一些事情,因為他們沒有考慮隔離其資產的邊界。在評估資產時,請確保在這些邊界內工作。
大量使用云云技術地出現,並不意味著網絡共享會消失。公司需要花上十年的時間才能將大部分的文件存儲基礎設施遷移到雲。
理解NTFS和共享權限在過去的幾年裡,有許多與共享權限管理相關的糟糕實踐已經被吸收到IT文化中,只是因為人們不了解它們是如何工作的。造成過多共享權限的最大原因之一是通過本機嵌套組成員關係繼承權限。此問題也不限於網絡共享。十多年來,我們一直在濫用相同的權限繼承問題來訪問SQLServer實例。在下一節中,我將仔細分析這個問題。
網絡共享權限繼承盲點網絡共享只是使網絡上的遠程用戶可以使用本地文件的一種媒介,但是兩組權限控制著遠程用戶對共享文件的訪問。要了解權限繼承問題,我們可以快速回顧一下NTFS和共享權限在Windows系統上是如何協同工作的。
NTFS權限1.用於控制對本地NTFS文件系統的訪問;
2.會影響本地和遠程用戶;
共享權限1.用於控制對共享文件和文件夾的訪問;
2.只影響遠程用戶;
簡而言之,從遠程用戶的角度來看,首先審查網絡共享權限(遠程),然後審查NTFS權限(本地),但無論如何,最嚴格的權限總是勝出。下面是一個簡單示例,顯示John對共享具有完全控制權限,但對關聯的本地文件夾只有讀取權限。大多數限制性會發揮作用,所以John只能通過共享文件夾對遠程可用的文件提供讀訪問。
所以這些是基礎,最重要的想法是限制性最強的ACL獲勝。但是,有一些細微差別與繼承域組的本地組有關。為了弄清楚這一點,讓我們簡要介紹一下受影響的當地組織。
大眾大眾組織在大多數配置中為所有經過身份驗證和匿名的用戶提供訪問權限。這個組在許多環境中被過度使用,並且經常導致過度的權限。
內置\用戶默認情況下會添加新的本地用戶。當系統未加入域時,它會按照你的預期運行。
認證用戶該組嵌套在內置\用戶組中。當系統未加入域時,它不會在影響訪問方面做太多事情。但是,當系統加入Active Directory域時,AuthenticatedUsers隱含地包括“域用戶”和“域計算機”組。例如,IT管理員可能認為他們只提供對內置\用戶組的遠程共享訪問權限,而實際上他們將其提供給域中的每個人。下圖有助於說明這種情況。
這裡的教訓是,對本地和域組關係的一個小小的誤解可能會導致未經授權的訪問和潛在的風險。下一節將介紹如何梳理共享及其訪問控制列表(ACL),以便我們可以定位和修復它們。
網絡共享庫存事實證明,由於一些本地和開源工具,獲得域計算機和相關共享的快速庫存並不難。關鍵在於獲取足夠的信息來回答那些修復工作所需的人員、內容、地點、時間和方式等問題。
共享和權限的發現需要4步:
1.通過輕量級目錄訪問協議(LDAP)查詢Active Directory以獲取域計算機列表。 PowerShell命令如Get-AdComputer(Active DirectoryPowerShell模塊)和Get-DomainComputer(PowerSploit)。
2.可以在這裡提供很大的幫助。確認TCP端口445上與這些計算機的連接。 Nmap是用於此目的的免費且易於使用的工具。如果你想堅持使用PowerShell,還有幾個開源TCP端口掃描腳本。
3.使用你喜歡的方法查詢共享、共享權限和其他信息。 Get-SMBShare、Get-SmbShareAccess、Get-ACL和Get-ObjectAcl(PowerSploit)等PowerShell工具非常有用。
4.其他有助於稍後進行補救的信息包括文件夾所有者、文件計數、文件列表、文件列表哈希和計算機IP地址。你還可以在貴公司的CMDB中找到其中一些信息。 Get-ChildItem和Resolve-DnsNameSome等PowerShell命令也可以幫助收集其中的一些信息。
PowerHuntShares可用於自動執行上述任務(在最後一節中介紹),但無論你使用什麼方法,了解未經授權的共享訪問如何被濫用將有助於你的團隊確定補救工作的優先級。
網絡共享開發配置有過多權限的網絡共享可以通過多種方式被利用,但共享的性質和特定的共享權限將最終決定可以執行哪些攻擊。下面,我概述了一些最常見的攻擊,這些攻擊利用對共享的讀寫入訪問來幫助你入門。
讀取訪問權限濫用勒索軟件和其他攻擊者經常利用對共享的過度讀取權限來訪問敏感數據,如個人可識別信息(PII)或知識產權(源代碼、工程設計、投資策略、專有公式、收購信息等),他們可以利用這些數據開發、出售或勒索你的公司。此外,我們在滲透測試中發現,密碼通常以明文形式存儲,可以用於登錄數據庫和服務器。這意味著在某些情況下,對共享的讀取訪問權限可以在RCE中結束。
下面是一個簡單的例子,說明對網絡共享的過多讀訪問如何導致RCE:
攻擊者入侵域用戶。攻擊者識別web根目錄、代碼備份目錄或dev ops目錄的共享目錄。攻擊者識別以明文形式存儲的密碼(通常是數據庫連接字符串)。攻擊者使用數據庫密碼連接數據庫服務器。攻擊者使用本機數據庫功能來獲得數據庫服務器操作系統的本地管理權限。攻擊者利用共享數據庫服務帳號訪問其他數據庫服務器。
具體示例如下:
寫入訪問權限濫用寫入訪問權限提供了讀取訪問的所有好處,並且能夠添加、刪除、修改和加密文件(如勒索軟件攻擊者)。寫入訪問還提供了將共享訪問轉變為RCE的更多潛力。以下是十個更常見的RCE選項的列表:
1.將web shell寫入web根文件夾,可以通過web服務器訪問。
2.替換或修改應用程序EXE和DLL文件以包含後門。
3.將EXE或DLL文件寫入未引用的應用程序和服務使用的路徑。
4.編寫DLL到應用程序文件夾以執行DLL劫持。你可以使用由NetSPI自己的研究總監NickLanders編寫的Koppeling。
5.將DLL和配置文件寫入應用程序文件夾以執行.net應用程序的appdomain劫持。
6.在“所有用戶”啟動文件夾中寫入可執行文件或腳本,以便在下次登錄時啟動它們。
7.修改計劃任務執行的文件。
8.修改PowerShell啟動配置文件以包含後門。
9.修改MicrosoftOffice模板以包含後門。
10.編寫惡意LNK文件以捕獲或中繼NetNTLM哈希。
你可能已經註意到,我列出的許多技術也常用於持久性和橫向移動,這很好地提醒了舊技術可以有多個攻擊。
下圖是個基本的web shell示例:
1.攻擊者破壞了域用戶。
2.攻擊者掃描共享,找到wwwroot目錄,並上傳web shell。 wwwroot目錄存儲目標IIS服務器上託管的Web應用程序使用的所有文件。因此,你可以將web shell視為擴展已發布Web應用程序功能的東西。
3.使用標準Web瀏覽器,攻擊者現在可以訪問目標IISWeb服務器託管的上傳web shell文件。 4.攻擊者使用web shell訪問以作為Web服務器服務帳戶在操作系統上執行命令。
5.Web服務器服務帳戶可能具有訪問網絡上其他資源的額外權限。
下面是另一個簡化的圖表,顯示了可用於執行我列出的前10種攻擊的一般步驟。讓我們關註一下被濫用的C$部分。 C$共享是Windows中的默認隱藏共享,標準域用戶不應訪問。它映射到C驅動器,該驅動器通常包括系統上的所有文件。不幸的是,devOops、應用程序部署和單用戶錯誤配置意外或故意使C$共享在比你想像的更多環境中可供所有域用戶使用。在我們的滲透測試中,我們對加入域的系統執行了完整的SMB共享審計,並且我們發現超過一半的時間我們最終對C$共享進行寫訪問。
網絡共享修復在過度的共享修復工作中追踪系統所有者、應用程序和有效的業務案例對於IAM團隊來說可能是一個巨大的痛苦。對於大型企業而言,這可能意味著對數十萬個共享ACL進行分類。因此,在該工作期間有辦法對共享進行分組和優先級排序可以節省大量時間。
我發現成功分組的訣竅是收集正確的數據。為了確定要收集哪些數據,我們要先設置一些標準,然後確定我可以從哪裡獲得這些數據。
哪些共享有暴露風險?共享名稱:有時,僅共享名稱就可以表明暴露的數據類型,包括C$、ADMIN$和wwwroot等高風險共享。
共享文件計數:當你可能首先嘗試優先考慮高風險共享時,沒有文件的目錄可以成為優先共享修復的一種方式。
目錄列表:與共享名稱類似,共享目錄中的文件夾和文件通常可以告訴你很多有關上下文的信息。
目錄列表哈希:這只是目錄列表的哈希。雖然不是硬性要求,但它可以使識別和比較相同的目錄列表更容易一些。
誰有訪問權限?共享ACL:這將有助於顯示用戶擁有哪些訪問權限,並且可以針對已知的高風險組或大型內部組織進行過濾。
NTFSACL:這將有助於顯示用戶擁有哪些訪問權限,並且可以針對已知的高風險組或大型內部組進行過濾。
它們是什麼時候創建的?
文件夾創建日期:對創建日期進行分組或聚類可以揭示與過去可能引入過多共享權限的業務部門、應用程序和流程相關的趨勢。
誰創建了它們?文件夾所有者:文件夾所有者有時可以將你帶到擁有創建/使用共享的系統、應用程序或流程的部門或業務單位。
主機名:如果使用標準化命名約定,主機名可以指示位置和所有權。
他們在哪裡?計算機名稱:如果使用標準化命名約定,主機共享的計算機名稱通常可用於確定部門和位置等大量信息。
IP地址:與計算機名稱類似,子網通常也分配給執行特定操作的計算機。在許多環境中,該分配記錄在Active Directory中並且可以交叉引用。
如果我們在發現過程中收集了所有這些信息,我們可以使用它來根據共享名稱、所有者、子網、文件夾列表和文件夾列表哈希執行分組,以便我們可以識別大量可以立即修復的相關共享。
過多的權限過多的讀寫共享權限已被定義為任何網絡共享ACL,其中包含針對“所有人”、“經過身份驗證的用戶”、“內置\用戶”、“域用戶”或“域計算機”的顯式ACE(訪問控制條目)組織。由於權限繼承問題,它們都為域用戶提供了對受影響共享的訪問權限。
高風險共享如上所述,高風險共享被定義為提供對系統或應用程序的未經授權的遠程訪問的共享。默認情況下,這包括wwwroot、inetpub、c和c$共享。但是,可能存在其他未提及的風險。
Recommended Comments