0x00 简介

对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。

  • 常见的云存储商:

国内:腾讯云、阿里云、华为云、百度云、京东云、青云、金山云、联通云、移动云……

国外:Azure(微软)、AWS(亚马逊)、Google cloud、IBM Cloud、Oracle Cloud……

  • 基本概念(Bucket):

存储桶(Bucket)是OSS中用于存储对象的基本容器,作用类似于一个文件夹,但它更灵活,可以存储大量的对象,并具有高度的扩展性和可靠性。

  • 基本概念(Object):

对象是OSS存储数据的基本单元,也被称为OSS的文件。和传统的文件系统不同,Object没有文件目录层级结构的关系。

  • 基本概念(Endpoint)

Endpoint即访问域名,指表示OSS对外服务的访问域名。

公共云下OSS各地域Endpoint详见:戳我

  • 基本概念(AccessKey):

AccessKey简称AK,指的是访问身份验证中用到的AccessKeyIDAccessKeySecret。AccessKeyID用于标识用户,AcessKeySecret用于验证用户的密钥,主要用于程序方式调用云服务API。

AccessKey包含以下三种类型:

  1. Bucket的拥有者申请的AccessKey。
  2. 被Bucket的拥有者通过RAM授权给第三方请求者的AccessKey。
  3. 被Bucket的拥有者通过STS授权给第三方请求者的AccessKey。

RAM:RAM提供的是一种长期有效的权限控制机制。通过创建RAM用户,并授予RAM用户相应的权限,将不同的权限分给不同的用户。所以,配置了了RAM用户的情况下,获取阿里云AccessKey虽然可能会完全控制阿里云的帐号,但是获取不到ECS主机。

STS:相对于RAM提供的长效控制机制,STS提供的是一种临时访问授权。通过调用STS,获得临时的AccessKey和Token。可以将临时AccessKey和Token发给临时用户,用来访问相应的资源。

0x01 常见攻击方式

  • AccessKey泄露

使用 fofa、github 进行信息收集,或者反编译 APK、微信小程序等,来寻找在代码中可能泄露的 AccessKey。一种常见的情况是,当使用 JavaScript 客户端直接签名时,AccessKeyID和AccessKeySecret可能会暴露在前端页面上,造成严重的安全隐患。

  • 存储桶(Bucket)劫持

当管理员在云存储服务中创建一个bucket时,该桶的名称是唯一的。然而,一旦管理员将bucket与自定义域名关联,并通过DNS解析将CNAME指向bucket的域名,就存在一种潜在的劫持风险。

管理员将bucket删除了,但却保留了在域名设置中的DNS解析。这种情况下,攻击者就机会注册相同名称的bucket,因为bucket的唯一性是在存储服务层面而不是在域名解析层面。通过上传任意文件到新注册的bucket,攻击者就能够控制原本与域名相关联的内容。

  • 存储桶(Bucket)爆破

当我们不知道Bucket的名称时,攻击者可以利用爆破手段来获取Bucket的名称。这类似于目录爆破,但有一个关键的区别:目录爆破通常通过观察服务器返回的状态码来确定目录是否存在,而Bucket爆破需要观察页面内容(AccessDenied || InvalidBucketName || InvalidBucketName)来判断Bucket是否存在。

  • 任意文件上传与覆盖

当管理员在配置 Bucket 时错误地将权限设置为可写(Write),这就相当于给了攻击者一个潜在的漏洞利用途径。可写权限使得攻击者有能力上传任意文件到Bucket中,甚至覆盖已经存在的文件。

0x02 常见标识

🐎一个寻找AccessKey的正则表达式:

(?i)((access_key|access_token|admin_pass|admin_user|algolia_admin_key|algolia_api_key|alias_pass|alicloud_access_key|amazon_secret_access_key|amazonaws|ansible_vault_password|aos_key|api_key|api_key_secret|api_key_sid|api_secret|api.googlemaps AIza|apidocs|apikey|apiSecret|app_debug|app_id|app_key|app_log_level|app_secret|appkey|appkeysecret|application_key|appsecret|appspot|auth_token|authorizationToken|authsecret|aws_access|aws_access_key_id|aws_bucket|aws_key|aws_secret|aws_secret_key|aws_token|AWSSecretKey|b2_app_key|bashrc password|bintray_apikey|bintray_gpg_password|bintray_key|bintraykey|bluemix_api_key|bluemix_pass|browserstack_access_key|bucket_password|bucketeer_aws_access_key_id|bucketeer_aws_secret_access_key|built_branch_deploy_key|bx_password|cache_driver|cache_s3_secret_key|cattle_access_key|cattle_secret_key|certificate_password|ci_deploy_password|client_secret|client_zpk_secret_key|clojars_password|cloud_api_key|cloud_watch_aws_access_key|cloudant_password|cloudflare_api_key|cloudflare_auth_key|cloudinary_api_secret|cloudinary_name|codecov_token|config|conn.login|connectionstring|consumer_key|consumer_secret|credentials|cypress_record_key|database_password|database_schema_test|datadog_api_key|datadog_app_key|db_password|db_server|db_username|dbpasswd|dbpassword|dbuser|deploy_password|digitalocean_ssh_key_body|digitalocean_ssh_key_ids|docker_hub_password|docker_key|docker_pass|docker_passwd|docker_password|dockerhub_password|dockerhubpassword|dot-files|dotfiles|droplet_travis_password|dynamoaccesskeyid|dynamosecretaccesskey|elastica_host|elastica_port|elasticsearch_password|encryption_key|encryption_password|env.heroku_api_key|env.sonatype_password|eureka.awssecretkey)[a-z0-9_ .\-,]{0,25})(=|>|:=|\|\|:|<=|=>|:).{0,5}['\"]([0-9a-zA-Z\-_=]{8,64})['\"]
厂商常见标识
腾讯云Access Key 开头标识一般是 “AKID”,SecretId长度为17个字符,SecretKey长度为40个字符。
阿里云Access Key 开头标识一般是 “LTAI”,Access Key ID长度为16-24个字符,Access Key Secret长度为30个字符。
华为云Access Key 开头标识一般是 “AK”,Access Key ID长度为64个字符,Secret Access Key长度为44个字符。
AWSAccess Key 开头标识一般是 “AKIA”,Access Key ID长度为20个字符,Secret Access Key长度为40个字符。
AzureAccess Key 开头标识一般是 “AZ”,Client ID通常用作Access Key,长度为36个字符,Secret长度为44个字符。

0x03 相关工具

  • cf:针对阿里/腾讯/华为/AWS的云环境利用框架
  • Cloud-Bucket-Leak-Detection-Tools:连接阿里/腾讯/华为/AWS/Azure/GCP云储存桶
  • OssBrowser:阿里云官方提供的OSS图形化管理工具
  • aliyun-accesskey-Tools:阿里云ACCESSKEY利用工具,可直接getshell,但是issue有人说会疯狂告警,各位自行斟酌。
  • cloudTools:针对阿里/腾讯/华为/ucloud的云存储/云服务工具

0x04 修复建议

  • 更换AccessKey。
  • 通过RAM实现精准的权限控制。
  • AccessKey应该始终在后端服务器上保存,并通过安全的方式传递给前端。
  • 实施监控和审计机制,定期检查AccessKey的使用情况。

参考: