对于企业内部负责网络安全部分的人来说,能够将新出现的攻击的捕获周期降到最低,才是他们的最终目的,这样不但能降低损害程度,而且补救成本也很低。他们经常希望的最理想的安全方式就是通过尝试入侵来进行测试,可见渗透测试对网站安全的重要性。BloodHound就是一个强大的内网域渗透提权分析工具,BloodHound用图与线的形式,将内网域内的用户、计算机、组、会话控制、访问控制列表以及所有相关用户、组、计算机、登陆信息、访问控制策略之间的关系更直观的展现在分析人员面前,方便大家分析。BloodHound最令人兴奋的功能是能够识别攻击路径。对于这个概念,这种方法在Active Directory域权限提升方面有着令人难以置信的作用并且识别的结果也非常的可靠。
作为防御者,BloodHound可用于识别其环境允许攻击者进入域管理员的方式,并直接删除一些简单的路径。
但对于攻击者来说,他们则会试图研究出各种检测Bloodhound和类似渗透工具的方法。所以在使用Bloodhound时,我们需要记住以下2点:
1.不要查找文件的签名或哈希,虽然这可能方便我们进行渗透测试,但这却很容易被绕过。
2. 客户端检测会在未来面临一些挑战,例如:
· 2.1获取日志的正确版本的PowerShell;
· 2.2 PowerShell相关事件的WEF设置和configurationVolume;
绕过BloodHound检测的设想
无论防御者有多少权限,都永远处于被动状态,因为攻击者会不断寻找绕过检测和各种安全测试的方法。比如就有研究人员找到了运行PowerShell的创新方法:无需运行powershell.exe或绕过AppLocker策略即可运行PowerShell脚本。
为了更好地了解BloodHound正在做什么、如何检测恶意攻击、在什么位置实现关键检测,我们需要做一些测试:
1.建立一个测试环境,让我们可以运行BloodHound,并了解它是如何工作的。为此,我设置了一个Windows 2012R2域控制器,一个Windows 2012 R2成员服务器,带有SQL 2012的Windows 2012 R2服务器和一个Windows 10客户端。所有这些都是'learning.net'域名的一部分。为了使它更加真实,我创建了20000个用户和20000个组。
2.查看源代码,并观看演示文稿。
3.为了像在实际工作中那样查看事件,我设置了ArcSight ESM 6.9.1c Patch1并使用ArcSight SmartConnector(Windows Native)来监控域控制器的安全性、应用程序和系统日志。
Bloodhound的安全检测功能由两个部分组成:数据获取(即收集或窃取)部分和数据可视化部分。数据收集可以单独完成,收集完成后,这些数据会以CSV文件格式导出或直接发送到后端Neo4J图形数据库。Neo4j是一款NOSQL图形数据库,它将结构化数据存储在网络上而不是表中,Bloodhound正是利用这种特性加以合理分析,可以更加直观的将数据以节点空间来表达相关数据。
BloodHound的数据收集则完全依赖Powerview7的一个专用版本, Powerview的一个令人兴奋的特性是,在没有其他模块或RSTAT(远程服务器管理工具)时,它只需要Powershell 2.0版本即可工作。这意味着它可以在任何Windows 7或更新的操作系统上默认运行,也可以由网络上的普通用户运行。也就是说,获取信息不需要任何权限。
虽然有八种不同的数据收集方法,但它们都枚举了用户和组。所有这些枚举都是通过ADSI(Active Directory服务接口)使用LDAP(轻量级目录访问协议)完成的。从安全防护的角度来看,这是非常糟糕的,因为BloodHound没有这方面事件的日志记录,正如我们在测试中看到的那样。
为了了解我们何时运行BloodHound,我们将在域控制器上启用Windows事件记录。要为成功检测和失败检测启用所有类别或子类别,就必须运行命令“AUDITPOL /SET /CATEGORY:* /SUCCESS:ENABLE /FAILURE:ENABLE.” 。为了验证这一切都设置无误,我运行了命令“AUDITPOL/GET CATEGORY:*”。
在我运行BloodHound之前,我会对事件进行基线测试(基线就相当于承上启下的意思,软件过程中产出的文档或代码的一个稳定版本,他是进一步开发的基础。)我有两个独立的连续活动通道运行:一个用于所有Windows事件,一个用于“Target UserName = apu”(我用来测试的帐户)。运行BloodHound之前生成的事件数量很少。
在我运行BloodHound之前,我将启动Wireshark而不应用捕获过滤器来查看我们可以了解的有关其流量模式的内容。Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。由于我们的测试环境中没有很多主机,因此我们将重点关注域控制器的流量。
运行BloodHound后,我们可以看到生成的日志数量可以忽略不计,特别是考虑到实验还没有运行。在测试环境中,没有办法看到与BloodHound相关的事件的增加量。
使用Wireshark生成捕获的一些统计信息后,我们可以注意到有一个特定的会话比其余的事件大得多。最大时是70M,它比其余TCP流的总和还要大。
查看流量的协议分解,我们可以看到大部分是LDAP (TCP端口389)。
使用从事件记录和Wireshark获得的信息,我们可以看到常规事件记录不会为我们提供任何有用的事件日志。其原因是所有流量都与LDAP(轻量级目录访问协议)相关,并且在LDAP查询首次进行身份验证时,不会在登录事件之外触发任何Kerberos或NTLM (NT Lan Manager)事件。
网络流量分析
如果你有流量(NetFlow/sflow)日志,就可以查找到DC的大量LDAP流量,或者如果你在DC和你要监控的网络部分之间安装防火墙,则可以启用一条规则来记录该流量并查找大量LDAP流量。另外你还需要查找LDAP会话,这些会话的时间要比其他会话长得多,且每个环境都是不同的。要查看你要查找的内容,请在网络中运行BloodHound,同时使用任何网络捕获程序监控流量,然后查看已发送的数据量(总计)以及Bloodhound执行LDAP查询所需的时间。由于LDAP主要用于搜索信息,因此查询应特定于某些项,且它们应该快速并传输最少量的数据。 BloodHound会枚举所有异常用户帐户的查询,尤其是来自用户段的用户帐户。
HoneyTokens
随着蜜罐技术的不断深入与成熟,蜜罐早已不再局限于传统的仿真操作系统和服务上了。如今蜜罐的形式和种类也越来越多样化和具有针对性,例如 “honeytokens”。 简单来说就是将一个honeytoken存储在文件中,当文件被打开时将自动连接到一个域名并生成一个警报。虽然这是一个相对有效和隐蔽的方法,但是它的缺陷也显而易见,就是对于网络连接的要求。
使用honeytokens来检测恶意活动并不是什么新鲜事,但是,使用honeytokens检测的核心是信息的使用,而不是枚举。用户和组是目录对象,可以像提供有价值的检测信息的文件或文件夹一样进行检测。要启用此功能,请首先确保在“DS Access”下启用“目录服务访问”子类别。
要准确检测AD枚举,需要设置honeytoken,步骤如下:
1.需要创建用户和组帐户;
2.用户和组帐户的命名规则需要按着字母顺序来编排;
3.帐户越多,检测越准确;
4.组帐户应包含普通用户帐户以及honeytoken用户帐户;
要启用检测,需要在“Active Directory用户和计算机”MMC上启用“高级功能”选项,以显示对象的“安全”选项卡。
单击“安全”选项卡后,单击“高级(1)->检测(2) ->添加(3)”,设置以下属性:
权限人群=每个人;
适用于=仅此对象;
权限=阅读所有属性;
启用所有正确的设置后,只要枚举其中一个对象,就会记录事件ID 4662。
在ESM使用日志之前,需要在连接器上进行一些设置。虽然事件查看器中显示的信息很容易消化,但在查看“详细信息”选项卡时,你将看到事件的原始形式。
如你所见,给出了“ObjectType”和“ObjectName”的GUID。虽然SmartConnector可以查找GUID,但在复杂的测试环境中也可能存在一些问题,即未解析的GUID,未找到GUID,GUID查找超时等。由于这些信息对我们至关重要,因此我添加了一个解析器来规范化GUID和两个映射文件:一个用于映射架构GUID(用户和组),另一个用于映射用户或组的特定信息。
检测开启后,我再次运行BloodHound以查看记录的信息,这次生成了37 4662个检测事件。
这为我们提供了枚举对象的所有用户名,而不是这些对象所在的主机、IP或设备上的用户名。我们可以从这些提供的信息中,找到可能受到破坏的主机。首次安全检测时,应观察一周的检测量。在此期间,请调查枚举AD用户或组对象并记录与它们相关的任何帐户。作为其检测功能的一部分,有些服务器货应用程序也需要配合来执行此类活动,但是它们应该在检测结束后停止运行。
总结
由于BloodHound的渗透测试效果非常好,且非常隐蔽,因此攻击者已经在琢磨如何来绕过它。这又是一场攻防对抗大战,为此我们需要了解BloodHound是如何工作的,看看我们可能在哪里发现它。通过把检测过程移动到网络和AD事件日志,防御者可以保持隐藏状态。攻击者无法看到监控,甚至不知道他们受到监控,直到他们触发安全事件。通过剖析BloodHound工具,我们可以更好地理解它的功能,对其进行监视。