目标
· 回顾一下关于魔多(Mordor)的背景知识
· 解释 AWS 对魔多计划的贡献以及它是何等的重要
· 解释如何启动 AWS 环境
· 解释在这个环境是可用的情况下可能做到的事情
背景
魔多(Mordor) 是一个由罗伯特·罗德里格斯和他的兄弟 Jose Rodriguez 创建的项目。
“ 魔多项目提供预先录制的安全事件,这些事件是由模拟对抗技术以 JSON 文件的形式生成的,以便于研究人员使用。”预先记录的数据按照 ATT&CK 框架定义的平台、对手组、策略和技术进行分类。”
魔多项目允许任何人导出模拟对抗技术后生成的数据,并将数据导入任何分析平台。 这可以通过利用 Kafkacat 来实现,并且在这篇文章中的罗伯特·罗德里格斯有详细的解释(Enter Mordor 😈: Pre-recorded Security Events from Simulated Adversarial Techniques 🛡)。 这是社区在数据收集和分析方面的一个巨大飞跃。 魔多项目 使个人和团队能够通过预先记录的数据集以灵活和简单的方式测试他们的检测策略。
众所周知,魔多项目的主要目标是存储和共享预先录制的数据集,你可以立即下载和重放这些数据。 然而,如果你想创建并与社区分享你自己的数据集,目前还没有一个简单的方法来复制 魔多的设置。 所以,本文的一个目标就是创建一个可重复且易于用户使用的环境。 此外,我希望能够使用 魔多 设置来分析我正在收集的数据。
因此,我创建了一个 Terraform 自动化脚本,它利用 AWS 内部预先构建的 AMI 构建了一个环境。 这允许用户在大约10到12分钟内建立和拆除 魔多环境。这个环境是动态构建的,因此将来的任何更新都很容易添加到其中。
什么是 Terraform?
“ Terraform 是一个用于安全和有效地构建、更改和管理基础设施版本的工具。 Terraform 可以管理现有的和流行的服务提供商以及自定义的内部解决方案。”—— Terraform
由于构建环境如此快速,因此用户可以快速测试对抗技术,收集产生或生成的数据,或使用环境也分析预先记录的数据集,因为 魔多 设置已经有一个 HELK 可用作其主要分析平台。 这允许用户创建自己的数据集,而不需要构建和维护测试环境。
是什么使得魔多 AWS 环境与众不同? 又是什么让我选择使用这种环境?
魔多会继续不断进化。 因此,AWS 中的 魔多项目 的目标是为防御者们提供一个不仅可以创建或重放数据集,而且还可以帮助他们分析数据和建立检测策略的环境。 数据是发现威胁过程的基本关键。 这种先数据后工具的策略将魔多 AWS 项目与其他项目区分开来。
工具驱动的威胁狩猎 Vs 数据驱动的威胁狩猎
工具有很大的价值,可以在威胁狩猎过程中提供非常大的帮助,但我们总是过于依赖工具。 一个好的防御不应该基于我们在环境中拥有的工具的数量,因为从数据的角度来看,十有八九我们不知道这个工具能提供给我们什么。 工具应该只是一种帮助,但它们不应该为我们做工作。 依靠它们来检测恶意行为为我们制造了一个巨大的盲点。 如果我们依赖于一个工具,我们就会忘记潜在的攻击面。 我们应该能够根据攻击提供的数据,而不是依赖于签名,寻找对抗性攻击行为。 我们应该远离工具驱动的威胁狩猎,转向更多的数据驱动的威胁 狩猎方法。
魔多和其他项目一样,把焦点转移到了数据驱动威胁狩猎这个更大的图景上:
· 通过OSSEM了解我们的数据传感器和数据来源。
· 在我们的数据源和已知的攻击技术之间建立关系。
· 使用威胁狩猎剧本创建一个威胁狩猎剧本,提供狩猎上下文,以及记录攻击背景和创建威胁狩猎笔记。
· 魔多 AWS 环境允许用户记录对抗性攻击技术,以便创建一个数据集来共享给社区,这样其他人就可以理解在某次攻击中涉及到的数据
基础设施:
AWS 内部的魔多基础设施
在上图中,你可以看到 AWS 里面的魔多基础设施。 图中的线表示数据和日志在环境中的流动方式。 每台机器(除了 WECServer 之外)都有一个 Windows 事件转发器策略,其中的机器被告知将日志转发到 WECServer。 WECServer 使用 Windows Event Collector (WEC)服务,该服务通过订阅接收来自其他机器的日志。 之后,在 WEC 服务器里的日志,将被通过 winlogbeat 转发到 HELK。
关于 AWS 环境的详细概述,我建议你阅读 AWS 文件夹下的 GitHub 项目的自述文件。 内容比较多,简要的概述如下:
这个环境包括:
AD 环境:
· 1个 AD/DC (活动目录或域控制器)
· 1 个WEC (Windows Event Collector)
· 3 个 Windows 10工作站
每个 Windows 工作站都有一个叫做VulnerableService(脆弱服务)的服务,可以用于权限提升。 检查目录和服务权限。
3 台 Ubuntu 机器 (非域内机器) :
· 1 台 HELK (Ubuntu 18.04)
· 1 台 Apache Guacamole (为了适用于这个项目,我对 user-mapping.xml 进行了修改)
· 1 台红队操作员机器(用于创建 C2)。 目前在这个实验室里有两种 C2,一种是 Empire (帝国) 作者是 威尔 ,另一种是 Covenant (盟约) 作者是 瑞安 · 科布)
正如你所看到的,所有的机器都加入到了 shire.com 域中。 特定的审计和组策略是通过一个名为 import_gpo.ps1 的 powershell 脚本通过域控制器服务器(HFDC1.shire.com)推送出去的。 如果你希望看到应用于环境的审计策略列表(我在下面引用了这些策略) ,可以在这个 GitHub 代码仓库中找到这个列表,以及本文中提到的任何脚本。
WEC 服务器是通过名为 configure-wec.ps1 的 powershell 脚本进行配置的。WECServer 将所有记录的事件(Windows Security、 Sysmon、 PowerShell 等)从 HFDC1、 ACCT001、 IT001和 HR001发送到 HELK,在 HELK 中你可以查询特定事件的数据。
需要注意的是,在 魔多 环境中,工作站WECShire.shire.com 不会将自己的日志发送给 HELK,只有其他所有的工作站会发送给 HELK。 它只充当事件收集器和事件转发器。 在真实的环境中,你会希望启用这个功能。 我们决定不这样做,目的是使数据集的大小更小一些。
需要注意的另一个事情是,审计策略和 sysmon 配置没有过滤掉 a-lot。 这意味着,他们过滤掉了不必要的噪音,例如 winlogbeat 流量,但这是设计特性的一部分,以确保收集到充足的数据。 当涉及到数据收集时,考虑到这一点是非常重要的。 这使得我们不会错过与我们正在收集的攻击行为相关的细节。 当基于 魔多 数据集构建检测时,请了解清楚你的环境中启用了哪些数据源。
HELK 内部的 Sysmon 控制面板
Windows 工作站是非常标准的。 它们被重新命名并添加到 shire.com 域。
启动 AWS 环境:
罗伯特·罗德里格斯和我希望这个环境的设置过程尽可能的简单化。 为了实现这一点,我们尽可能地做到自动化。 要启动环境,请按照项目文档中的步骤或按照下面的视频操作:
故障排除技巧可以在这里的自述文件中找到。
如何才能易于使用:
这个环境的目标之一是让最终用户能够快速访问任何机器,而不必手动向他们发送 SSH 或 RDP (当然,这个选项仍然可用)。 为了实现这一点,terraform 将调用一个预先构建的社区 Linux 机器,从头开始构建 Apache Guacamole。
什么是 Apache Guacamole?
它是一个允许你通过 RDP、 SSH 和 VNC 在 web 浏览器上与客户机和工作站交互的服务。 如果你从来没有使用过 Apache Guacamole,那么你只需要在 魔多 AWS 环境中通过你选择的浏览器进打开 https://apache_guacamole:8443/guacamole。 你可以使用以下凭证登录此页面:
guacadmin:guacadmin
然后你就可以连接到你选择的 Apache Guacamole 界面,并与之进行交互!
在这个可用的环境中,用户可以做些什么?
这个环境有一个功能齐全的 AD 环境,可以在几分钟内构建完成。 这可以为你提供几个选项,但最重要的是创建和记录数据集的完全可用性。 完成此操作后,你可以查询数据,或者将其发送给其他人,以便他们可以查询数据。 但,这是怎么做到的?
创建数据集:
1. 让你的攻击准备在 Empire(帝国)框架或Covenant(盟约)框架内。 关于如何启动这两个框架的步骤可以在 创建–框架 中找到。
2. 在你选择的机器上建立访问权限
· 创建一个监听器,然后将代理放在要攻击的机器上。 这样做的原因,是因为我们正在针对某一种特定的攻击技术收集数据,而不是能够登入某个机器的初始立足点。 如果你不知道如何做到这一点,请查看帝国框架的文档:https://www.powershellempire.com/ 或者是盟约框架的文档:https://github.com/cobbr/Covenant/wiki。
3. 为你选择执行的攻击准备好模块。 先别着急按执行键。
4. 切换到 HELK 机器并准备 kafkacat 用于开始收集数据。要做到这一点,请执行以下示例命令:
kafkacat -b HELK-IP:9092 -t winlogbeat -C -o end > name_technique_$(date +%F%H%M%S).json
注意: 执行此操作需要 root 权限。
对于本文中的这个例子,我们将使用以下命令:
kafkacat -b HELK-IP:9092 -t winlogbeat -C -o end > kerberoast_(date +%F%H%M%S).json
5. 切换到帝国服务器并执行攻击技术。
6. 攻击成功后,切回 HELK 机器。
7. 等待30-45秒,以便 kafkacat 有时间从这次攻击中提取所有数据,然后按 Control-C。 这将停止提取数据的过程。 所有数据现在都以 json 格式存储,可以下载到本地机器上,也可以下载到你选择的 SIEM,然后开始分析数据并构建一个鲁棒的检测模型。
快速进行数据探索:
接下来,我们将对新记录的数据集运行 uruk_hai_stats.py,以显示与此次攻击相关的日志统计数据。 此脚本将根据日志名称、源名称、任务和记录编号对数据进行排序。 这有助于我们理解在攻击期间可以产生多少数据。 记住,并不是所有这些数据在检测工作中都是有用的。
如果你想了解日志提供程序和收集到的特定审计任务,可以使用项目中提供的脚本:
python3 uruk_hai_stats.py -f name_technique_$(date +%F%H%M%S).json
对于这个练习,可以执行如下命令:
python3 uruk_hai_stats.py -f /home/aragon/kerberoast_2019–07–14005430.json
Uruk-Hai 统计结果显示的是刚刚创建的 Kerberoast 攻击的数据集
如果你想在你自己的实验室里运行这个系统,一定要安装 pandas 和 python3。 在配置过程中,这些库已经安装在了魔多 AWS 中。
将数据集下载到本地机器:
最后,你可以将数据集保存在环境中并在 HELK 进行分析,但也可以使用 SCP 将其下载到本地机器上。 这可以让你在你所选择的任何 SIEM 中使用数据集,因此你可以开始构建你的检测工作。
要做到这一点,请执行以下命令:
sudo scp [email protected]:path/to/dataset/ /path/to/destination
使用 kafkacat 将数据集推送到 SIEM:
在这个例子中,我们将使用 魔多 环境中的 HELK 实例。 只要你有一个Kafka broker,你就可以在 SIEM 上运行这个程序。
1. 解压缩选择的数据集:
tar -xzvf empire_kerberoast.tar.gz
2. 使用 kafkacat 将数据集发送给 Kafka broker:
kafkacat -b <HELK IP>:9092 -t winlogbeat -P -l kerberoast_2019–07–25200422.json
Kafka broker 提取数据大约需要 30 秒的时间。 完成这些之后,你就可以开始查询数据了!
注意: 见下面的 kafkacat 视频,在演示中看到具体的操作。
分析数据
威胁狩猎前的活动:
在一个良好的威胁狩猎或检测创建之前,有一些初始的行动会发生。 这就是了解你的数据传感器和它们使用的数据源——进程监控、文件监控等。 这是威胁狩猎前的活动中被跳过的次数最多的一个非常关键的部分。 在开始查询数据之前,我们必须了解这种攻击技术以及基于我们对数据的理解而可能触发的事件。 我们该如何做到呢?
1. 理解你正在检测的攻击技术。 它的攻击面是什么? 是针对用户、机器还是 AD 的攻击? 它是否滥用认证协议? 这个攻击是基于网络还是基于主机? 可以通过阅读当前公开的关于攻击技术的文档和博客做到这一点。 例如, MITRE ATT&CK 是研究攻击技术的一个很好的资源。
2. 理解我们的数据源。 这可以通过 OSSEM 来完成。 创建这个项目是为了向社区提供数据字典,并提供关于我们的数据传感器和数据源的上下文。 它帮助我们将事件映射到特定的数据源,这在我们的检测方法中是一个关键因素。
例如,在理解了某种攻击技术的工作原理,并将这种知识与 OSSEM 内部的信息结合起来之后:
· 我可以提出一个高级的假设,即 kerberoasting攻击技术将产生 Windows 安全事件,特别是 4769 事件: 请求服务票证。 我们希望查找具有0x0状态的事件,这意味着已经授予了服务票证
· 我还知道这种攻击正在滥用 Kerberos 身份验证协议,我还可以假设,由于这种攻击要触发的事件会记录在 DC 机器上,因为密钥分发中心(KDC)就托管在 DC 机器上。
· 经过更多的研究之后,我发现请求服务票证的帐户不是机器($)帐户,他们试图访问的服务票证名称通常不会是 krbtgt 帐户或机器($)帐户,故障代码是0x0,票证加密通常以 RC4格式请求——这要么让我们找到对手正在使用的帐户,要么限制搜索结果,让你能够找出误报信息,从而更容易找到对手。 在真实的环境中,这必须根据环境参数进行调整,并且需要更好地指定查询条件,但是这样做可以设置一个良好的基线。
在 魔多 环境中执行查询又是什么样的?
event_id:4769 AND ticket_encryption_type_value: “RC4-HMAC” AND NOT (user_name.keyword:*$ AND service_ticket_name:krbtgt AND service_ticket_name:*$)
在 Kibana 中对 Kerberoast 攻击事件的查询
Kibana 中的 Windows 4769 安全事件
下面这个简短的视频演示了 kafkacat 向 Kafka broker 提供日志以及对 kerberos 攻击的查询:
总结和目标:
随着 AWS 中 魔多环境的发展,AWS中魔多的目标是为防御者提供一个环境,使他们不仅能够开发出可靠的检测策略,而且能够更好地学习和理解数据集。 数据是威胁狩猎过程的基本关键。 熟悉OSSEM内部的数据字典,理解与攻击技术相关的数据关系,创建一个与你选择的攻击技术相关的数据集,并快速分析这个环境中的数据。 在你熟悉了数据、数据传播的原因以及数据关系之后,防御者就可以开始设置理解攻击技术和对应行为的基线。 这就是魔多计划脱颖而出的原因,也是对社区的帮助。 它能够让你习惯并熟悉数据攻击技术的传播。 这样,在未来发现攻击技术行为将开始变得更加容易。
魔多 最初的想法是分享数据集。 因此,需要对用于创建 / 记录 / 导出数据集的初始环境进行很好的文档化,以确保我们理解了数据。 这个概念使得在 AWS 中复制环境变得非常容易,并且使用相同的记录完整的标准配置供任何人使用,并且希望能够共享他们自己的数据集。 此外,魔多 AWS 环境已经有了一个像 HELK 这样的分析平台。 为什么不用它来分析我们正在记录的数据呢?
我希望你喜欢这个环境。 如果遇到任何问题,不要犹豫,创建一个 issue 给我们。 我们中的某个人会尽快处理它的。
祝各位威胁狩猎愉快!
参考文献:
· https://www.harmj0y.net/blog/redteaming/kerberoasting-revisited/
· https://jsecurity101.com/2019/IOC-differences-between-Kerberoasting-and-AsRep-Roasting/
· https://www.harmj0y.net/blog/powershell/kerberoasting-without-mimikatz/
· https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4769