ANGRYPUPPY简介

我的博客已移动:https://vincentyiu.co.uk

ANGRYPUPPY是用于Cobalt Strike框架的工具,旨在自动解析和执行BloodHound攻击路径。 ANGRYPUPPY的部分灵感来自GoFetch和DeathStar项目,这些项目还使BloodHound攻击路径执行自动化。 ANGRYPUPPY使用Cobalt Strike的内置信标Beacon的横向移动和凭据窃取功能。

这允许自动检索会话以进行Cobalt Strike内的管理,并允许使用其SMB C2通信通道进行内部数据透视。 此外,ANGRYPUPPY允许操作员选择他们希望用来执行横向移动动作的技术。 当前,操作员可以选择psexec_psh,WMI,WinRM或psexec技术。

以下显示了由@_rastamouse创建的RASTALABS环境中正在使用的工具的视频。

BloodHound是由Andy Robbins,Rohan Vazarkar和Will Schroeder开发的AD关系映射和可视化工具。 BloodHound最终分析Windows Active Directory域中的信任关系,以支持操作员并提供分析针对特定系统/用户/组的最有效方法的能力。

BloodHound有一些缺点,需要对环境进行全面了解,因此需要大量的AD数据收集才能进行操作。

BloodHound及其所有信息可以在https://github.com/BloodHoundAD/BloodHound找到

首次发行时,BloodHound可能需要很长时间才能在大型环境中收集其数据。 在某些情况下,超过24小时。 但是,通过最近的升级,BloodHound现在可以在短时间内完成收集。 主要由于BloodHound的结果,AD数据收集现在已成为防御者的关注点,大量AD流量可以作为防御者的检测标准。 因此,在进攻行动中使用BloodHound时,至关重要的是尽快且准确地执行攻击。

ANGRYPUPPY可以提高执行BloodHound生成的攻击路径的速度和准确性。 在我们的测试试验中,有可能在3分钟内执行5跳攻击-这可能会使操作员花费更长的时间进行手动操作,并减少了操作员错误的可能性(这可能会警告防御者)。

如前所述,AD数据收集正成为防御者领域的关注焦点。 传统的横向运动技术也得到了广泛的检测和分析。 因此,这样的技术最有可能仅对缺乏防御能力或没有受过良好教育的SOC的较不成熟的组织可行。 当ANGRYPUPPY自动执行攻击时,这将为项目管理,战术规划留出更多时间,并专注于实现目标,而减少了执行时间。 可替代地,在成熟的环境中,这可以用作模拟具有财务收益议程并且更可能遵循“粉碎和抢夺”方法的演员的手段。

ANGRYPUPPY提取JSON格式的BloodHound攻击路径,然后能够确定执行攻击路径所需的操作,窃取凭据或根据需要横向移动。

操作员只需在任何Cobalt Strike信标控制台中键入“ angrypuppy”,然后就可以导入攻击路径,选择横向移动技术并执行攻击。 此操作以及操作员名称和ANGRYPUPPY标识符都记录在Cobalt Strike事件日志中。 我们不建议在ANGRYPUPPY运行时执行其他横向运动活动。

使用psexec_psh作为横向移动方法运行的ANGRYPUPPY。

ANGRYPUPPY每次运行时都会分配一个随机标识符,以区分执行的攻击路径。 在攻击开始和完成时使用该标识符,并且在每个新信标签入时也将其设置为信标注释。

为了帮助从当前可访问的会话中确定有效的攻击路径,还实施了“密码”命令,以使操作员能够基于当前在钴击中的信标生成多个查询。 然后,操作员可以将这些查询从事件日志复制并粘贴到BloodHound的“原始查询”部分,以便确定到域管理员的路径,而不必手动检查每个用户或计算机。 找到有效的单个路径后,可以将该攻击路径导出为JSON,然后可以由ANGRYPUPPY自动执行。

“ cypher”命令的输出,显示从当前信标生成的Cypher查询。

Cobalt Strike的攻击者脚本具有“ binfo”功能,可获取有关特定信标的信息。 使用此信息,我们可以获得所有当前用户会话以及计算机的列表。 如果设备上有管理员级别的信标,则仅将计算机用作BloodHound查询的有效项。 由于BloodHound不了解当前上下文,因此必须执行此操作,并且当仅存在特权较低的信标时,通常会假设整个机器受到损害。

在Andy Robbins的协助下,开发了许多基本查询。 当前,有两种类型的查询:

  • 通过组成员资格从所有当前信标上下文查询到Domain Admin,并从Admin查询到目标计算机。
  • 使用所有可能的关系(包括ACL向量)从所有当前信标上下文查询到Domain Admin。 (尚未在ANGRYPUPPY中实现)

