CALDERA是一个由python语言编写的红蓝对抗工具(攻击模拟工具)。它是MITRE公司发起的一个研究项目,该工具的攻击流程是建立在ATT&CK攻击行为模型和知识库之上的,能够较真实地APT攻击行为模式。
通过CALDERA工具,安全红队可以提前手动模拟并设定好攻击流程,并以此进行自动化攻击和事件响应演练。同样,安全蓝队也可以利用该工具,根据相应的威胁开展模拟应对。
github地址: mitre/caldera: Automated Adversary Emulation Platform (github.com)
一、介绍
有数据吗?
答案可能是响亮的“是”,而且这些数据也应该受到保护。数据泄露更多时候只是时间问题,而不是是否发生的问题。无论是为了竞争利益、快速勒索赎金,还是勒索等更险恶的行为,数据盗窃已经并将继续成为各种规模和公众地位的组织面临的问题。
Caldera 多年来一直免费帮助组织测试其防御能力。但好事变得更好:该平台现在提供了使用多种技术和从威胁情报中提取的数据目的地来测试渗透的能力。事实上,Caldera 现在有能力解决 MITRE ATT&CK 渗透策略中的(几乎)所有技术!防御者可以利用这些新功能,通过对手可能用来对付他们的各种渗透途径来对他们的防御进行压力测试。
二、搭建舞台
Caldera 团队利用威胁情报来识别对手采用的各种渗透路径。虽然许多攻击者诉诸已经建立的命令和控制 (C2) 通道,但其他攻击者也扩展到带外渗透路径。根据我们的研究,团队选择将文件传输协议 (FTP)、GitHub、Dropbox 和 Amazon Web Services (AWS) 作为主要途径。
此外,该团队还扩大了围绕渗透行动的支持能力。具体来说,我们使用其中一些新功能来创建四个对手配置文件。除了集成了旧配置文件的功能并引入新的收集功能的高级小偷配置文件之外,还创建了以下对手配置文件:
通过 FTP 的高级窃贼
通过 Dropbox 的高级窃贼
通过 GitHub 存储库的高级窃贼
高级窃贼(来自 GitHub Gist)
这些配置文件中的每一个都利用基本文件搜索和暂存功能,通过实用程序进行压缩,并最终渗透到预期目标。当然,这些能力可以根据需要添加到其他操作中。
支持渗透的能力和对手配置文件已添加到现有的 Stockpile 插件中,添加了以下能力:
高级文件搜索和暂存器
查找 Git 存储库并压缩 Git 存储库(本地主机)
压缩暂存目录(受密码保护)- 7z 和 tar+gpg
压缩暂存目录(受密码保护)并分解为更小的文件
Exfil 压缩存档到 FTP(注:这可以在不需要 V4 中引入的新 FTP C2 通道的情况下使用)
将压缩存档导出到 Dropbox
Exfil 压缩存档到 GitHub 存储库 | 要点
另外:Exfil 目录文件到 GitHub
通过 AWS CLI 将压缩存档导出到 S3
通过 AWS CLI 将压缩存档传输到单独的 S3 存储桶
计划渗漏(使用标准 HTTP C2 通道)
为了进一步增强这些新功能, GitHub上提供了新的事实源。该事实来源包含这些能力所利用的所有事实。它也可以在 Stockpile 中使用 - 只需取消 YAML 文件中与您要使用的功能相关的行的注释,并根据需要填写详细信息即可。
图1:一站式来源
渗透能力将以这种格式将文件传送到最终目的地:YYYYMMDDHHmmss-exfil-agentpaw-filename。这有助于确保跨代理或同一代理的多个 exfil 消除文件冲突。
三、一些技巧
技能名称:高级文件搜索和暂存器
Windows 有效负载 Windows 有效负载| Linux有效负载
Stockpile 的收集能力现在是全新且改进的。利用单个源文件,用户可以执行文件搜索和暂存(T1119:自动收集;T1074:数据暂存)。此外,用户还可以对各种文件属性进行过滤。
作为一个新选项,此功能还支持安全模式,用户可以在操作的事实源中指定特定的文件后缀。如果启用,该功能将仅暂存文件名末尾包含此标识符的文件,以避免渗透测试期间潜在的泄漏。举个例子,我们可以为事实pseudo.data.identifier指定值“_pseudo”,并将safe.mode.enabled 设置为“true”,以告诉Caldera忽略文件“interesting_file.docx”,但提取文件“other_file_pseudo” .docx。”
此功能还包括一些性能优势、扩展搜索参数以及在 Caldera 中作为单个操作运行而不是作为多个链接运行。使用所提供的源文件中的事实,用户可以控制以下选项作为该功能的参数:
能力名称:压缩暂存目录(受密码保护)
APT29、BRONZE BUTLER 和 Mustang Panda 等 APT 组织在泄露之前使用密码对档案进行加密。为了增强现有的存档能力,Caldera 现在提供加密选项(T1560.001:通过实用程序存档)。Linux 命令使用 tar 和 gpg 来创建和加密存档。Windows 命令利用 7-Zip 文件存档器来创建存档,该存档也被 Fox Kitten、HAFNIUM 和 PowerShower 等 APT 组织使用。
由于普遍存在的压缩工具的限制,此功能有一些注意事项:Linux 需要 gpg 版本 2.1 或更高版本,Windows 需要 7-Zip。如果不满足这些要求,这个能力就会失败。
能力名称:预定渗透
攻击者已安排了可能逃避注意的时间进行渗漏,或定期更新他们之前更新的数据。为此,Caldera 现在支持通过现有 HTTP C2 通道进行计划渗漏功能( T1029 :计划传输)。此功能增强了 Stockpile 中现有的 Exfil Staged Directory 功能,通过 Linux 的 cron 和 Windows 的 cmdlet 添加计划任务。
能力名称:压缩暂存目录(受密码保护)并分割成更小的块
当被盗数据达到令人印象深刻的大小时,即使是在压缩状态下,Carbanak 等攻击者也会利用某种形式的文件分块或分割来促进从受害者中窃取大文件。这种速率限制可以帮助更好地隐藏流量或满足所选协议或介质的限制。因此,Caldera 使用户能够将存档文件分解为更小的、用户定义的块(T1030:数据传输大小限制)。
注意:由于操作过程中所需事实的冲突消除,此功能首先在创建块之前归档暂存目录,并在完成后删除较大的归档。因此,它应该用来代替任何其他归档功能。
能力名称:将临时存档导出至 FTP 服务器
对手名称:Advanced Thief via FTP
Caldera 现在包含通过 FTP 泄露数据的功能(T1048.003:通过未加密/模糊的非 C2 协议泄露)。此功能独立于 Caldera 新的 FTP C2 选项。一旦提供了 FTP 服务器地址、用户名和密码,此功能即可将压缩存档泄露到指定的 FTP 服务器。这种渗漏方法已被各种 APT 组织使用,包括 APT33、Cherry Picker、FIN8 和 PoetRAT。
预测:云可能会丢失数据
随着当今组织中云存储的普遍合法使用,攻击者有充分的机会利用这些数据存储为自己谋取利益。例如,APT31 利用自定义远程访问木马 DropboxAES,在清除任何泄露证据之前将暂存文件传送到其实例。
技能名称:将临时存档导出至 Dropbox
对手名称:Advanced Thief via Dropbox
您的组织允许使用 Dropbox 吗?好吧,那么对手也是允许的。为了解决越来越多地使用云存储作为渗漏目的地的问题,Caldera 添加了一项将压缩存档渗漏到 Dropbox 的新功能(T1567.002:通过云存储渗漏)。此功能需要一些用户设置,包括具有连接的 API 密钥的 Dropbox 帐户和 Dropbox 内具有适当访问控制的目标文件夹,以允许通过 API 写入。
能力名称:通过 AWS CLI 将压缩存档导出到 S3以及通过 AWS CLI 将压缩存档传输到单独的 S3 存储桶
作为另一个流行的云服务提供商,亚马逊网络服务 (AWS) 也成为了泄露信息的目的地。Caldera 中的两项新功能解决了这种泄露路径,一种是利用受害者计算机上的 AWS 命令行界面 (CLI) 传输到对手拥有的存储桶,另一种是使用受害者作为经过身份验证的存储桶进行存储桶到存储桶的传输用户。与此更新中添加的其他渗透功能一样,需要进行一些组装才能确保适当的软件 (CLI) 或身份和访问管理 (IAM) 权限可用。
能力名称:Exfil 目录文件到 GitHub 存储库& Exfil 压缩存档到 GitHub 存储库& Exfil 压缩存档到 GitHub Gist
对手简介:通过 GitHub Repo 的 Advanced Thief和通过 GitHub Gist 的 Advanced Thief
Caldera 现在支持通过 REST API将数据渗透到 GitHub Gists 和存储库( T1567.001 :渗透到代码存储库)。存储库能力需要四个事实:用户名、存储库名称、个人访问令牌和存储库分支。对于 Gists,您只需要一个简单的用户名和具有创建 Gists 权限的令牌即可。存储库渗漏将按原样上传整个文件(或多个文件);渗透到 Gist 会首先使用 Base64 对二进制数据进行编码,然后将其作为字符串渗透。对于 Linux,这需要磁盘上有一个临时文件才能与 curl 一起使用。
除了渗透能力之外,还添加了专门针对 Git 存储库的单独收集能力,以及使用正确事实的归档能力。这些功能将识别本地系统上的所有存储库,并系统地将它们存档,以便以后通过任何可用渠道进行渗透(使用事实host.dir.compress)。