對于Windows管理員至關(guān)重要的10 個(gè)PowerShell安全腳本
譯文【51CTO.com快譯】PowerShell是一個(gè)巨型的Windows工具箱,它使得Windows管理員能夠自動(dòng)執(zhí)行各種任務(wù),如:循環(huán)日志、部署補(bǔ)丁和管理用戶。無論是特定的Windows管理工作還是與安全相關(guān)的任務(wù),如:管理證書和尋找攻擊活動(dòng),PowerShell總有一種方法可是實(shí)現(xiàn)。
說到安全,有人可能已經(jīng)創(chuàng)建了一個(gè)PowerShell腳本或是模塊來處理其工作。微軟擁有一個(gè)腳本的社區(qū)庫,那里提供了處理各種安全事務(wù)的腳本,如:滲透測試、證書管理、和網(wǎng)絡(luò)取證等。
鑒于一些預(yù)設(shè)好的PowerShell能夠減輕Windows管理員的工作負(fù)荷,就請隨我一起來看看下面的各個(gè)模塊是如何能提高您的Windows系統(tǒng)和網(wǎng)絡(luò)安全的吧。
系統(tǒng)加固
一旦進(jìn)入您的網(wǎng)絡(luò),攻擊者通常需要一些時(shí)間來偵察學(xué)習(xí)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),以發(fā)現(xiàn)其它的系統(tǒng),并通過找到額外的認(rèn)證憑證來跨過網(wǎng)絡(luò)去入侵其它的系統(tǒng)。其目標(biāo)當(dāng)然是定位最敏感的信息的存儲(chǔ)位置并使之漏出。
以下的PowerShell腳本就能使得偵察活動(dòng)難以執(zhí)行。
從多臺(tái)計(jì)算機(jī)上將多個(gè)用戶從本地管理員組里刪除掉。誠然用戶可能因?yàn)橐恍┰虮惶砑拥奖镜毓芾韱T組里。例如:一個(gè)賬戶可以被IT用于故障診斷的意圖或是為了創(chuàng)建一臺(tái)機(jī)器。但無論如何,在本地管理員組里包括多個(gè)用戶卻是一個(gè)安全風(fēng)險(xiǎn),因?yàn)楣粽咄耆梢愿`取這些認(rèn)證憑證。Remove-LocalAdmins Masive腳本則可以查看所有計(jì)算機(jī)上的從一個(gè)文件中所羅列出的用戶信息,并集中到一個(gè)指定的文本文件里,且刪除這些用戶。
該腳本需要用一個(gè)具有足夠權(quán)限的賬戶來運(yùn)行,以訪問到其它機(jī)器上來刪除用戶。
加固SAM并遠(yuǎn)程訪問Windows 10。攻擊者可以通過SAM-Remote協(xié)議來遠(yuǎn)程訪問Windows安全帳戶管理器(SAM),憑借著域服務(wù)器,它能了解所有的域和本地用戶組成員以及網(wǎng)絡(luò)中路由表等信息。默認(rèn)情況下, 任何在網(wǎng)絡(luò)中的具有合法身份的用戶可以通過SAMR來遠(yuǎn)程訪問SAM。當(dāng)然Windows 10的年度更新已改為默認(rèn)只有管理員是限制訪問的。
SAMRi10允許管理員修改網(wǎng)絡(luò)中所有Windows10和Windows Server 2016系統(tǒng)的遠(yuǎn)程SAM的默認(rèn)訪問權(quán)限,其得心應(yīng)手之處在于:攻擊者將不能輕易的獲得本地管理員或其他特權(quán)帳戶的認(rèn)證憑證。
請注意,SAMRi10只適用于Windows10和Windows Server 2016。同樣的改變可以通過Windows10的 1607及其以后版本的組策略來實(shí)現(xiàn),因此該P(yáng)owerShell模塊僅僅提供了另一種方式來完成相同的任務(wù)。
將應(yīng)用程序添加到微軟增強(qiáng)緩解體驗(yàn)工具包(Microsoft Enhanced Mitigation Experience Toolkit,簡稱:EMET)中。EMET不接受文件名通配符,這意味著當(dāng)一個(gè)應(yīng)用程序的名稱發(fā)生更改時(shí)(例如:每個(gè)版本的Adobe Flash Player有包含版本號(hào)的不同文件名),EMET就需要更新。管理員使用EMET來保護(hù)個(gè)人應(yīng)用程序,并使用Configure_EMET來添加和刪除應(yīng)用程序到其檢測列表中。不過,該腳本只適用于Windows 7和8。
加固網(wǎng)絡(luò)會(huì)話枚舉。攻擊者可以使用網(wǎng)絡(luò)會(huì)話的枚舉來檢索服務(wù)器上建立的會(huì)話信息,如:計(jì)算機(jī)名稱、IP地址、用戶建立會(huì)話的名稱、會(huì)話存活的秒數(shù)。根據(jù)這些信息,攻擊者便可知道給定用戶所登錄過的所有計(jì)算機(jī)。
默認(rèn)情況下,任何具有合法身份的用戶都可以執(zhí)行NetSessionEnum。Net Cease模塊通過移除合法身份的用戶組的執(zhí)行權(quán)限和向特定的會(huì)話添加權(quán)限來變更誰可以使用NetSessionEnum。Net Cease并不干擾防御人員遠(yuǎn)程調(diào)用該方法的能力,而互動(dòng)/服務(wù)/批處理的登錄會(huì)話仍然能夠本地調(diào)用之。
Windows的管理
PowerShell使得管理員能夠更好且更容易的管理控制Windows系統(tǒng)。雖然這種靠“黑掉”注冊表來實(shí)現(xiàn)各種操作,且會(huì)導(dǎo)致更多的問題并非是一個(gè)優(yōu)雅之舉,但PowerShell可以更容易的修改訪問控制列表(ACL),添加或遠(yuǎn)程登錄個(gè)別主機(jī)上的用戶,并管理組策略設(shè)置——這些只是冰山的一角。
在Windows里,安全的最佳實(shí)踐是:盡可能使用最小權(quán)限帳戶的模式。因此,就算一個(gè)會(huì)話是盜用,攻擊者也只能禁錮于該用戶的較少特權(quán)憑證。而對于需要一些特權(quán)訪問的情況,管理員則可以使用“以一個(gè)進(jìn)程運(yùn)行腳本(Run Script as a Process)”的模式來以另一個(gè)身份去運(yùn)行其它的PowerShell腳本。StartScriptAsProcess就能創(chuàng)建一個(gè)新的流程并明確告訴操作系統(tǒng)所使用的另一個(gè)身份,而不是那個(gè)與登錄用戶相關(guān)聯(lián)的身份。
SHA1證書簽名檢查。證書管理是一項(xiàng)非常復(fù)雜的任務(wù),而將SHA-1證書用更安全的替代方案予以更換已經(jīng)是迫在眉睫的了。該SHA1CertSigCheck模塊將有助于管理員判斷證書是否被SHA-1所簽發(fā)。而該腳本的輸出還指明了證書是否是以TLS的方式進(jìn)行安全的網(wǎng)絡(luò)通信或是去簽發(fā)了Windows的可執(zhí)行文件。
雖然管理員也能夠查找非根 CA的證書,但該腳本并不告知其是否為公共CA所簽發(fā)的證書。由于它只能一次檢查一張證書或可執(zhí)行程序,而且并不主動(dòng)發(fā)現(xiàn)它們,因此管理員仍然必須先人工找到所有的證書。
文件系統(tǒng)安全Powershell模塊(版本)4.2.3。用Windows PowerShell管理文件和文件夾的權(quán)限并不太容易,但NTFSSecurity模塊提供了為NTFS驅(qū)動(dòng)器定制化的cmdlets,例如獲取當(dāng)前的權(quán)限列表,添加和刪除訪問控制項(xiàng)(ACEs),以及設(shè)置繼承等。還有Windows商店的權(quán)限訪問控制項(xiàng)(ACEs)就在自主訪問控制列表(DACL) 之中。目前腳本中心存儲(chǔ)庫所鏈接下載的是幾年前的1.3版本,而最新版本4.3.2,可在GitHub托管平臺(tái)上獲得。
備份和恢復(fù)文件夾的訪問控制列表。跟蹤所有訪問控制列表的變化可能會(huì)相當(dāng)棘手。有相當(dāng)多的腳本聲稱能夠在ACL已被修改時(shí)予以顯示,但Track-NTFSChanges卻使用了一個(gè)非常簡單的方法。它將整個(gè)ACL備份為一個(gè)XML文件,并在下一次該腳本運(yùn)行時(shí),會(huì)檢查對比當(dāng)前列表和以前的備份是否有變化。如果有,該模塊有讓管理員恢復(fù)舊的權(quán)限的功能。
不幸的是,雖然該腳本可以顯示已被修改的ACL,它不能告知誰導(dǎo)致了該變化。因此管理員仍然必須通過日志挖掘來發(fā)現(xiàn)詳細(xì)的信息。
捕獵攻擊者
PowerShell不僅僅是一種管理語言,管理員們還可以運(yùn)用PowerShell來執(zhí)行正則表達(dá)式的模式匹配,以發(fā)現(xiàn)偽造的惡意文件、監(jiān)控網(wǎng)絡(luò)、分析日志中的安全事件。例如:管理員可以為可疑文件創(chuàng)建一個(gè)SHA256密碼散列,并使用Get-VirusTotalReport模塊來查詢VirusTotal服務(wù)(一個(gè)必需的API密匙)以確定該文件是否為一個(gè)已知的惡意軟件樣本。類似的腳本,Verify-AutoRun,查找文件中是否添加了自動(dòng)運(yùn)行到系統(tǒng)中,并通過查詢VirusTotal來發(fā)現(xiàn)潛在的惡意軟件樣本。它并不自己去獲取條目,因?yàn)樗鼘?shí)際上是一個(gè)Autorunsc.exe和SigCheck.exe的包裝器,不過,這已經(jīng)夠方便了。
修改本地管理員組。攻擊者為了其可以執(zhí)行一系列活動(dòng)的目標(biāo),會(huì)在系統(tǒng)上創(chuàng)建一個(gè)本地管理員帳戶的。Detect-LocalAdmin腳本定期查詢多臺(tái)計(jì)算機(jī)并比較本地管理員組的用戶列表來發(fā)現(xiàn)任何可能的更改。如果找到一個(gè)新用戶,該腳本將日志記錄該事件并發(fā)送一封電子郵件通知以提醒管理員可能存在的泄漏。
Kerberos黃金票據(jù)檢查。黃金票據(jù)攻擊發(fā)生在當(dāng)攻擊者擁有了對活動(dòng)目錄的管理員或當(dāng)?shù)毓芾碓L問權(quán)限后,操縱Kerberos票據(jù)以獲得未經(jīng)授權(quán)的訪問權(quán)限。攻擊者可以執(zhí)行多種身份驗(yàn)證的任務(wù)或是制造Kerberos票據(jù)授予類型的票據(jù)(TGT)來為用戶和并不存在服務(wù)賬戶創(chuàng)建其它的Kerberos票據(jù)。GoldenTicketCheck模塊檢查那些為異常TGT緩存的計(jì)算機(jī)Kerberos票據(jù),比如說那些生命周期并非為默認(rèn)10個(gè)小時(shí)的期限。如果一個(gè)異常TGT或服務(wù)票證被發(fā)現(xiàn),PowerShell控制臺(tái)將顯示相關(guān)的細(xì)節(jié)并管道輸出其結(jié)果到一個(gè)文本文件里。
Get-LogonLocations。攻擊者“尋獵”特權(quán)帳戶并試圖登錄到網(wǎng)絡(luò)中的其它系統(tǒng)。PowerShell的Get-LogonLocations模塊搜索所有域控制器上與指定用戶相關(guān)聯(lián)的登錄事件。其輸出可以顯示那些攻擊者所試圖用特權(quán)帳戶登錄的所有電腦。該腳本是比較通用的,因?yàn)橥ㄟ^被修改,它可以查看到指定電腦,而非所有域控制器;以及指定的用戶,而非所有0層賬戶組的成員的不同事件日志。盡管該模塊能運(yùn)行在所有新的Windows版本:從Windows 7到10,但貌似它不支持Windows Server 2003,2008,或2012 R2。在GitHub上也有它的一個(gè)版本。
腳本化安全
PowerShell使IT能自動(dòng)化運(yùn)行一些更為費(fèi)時(shí)或乏味的Windows管理事務(wù)。與其它任何從互聯(lián)網(wǎng)下載,然后盲目的執(zhí)行的情況相比,使用這樣能夠處理事務(wù)的腳本是非常令人心悅的。您可以在實(shí)際運(yùn)行腳本之前,通過代碼逐步審查以確保您能理解其真正含義。如果某些代碼不合理,您可以在找出其原因的同時(shí),加以注釋或?qū)ふ伊硪粋€(gè)替代的代碼。因?yàn)榭赡苄枰嵘貏e權(quán)限,許多這些腳本會(huì)要求您在執(zhí)行之前進(jìn)行解禁(unblock)。所以再提醒一次:檢查代碼是關(guān)鍵!
當(dāng)然,您應(yīng)確保自己已經(jīng)安裝了PowerShell。PowerShell是被默認(rèn)安裝在Windows10和Windows 10的年度更新上的。Windows 8和8.1附帶的是PowerShell 4。而在Windows 7上,管理員將需要手動(dòng)安裝PowerShell。那些不太習(xí)慣使用PowerShell的管理員應(yīng)該參考Woody Leonard的指南作為開始。
原文標(biāo)題:10 essential PowerShell security scripts for Windows administrators,作者:Fahmida Y. Rashid
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】