李 東 張德政
(核工業(yè)計(jì)算機(jī)應(yīng)用研究所網(wǎng)絡(luò)安全研究室 北京 100048)
(lidong@cnnc.com.cn)
域是一個(gè)計(jì)算機(jī)群體的組合,是一個(gè)相對(duì)嚴(yán)格的組織,而域控制器則是這個(gè)域內(nèi)的管理核心.而目錄服務(wù)是由目錄服務(wù)數(shù)據(jù)庫(kù)和目錄訪問協(xié)議組成.以上構(gòu)成了域環(huán)境.由于活動(dòng)目錄域服務(wù)能夠?qū)崿F(xiàn)企業(yè)資產(chǎn)的統(tǒng)一管理,所以很多企業(yè)選擇這種方式管理網(wǎng)絡(luò)資產(chǎn).
在網(wǎng)絡(luò)攻防中,對(duì)活動(dòng)目錄域服務(wù)的滲透是攻防雙方的必爭(zhēng)之地.活動(dòng)目錄域服務(wù)的失陷,意味著企業(yè)網(wǎng)絡(luò)的全部淪陷,同樣,域控制器的失陷也意味著企業(yè)整個(gè)網(wǎng)絡(luò)的失陷.目前企業(yè)實(shí)際安全運(yùn)營(yíng)中沒有有效的、一勞永逸的方法解決活動(dòng)目錄域服務(wù)的安全問題,而有關(guān)活動(dòng)目錄域服務(wù)的漏洞還在不斷地出現(xiàn).
本文將以攻擊者視角,找尋活動(dòng)目錄域服務(wù)常見攻擊方法,并按照全生命周期各關(guān)鍵環(huán)節(jié)進(jìn)行歸類,形成完整攻擊鏈條.并針對(duì)不同環(huán)節(jié)不同類型的常見攻擊方法,探討企業(yè)依據(jù)PDCA循環(huán),依次開展域環(huán)境加固、流量監(jiān)測(cè)、日志分析及安全檢查等全生命周期安全防護(hù)措施,以實(shí)現(xiàn)降低活動(dòng)目錄域服務(wù)安全風(fēng)險(xiǎn)的目的.
活動(dòng)目錄域服務(wù)攻擊沿用傳統(tǒng)的攻擊滲透思路,主要涵蓋預(yù)攻擊階段(準(zhǔn)備期)、域服務(wù)攻擊階段(攻擊期)、后攻擊階段(維持期),其中,結(jié)合活動(dòng)目錄域服務(wù)特點(diǎn)及企業(yè)使用習(xí)慣,攻擊階段思路又可細(xì)分為票據(jù)盜取階段、權(quán)限提升階段、橫向移動(dòng)階段.
1) 利用SYSVOL漏洞收集密碼
域管理員在使用組策略批量管理域內(nèi)主機(jī)時(shí),如果配置組策略的過程中需要填入密碼,那么該密碼會(huì)被保存到共享文件夾SYSVOL下,默認(rèn)所有域內(nèi)用戶可訪問,雖然密碼通過AES 256進(jìn)行加密,但密鑰是公開在微軟官網(wǎng)的[1],一旦攻擊訪問共享文件夾SYSVOL文件并獲得密碼加密后的密文,是能夠?qū)⒚芪慕饷懿⑦€原密碼的.這個(gè)密碼的泄露會(huì)威脅到活動(dòng)目錄域服務(wù)安全性.
2) 通過SAMR協(xié)議探測(cè)
SAMR協(xié)議即Security Account Manager Remote Protocol[2].在進(jìn)行域滲透過程中攻擊者使用的net user,net time等等DOS命令利用此協(xié)議,攻擊者能夠查詢到域控制器、管理員等重要信息.
3) SPN掃描
服務(wù)主體名稱(service principal names, SPN)是服務(wù)實(shí)例(可以理解為一個(gè)服務(wù),比如HTTP,MSSQL)的唯一標(biāo)識(shí)符.SPN將服務(wù)實(shí)例與服務(wù)登錄賬戶相關(guān)聯(lián).SPN可以注冊(cè)在機(jī)器賬戶下和域用戶賬戶下[3].SPN掃描是對(duì)活動(dòng)目錄域服務(wù)中應(yīng)用服務(wù)的信息收集.
1) 票據(jù)盜取
① 利用MS14-068漏洞:MS14-068漏洞是Microsoft Windows Kerberos KDC漏洞.CVE編號(hào)為CVE-2014-6324.該漏洞允許攻擊者提升任意普通用戶權(quán)限成為域管理員(domain admin)身份,提升到域管理員權(quán)限后即可訪問域控制器,進(jìn)而獲得域內(nèi)所有主機(jī)的票據(jù)[4],實(shí)現(xiàn)全域控制.
② 獲取NTDS.dit文件:NTDS.dit文件是主要的AD數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)存儲(chǔ)有關(guān)域用戶、組和組成員身份的信息,還包括域中所有用戶的密碼哈希值.攻擊者通過調(diào)用Volume Shadow Copy服務(wù)能夠完成NTDS.dit文件的拷貝,進(jìn)而破解域內(nèi)所有域用戶的密碼.
③ AS-REP Roasting:當(dāng)域用戶賬戶選項(xiàng)設(shè)置為不需要Kerberos預(yù)身份驗(yàn)證(Kerberos版本5之前允許不使用密碼進(jìn)行身份認(rèn)證)時(shí),攻擊者可以發(fā)起AS-REP Roasting攻擊,從而獲取賬戶密碼的哈希值,進(jìn)行離線破解[5].
④ Kerberoasting:某些情況下,用戶賬戶被創(chuàng)建為“服務(wù)賬戶”并注冊(cè)為服務(wù)主題名稱.由于密鑰分發(fā)中心(key distribution center,KDC)不執(zhí)行服務(wù)授權(quán),因此域內(nèi)任何人都可以請(qǐng)求任何服務(wù)的TGS(票證授予服務(wù)).這意味著,如果用戶“服務(wù)賬戶”已注冊(cè)為SPN,則任何人都可以通過請(qǐng)求某個(gè)服務(wù)的TGS,獲得該服務(wù)密碼哈希,通過對(duì)該哈希的離線破解,能夠獲得該用戶賬戶密碼[6].
⑤ DCSync:DCSync是mimikatz在2015年添加的一個(gè)功能,能夠用來導(dǎo)出域內(nèi)所有用戶的哈希值.但是只有Domain Controllers和Enterprise Domain Admins權(quán)限能夠使用DCSync.我們也可以對(duì)域內(nèi)普通用戶添加ACL,實(shí)現(xiàn)普通用戶調(diào)用DCSync導(dǎo)出域內(nèi)所有用戶的哈希值.DCSync是利用DRS(directory replication service)協(xié)議從域控制器復(fù)制用戶憑據(jù)實(shí)現(xiàn)的[7].
2) 權(quán)限提升
① 修改訪問控制列表(ACL):攻擊者通過PowerView等工具,能夠修改某些用戶的GenericAll,GenericWrite,WriteDACL,WriteOwner等權(quán)限,從而實(shí)現(xiàn)某些用戶的權(quán)限提升[8].
② 新增組策略:通過新增組策略,攻擊者能夠在域控制器上以管理員身份運(yùn)行腳本,以達(dá)到權(quán)限提升的目的.也可以通過新增組策略,人為地“制造”SYSVOL漏洞,從而達(dá)到預(yù)留后門的目的.
3) 橫向移動(dòng)
① 賬戶暴破和遠(yuǎn)程登錄:攻擊者可以使用Metasploit,Nmap,Rubeus,Kerbrute等工具,對(duì)Kerberos協(xié)議用戶賬戶進(jìn)行暴力破解[9],也可以對(duì)域環(huán)境內(nèi)開放3389端口、22端口的主機(jī)進(jìn)行暴力破解,從而進(jìn)行遠(yuǎn)程登錄.
② 遠(yuǎn)程代碼執(zhí)行:遠(yuǎn)程代碼執(zhí)行一般是在已知目標(biāo)憑據(jù)的情況下,獲得目標(biāo)計(jì)算機(jī)的shell.PsExec,wmi_exec,smb_exec,PsRemoting等工具能夠進(jìn)行遠(yuǎn)程代碼執(zhí)行,這些工具特點(diǎn)和使用場(chǎng)景不盡相同,需要根據(jù)實(shí)際條件靈活運(yùn)用.域環(huán)境中利用Windows系統(tǒng)遠(yuǎn)程代碼執(zhí)行漏洞也可以較好實(shí)現(xiàn)橫向移動(dòng),比如利用MS17-010漏洞.
1) DSRM重置
每個(gè)域控制器都有一個(gè)本地管理員賬戶,而這個(gè)賬戶也是目錄服務(wù)還原模式(DSRM)賬戶.DSRM的密碼是在DC安裝時(shí)就需要設(shè)置,并且很少會(huì)被重置.利用DSRM密碼同步機(jī)制,能夠建立后門賬戶,并且擁有域管理員權(quán)限[10].
2) SSP后門
SSP(security support provider)又名Security Package,即使用動(dòng)態(tài)鏈接庫(kù)來實(shí)現(xiàn)身份認(rèn)證功能.Local Security Authority進(jìn)程用于身份認(rèn)證,常見進(jìn)程為lsass.exe.特別的地方在于LSA是可擴(kuò)展的,在系統(tǒng)啟動(dòng)時(shí)SSP會(huì)被加載到進(jìn)程lsass.exe中,而攻擊者可以自定義一個(gè)dll,在系統(tǒng)啟動(dòng)時(shí)被加載到進(jìn)程lsass.exe中,從而捕捉密碼,并記錄在特定目錄文件中[11].
3) SID歷史屬性修改
每個(gè)用戶賬號(hào)都有一個(gè)關(guān)聯(lián)的安全標(biāo)識(shí)符(SID),SID用于跟蹤安全主體在訪問資源時(shí)的賬戶與訪問權(quán)限.為了支持AD牽移,微軟設(shè)計(jì)了SID歷史屬性,SID歷史允許一個(gè)賬戶的訪問被有效地克隆到另一個(gè)賬戶.可以利用SID歷史屬性將域管理員的SID賦值給普通用戶,從而實(shí)現(xiàn)權(quán)限維持[12].
4) Skeleton Key
Skeleton Key能夠讓所有域用戶使用同一個(gè)萬能密碼進(jìn)行登錄,而現(xiàn)有的所有域用戶使用原密碼仍能繼續(xù)登錄.該后門重啟后失效[13].Skeleton Key一般被安裝在64 b的域控制器上.
5) 黃金票據(jù)
密鑰分發(fā)中心(KDC)在發(fā)布TGT(ticket granting ticket)時(shí),TGT使用KRBTGT賬戶密碼哈希進(jìn)行加密.默認(rèn)情況下,KRBTGT密碼不會(huì)手動(dòng)設(shè)置.黃金票據(jù)原理是攻擊者盜用KRBTGT密碼偽造TGT憑據(jù)[14].
6) 白銀票據(jù)
白銀票據(jù)主要的目的是偽造服務(wù)Kerberos認(rèn)證體系中的服務(wù)票據(jù).為了創(chuàng)建或偽造白銀票據(jù),攻擊者必須獲得目標(biāo)服務(wù)賬號(hào)的密碼哈希值.對(duì)于設(shè)置了SPN的服務(wù)賬戶,攻擊者可以為該SPN生成白銀票據(jù),進(jìn)而訪問該服務(wù)[15].
針對(duì)活動(dòng)目錄域服務(wù)攻擊方法,本文將依照PDCA循環(huán)方法,參照Plan(計(jì)劃)、Do(執(zhí)行)、Check(檢查)和Action(處理)標(biāo)準(zhǔn),針對(duì)活動(dòng)目錄域服務(wù)各薄弱環(huán)節(jié)設(shè)計(jì)安全防護(hù)措施.
在企業(yè)中,考慮到域控制器的重要性和穩(wěn)定性,針對(duì)域控制器的安全防護(hù)措施,應(yīng)制定明確的目標(biāo)、實(shí)施路徑及可執(zhí)行的災(zāi)難恢復(fù)預(yù)案,實(shí)施手段應(yīng)包括但不限于漏洞修復(fù)、策略調(diào)整、訪問控制、日志審計(jì)等.
1) Windows系統(tǒng)補(bǔ)丁
截至目前,已公開披露的Windows活動(dòng)目錄域服務(wù)補(bǔ)丁主要包括KB2962486,KB2871997,KB3011780,KB3004375等,主要涉及組策略首選項(xiàng)漏洞、MS14-068漏洞、CMD命令行漏洞等各類問題.因此,在開展安全加固的初期應(yīng)優(yōu)先進(jìn)行打補(bǔ)丁操作,解決此類漏洞問題及功能性薄弱問題,以盡最大可能降低系統(tǒng)失陷風(fēng)險(xiǎn).
2) 白銀票據(jù)防護(hù)
建議通過開啟PAC(privileged attribute certificate)特權(quán)屬性證書保護(hù)功能防御白銀票據(jù)攻擊.PAC會(huì)使KDC驗(yàn)證收到的票據(jù)是否有效,從而使偽造的票據(jù)無法使用[16].
3) 本地管理員憑證加固
通過限制本地賬戶網(wǎng)絡(luò)登錄,能夠有效防護(hù)攻擊者橫向移動(dòng).同時(shí)建議每臺(tái)域內(nèi)主機(jī)使用唯一的密碼,可以通過本地管理員密碼解決方案(LAPS)解決[17].
4) PowerShell安全防護(hù)
PowerShell作為微軟Windows系統(tǒng)自帶命令行工具,為域管理員提供強(qiáng)有力的支持的同時(shí),也為攻擊者提供了強(qiáng)大的利用平臺(tái).目前很多后滲透平臺(tái)的開發(fā)環(huán)境都是基于PowerShell.
我們可以利用PowerShell環(huán)境本身的安全功能,能夠快速降低域環(huán)境的安全風(fēng)險(xiǎn).利用PowerShell的腳本快日志查詢功能和設(shè)置系統(tǒng)級(jí)記錄,能夠及時(shí)發(fā)現(xiàn)域環(huán)境中的攻擊行為;通過約束PowerShell執(zhí)行環(huán)境,能夠在一定程度上限制PowerShell腳本的執(zhí)行,從而增加攻擊者的攻擊成本和時(shí)間[18].
5) 限制域間主機(jī)訪問
限制域間主機(jī)訪問主要是防止攻擊橫向移動(dòng).首先對(duì)域中的主機(jī),根據(jù)實(shí)際業(yè)務(wù)需求,使用Windows防火墻限制入站流量,主要是對(duì)3389,22等遠(yuǎn)程管理端口進(jìn)行控制.如果確實(shí)需要3389遠(yuǎn)程管理主機(jī),可以使用RDP受限管理模式進(jìn)行RDP協(xié)議訪問的控制.
6) 域控制器主機(jī)防護(hù)
域控制器的防護(hù)是重中之中,有條件的企業(yè)可以將域控制器放置于單獨(dú)的物理空間,首先確保其物理安全.其次,在域控制器上不要安裝與域控制器功能無關(guān)的軟件,避免引入其他風(fēng)險(xiǎn).最后,域控制器的操作系統(tǒng)最好保持最新并做相應(yīng)的加固,并且域控制器不要訪問互聯(lián).通過以上措施能有效減少域控制器失陷的風(fēng)險(xiǎn).
1) 日志監(jiān)測(cè)
在進(jìn)行活動(dòng)目錄域服務(wù)日志監(jiān)測(cè)之前,在域控制器和域內(nèi)主機(jī)配置合理的審核策略是必要的,這里推薦微軟官方的活動(dòng)目錄域服務(wù)審核策略[19].配置好審核策略后,結(jié)合活動(dòng)目錄域服務(wù)常見的攻擊方法,建議對(duì)如下事件進(jìn)行重點(diǎn)監(jiān)測(cè).在實(shí)際日志監(jiān)控工作中,應(yīng)不拘泥于如下事件(如表1所示),可以擴(kuò)大監(jiān)控范圍,以達(dá)到更好的監(jiān)控效果[20].
表1 事件ID與攻擊手段關(guān)系表
在對(duì)事件ID為4688的事件進(jìn)行監(jiān)測(cè)時(shí),尤其要關(guān)注一些PowerShell命令的關(guān)鍵字,這些關(guān)鍵字都是惡意PowerShell命令行經(jīng)常使用的.比如:“.NetWeb Client download” “EncodedCommand“ “Invoke-Expression”“iex” “Bypass” “-enc”等.具體PowerShell命令行功能還要根據(jù)實(shí)際命令行含義判斷是否為惡意的.
2) 流量監(jiān)測(cè)
活動(dòng)目錄域服務(wù)流量監(jiān)測(cè)主要是對(duì)攻擊特征流量進(jìn)行監(jiān)測(cè),很多攻擊在進(jìn)行Kerberos協(xié)議攻擊時(shí)會(huì)留下細(xì)微的特征.判斷實(shí)際攻擊時(shí)最好結(jié)合流量監(jiān)測(cè)和日志監(jiān)測(cè)2個(gè)結(jié)果共同判斷.表2是部分Kerberos攻擊的流量特征[21].
表2 部分Kerberos協(xié)議攻擊流量特征表
1) 域賬戶檢查
檢查未更改初始密碼的域賬戶,對(duì)這類賬戶應(yīng)督促用戶盡快修改默認(rèn)密碼.檢查一段時(shí)間內(nèi)未登錄的賬戶,若確定為無效賬戶,應(yīng)及時(shí)清理.檢查配置可逆加密、密碼永不過期和不需要密碼的賬戶,對(duì)這類賬戶進(jìn)行合理配置.檢查啟用DES Kerberos加密、不需要Kerberos預(yù)認(rèn)證和配置SID歷史記錄的賬戶,根據(jù)實(shí)際業(yè)務(wù)需要對(duì)這類賬戶進(jìn)行配置.
2) 密碼策略檢查
域密碼策略確定密碼的創(chuàng)建方式以及需要更改的頻率等.活動(dòng)目錄域服務(wù)默認(rèn)密碼最少為7個(gè)字符,建議密碼長(zhǎng)度設(shè)置為14~16個(gè)字符.
3) Active Directory重復(fù)服務(wù)主體名稱(SPN)
Kerberos服務(wù)主體名稱(SPN),用于通過服務(wù)賬戶將支持Kerberos身份驗(yàn)證的服務(wù)器上的服務(wù)連接起來.如果存在重復(fù)的SPN,則由于域控制器無法識(shí)別與SPN關(guān)聯(lián)的單個(gè)賬戶,因此Kerberos身份驗(yàn)證會(huì)中斷.身份驗(yàn)證將需要回退到NTLM身份驗(yàn)證.如果身份認(rèn)證機(jī)制從Kerberos機(jī)制回退到NTLM身份驗(yàn)證機(jī)制,安全風(fēng)險(xiǎn)將大大增加.
4) 組策略首選項(xiàng)密碼
組策略首選項(xiàng)于2008年發(fā)布,其具有提供和更新憑據(jù)的功能.這些憑據(jù)使用靜態(tài)密碼的AES256加密,并且能夠被破解.具有組策略首選項(xiàng)功能的憑證有Drives.xml,DataSources.xml,Services.xml,Printers.xml等.應(yīng)確保SYSVOL中沒有組策略首選項(xiàng)密碼.
5) Active Directory管理員賬戶檢查
我們應(yīng)著重于識(shí)別“AD Admins”,其中包括Domain Administrators組、Domain Admins、Enterprise Admins等成員.這些賬戶具有完整的AD權(quán)限,需要仔細(xì)檢查.應(yīng)確保這些管理員賬戶密碼定期修改,并停用無效賬戶,刪除禁用賬戶,確保與人相關(guān)聯(lián)的賬戶沒有SPN.
6) 使用舊密碼的域管理員
使用舊密碼的Active Directory Admin賬戶(尤其是5年以上的舊密碼)容易受到密碼噴霧(和密碼猜測(cè))的攻擊.應(yīng)確保特權(quán)賬戶每年更改1次.
7) 檢查默認(rèn)域管理員賬戶是否存在問題
應(yīng)檢查管理員組、域管理員組、企業(yè)管理員組、服務(wù)操作員組和賬戶操作員的權(quán)限.應(yīng)把檢查結(jié)果和默認(rèn)權(quán)限進(jìn)行對(duì)比,從而發(fā)現(xiàn)異常.
8) Krbtgt密碼定期更改
Krbtgt賬戶是域服務(wù)賬戶.該賬戶已禁用,但用于發(fā)布Kerberos票證.設(shè)置的密碼在創(chuàng)建后幾乎不會(huì)更改.如果攻擊者獲得了該密碼,他們就可以創(chuàng)建黃金票據(jù).建議每年更改此密碼2次.域管理員離開后該密碼需變更.
9) 檢查組策略對(duì)象權(quán)限
我們應(yīng)檢查具有能夠更改權(quán)限組策略對(duì)象(GPO)的賬戶,確保GPO所有者只為Domain Admins或Enterprise Admins組成員.
10) 查看域權(quán)限
應(yīng)該檢查域權(quán)限是否配置正確.查看域根權(quán)限時(shí)要特別注意具有GenericAll(完全控制)、WriteDACL(更改權(quán)限)、write屬性(修改)權(quán)限和任何非默認(rèn)管理組(域管理員、域管理員、Enterprise Admin等)擴(kuò)展權(quán)限.
從某種意義上來說,Windows域服務(wù)是企業(yè)重要的信息基礎(chǔ)資源,它給企業(yè)信息化及日常運(yùn)營(yíng)管理帶來高效和便捷的同時(shí),也產(chǎn)生了不同程度的安全隱患,且隨著攻擊者對(duì)域服務(wù)認(rèn)識(shí)的提高及攻擊滲透手段的不斷變化,域服務(wù)安全隱患將一直存在,無法根治.如何有效地降低及控制Windows域服務(wù)安全隱患帶給我們的危害.本文模擬黑客攻擊滲透思路,采用常見的活動(dòng)目錄域服務(wù)攻擊方法,找出域服務(wù)運(yùn)行使用過程中的薄弱環(huán)節(jié).依據(jù)PDCA循環(huán)方法,有針對(duì)性提出安全防護(hù)措施,并引入日常安全運(yùn)營(yíng)工作各環(huán)節(jié)中,形成通用的、可復(fù)制推廣的安全防御思路.