来自 资讯 2021-06-10 15:14 的文章

防cc攻击_云服务防ddos_秒解封

防cc攻击_云服务防ddos_秒解封

介绍不久前在一个内部网络的渗透测试中,美国防御CCvps,我们遇到了物理分段的网络。这些网络包含加入同一个Active Directory域的工作站,但是只有一个网段可以连接到internet。为了使用Cobalt Strike远程控制两个区段中的工作站,我们构建了一个工具,该工具使用共享Active Directory组件来构建通信通道。为此,它使用LDAP协议(通常用于管理activedirectory)在LDAP上有效地路由信标数据。这篇博客文章将详细介绍开发过程、工具如何工作并提供缓解建议。脚本几个月前,我们在我们的一个客户机上做了一个网络渗透测试。这个客户机有多个完全防火墙的网络,所以这些网段之间不可能有直接连接。由于成本/工作负载效率的原因,客户端选择在这些网段之间使用相同的Active Directory域。这是一个高层次的概述。

1

我们在A段和B段的工作站上都有物理访问权。在这个例子中,A段的工作站可以访问internet,而B段的工作站不能。虽然我们在两个网段的工作站上都有物理访问,但我们想从因特网上控制网段B中的工作站。作为共享组件的Active Directory两个网段都能够连接到同一个域中的域控制器,并且可以与对象交互、验证用户身份、查询信息等等。在Active Directory中,用户帐户是可以添加额外信息的对象。这些信息存储在属性中。默认情况下,这些用户帐户的某些属性具有写入权限。例如,用户可以为自己的帐户更新电话号码或办公地点等个人信息。这不需要特殊特权,因为身份本身(即帐户本身)可以写入此信息。这是在ActiveDirectory架构中配置的,如下面的屏幕截图所示。

2

默认情况下,林中每个经过身份验证的用户都可以读取个人信息,如电话号码或街道地址。下面是一个屏幕截图,显示了已验证用户身份的公共信息权限。

3

上面屏幕截图中设置的权限提供对个人信息属性集中定义的属性的访问。此属性集包含40多个用户可以读写的属性。属性的完整列表可在以下文章中找到:https://docs.microsoft.com/en-us/windows/win32/adschema/r-personal-information默认情况下,在同一林中成功通过身份验证的每个用户都是"经过身份验证的用户"。这意味着我们可以使用activedirectory作为临时数据存储,并通过将数据写入这些属性,然后从另一个网段读取数据,在两个隔离的网络之间交换数据。如果我们可以访问某个用户帐户,则可以同时在两个网段中使用该用户帐户通过Active Directory交换数据。不管工作站的安全设置如何,这都是有效的,因为帐户将直接与域控制器通信,而不是与工作站通信。要通过LDAP路由数据,我们需要首先在两个区段的工作站上获得代码执行特权。然而,要做到这一点,取决于读者,超出了本文的范围。要通过LDAP路由数据,我们将数据写入其中一个属性,然后从另一个网段读取数据。在一个典型的场景中,我们希望从a网段的工作站执行ipconfig命令,我们将ipconfig命令写入属性,从网段B读取ipconfig命令,cdn高防哪家好,执行命令并将结果写入属性。此过程在以下概述中可视化:

4

在我们的GitHub页面上可以找到一个利用此功能的示例脚本:https://github.com/fox-it/LDAPFragger虽然这在实践中可以通过活动目录在分段网络之间进行通信,防御ddos的服务器,但此解决方案并不理想。例如,此通道依赖于域控制器之间的数据复制。如果向域控制器a写入消息,但从域控制器B读取消息,则可能需要等待域控制器进行复制才能获取数据。另外,在上面的例子中,我们使用了info属性在activedirectory上交换数据。此属性最多可保存1024字节的信息。但是如果有效载荷超过这个尺寸呢?更多类似的问题使得这个解决方案不是一个理想的解决方案。最后,人们已经建立了一些概念的证明来做同样的事情。Harmj0y写了一篇关于这项技术的优秀博客:https://www.harmj0y.net/blog/powershell/command-and-control-using-active-directory/这就是为什么我们决定构建一个高级LDAP通信通道来解决这些问题。构建高级LDAP通道在上面的示例中,使用了info属性。这不是一个理想的解决方案,因为如果属性已经包含数据,或者如果数据最终出现在某个GUI中,该怎么办?要查找其他属性,将查询Active Directory架构中的所有属性,并:检查属性是否包含数据;用户是否对其具有写入权限;是否可以清除内容。如果所有这些都签出,则属性的名称和最大长度将存储在数组中以供以后使用。从视觉上看,流程如下所示:

5

至于(有效负载)数据没有出现在GUI中,比如地址簿,我们没有找到一种可靠的方法来检测某个属性是否出现在GUI中,因此电话号码等属性被添加到代码内的黑名单中。目前,出于速度和效率的目的,从具有适当属性的数组中选择具有最大长度的属性。在本博客文章的其余部分中,我们将此属性称为"data属性"。共享属性名称既然我们已经选择了data属性,我们需要找到一种方法来将这个属性的名称从发送网段共享到接收端。由于我们希望LDAP通道尽可能隐蔽,所以我们不想直接共享所选属性的名称。为了克服这个障碍,我们决定使用散列。如前所述,查询所有属性是为了选择合适的属性来通过LDAP交换数据。这些属性与属性名的CRC表示一起存储在哈希表中。如果在两个网段中都这样做,我们可以共享哈希而不是属性名,因为哈希将解析为属性的实际名称,防御cc是需要硬件防火墙吗,而不管工具在域中的何处使用。避免复制问题LDAP通道的传输速率可能高于域控制器之间的复制发生率。解决这个问题的简单方法是与同一个域控制器通信。这意味着其中一个客户端必须选择一个域控制器,并通过LDAP将域控制器的名称与另一个客户端通信。这样做的方式与共享数据属性的名称相同。当该工具启动时,所有域控制器将被查询并存储在哈希表中,同时包含域控制器的完全限定域名(FQDN)的CRC表示。所选域控制器的哈希与其他客户端共享,并解析为域控制器的实际FQDN。最初共享数据我们现在可以用同一个属性来共享域控制器的属性,以避免在数据交换时出现混淆的问题。在进行沟通之前,所有这些信息都需要共享。显然,如果要与之交换数据的属性尚未通信(有点像鸡蛋问题),我们就不能共享这些信息。解决这个问题的方法是使用一些可以充当占位符的旧属性。对于该工具,我们选择使用以下属性之一:主要国际号码;其他传真电话号码;主要电传号码。这些属性是"个人信息"属性集的一部分,自Windows 2000 Server以来一直是该属性集的一部分。随机选择其中一个属性来存储初始数据。我们认为人们实际使用这些属性的几率很低,但时间会证明这是真的信息反馈如果我们通过LDAP发送消息,cdn高防应急中心,我们不知道消息是否被正确接收,以及在传输过程中是否保持了完整性。要知道消息是否已正确接收,将选择另一个属性(与数据属性完全相同),该属性用于交换有关该消息的信息。在该属性中,存储CRC校验和,用于验证是否接收到正确的消息。为了在两个客户机(Alice和Bob)之间发送消息,Alice将首先计算她自己将要发送的消息的CRC值,然后通过LDAP将消息发送给Bob。在她寄来之后