最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

集權(quán)安全 | 域滲透中的 DCSync技術分析

2023-07-28 10:57 作者:北京中安網(wǎng)星  | 我要投稿

DCSync是AD域滲透中常用的憑據(jù)竊取手段,默認情況下,域內(nèi)不同DC每隔15分鐘會進行一次數(shù)據(jù)同步,當一個DC從另外一個DC同步數(shù)據(jù)時,發(fā)起請求的一方會通過目錄復制協(xié)議(MS- DRSR)來對另外一臺域控中的域用戶密碼進行復制,DCSync就是利用這個原理,“模擬”DC向真實DC發(fā)送數(shù)據(jù)同步請求,獲取用戶憑據(jù)數(shù)據(jù),由于這種攻擊利用了Windows RPC協(xié)議,并不需要登陸域控或者在域控上落地文件,避免觸發(fā)EDR告警,因此DCSync時一種非常隱蔽的憑據(jù)竊取方式。

1.攻擊場景

  • DCSync通常是作為其他攻擊的先兆性攻擊:

    • 例如攻擊者可能會使用DCSync竊取krbtgt用戶的hash來制作黃金票據(jù);

    • 在hash傳遞攻擊中,攻擊者會利用DCSync去獲取低權(quán)限用戶的hash進行登錄。

  • DCSync也可能是其他一些漏洞的后置性攻擊手段:

    • 例如CVE-2020-1472漏洞,攻擊者利?Netlogon協(xié)議漏洞將域控機器賬戶密碼置空,然后利用空密碼對域控進行DCSync攻擊獲取域內(nèi)用戶憑據(jù)。

  • DCSync也可以會作為一種維權(quán)手段

    • 攻擊者在控制某個域之后可能會對域內(nèi)某些普通用戶或者用戶組賦予DCSync權(quán)限,以便在下一次進入內(nèi)網(wǎng)后直接利用該低權(quán)限用戶憑據(jù)來dump域管憑據(jù),實現(xiàn)對AD域的隱蔽控制。

2.利用條件

在默認情況下,只有域控機器用戶、域管理員(Domain Admins)、企業(yè)管理員(Enterprise Admins)等高權(quán)限賬戶才有DCSync操作的權(quán)限,從更細粒度的ACL層面來說,DCSync需要以下兩個權(quán)限

  • 目錄復制同步
    (Replicating Directory Changes)

  • 目錄復制同步所有項
    (Replicating Directory Changes All)

3.原理分析

在AD域環(huán)境中域控制器(Domain Controller)扮演了最核心的角色,承擔了域內(nèi)用戶的管理、認證、票據(jù)授權(quán)等作用,為了防止一臺域控宕機導致整個域環(huán)境崩潰,企業(yè)內(nèi)通常會部署多臺域控,為了保證這些域控中存儲的用戶數(shù)據(jù)一致性,這些域控之間會利用MS-DRSR 協(xié)議中的drsuapi RPC 接口來進行數(shù)據(jù)同步。

DCSync攻擊就是“模擬了”域控同步的行為去調(diào)用DRSGetNCChanges函數(shù),這個函數(shù)返回的數(shù)據(jù)中就包含了用戶的密碼。

目前DCSync攻擊的常用攻擊工具一般為mimikatz或impacket工具包中的Secretsdump.py