对于每个查询,还包括一条仅选择一条唯一攻击路径的附加语句,该语句基本上只在查询末尾附加“ LIMIT 1”,以便轻松导出为JSON,然后可以将其与ANGRYPUPPY一起使用。 这是为了消除攻击路径可能分叉的情况,这些情况会在对节点进行排序时造成问题。

要实现ANGRYPUPPY,我们需要从BloodHound中提取两种类型的数据: nodeedge节点是诸如用户,计算机或组之类的项目; 是两个节点之间的关系。 节点之间可能存在几种关系,具体取决于节点类型。

在开始为ANGRYPUPPY编写JSON解析逻辑时,我们很快意识到了一个问题。 BloodHound的图形导出功能在为我们提供可以快速摄取的JSON的同时,返回无序数组中的节点和边。 这意味着我们不仅必须解析数据,而且还必须找到一种对节点进行排序的方法。 幸运的是,图形以边的形式包含了所需的信息。

解析逻辑计算出可能的节点,并通过查找不是任何边沿“目标”的节点来确定起始节点。 在第一个节点的情况下,我们可以使用每个边缘的“源”和“目标”字段对节点进行逐步排序并对其进行排序。

我们在制作ANGRYPUPPY时意识到的是,边缘的类型对于我们的目的并不重要,因为我们对每个节点采取的操作仅由节点类型决定,而不是由边缘类型决定。 此外,我们确定了将攻击路径按正确顺序进行排序所必需的组节点,但在对攻击路径进行排序后,我们可以有效地忽略组节点,如下所示:

User1 –成员成员→Group1 –AdminTo→Computer1

在这种情况下,组节点实际上仅存在以表明User1具有对Computer1的管理权限,并且我们无法对Group1节点执行任何操作。 因此,我们的解析逻辑将在生成最终攻击路径之前删除所有组节点。

以下流程图大致描述了攻击执行:

由于信标通信的异步特性,“钴击”提出了某些问题。 可用的回调数量有限,因此许多回调必须在1秒钟的定期轮询基础上手动实现,从而将设置标志并触发另一部分代码执行。

在开发ANGRYPUPPY时,我们发现处理检测和回调的最佳方法是创建一个每秒执行一次的循环。 这个循环寻找状态和翻转开关的变化,我们将它们写为全局变量。 然后,其他代码部分将检测这些状态并采取相应的措施。

让我们以横向运动为例。 如果已经尝试移动到下一个目标,则必须实现一个变量以防止再次尝试移动到目标计算机。 会话恢复后,此标志将重置,然后才尝试在攻击路径中执行下一个操作。

  1. Git克隆https://github.com/mdsecactivebreach/ANGRYPUPPY
  2. 运行install.ps1或install.sh(取决于您的操作系统)。 这将重写CNA脚本,以包含指向我们用于JSON解析的必要Java库的正确路径。
  3. 在Cobalt Strike中,加载CNA脚本。
  1. 遵循https://github.com/BloodHoundAD/BloodHound上的BloodHound指南
  • 这里提供了如何在Aggressor脚本中执行此操作的示例
  1. 数据加载到BloodHound中并可以查询后,在任何当前信标会话中键入“ cypher”。 确保仅活动会话留在屏幕上。
  2. 转到事件日志,然后将“ non-ACL”路径复制到准备好进行ANGRYPUPPY(带有LIMIT 1)的域管理员。
  3. 将此查询粘贴到BloodHound的原始查询部分。
  4. 如果路径可用,请将路径导出为JSON文件。 如果不是,请继续操作并将目标组操作为可访问但不能是“域管理员”的目标组。
  5. 在任何信标会话中的“钴击”中,键入“ angrypuppy”。 这将启动提示。
  6. 选择导出的JSON攻击路径。 选择首选的横向移动技术和侦听器回调(例如,SMB绑定管道)。 按运行。
  7. 这将开始执行攻击路径。

注意:如果发生任何错误或代码挂起,则可以通过键入“ angrypuppykill”来终止。

有关用法的更多信息,请参阅前面突出显示的视频。

  • 利用BloodHound REST API自动化端到端,不再需要复制/粘贴Cypher查询
  • 输入“猎犬”
  • 脚本执行
  • 下载可提取文件
  • 使用REST API将文件上传到Neo4j DB
  • 从查询中检索路径(如果找到)
  • 执行路径
  • 支持访问控制列表。 当前的限制是内置的Mimikatz不允许NTLM哈希注入。 一旦在下一个版本中更新了Mimikatz,就有可能自动执行ACL攻击路径,并在几分钟之内完全恢复状态,以最大程度地减少中断时间。

该博客文章由以下作者共同撰写:

Vincent Yiu — MDSec ActiveBreach运营

Calvin Hedler — NetWorks集团