从零到自动化:如何用OSS_Scanner批量检测腾讯云COS存储桶漏洞
最近几年,云存储服务已经成为企业数据存储的标配,但随之而来的安全问题也日益凸显。我见过太多因为存储桶配置不当导致数据泄露的案例,有些甚至直接暴露了核心业务数据。对于企业安全团队来说,面对成百上千个存储桶,手动检查每个桶的配置几乎是不可能的任务。这就是为什么我们需要自动化工具来帮我们完成这项繁琐但至关重要的工作。
OSS_Scanner这个工具我用了快一年,最初是在一个客户的安全评估项目中接触到的。当时客户有几十个腾讯云COS存储桶需要检查,手动一个个测试不仅效率低下,还容易遗漏关键风险点。尝试了几个工具后,OSS_Scanner在多厂商支持和批量处理方面的表现让我印象深刻。今天我就结合自己的实战经验,详细聊聊如何用这个工具对腾讯云COS存储桶进行高效的自动化漏洞扫描。
1. 环境准备与工具部署
在开始扫描之前,我们需要先搭建好运行环境。OSS_Scanner基于Python开发,所以Python环境是必须的。我建议使用Python 3.7或更高版本,因为一些新的依赖包可能不支持旧版本。
1.1 安装依赖与基础配置
首先从GitHub克隆项目仓库:
git clone https://github.com/bitboy-sys/OSS_Scanner.git
cd OSS_Scanner
接下来安装依赖包:
pip install -r requirements.txt
这里有个小技巧,如果你在国内网络环境下载包比较慢,可以临时使用国内的镜像源:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后,建议先检查一下配置文件。OSS_Scanner的配置文件位于config/config.ini,这个文件控制着扫描的各种参数。我通常会根据自己的需求调整几个关键设置:
[DEFAULT]
request_timeout = 15
request_interval = 2
max_retry = 3
https_only = true
[CLOUD_TEMPLATES]
tencent_http = http://{bucket}.cos.{region}.myqcloud.com
tencent_https = https://{bucket}.cos.{region}.myqcloud.com
注意:
request_interval参数很重要,设置太短可能会触发云厂商的速率限制,设置太长又会影响扫描效率。根据我的经验,对于腾讯云COS,2秒的间隔是比较平衡的选择。
1.2 存储桶列表准备
批量扫描的核心是有一个完整的存储桶列表。在实际项目中,我通常通过几种方式获取这个列表:
方法一:通过腾讯云API获取
如果你有腾讯云的访问密钥,可以直接使用SDK获取所有存储桶信息:
import json
from qcloud_cos import CosConfig, CosS3Client
config = CosConfig(
Region='ap-guangzhou',
SecretId='你的SecretId',
SecretKey='你的SecretKey'
)
client = CosS3Client(config)
response = client.list_buckets()
with open('bucket_list.txt', 'w') as f:
for bucket in response['Buckets']['Bucket']:
f.write(bucket['Name'] + '\n')
方法二:从现有资产清单导出
很多企业都有资产管理系统,可以直接导出所有存储桶信息。如果是从Excel或CSV文件导出,记得只保留存储桶名称列,每行一个。
方法三:通过域名解析发现
对于外部安全测试,可以通过子域名枚举发现潜在的存储桶域名,然后提取桶名。存储桶的典型格式是{bucket}.cos.{region}.myqcloud.com。
准备存储桶列表文件时,我建议按照业务系统或部门进行分类,这样扫描结果可以更有针对性地进行分析。比如:
# 财务系统
finance-backup-2024
finance-invoice-storage
# 客户管理系统
crm-attachments
crm-database-backup
# 官网资源
website-static
website-uploads
这样的分类在后续分析报告时会很有帮助。
2. 腾讯云COS存储桶常见漏洞类型解析
在开始自动化扫描之前,我们需要清楚要检测哪些类型的漏洞。根据我在多个项目中的经验,腾讯云COS存储桶最常见的安全问题可以分为以下几类。
2.1 权限配置错误
这是最普遍也最危险的问题。很多开发人员为了方便,直接给存储桶设置了公共读写权限,导致任何人都可以上传、下载甚至删除文件。
匿名上传漏洞是最典型的一种。攻击者可以直接向你的存储桶上传恶意文件,比如网页木马、挖矿脚本等。OSS_Scanner检测这个漏洞的原理是尝试上传一个测试文件:
# 简化的检测逻辑
test_filename = f"test_{random_string()}.txt"
test_content = b"security_test_file"
response = requests.put(
f"https://{bucket}.cos.{region}.myqcloud.com/%7Btest_filename%7D",
data=test_content,
headers={'Content-Type': 'text/plain'}
)
if response.status_code in [200, 201]:
# 存在匿名上传漏洞
mark_vulnerability('anonymous_put')
# 清理测试文件
requests.delete(f"https://{bucket}.cos.{region}.myqcloud.com/%7Btest_filename%7D")
公开可列目录是另一个常见问题。当存储桶的ListObject权限对公共开放时,攻击者可以直接列出所有文件,了解你的业务结构和数据资产。
2.2 敏感文件泄露
开发人员经常会把配置文件、数据库备份、日志文件等敏感信息直接放在存储桶里,如果权限设置不当,这些文件就可能被公开访问。
我遇到过的一个真实案例:某公司的开发人员在存储桶里放了一个.env文件,里面包含了数据库连接字符串、API密钥等敏感信息。这个文件被OSS_Scanner检测出来后,我们立即通知了客户,避免了潜在的数据泄露风险。
OSS_Scanner会检测的敏感文件类型包括:
| 文件类型 | 常见文件名 | 风险等级 |
|---|---|---|
| 配置文件 | .env, config.ini, wp-config.php | 严重 |
| 密钥文件 | id_rsa, id_rsa.pub, access_key.txt | 严重 |
| 数据库备份 | *.sql, *.bak, *.dump | 严重 |
| 日志文件 | access.log, error.log, *.log | 高危 |
| 版本控制 | .git/, .svn/, .hg/ | 中危 |
2.3 CORS配置过宽
跨域资源共享(CORS)配置不当可能导致跨站请求伪造攻击。如果CORS配置允许任意来源(Origin: *)并且支持敏感方法(如PUT、POST),攻击者就可以通过恶意网站向你的存储桶发起请求。
检测CORS配置时,OSS_Scanner会发送OPTIONS请求:
curl -X OPTIONS https://bucket.cos.region.myqcloud.com/ \
-H "Origin: https://evil.com" \
-H "Access-Control-Request-Method: PUT"
如果响应头中包含Access-Control-Allow-Origin: *并且允许PUT/POST方法,就会被标记为风险。
2.4 路径遍历与目录穿越
虽然对象存储通常被认为是扁平结构,但有些应用会在存储桶中模拟目录结构。如果应用没有正确验证路径,就可能存在目录遍历漏洞。
例如,如果应用使用类似https://bucket.cos.region.myqcloud.com/files/../../etc/passwd的路径访问文件,而服务端没有正确过滤../,攻击者就可能访问到系统敏感文件。

653

被折叠的 条评论
为什么被折叠?



