企业活动目录域服务安全防护措施研究

2021-01-08 08:43张德政
信息安全研究 2021年1期
关键词:域控制器组策略攻击者

李 东 张德政

(核工业计算机应用研究所网络安全研究室 北京 100048)

(lidong@cnnc.com.cn)

域是一个计算机群体的组合,是一个相对严格的组织,而域控制器则是这个域内的管理核心.而目录服务是由目录服务数据库和目录访问协议组成.以上构成了域环境.由于活动目录域服务能够实现企业资产的统一管理,所以很多企业选择这种方式管理网络资产.

在网络攻防中,对活动目录域服务的渗透是攻防双方的必争之地.活动目录域服务的失陷,意味着企业网络的全部沦陷,同样,域控制器的失陷也意味着企业整个网络的失陷.目前企业实际安全运营中没有有效的、一劳永逸的方法解决活动目录域服务的安全问题,而有关活动目录域服务的漏洞还在不断地出现.

本文将以攻击者视角,找寻活动目录域服务常见攻击方法,并按照全生命周期各关键环节进行归类,形成完整攻击链条.并针对不同环节不同类型的常见攻击方法,探讨企业依据PDCA循环,依次开展域环境加固、流量监测、日志分析及安全检查等全生命周期安全防护措施,以实现降低活动目录域服务安全风险的目的.

1 活动目录域服务攻击方法

活动目录域服务攻击沿用传统的攻击渗透思路,主要涵盖预攻击阶段(准备期)、域服务攻击阶段(攻击期)、后攻击阶段(维持期),其中,结合活动目录域服务特点及企业使用习惯,攻击阶段思路又可细分为票据盗取阶段、权限提升阶段、横向移动阶段.

1.1 预攻击阶段(准备期)

1) 利用SYSVOL漏洞收集密码

域管理员在使用组策略批量管理域内主机时,如果配置组策略的过程中需要填入密码,那么该密码会被保存到共享文件夹SYSVOL下,默认所有域内用户可访问,虽然密码通过AES 256进行加密,但密钥是公开在微软官网的[1],一旦攻击访问共享文件夹SYSVOL文件并获得密码加密后的密文,是能够将密文解密并还原密码的.这个密码的泄露会威胁到活动目录域服务安全性.

2) 通过SAMR协议探测

SAMR协议即Security Account Manager Remote Protocol[2].在进行域渗透过程中攻击者使用的net user,net time等等DOS命令利用此协议,攻击者能够查询到域控制器、管理员等重要信息.

3) SPN扫描

服务主体名称(service principal names, SPN)是服务实例(可以理解为一个服务,比如HTTP,MSSQL)的唯一标识符.SPN将服务实例与服务登录账户相关联.SPN可以注册在机器账户下和域用户账户下[3].SPN扫描是对活动目录域服务中应用服务的信息收集.

1.2 域服务攻击阶段(攻击期)

1) 票据盗取

① 利用MS14-068漏洞:MS14-068漏洞是Microsoft Windows Kerberos KDC漏洞.CVE编号为CVE-2014-6324.该漏洞允许攻击者提升任意普通用户权限成为域管理员(domain admin)身份,提升到域管理员权限后即可访问域控制器,进而获得域内所有主机的票据[4],实现全域控制.

② 获取NTDS.dit文件:NTDS.dit文件是主要的AD数据库,该数据库存储有关域用户、组和组成员身份的信息,还包括域中所有用户的密码哈希值.攻击者通过调用Volume Shadow Copy服务能够完成NTDS.dit文件的拷贝,进而破解域内所有域用户的密码.

③ AS-REP Roasting:当域用户账户选项设置为不需要Kerberos预身份验证(Kerberos版本5之前允许不使用密码进行身份认证)时,攻击者可以发起AS-REP Roasting攻击,从而获取账户密码的哈希值,进行离线破解[5].

④ Kerberoasting:某些情况下,用户账户被创建为“服务账户”并注册为服务主题名称.由于密钥分发中心(key distribution center,KDC)不执行服务授权,因此域内任何人都可以请求任何服务的TGS(票证授予服务).这意味着,如果用户“服务账户”已注册为SPN,则任何人都可以通过请求某个服务的TGS,获得该服务密码哈希,通过对该哈希的离线破解,能够获得该用户账户密码[6].

⑤ DCSync:DCSync是mimikatz在2015年添加的一个功能,能够用来导出域内所有用户的哈希值.但是只有Domain Controllers和Enterprise Domain Admins权限能够使用DCSync.我们也可以对域内普通用户添加ACL,实现普通用户调用DCSync导出域内所有用户的哈希值.DCSync是利用DRS(directory replication service)协议从域控制器复制用户凭据实现的[7].

2) 权限提升

① 修改访问控制列表(ACL):攻击者通过PowerView等工具,能够修改某些用户的GenericAll,GenericWrite,WriteDACL,WriteOwner等权限,从而实现某些用户的权限提升[8].

② 新增组策略:通过新增组策略,攻击者能够在域控制器上以管理员身份运行脚本,以达到权限提升的目的.也可以通过新增组策略,人为地“制造”SYSVOL漏洞,从而达到预留后门的目的.

3) 横向移动

① 账户暴破和远程登录:攻击者可以使用Metasploit,Nmap,Rubeus,Kerbrute等工具,对Kerberos协议用户账户进行暴力破解[9],也可以对域环境内开放3389端口、22端口的主机进行暴力破解,从而进行远程登录.

② 远程代码执行:远程代码执行一般是在已知目标凭据的情况下,获得目标计算机的shell.PsExec,wmi_exec,smb_exec,PsRemoting等工具能够进行远程代码执行,这些工具特点和使用场景不尽相同,需要根据实际条件灵活运用.域环境中利用Windows系统远程代码执行漏洞也可以较好实现横向移动,比如利用MS17-010漏洞.

1.3 后攻击阶段(维持期)

1) DSRM重置

每个域控制器都有一个本地管理员账户,而这个账户也是目录服务还原模式(DSRM)账户.DSRM的密码是在DC安装时就需要设置,并且很少会被重置.利用DSRM密码同步机制,能够建立后门账户,并且拥有域管理员权限[10].

2) SSP后门

SSP(security support provider)又名Security Package,即使用动态链接库来实现身份认证功能.Local Security Authority进程用于身份认证,常见进程为lsass.exe.特别的地方在于LSA是可扩展的,在系统启动时SSP会被加载到进程lsass.exe中,而攻击者可以自定义一个dll,在系统启动时被加载到进程lsass.exe中,从而捕捉密码,并记录在特定目录文件中[11].

3) SID历史属性修改

每个用户账号都有一个关联的安全标识符(SID),SID用于跟踪安全主体在访问资源时的账户与访问权限.为了支持AD牵移,微软设计了SID历史属性,SID历史允许一个账户的访问被有效地克隆到另一个账户.可以利用SID历史属性将域管理员的SID赋值给普通用户,从而实现权限维持[12].

4) Skeleton Key

Skeleton Key能够让所有域用户使用同一个万能密码进行登录,而现有的所有域用户使用原密码仍能继续登录.该后门重启后失效[13].Skeleton Key一般被安装在64 b的域控制器上.

5) 黄金票据

密钥分发中心(KDC)在发布TGT(ticket granting ticket)时,TGT使用KRBTGT账户密码哈希进行加密.默认情况下,KRBTGT密码不会手动设置.黄金票据原理是攻击者盗用KRBTGT密码伪造TGT凭据[14].

6) 白银票据

白银票据主要的目的是伪造服务Kerberos认证体系中的服务票据.为了创建或伪造白银票据,攻击者必须获得目标服务账号的密码哈希值.对于设置了SPN的服务账户,攻击者可以为该SPN生成白银票据,进而访问该服务[15].

2 活动目录域服务防护措施

针对活动目录域服务攻击方法,本文将依照PDCA循环方法,参照Plan(计划)、Do(执行)、Check(检查)和Action(处理)标准,针对活动目录域服务各薄弱环节设计安全防护措施.

2.1 活动目录域服务安全措施实施计划

在企业中,考虑到域控制器的重要性和稳定性,针对域控制器的安全防护措施,应制定明确的目标、实施路径及可执行的灾难恢复预案,实施手段应包括但不限于漏洞修复、策略调整、访问控制、日志审计等.

2.2 活动目录域服务环境安全加固

1) Windows系统补丁

截至目前,已公开披露的Windows活动目录域服务补丁主要包括KB2962486,KB2871997,KB3011780,KB3004375等,主要涉及组策略首选项漏洞、MS14-068漏洞、CMD命令行漏洞等各类问题.因此,在开展安全加固的初期应优先进行打补丁操作,解决此类漏洞问题及功能性薄弱问题,以尽最大可能降低系统失陷风险.

2) 白银票据防护

建议通过开启PAC(privileged attribute certificate)特权属性证书保护功能防御白银票据攻击.PAC会使KDC验证收到的票据是否有效,从而使伪造的票据无法使用[16].

3) 本地管理员凭证加固

通过限制本地账户网络登录,能够有效防护攻击者横向移动.同时建议每台域内主机使用唯一的密码,可以通过本地管理员密码解决方案(LAPS)解决[17].

4) PowerShell安全防护

PowerShell作为微软Windows系统自带命令行工具,为域管理员提供强有力的支持的同时,也为攻击者提供了强大的利用平台.目前很多后渗透平台的开发环境都是基于PowerShell.

我们可以利用PowerShell环境本身的安全功能,能够快速降低域环境的安全风险.利用PowerShell的脚本快日志查询功能和设置系统级记录,能够及时发现域环境中的攻击行为;通过约束PowerShell执行环境,能够在一定程度上限制PowerShell脚本的执行,从而增加攻击者的攻击成本和时间[18].

5) 限制域间主机访问

限制域间主机访问主要是防止攻击横向移动.首先对域中的主机,根据实际业务需求,使用Windows防火墙限制入站流量,主要是对3389,22等远程管理端口进行控制.如果确实需要3389远程管理主机,可以使用RDP受限管理模式进行RDP协议访问的控制.

6) 域控制器主机防护

域控制器的防护是重中之中,有条件的企业可以将域控制器放置于单独的物理空间,首先确保其物理安全.其次,在域控制器上不要安装与域控制器功能无关的软件,避免引入其他风险.最后,域控制器的操作系统最好保持最新并做相应的加固,并且域控制器不要访问互联.通过以上措施能有效减少域控制器失陷的风险.

2.3 活动目录域服务安全监测

1) 日志监测

在进行活动目录域服务日志监测之前,在域控制器和域内主机配置合理的审核策略是必要的,这里推荐微软官方的活动目录域服务审核策略[19].配置好审核策略后,结合活动目录域服务常见的攻击方法,建议对如下事件进行重点监测.在实际日志监控工作中,应不拘泥于如下事件(如表1所示),可以扩大监控范围,以达到更好的监控效果[20].

表1 事件ID与攻击手段关系表

在对事件ID为4688的事件进行监测时,尤其要关注一些PowerShell命令的关键字,这些关键字都是恶意PowerShell命令行经常使用的.比如:“.NetWeb Client download” “EncodedCommand“ “Invoke-Expression”“iex” “Bypass” “-enc”等.具体PowerShell命令行功能还要根据实际命令行含义判断是否为恶意的.

2) 流量监测

活动目录域服务流量监测主要是对攻击特征流量进行监测,很多攻击在进行Kerberos协议攻击时会留下细微的特征.判断实际攻击时最好结合流量监测和日志监测2个结果共同判断.表2是部分Kerberos攻击的流量特征[21].

表2 部分Kerberos协议攻击流量特征表

2.4 活动目录域服务安全检查

1) 域账户检查

检查未更改初始密码的域账户,对这类账户应督促用户尽快修改默认密码.检查一段时间内未登录的账户,若确定为无效账户,应及时清理.检查配置可逆加密、密码永不过期和不需要密码的账户,对这类账户进行合理配置.检查启用DES Kerberos加密、不需要Kerberos预认证和配置SID历史记录的账户,根据实际业务需要对这类账户进行配置.

2) 密码策略检查

域密码策略确定密码的创建方式以及需要更改的频率等.活动目录域服务默认密码最少为7个字符,建议密码长度设置为14~16个字符.

3) Active Directory重复服务主体名称(SPN)

Kerberos服务主体名称(SPN),用于通过服务账户将支持Kerberos身份验证的服务器上的服务连接起来.如果存在重复的SPN,则由于域控制器无法识别与SPN关联的单个账户,因此Kerberos身份验证会中断.身份验证将需要回退到NTLM身份验证.如果身份认证机制从Kerberos机制回退到NTLM身份验证机制,安全风险将大大增加.

4) 组策略首选项密码

组策略首选项于2008年发布,其具有提供和更新凭据的功能.这些凭据使用静态密码的AES256加密,并且能够被破解.具有组策略首选项功能的凭证有Drives.xml,DataSources.xml,Services.xml,Printers.xml等.应确保SYSVOL中没有组策略首选项密码.

5) Active Directory管理员账户检查

我们应着重于识别“AD Admins”,其中包括Domain Administrators组、Domain Admins、Enterprise Admins等成员.这些账户具有完整的AD权限,需要仔细检查.应确保这些管理员账户密码定期修改,并停用无效账户,删除禁用账户,确保与人相关联的账户没有SPN.

6) 使用旧密码的域管理员

使用旧密码的Active Directory Admin账户(尤其是5年以上的旧密码)容易受到密码喷雾(和密码猜测)的攻击.应确保特权账户每年更改1次.

7) 检查默认域管理员账户是否存在问题

应检查管理员组、域管理员组、企业管理员组、服务操作员组和账户操作员的权限.应把检查结果和默认权限进行对比,从而发现异常.

8) Krbtgt密码定期更改

Krbtgt账户是域服务账户.该账户已禁用,但用于发布Kerberos票证.设置的密码在创建后几乎不会更改.如果攻击者获得了该密码,他们就可以创建黄金票据.建议每年更改此密码2次.域管理员离开后该密码需变更.

9) 检查组策略对象权限

我们应检查具有能够更改权限组策略对象(GPO)的账户,确保GPO所有者只为Domain Admins或Enterprise Admins组成员.

10) 查看域权限

应该检查域权限是否配置正确.查看域根权限时要特别注意具有GenericAll(完全控制)、WriteDACL(更改权限)、write属性(修改)权限和任何非默认管理组(域管理员、域管理员、Enterprise Admin等)扩展权限.

3 结束语

从某种意义上来说,Windows域服务是企业重要的信息基础资源,它给企业信息化及日常运营管理带来高效和便捷的同时,也产生了不同程度的安全隐患,且随着攻击者对域服务认识的提高及攻击渗透手段的不断变化,域服务安全隐患将一直存在,无法根治.如何有效地降低及控制Windows域服务安全隐患带给我们的危害.本文模拟黑客攻击渗透思路,采用常见的活动目录域服务攻击方法,找出域服务运行使用过程中的薄弱环节.依据PDCA循环方法,有针对性提出安全防护措施,并引入日常安全运营工作各环节中,形成通用的、可复制推广的安全防御思路.

猜你喜欢
域控制器组策略攻击者
机动能力受限的目标-攻击-防御定性微分对策
通过PowerShell获取组策略安全报告
处理域控制器时间误差
正面迎接批判
如何完全卸载OneDrive
基于软件定义网络的分层式控制器负载均衡机制
修复域控制器故障
检测组策略故障
转移域控角色到中转服务器
有限次重复博弈下的网络攻击行为研究