AWS - CloudTrail Enum
CloudTrail
AWS CloudTrail 记录和监控您的 AWS 环境中的活动。它捕获详细的事件日志,包括谁在何时何地对 AWS 资源进行了什么操作。这提供了更改和操作的审计跟踪,有助于安全分析、合规审计和资源更改跟踪。CloudTrail 对于理解用户和资源行为、增强安全态势以及确保法规遵从至关重要。
每个记录的事件包含:
调用的 API 名称:
eventName
调用的服务:
eventSource
时间:
eventTime
IP 地址:
SourceIPAddress
代理方法:
userAgent
。示例:Signing.amazonaws.com - 来自 AWS 管理控制台
console.amazonaws.com - 账户的根用户
lambda.amazonaws.com - AWS Lambda
请求参数:
requestParameters
响应元素:
responseElements
事件大约每 5 分钟写入一个新的日志文件(JSON 文件),由 CloudTrail 保存,最终日志文件大约在 15 分钟后交付到 S3。 CloudTrail 日志可以跨账户和跨区域聚合。 CloudTrail 允许使用日志文件完整性,以便能够验证自 CloudTrail 交付给您以来日志文件是否保持不变。它在摘要文件中创建日志的 SHA-256 哈希。每小时创建一次新日志的 SHA-256 哈希。 创建 Trail 时,事件选择器将允许您指示 Trail 记录:管理、数据或洞察事件。
日志保存在 S3 存储桶中。默认情况下使用服务器端加密(SSE-S3),因此 AWS 将为有访问权限的人解密内容,但为了额外的安全性,您可以使用 KMS 和自己的密钥进行 SSE。
日志存储在具有以下名称格式的 S3 存储桶中:
BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD
BucketName 为:
aws-cloudtrail-logs-<accountid>-<random>
示例:
aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/
每个文件夹中的每个日志将具有以下格式的名称:AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz
日志文件命名约定
此外,摘要文件(用于检查文件完整性)将位于同一存储桶中:
聚合来自多个账户的日志
在您希望将日志文件传送到的 AWS 账户中创建一个 Trail
对目标 S3 存储桶应用权限,允许 CloudTrail 跨账户访问,并允许每个需要访问的 AWS 账户
在其他 AWS 账户中创建一个新的 Trail,并选择使用步骤 1 中创建的存储桶
然而,即使您可以将所有日志保存到同一个 S3 存储桶中,您也无法将多个账户的 CloudTrail 日志聚合到属于单个 AWS 账户的 CloudWatch Logs 中。
请记住,一个账户可以有不同的 CloudTrail Trails 启用,将相同(或不同)的日志存储在不同的存储桶中。
将所有组织账户的 CloudTrail 集中到一个账户中
创建 CloudTrail 时,可以指示激活整个组织的 CloudTrail 并将日志集中到一个存储桶中:
这样,您可以轻松配置所有账户的所有区域中的 CloudTrail,并将日志集中到一个账户中(您应该保护该账户)。
日志文件检查
您可以通过运行以下命令检查日志是否未被更改
Logs to CloudWatch
CloudTrail 可以自动将日志发送到 CloudWatch,以便您可以设置警报,当执行可疑活动时警告您。 请注意,为了允许 CloudTrail 将日志发送到 CloudWatch,需要创建一个允许该操作的 角色。如果可能,建议使用 AWS 默认角色来执行这些操作。此角色将允许 CloudTrail:
CreateLogStream: 允许创建 CloudWatch Logs 日志流
PutLogEvents: 将 CloudTrail 日志传送到 CloudWatch Logs 日志流
Event History
CloudTrail 事件历史允许您在表格中检查已记录的日志:
Insights
CloudTrail Insights 自动分析来自 CloudTrail trails 的写管理事件,并警告您异常活动。例如,如果 TerminateInstance
事件的增加与已建立的基线不同,您将看到它作为 Insight 事件。这些事件使查找和响应异常 API 活动比以往任何时候都更容易。
这些洞察存储在与 CloudTrail 日志相同的桶中:BucketName/AWSLogs/AccountID/CloudTrail-Insight
Security
CloudTrail 日志文件完整性 |
|
阻止未经授权的访问 |
|
防止日志文件被删除 |
|
Access Advisor
AWS Access Advisor 依赖于过去 400 天的 AWS CloudTrail 日志来收集其洞察。CloudTrail 捕获在 AWS 账户中进行的 AWS API 调用和相关事件的历史记录。Access Advisor 利用这些数据来显示服务的最后访问时间。通过分析 CloudTrail 日志,Access Advisor 可以确定 IAM 用户或角色访问了哪些 AWS 服务以及何时发生了访问。这有助于 AWS 管理员做出有关精简权限的明智决策,因为他们可以识别长时间未访问的服务,并根据实际使用模式潜在地减少过于宽泛的权限。
因此,Access Advisor 提供有关用户被授予的不必要权限的信息,以便管理员可以删除这些权限
Actions
Enumeration
CSV Injection
在CloudTrail中可以进行CVS注入,如果日志以CSV格式导出并用Excel打开,将会执行任意代码。 以下代码将生成一个包含恶意Trail名称的日志条目,其中包含有效负载:
有关 CSV 注入的更多信息,请查看页面:
有关此特定技术的更多信息,请查看 https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/
绕过检测
HoneyTokens 绕过
Honeyokens 是为了检测敏感信息的外泄而创建的。在 AWS 的情况下,它们是使用受监控的 AWS 密钥,如果某个操作触发了该密钥的使用,那么一定是有人窃取了该密钥。
然而,像 Canarytokens、 SpaceCrab、 SpaceSiren 创建的 Honeytokens 要么使用可识别的账户名称,要么为所有客户使用相同的 AWS 账户 ID。因此,如果你能在不让 Cloudtrail 创建任何日志的情况下获取账户名称和/或账户 ID,你就可以知道该密钥是否是 Honeytoken。
Pacu 有一些规则来检测密钥是否属于 Canarytokens、 SpaceCrab、 SpaceSiren:
如果
canarytokens.org
出现在角色名称中或账户 ID534261010715
出现在错误消息中。最近测试时,他们使用的账户是
717712589309
,并且名称中仍然包含canarytokens.com
字符串。如果
SpaceCrab
出现在错误消息中的角色名称中SpaceSiren 使用 uuids 生成用户名:
[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}
如果名称看起来像是随机生成的,那么它很可能是一个 HoneyToken。
从密钥 ID 获取账户 ID
你可以从访问密钥中编码的账户 ID中获取账户 ID,正如这里解释的那样,并将账户 ID 与你的 Honeytokens AWS 账户列表进行检查:
查看更多信息在原始研究。
不生成日志
最有效的技术其实很简单。只需使用你刚找到的密钥访问你自己攻击者账户中的某些服务。这将使CloudTrail在你自己的AWS账户中生成日志,而不是在受害者的账户中。
问题是输出会显示一个错误,指示账户ID和账户名称,因此你将能够看到它是否是一个Honeytoken。
没有日志的AWS服务
过去有一些AWS服务不会向CloudTrail发送日志(在这里找到列表)。如果有人未经授权(honeytoken密钥)尝试访问这些服务中的某些服务,它们将响应一个包含密钥角色ARN的错误。
这样,攻击者可以在不触发任何日志的情况下获取密钥的ARN。在ARN中,攻击者可以看到AWS账户ID和名称,很容易知道HoneyToken的公司账户ID和名称,因此攻击者可以通过这种方式识别该令牌是否是HoneyToken。
请注意,所有被发现不会创建CloudTrail日志的公共API现在都已修复,所以你可能需要找到你自己的...
更多信息请查看原始研究。
访问第三方基础设施
某些AWS服务将生成一些基础设施,如数据库或Kubernetes集群(EKS)。用户直接与这些服务通信(如Kubernetes API)不会使用AWS API,因此CloudTrail无法看到这种通信。
因此,发现了EKS API URL的用户可以在本地生成一个令牌,并直接与API服务通信而不被CloudTrail检测到。
更多信息在:
AWS - EKS Post Exploitation修改CloudTrail配置
删除trails
停止 trails
禁用多区域日志记录
通过事件选择器禁用日志记录
在第一个示例中,单个事件选择器作为一个包含单个对象的 JSON 数组提供。"ReadWriteType": "ReadOnly"
表示事件选择器应仅捕获只读事件(例如,CloudTrail insights 不会检查写入事件)。
您可以根据您的具体需求自定义事件选择器。
通过 S3 生命周期策略删除日志
修改 Bucket 配置
删除 S3 bucket
更改 bucket 策略以拒绝来自 CloudTrail 服务的任何写入
添加生命周期策略到 S3 bucket 以删除对象
禁用用于加密 CloudTrail 日志的 kms 密钥
Cloudtrail 勒索软件
S3 勒索软件
你可以生成一个非对称密钥并让CloudTrail 使用该密钥加密数据,然后删除私钥,这样 CloudTrail 的内容就无法恢复。 这基本上是一个S3-KMS 勒索软件,解释如下:
AWS - S3 Post ExploitationKMS 勒索软件
这是执行前述攻击的最简单方法,具有不同的权限要求:
AWS - KMS Post Exploitation参考资料
Last updated