從mimikatz代碼來分析,整個過程一共調(diào)用了以下4個RPC函數(shù)

    DRSBind;

    • DRSBind

    DRSBind函數(shù)的作用是初始化drs句柄,與服務端進行消息版本和加密方式的協(xié)商,這是調(diào)drsuapi中函數(shù)之前的必要操作。

    在這個函數(shù)中有兩個參數(shù),一個是puuidClientDsa,指向調(diào)用方的GUID的指針,另一個是pextClient,pextClient參數(shù)主要包含的是協(xié)商信息,它指向的是一個DRS_EXTENSIONS_INT結(jié)構(gòu)體,在這個結(jié)構(gòu)體中的dwFlags字段標識了調(diào)用方支持的功能列表。

    在mimikatz中dwFlags被設置為

      DRS_EXT_GETCHGREPLY_V6 | DRS_EXT_STRONG_ENCRYPTION。


      在Secretsdump工具dwFlags設置的是

        DRS_EXT_GETCHGREQ_V6 | RS_EXT_GETCHGREPLY_V6 | DRS_EXT_GETCHGREQ_V8 | DRS_EXT_STRONG_ENCRYPTION

        puuidClientDsa表示調(diào)用方的GUID,在兩個工具中都是一樣的 “e24d201a-4fd6-11d1-a3da-0000f875ae0d” 。



        在[MS-DRSR]文檔中這個guid被稱作NTSAPI_CLIENT_GUID,微軟在文檔中表示只有puuidClientDsa是NULL GUID時服務端才會返回錯誤,我在實際測試中修改成其他的GUID也沒有對DCSync造成影響,不知道這兩個工具將puuidClientDsa設置為NTSAPI_CLIENT_GUID是出于什么目的。


        • DRSDomainControllerInfo

        DRSDomainControllerInfo函數(shù)主要是獲取域控的一些信息,在這里目的是獲取目標服務端域控的GUID,這是調(diào)用DRSGetNCChanges函數(shù)必須使用的參數(shù)。

        • DRSCrackNames

        DRSCrackNames作用是查詢目錄內(nèi)的對象,并將結(jié)果返回給調(diào)用方,我們在dump hash是這里的對象就是傳入的用戶名,DRSCrackNames接受多種形式的用戶名,包括UPN、FQDN、SPN等。


        在Secretdump中只有以下兩種格式被支持。

          DS_NT4_ACCOUNT_NAME


          mimikatz中支持的格式就比較多了

          傳入的用戶名類型需要在DRS_MSG_CRACKREQ結(jié)構(gòu)體的formatOffered參數(shù)中指定,在rpNames傳入需要查詢的用戶名,這里是一個數(shù)組,可以一次傳入多個用戶。這一步最核心的目的是獲取用戶的GUID,這是調(diào)用DRSGetNCChanges函數(shù)另一個必要參數(shù)。

          • DRSGetNCChanges

          這是整個DCSync過程最重要的一個函數(shù)

          輸入的參數(shù)是一個DRS_MSG_GETCHGREQ結(jié)構(gòu)體,這里以DRS_MSG_GETCHGREQ_V8為例:

          uuidDsaObjDest和uuidInvocIdSrc分別表示客戶端DC和服務端DC的GUID,secretsdump中將這兩個參數(shù)都設置成DRSDomainControllerInfo請求中獲取的服務端DC的GUID。

          而mimikatz只設置了uuidDsaObjDest,uuidInvocIdSrc默認為NULL


          在實際測試中將uuidDsaObjDest設置為NULL或者服務端DC的GUID時,uuidInvocIdSrc設置為任意的GUID時DCSync都可以成功,所以實際上DRSDomainControllerInfo這一步是可以省略的。

          pNC表示需要復制的對象,這是一個DSName結(jié)構(gòu),可以通過GUID、SID、或者是DN來表示域內(nèi)的一個對象,impacket和mimikatz都是通過GUID來標識用戶的。

          實際上,在知道用戶的SID或者DN的情況下也是可以成功的

          所以在知道目標sid或者dn的情況下DRSCrackNames這一步也是可以省略的。

          pPartialAttrSet包含了需要復制的對象屬性,類型是ATTRTYP,這里的ATTRTYP實際上是壓縮形式的oid, 屬性名和對應的oid在mimikatz和secretsdump中都有定義。

          其中密碼字段就保存在unicodePwd屬性中,這里只要有這一個屬性就能獲取到對象的密碼。

          DRSGetNCChanges返回的是DRS_MSG_GETCHGREPLY結(jié)構(gòu),兩個工具協(xié)商的返回類型都是DRS_EXT_GETCHGREQ_V6,所以這里以DRS_MSG_GETCHGREPLY_V6為例分析。

          對象的信息包含在pObjects屬性中,這是一個鏈表結(jié)構(gòu),在mimikatz中對這個鏈表進行了遍歷,并根據(jù)不同屬性的類型進行解析。

          這里我們最關注的屬性就是unicodePwd,在復制以下屬性時會將這些屬性用sessionKey進行加密,加密方式是RC4。

            unicodePwd

            kull_m_rpc_drsr_ProcessGetNCChangesReply函數(shù)是mimikatz中對這些屬性進行解密的關鍵函數(shù),詳情如下。

            最后使用rid生成的key對unicodePwd進行解密就的到我們想要的ntlm hash。

            • 總結(jié)

            通過對DCSync原理及利用過程進行分析,發(fā)現(xiàn)在以上4個RPC函數(shù)中DRSBind不可以省略,DRSDomainControllerInfo目的是獲取drsuapi服務端的GUID,這個GUID可以是NULLGUID,可以省略,DRSCrackNames的作用是獲取用戶的GUID,DRSGetNCChanges可以接受SID或者DN形式的用戶名,也可以省略。


            因此,可以對現(xiàn)有工具進行代碼簡化,簡化之后可以用直接用DRSBind和DRSGetNCChanges函數(shù)來進行DCSync,利用過程如下圖所示。


            4.防御和檢測

            由于DCSync攻擊需要Replicating Directory Changes和Replicating Directory Changes All這兩個權(quán)限,可以通過LDAP查詢域內(nèi)對象的ACL,對域內(nèi)有DCSync權(quán)限的用戶進行排查。

            在網(wǎng)絡層面,除了一些特殊情況,從非域控ip發(fā)起的IDL_DRSGetNCChanges rpc請求基本上可以判定為攻擊行為。

            5.參考

            • learn.microsoft.com/en-

            • github.com/gentilkiwi/m

            • github.com/SecureAuthCo


            集權(quán)安全 | 域滲透中的 DCSync技術分析的評論 (共 條)

            分享到微博請遵守國家法律
            广水市| 和静县| 辛集市| 洪江市| 福鼎市| 嘉荫县| 宝清县| 广西| 襄城县| 昭觉县| 五大连池市| 高碑店市| 仁化县| 德昌县| 增城市| 金湖县| 柳林县| 太和县| 大同市| 商都县| 龙泉市| 视频| 宣武区| 屯留县| 扶余县| 泰来县| 镇原县| 商南县| 曲阜市| 游戏| 鲜城| 湾仔区| 大荔县| 安徽省| 万安县| 吕梁市| 贺兰县| 东兰县| 漾濞| 汉源县| 屏边|