云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云主机_神舟通用数据库_优惠

小七 141 0

美国焊接学会好极了!公共S3桶以及如何找到它们了解AWS如何传达S3存储桶的创建和宽松权限的含义。

不需要的公共S3桶是一个持续的威胁。它们已经(现在仍然)在网络上造成巨大破坏。有几种工具可以帮助您的公司找到公共S3存储桶。它们几乎都是独立的脚本或lambda函数,通过某种SDK(Python,节点.js等等)。但是,当实现集中式安全时,正如我们在Auth0上所做的那样,可以使用数据湖或任何类型的系统/服务来执行此任务,在这些系统/服务中,日志被聚合、分析和操作。在这方面,AWS事件的第一个来源是CloudTrail。在互联网上翻找,我们没有找到足够的资源来解释S3存储桶公开的不同方式,以及如何在原始的CloudTrail日志中检测到它,所以我们开始到处玩,运行测试和构建查询来找出答案。这篇博客文章将指导您了解我们的过程、我们的发现和我们的解决方案。Bitdefender列出了10个最严重的Amazon S3漏洞。来源上下文在进入技术细节之前,让我们先概述一下运行这些测试的上下文,涉及哪些技术,以及我们如何将它们联系在一起。我们通过两种方式测试了bucket的创建:通过AWS命令行界面(awscli)和web控制台。我们还测试了策略更改,包括访问控制列表(ACL)和单个权限。我们希望涵盖用户创建公共S3存储桶的所有可能方式,不管是否恶意:错误地,用于数据过滤,或用于命令和控制(是的,您甚至可以使用它,我亲爱的pentest朋友)。"数据过滤,也称为数据挤出,是指未经授权从计算机传输数据。"(TechTarget)作为一个安全信息和事件管理(SIEM)解决方案,我们正在使用Sumo Logic。我们将所有日志发送给它,并且我们设计了来自每个AWS帐户的CloudTrail日志,这些日志被Sumo Logic收集器"抽干"到一个集中的S3存储桶中,并被组织在名为CloudTrail_AWS_logs的源类别中。"我们希望涵盖用户创建公共S3存储桶的所有可能方法,无论是否恶意。进一步了解如何做到这一点。"在推特上留言S3桶权限模型让我们快速概述一下S3存储桶可以拥有的权限类型,以及如何使用它们来公开权限。对于完整和详细的解释,我们强烈建议阅读官方的AWS文档。铲斗ACL设置bucket public的最简单方法是在bucket上使用固定策略public read。默认情况下,无论是通过web控制台还是命令行界面(CLI),bucket都是使用ACL private创建的。封闭式acl提供了一种简单而快速的方法来一次性设置全局权限。但是,可以应用特定的策略来授予或拒绝对特定实体的访问。可以授予五种权限:阅读阅读ACP写写入\u ACP完全许可读、写和完全权限绝对是不言而喻的,适用于bucket上的每个对象(以及bucket本身)。其他权限中的相邻通道保护(ACP)部分与ACL相关:授予这些权限后,用户可以读取和/或写入ACL(但不能读取对象)。这些政策与它们所依附的实体是一起的。更具体地说,被授予者。被授权者是一个拥有三到四个基本信息的对象(取决于类型):被授予者的类型(CanonicalUser或Group)、XML XSI模式和ID(对于CanonicalUser类型)或URI(对于类型组)。CanonicalUser类型还带有DisplayName属性,在组类型中不存在。组可以是以下对象之一:认证用户诱惑者日志传送作为安全性最佳实践,您应该注意AuthenticatedUsers和AllUsers组。存储桶策略策略是允许/禁止对bucket对象执行操作的一种复杂方法。即使bucket是用一个设置为private的封闭ACL创建的,通过添加一个非常基本的策略,我们可以使整个bucket公开。这样做的策略很简单:{"Version":"2012-10-17","声明":[{"Sid":"ABC","Effect":"允许","委托人":{"AWS":"*"},"操作":s3:GetObject"],"资源":arn:aws公司:s3:::bucket_name/*"]}]}AWS能够识别这种策略的效果,并在bucket上显示"Public"标签。虽然检测上述策略是可行的,但检测此类场景是一项棘手的任务。评估策略对存储桶及其对象的影响是无法在SIEM上完成的,但它需要外部工具来模拟策略、分析结果和评估风险。正如richmogull在他关于S3存储桶如何公开的文章中所指出的,评估权限的方式是首先使用bucket策略,然后是bucket acl(包括封闭的和扩展的)。当然,明确的否认总是优先的,不管它在哪里陈述。"对于S3存储桶,评估权限的方式是先存储桶策略,然后是存储桶ACL。进一步了解这将如何影响您在云中的安全。"在推特上留言对象ACLS3对象确实继承了父bucket的权限,但它们也可以有自己的ACL来绕过这些权限。当bucket ACL声明它是私有的时,您可以将单个对象设为public,尽管要访问该对象,必须知道它的完整路径。虽然这是一个您应该解决的安全问题,但它超出了本文的讨论范围。测试我们对了解这些策略可以应用的方式以及它们在Cloudtrail中的显示方式很感兴趣,因此我们使用不同的参数运行了几个测试来测试和构建Sumo逻辑检测查询。Bucket acl检测:命令行方式第一个镜头是为了提醒我们熟悉的东西:罐装ACL。创建带有此类策略的公共存储桶的最简单方法是通过命令行。创建一个包含以下公共策略的CLI命令的bucket:$aws s3api create bucket--acl public read--bucket davide public test--区域us-east-1这是我们在追踪中发现的:{"eventVersion":"1.05","用户标识":{"type":"AssumedRole","principalId":"aroaddbdbdb"DBDBDBD:1544653190000000000","arn":arn:aws公司:sts::107000000000:假定角色/AssumedRole/1544653190000000000","accountId":"107000000000","accessKeyId":"asiarrddbdbdbdbdbdb","会话上下文":{"属性":{"mfaAuthenticated":"真","创建日期":"2018-12-12T22:19:53Z"},"sessionIssuer":{"type":"角色","principalId":"aroadbbdbdbdbdbdbdbdbdbd","arn":arn:aws公司:iam::107000000000:角色/虚拟角色","accountId":"107000000000","用户名":"AssumedRole"}}},"eventTime":"2018-12-12T22:22:56Z","eventSource":"s3。亚马逊网站","eventName":"CreateBucket","awsRegion":"us-east-1","sourceIPAddress":"73。xx.xx.xx","userAgent":"[aws cli/1.11.160 Python/2.7.10 Darwin/18.2.0 botocore/1.7.18],"请求参数":{"x-amz-acl":["公开阅读"],"bucketName":"davide公共测试"},"responseElements":空,"requestID":"0BCE63ACB970D013","eventID":"76b81a5d-3e8f-4923-b065-dff822fe0af9","eventType":"AwsApiCall","recipientAccountId":"107000000000"}这里有一些有趣的事情需要注意:事件名称为CreateBucket(如预期)requestParameters.x-amz-acl被设置为public read,这是我们在命令行中指定的封闭acl用户名是假定的角色(AssumedRole),而不是承担该角色的用户构建一个可以直接捕捉的查询:(_sourceCategory=cloudtrail_aws_logs AND("CreateBucket"))|json"eventName"requestParameters.bucketName","requestParameters.x-amz-acl","用户标识.accountId", "用户标识.arn", "userIdentity.sessionContext.sessionIssuer.userName","sourceIPAddress","eventTime"作为event,bucket,acl,acl,acl,arn,user,src\u ip,datetime nodrop"|其中acl匹配"*public*"|if(isNull(acl),"null",acl)作为acl|按日期时间、帐户、帐户名、存储段、acl、用户、src_ip、arn、事件计数|字段-\u计数|按日期时间排序我们在第一行指定了"CreateBucket"事件操作来加快过滤过程。然后,我们解析了一些字段,以便能够应用一些逻辑。您可以注意到名为acl的requestParameters.x-amz-acl和以下where子句:where acl匹配"*public*"。这样我们不仅可以检测公共读ACL,还可以检测公共写和公共读写。请注意,由于用户名是假定的角色,所以假定该角色的真实用户不会公开,这使得归属有点困难(取决于您的团队如何构建IAM角色和用户)。Bucket acl检测:Web控制台方式有趣的是,您不能直接从web控制台向导创建一个带有封闭ACL的bucket。所有人都必须先手动创建一个存储桶。通过启用以下属性,可以获得:"List"应用公共读取ACL"写入"应用公共写入ACL"List"和"Write"应用公共读写ACL这将生成以下create bucket事件:{"eventVersion":"1.05","用户标识":{"type":"AssumedRole","principalId":"aroaddbdbdb"dbdbdbd:大卫用户","arn":arn:aws公司:sts::107000000000:假定角色/AssumedRole/davideruser","accountId":"107000000000","accessKeyId":"asiarrddbdbdbdbdbdb","会话上下文":{"属性":{"mfaAuthenticated":"真","创建日期":"2018-12-18T16:10:22Z"},"sessionIssuer":{