在获得域控制器的权限后,攻击者通常会对现有的权限进行持久化操作。
DSRM域后门 DSRM域后门介绍
代码语言:javascript复制DSRM(Directore Services Restore Mode,目录服务恢复模式)是Windows 域环境中域控制器的安全模式启动项。每个域控制器有一个本地管理员账户(也就是DSRM账户)。DSRM的用途是:允许管理员在域环境中出现故障或崩溃时还原、修复、重建活动目录数据库,使域环境的运行恢复正常。在域环境创建之初,DSRM的密码需要在安装DC时设置,且很少会被重置。
在渗透测试中,可以使用DSRM账号对域环境进行持久化操作。我们知道,每个域控制器都由本地管理员账号和密码(与域管理员账号和密码不同)。DSRM账号可以作为一个域控制器的本地管理员账户,通过网络连接域控制器,进而控制域控制器。
DSRM域后门的防御措施
代码语言:javascript复制定期检查注册表中用于控制DSRM登录方式的键值HKLSystemCurrentControlSetControlLsaDsrmAdminLogonBehavior,确认该键值为1,或者删除该键值
定期修改域中所有控制器的DSRM账号
经常检查ID为4794的日志。尝试设置活动目录服务还原模式的管理员密码会被记录在4794日志中
SSP维持域控权限 SSP介绍
代码语言:javascript复制SSP(Security Support Provider)是Windows操作系统的安全机制的提供者。简答的说,SSP就是一个DLL文件,主要用来实现Windows操作系统的身份认证功能,例如NTML、Kerberos、Negotiate、Secure Channel、Digets、Credential。
SSPI(Security Support Provider Interface,安全支持提供程序接口)是Windows操作系统在执行认证操作时使用的API接口,可以说,SSPI是SSP的API接口。
如果获得了目标网络的System权限,可以使用该方法进行持久化操作,其主要原理是:LSA(Local Security Authority)用于身份验证;lsass.exe作为Windows的系统进程,用于本地安全和登陆策略;在系统启动时,SSP将被加载到lsass.exe进程中。但是,假如攻击者对LSA进行了扩展,自定义了恶意的DLL文件,在系统启动时将其加载到lsass.exe进程中,就能获取到lsass.exe的明文密码。这样,即使用户更改密码重新登陆,攻击者依然能获取该账号的新密码。
SSP维持域控制器权限的防御措施
代码语言:javascript复制检查HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa/Security Packages项中是否有可疑的DLL文件
检查C:WindowsSystem32目录下是否有可疑DLL文件
使用第三方工具检查LSA中是否有可疑的DLL文件
3 SID History域后门 SID History域后门介绍
代码语言:javascript复制每个用户都有自己的SID,SID的主要作用是跟踪安全主题控制用户连接资源时的访问权限。SID History是在域迁移过程中需要使用的一个属性。
如果A域中的域用户迁移到B域中,那么在B域中的新建用户的SID会随之改变,进而影响迁移后的用户权限,导致迁移后的用户不能访问本来可以访问的资源。SID History的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后的用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能访问其原来可以访问的资源。在渗透测试中,如果获得了域管理员权限,就可以将SID History作为持久化的方法。
SID History域后门的防御措施
代码语言:javascript复制经常查看域用户中SID为500的用户
完成域迁移工作后,对有相同SID History属性的用户进行检查
定期检查ID为4765和4766的日志:4765为将SID History属性添加到用户的日志;4766为将SID History属性添加到用户失败的日志
4 Golden Ticket Golden Ticket介绍
代码语言:javascript复制在渗透测试中,如果发现系统中存在恶意行为,应及时更改域管理员密码,对受控制的机器进行断网处理,然后进行日志分析取证。然而,攻击者往往会留下多条进入内网的通道,如果我们忘记将krbtgt账号重置,攻击者就可以很快拿到域控制器权限。
krbtgt是KDC服务使用的账号,属于Domain Admins组,在域环境中,每个用户账号的票据都是由krbtgt生成的,如果攻击者拿到了krbtgt的NYLM Hash或者AES-256值,就可以伪造域内任意用户的身份,并以该用户的身份访问其他服务。
攻击者在使用域的Golden Ticket(黄金票据)进行票据攻击时,通常需要掌握以下信息:
代码语言:javascript复制需要伪造的域管理员用户名
完整的域名
域SID
krbtgt的NTLM Hash或AES-256值
使用Golden Ticket伪造的用户可以是任意用户(即使这个用户不存在),因为TGT的加密是由krbtgt完成的,所以,只要TGT被krbtgt账户和密码正确的加密,那么任意KDC使用krbtgt将TGT解密后,TGT的所有信息都是可信的。
Golden Ticket攻击的防御措施
代码语言:javascript复制管理员通常会修改域管理员的密码,但有时会忘记将krbtgt密码一并重置,所以,要想防止Golden Ticket攻击,就需要将krbtgt密码重置两次。
5 Silver Ticket Silver Ticket介绍
代码语言:javascript复制Silver Ticket(白银票据)不同于Golden Ticket。Silver Ticket的利用过程是伪造TGS,通过已知授权服务密码生成一张可以访问该服务的TGT。因为在票据生成过程中不需要使用KDC,所以可以绕过域控制器,很少留下日志。而Golden Ticket在利用过程中需要由KDC颁发TGT,并且在生成伪造的TGT的20分钟内,TGS不会对该TGT真伪进行校验。
Silver Ticket依赖于服务账号的密码散列值,这不同于Golden Ticket利用需要使用krbtgt账号密码的散列值,因此更加隐蔽。
Golden Ticket使用krbtgt账号的密码散列值,利用伪造最高权限的TGT向KDC要求颁发拥有任意服务访问权限的票据,从而获得域控制器权限。而Silver Ticket会通过相应的账号服务来伪造TGS,范围有限,只能获得对应的权限服务。Golden Ticket是由krbtgt账号加密的,而Silver Ticket是由特定的服务账号加密的。
攻击者在使用Silver Ticket对内网进行攻击时,需要掌握以下信息:
代码语言:javascript复制域名
域SID
目标服务器的FQDN
可利用的服务
服务账号的NTLM Hash
需要伪造的用户名
Silver Ticket攻击的防范措施
代码语言:javascript复制在内网中安装杀毒软件,及时更新系统补丁
使用组策略在域中进行相应的设置,现值mimikatz在内网中的使用
计算机的账号密码默认30天清理一次,检查该设置是否生效
6 Skeleton Key 使用Skeleton Key(万能密码),可以对域内权限进行持久化操作。 使用mimikatz注入Skeleton Key,注入成功后。会在域内的所有账号中添加万能密码:mimikatz Skeleton Key攻击的防范措施
代码语言:javascript复制域管理员要设置强口令,确保恶意代码不会再域控制器内执行
在所有域用户中启动双因子认证,例如智能卡认证
启动应用程序的白名单,以限制mimakatz在域控制器中的运行
7 Hook PasswordChangeNotify Hook PasswordChangeNotify的作用是当用户修改密码后在系统中进行同步。攻击者可以利用该功能获取用户修改密码时输入的密码明文。
Hook PasswordChangeNotify攻击的防御措施
代码语言:javascript复制使用Hook PasswordChangeNotify不需要重启系统、不会再系统磁盘上留下DLL文件、不需要修改注册表。如果Hook PasswordChangeNotify被攻击者利用,网络管理员是很难检测到的。所以,在日常的网络维护工作中,需要对PowerShell进行严格检视,并启用约束语言模式,对Hook PasswordChangeNotify进行防御。