最近在做域加固相关的事情,对于dcsync的攻击一直没找到解决办法,直接从防火墙做端口阻断也不是一个很好的解决方案,偶然想起Suricata具有IPS功能,经过以下测试可以完美符合要求,甚至之后的一些高级网络攻击,通过防火墙不能做到很好防护的情况下,都可以通过Suricata内联IPS来解决。
一、Windows 安装Suricata
Windows 版Suricata 要实现IPS功能需要安装WinDivert ,具体编译&安装步骤可参考https://suricata.readthedocs.io/en/suricata-4.1.3/setting-up-ipsinline-for-windows.html,我这边直接用的是Suricata已经编译好二级制安装包,这个安装包已经将WinDivert集成进去了,下载地址:https://www.openinfosecfoundation.org/download/windows/Suricata-6.0.0-beta1-1-64bit.msi。在安装Windows Suricata之前需要先安装WinPcap包,不过这个项目目前已经停止维护了,我们可以用npcap来替代,下载地址:https://nmap.org/npcap/dist/npcap-0.9997.exe
安装成功后,启动方式和Linux的一样:
# 192.168.111.128这个IP地址是我Windows域控的IP地址
# --service-install 将启动命令注册为服务,方便后面的自启动
suricata.exe -c suricata.yaml -s signatures.rules -i 192.168.111.128 --service-install
配置Suricata规则文件为自定义规则文件,因为我们这边的场景是使用Suricata作为IPS加固域控服务器,所以我们的规则只针对于域控。
将myself.rules放在规则文件夹中
启动Suricata服务
二、实际使用——解决dcsync攻击
首先解释如何检测dcsync攻击,dcsync攻击本身是利用了Windows的DRS(目录复制服务),而目录复制服务使用的是MS-DRSR(目录复制远程协议),MS-DRSR协议是基于dcerpc的,其UUID为e3514235-4b06-11d1-ab04-00c04fc2dcd2。
正常情况下MS-DRSR通常会出现在域控服务器之间用来复制和管理活动目录中数据,排除原、目的为域控服务器之后,就可以看出异常。
Suricata 规则如下:
alert dcerpc any any -> any any (msg: "DCShadow"; flow: established; dce_iface: e3514235-4b06-11d1-ab04-00c04fc2dcd2; dce_opnum: 5; sid: 7000776; rev: 1;)
在实际情况下需要在Suricata的yml文件中配置域控服务器变量,然后在规则中进行排除,这里为了演示方便,直接源目的都设置为any。
在mimikatz中执行以下命令
lsadump::dcsync /domain:contoso.com /user:administrator /csv /all
Suricata 告警:
规则测试没有问题,现在需要将规则由alert模式转变为drop模式
drop tcp any any -> any any (msg: "DCShadow"; dce_iface: e3514235-4b06-11d1-ab04-00c04fc2dcd2; sid: 7000776; rev: 1;)
现在开启Suricata IPS/inline 模式,进行阻断,启动命令为:
suricata -c suricata.yaml -s signatures.rules --windivert true
之后在mimikatz中使用相同命令,发现dcsync已经失败
告警文件中也出现相应告警:
由此引申,在出现新的针对于域控的高危漏洞时,如果来不及打补丁,可以先使用Suricata指定检测规则,对异常流量进行阻断,来保护域控,前提是规则要尽量准确。