TocConsulting/s3-security-scanner

GitHub: TocConsulting/s3-security-scanner

一款生产级 AWS S3 安全扫描器,可检测存储桶安全风险并映射多种合规框架要求。

Stars: 5 | Forks: 1

S3 Security Scanner

PyPI version Downloads Docker Docker Pulls License: MIT Python AWS

一款全面且具备生产级就绪状态的 AWS S3 bucket 安全扫描器,提供针对 CIS、AWS FSBP、PCI-DSS、HIPAA、SOC 2、ISO 框架以及 GDPR 的合规性映射。具有多线程扫描、对象级别的安全分析以及详细的修复指南等功能。

S3 Security Scanner demo: scan, scores, and multi-framework compliance

## 核心功能 ### **全面的安全分析** - **公开访问检测**:通过 ACL、策略和公开访问设置进行多层检测 - **加密评估**:分析服务端加密配置 - **访问控制**:评估版本控制、MFA 删除和对象锁定 - **复制数据泄露检测**:将跨账户复制目标(一种隐蔽的数据泄露后门)标记为 CRITICAL,并提供用于合法 DR 账户的 `--trusted-account` 允许列表 - **对象级安全**:基于抽样的扫描,检测公开对象和敏感数据模式 - **CORS 分析**:检测过于宽松的跨域配置 - **DNS 接管防御**:分析 Route53 和手动配置的域名,排查子域名接管风险 - **CNAME 信息泄露**:检测 DNS 记录中的敏感信息 ### **合规框架** - **CIS AWS Foundations Benchmark v3.0.0**:6 项针对 S3 的控制措施(100% 覆盖率) - **AWS Foundational Security Best Practices (FSBP)**:11 项针对 S3 的控制措施(100% 覆盖率) - **PCI DSS v4.0**:10 项用于 PCI DSS 合规的 AWS Config 规则(100% 覆盖率) - **HIPAA Security Rule**:7 项用于医疗数据保护的 AWS Config 规则(100% 覆盖率) - **SOC 2 Type II**:12 项支持信任服务标准(Trust Service Criteria)的控制措施(合规性百分比取决于所选标准) - **ISO 27001:2022**:7 项信息安全控制措施(访问控制、云安全、密码学、备份、日志记录、信息传输) - **ISO 27017:2015**:7 项云安全控制措施(访问限制、共同责任、数据位置、监控、日志记录、数据删除、数据隔离) - **ISO 27018:2019**:4 项 PII 保护控制措施(目的限制、数据最小化、保留/删除、问责制) - **GDPR (EU) 2016/679**:21 项可实施的控制措施,涵盖第 17、25、30、32、33、44-49 条(数据保护、安全、国际传输) - **实时合规评分**:自动计算合规百分比 **注意:** PCI DSS 控制措施是使用 AWS 推荐的 Config 规则实现的,因为 PCI DSS v4.0 本身并未定义具体的 S3 要求。 ### **性能与易用性** - **多线程扫描**:并行分析 bucket 以更快获取结果 - **富文本控制台输出**:进度条、彩色输出和格式化表格 - **多种报告格式**:JSON、CSV、HTML 以及特定合规性报告 - **精美的 HTML 报告**:带有图表和可视化的交互式仪表板 - **灵活的目标定位**:扫描所有 bucket 或特定子集 ### **生产就绪** - **模块化架构**:清晰的关注点分离,配备专门的安全检查模块 - **现代 Python 打包**:使用 pyproject.toml 并遵循最佳实践 - **全面的 CLI**:提供丰富选项的命令行界面 - **错误处理**:强大的错误恢复和部分扫描结果支持 - **详细的日志记录**:支持可配置级别的文件和控制台日志记录 ## 快速开始 ### 安装 ``` # 从 PyPI 安装 pip install s3-security-scanner # 或从源码安装 git clone https://github.com/TocConsulting/s3-security-scanner.git cd s3-security-scanner pip install . ``` ### Docker 安装 ``` # 从 Docker Hub 拉取 docker pull tarekcheikh/s3-security-scanner:latest ``` ### 基础用法 该扫描器有三个主要命令:`security`、`discover` 和 `dns`。 ``` # 扫描所有 S3 buckets 的安全问题 s3-security-scanner security # 使用特定的 AWS profile 进行扫描 s3-security-scanner security --profile production # 仅扫描特定的 buckets s3-security-scanner security --bucket my-bucket-1 --bucket my-bucket-2 # 发现目标组织的 S3 buckets(无需 AWS credentials) s3-security-scanner discover --target "company-name" # 检查域名的 DNS takeover 漏洞 s3-security-scanner dns --domain example.com ``` ## 命令 ### Security 命令 扫描您的 S3 bucket 以查找安全漏洞和合规性问题。 ``` s3-security-scanner security [OPTIONS] Options: --bucket TEXT Specific bucket(s) to scan (can be used multiple times) --exclude-bucket TEXT Bucket(s) to exclude from scanning --compliance-only Generate compliance report only --no-object-scan Skip object analysis for faster results --trusted-account TEXT AWS account ID(s) allowed as replication destinations; suppresses the external-replication finding for these accounts (repeatable) -d, --debug Enable debug logging -q, --quiet Suppress console output except errors -w, --max-workers INTEGER Worker threads (default: 5) -f, --output-format Report format: json, csv, html, all (default: all) -o, --output-dir TEXT Output directory (default: ./output) -p, --profile TEXT AWS profile name -r, --region TEXT AWS region (default: us-east-1) ``` **示例:** ``` # 使用默认设置扫描所有 buckets s3-security-scanner security # 扫描除特定 buckets 之外的所有 buckets s3-security-scanner security --exclude-bucket temp-bucket --exclude-bucket dev-sandbox # 仅合规性快速扫描 s3-security-scanner security --compliance-only --no-object-scan -p production # 检测跨账户复制后门,将已知的 DR 账户加入 allow-listing s3-security-scanner security --trusted-account 111122223333 # 仅生成 HTML 报告 s3-security-scanner security -f html -o ./reports ``` ### Discover 命令 查找目标组织的未知 S3 bucket(基础发现无需 AWS 凭据)。 ``` s3-security-scanner discover [OPTIONS] Options: --target TEXT Target organization name (REQUIRED) --level TEXT Permutation level: basic, medium, advanced (default: basic) --methods TEXT Discovery methods: dns, http, permutations (default: dns,permutations) --only Only discover buckets, don't scan them for security issues --wordlist TEXT Custom wordlist file for additional bucket names --stealth/--no-stealth Enable stealth mode (default: enabled) -w, --max-workers Worker threads (default: 5) -f, --output-format Report format: json, csv, html, all (default: all) -o, --output-dir TEXT Output directory (default: ./output) -p, --profile TEXT AWS profile name -r, --region TEXT AWS region (default: us-east-1) -d, --debug Enable debug logging -q, --quiet Suppress console output except errors ``` **示例:** ``` # 发现公司的 buckets(基础级别,约 200 个候选,约 5 秒) s3-security-scanner discover --target "acme-corp" # 中级发现(约 1,000 个候选,约 40 秒) s3-security-scanner discover --target "company" --level medium # 高级发现(约 9,000 个候选,约 9 分钟) s3-security-scanner discover --target "company" --level advanced # 仅发现 - 即使有 AWS credentials 也不执行安全扫描 s3-security-scanner discover --target "company" --only ``` **注意:** 如果未检测到 AWS 凭据,将自动启用仅发现模式。 ### DNS 命令 检查域名的 DNS 子域名接管漏洞。 ``` s3-security-scanner dns [OPTIONS] Options: --domain TEXT Domain(s) to scan (REQUIRED, can be used multiple times) --skip-subdomain-enum Skip subdomain enumeration -p, --profile TEXT AWS profile for Route53 scanning -r, --region TEXT AWS region (default: us-east-1) -f, --output-format Report format: json, csv, html, all (default: all) -o, --output-dir TEXT Output directory (default: ./output) -w, --max-workers INTEGER Worker threads (default: 5) -d, --debug Enable debug logging -q, --quiet Suppress console output except errors ``` **示例:** ``` # 扫描域名以发现 takeover 漏洞 s3-security-scanner dns --domain example.com --domain test.com # 使用 AWS profile 进行 Route53 扫描 s3-security-scanner dns --domain example.com --profile production ``` ## Docker 用法 使用 Docker 运行扫描器,无需在本地安装 Python 依赖。 ### 拉取 Docker 镜像 ``` # 拉取最新版本 docker pull tarekcheikh/s3-security-scanner:latest # 或固定特定版本(将 X.Y.Z 替换为您想要的 release) docker pull tarekcheikh/s3-security-scanner:X.Y.Z ``` ### 基础 Docker 命令 ``` # 显示帮助 docker run --rm tarekcheikh/s3-security-scanner --help # 显示特定命令的帮助 docker run --rm tarekcheikh/s3-security-scanner security --help ``` ### 使用 Docker 进行安全扫描 **AWS 凭据:** 以下示例挂载了 `~/.aws` 以提供凭据。默认情况下,扫描器使用 `default` 配置文件。使用 `--profile ` 指定其他配置文件。 ``` # 使用默认的 AWS profile 扫描所有 buckets docker run --rm \ -v ~/.aws:/root/.aws:ro \ -v $(pwd)/output:/app/output \ tarekcheikh/s3-security-scanner security # 使用特定的 AWS profile 进行扫描 docker run --rm \ -v ~/.aws:/root/.aws:ro \ -v $(pwd)/output:/app/output \ tarekcheikh/s3-security-scanner security --profile production # 仅扫描特定的 buckets docker run --rm \ -v ~/.aws:/root/.aws:ro \ -v $(pwd)/output:/app/output \ tarekcheikh/s3-security-scanner security --bucket my-bucket-1 --bucket my-bucket-2 # 仅合规性快速扫描 docker run --rm \ -v ~/.aws:/root/.aws:ro \ -v $(pwd)/output:/app/output \ tarekcheikh/s3-security-scanner security --compliance-only --no-object-scan ``` ### 使用 Docker 进行 Bucket 发现 ``` # 发现目标的 buckets(无需 AWS credentials) docker run --rm \ -v $(pwd)/output:/app/output \ tarekcheikh/s3-security-scanner discover --target "company-name" --only # 带有更多排列组合的高级发现 docker run --rm \ -v $(pwd)/output:/app/output \ tarekcheikh/s3-security-scanner discover --target "company-name" --level advanced --only ``` ### 使用 Docker 进行 DNS 扫描 ``` # 检查域名的 takeover 漏洞 docker run --rm \ -v $(pwd)/output:/app/output \ tarekcheikh/s3-security-scanner dns --domain example.com # 使用 Route53 扫描(需要 AWS credentials) docker run --rm \ -v ~/.aws:/root/.aws:ro \ -v $(pwd)/output:/app/output \ tarekcheikh/s3-security-scanner dns --domain example.com --profile production ``` ### 使用环境变量提供 AWS 凭据 您可以不挂载 `~/.aws`,而是通过环境变量传递凭据: ``` # 通过环境变量传递 AWS credentials docker run --rm \ -e AWS_ACCESS_KEY_ID \ -e AWS_SECRET_ACCESS_KEY \ -e AWS_DEFAULT_REGION=us-east-1 \ -v $(pwd)/output:/app/output \ tarekcheikh/s3-security-scanner security # 使用 session token(用于临时 credentials/assumed roles) docker run --rm \ -e AWS_ACCESS_KEY_ID \ -e AWS_SECRET_ACCESS_KEY \ -e AWS_SESSION_TOKEN \ -e AWS_DEFAULT_REGION=us-east-1 \ -v $(pwd)/output:/app/output \ tarekcheikh/s3-security-scanner security ``` ### Docker 卷挂载说明 | 挂载 | 用途 | |-------|---------| | `-v ~/.aws:/root/.aws:ro` | 挂载 AWS 凭据目录(只读)。除非指定了 `--profile`,否则使用 `default` 配置文件 | | `-v $(pwd)/output:/app/output` | 将报告保存到您本地的 `./output` 目录 | | `-v /path/to/wordlist.txt:/app/wordlist.txt` | 使用自定义字典进行发现 | **重要提示:** 如果不挂载输出卷(`-v $(pwd)/output:/app/output`),容器退出后将无法访问报告文件。 ## 前置条件 ### Python 要求 - Python 3.8 或更高版本 - 所需的包(自动安装): - `boto3>=1.26.0` - `rich>=13.0.0` - `click>=8.1.0` - `jinja2>=3.1.0` - `dnspython>=2.4.0` ### AWS 要求 - 已配置 AWS 凭据(通过 AWS CLI、环境变量或 IAM 角色) - 所需权限: ``` { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation", "s3:GetBucketAcl", "s3:GetBucketPolicy", "s3:GetBucketPublicAccessBlock", "s3:GetBucketEncryption", "s3:GetBucketVersioning", "s3:GetBucketLogging", "s3:GetBucketLifecycleConfiguration", "s3:GetBucketNotificationConfiguration", "s3:GetBucketReplication", "s3:GetBucketCors", "s3:GetObjectLockConfiguration", "s3:ListBucket", "s3:GetObjectAcl", "sts:GetCallerIdentity", "route53:ListHostedZones", "route53:ListResourceRecordSets", "cloudtrail:ListTrails", "cloudtrail:GetEventSelectors" ], "Resource": "*" } ] } ``` ## 安全检查 ### 核心安全分析 | 检查项 | 描述 | 严重程度 | |-------|-------------|----------| | **Public Access Block** | 验证所有四个公开访问阻止设置 | HIGH | | **Bucket Policy** | 分析策略中的公开访问和 SSL 强制执行情况 | HIGH/MEDIUM | | **Wildcard Principal** | 检测 bucket 策略中的通配符 (*) 主体 | HIGH | | **Bucket ACL** | 检查是否向 AllUsers/AuthenticatedUsers 授予了公开权限 | HIGH | | **Default Encryption** | 验证服务端加密配置 | MEDIUM | | **Versioning** | 检查版本控制和 MFA 删除状态 | LOW/MEDIUM | | **Access Logging** | 验证服务端访问日志配置 | LOW | | **Object Lock** | 评估对象锁定和保留策略 | INFO | | **CORS Configuration** | 识别过于宽松的 CORS 规则 | MEDIUM | | **Lifecycle Rules** | 评估生命周期管理策略 | INFO | | **Event Notifications** | 检查 SNS/SQS/Lambda 通知配置 | LOW | | **Cross-Region Replication** | 验证用于灾难恢复的复制配置 | MEDIUM | | **External-Account Replication** | 标记复制到不同 AWS 账户的操作(数据泄露后门);使用 `--trusted-account` 设置允许列表 | CRITICAL | | **External-Account Notification** | 标记指向不同 AWS 账户的事件通知(SQS/SNS/Lambda)(数据泄露/持久化后门);使用 `--trusted-account` 设置允许列表 | CRITICAL | | **SSE-C Deny Guardrail** | 标记策略中未拒绝 SSE-C 上传的 bucket(防范 Codefinger 勒索软件 TTP) | MEDIUM | | **Access-Point Delegation** | 标记授权给账户内任何接入点(`s3:DataAccessPointAccount`)且无组织/账户或特定 AP 约束的 bucket 策略;需验证的 CreateAccessPoint 绕过行为 | MEDIUM | | **Transfer Acceleration** | 检查 S3 Transfer Acceleration 配置 | LOW | | **Cross-Account Access** | 识别 bucket 策略中的跨账户主体 | MEDIUM | | **MFA Requirements** | 验证 bucket 策略中的 MFA 条件 | HIGH | | **Data Classification** | 分析 bucket 和对象标签以进行数据治理 | MEDIUM | | **KMS Key Management** | 评估 KMS 密钥策略和轮换状态 | HIGH | | **CloudWatch Monitoring** | 验证 S3 指标和告警配置 | MEDIUM | | **Storage Lens** | 检查 Storage Lens 治理配置 | LOW | | **DNS Takeover Prevention** | 扫描 Route53 和手动配置的域名以排查接管风险 | CRITICAL | ### 对象级别安全(基于抽样) - **公开对象检测**:识别具有公开 ACL 的对象 - **敏感数据模式**:扫描可能敏感的文件名: - SSN 模式:`\d{3}-\d{2}-\d{4}` - 信用卡模式:`\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}` - AWS 访问密钥:`AKIA[0-9A-Z]{16}` - 私钥:`*.pem`, `*.key`, `*.pfx` - 密码文件:`*password*`, `*secret*`, `*credential*` - 数据库备份:`*.sql`, `*.dump`, `*.bak` ### 详细安全分析 有关所有安全检查、攻击向量和利用场景的全面文档,请参阅我们详细的[安全检查文档](security-checks.md)。该文档提供: - **详细的检查说明**以及技术实现细节 - **逐步的攻击场景**,展示真实世界中的利用方法 - 针对于 CIS、PCI-DSS、HIPAA 和 SOC 2 的**合规框架映射** - 安全漏洞及其预防措施的**真实案例** - 用于全面保障 S3 安全的**纵深防御策略** ### 安全修复指南 有关修复扫描器检测到的所有安全漏洞的逐步说明,请参阅我们详尽的[修复指南](remediation-guide.md)。该指南提供: - 包含逐步操作流程的 **AWS Console 指南** - 用于自动化和编写脚本的 **AWS CLI 命令** - 用于程序化修复的 **Python boto3 代码** - 用于强化多个 bucket 的**批量修复脚本** - 针对于 GDPR、SOC 2 及其他框架的**特定合规配置** - 针对安全事件的**应急响应程序** ## 模块化架构 S3 Security Scanner 采用清晰、模块化的架构构建,将安全检查划分为专门的模块: ### 核心结构 ``` s3_security_scanner/ ├── scanner.py # Main scanner orchestration ├── cli.py # Command-line interface ├── compliance.py # Compliance framework mapping ├── html_reporter.py # HTML report generation ├── utils.py # Shared utilities ├── bucket_utils.py # Bucket utility functions ├── checks/ # Security check modules │ ├── base.py # Base check class │ ├── access_control.py # Public access & ACL checks │ ├── encryption.py # Encryption configuration │ ├── logging_monitoring.py # Logging & monitoring │ ├── versioning_lifecycle.py # Versioning & lifecycle │ ├── object_security.py # Object-level security │ ├── dns_security.py # DNS takeover detection │ ├── soc2_monitoring.py # SOC 2 monitoring & governance │ ├── cloudtrail_logging.py # CloudTrail data events │ ├── gdpr_compliance.py # GDPR-specific checks │ └── iso_compliance.py # ISO compliance checks ├── discovery/ # Bucket discovery modules │ ├── bucket_discovery.py # Discovery engine │ ├── permutation_generator.py # Bucket name permutations │ ├── dns_validator.py # DNS validation │ ├── http_validator.py # HTTP validation │ ├── wordlist_manager.py # Wordlist management │ ├── s3_bucket_wordlist.txt # Bucket discovery wordlist │ └── subdomain_wordlist.txt # Subdomain wordlist ├── analyzers/ # Data analysis modules │ ├── pattern_analyzer.py # Pattern extraction │ └── dns_analyzer.py # DNS/CNAME analysis └── templates/ # Report templates └── report.html # HTML report template ``` ### 核心优势 - **可维护性**:每个安全域都有自己专门的模块 - **可测试性**:隔离的组件可实现全面的单元测试 - **可扩展性**:轻松添加新的安全检查而不影响现有代码 - **单一职责**:每个模块专注于一个特定的安全领域 - **可重用性**:分析器和检查器可以独立使用 ## 安全评分 ### 单个 Bucket 评分 每个 bucket 都会获得一个安全评分(0-100),初始为 **100 分**,出现安全问题则扣分: | **安全问题** | **扣分** | **严重程度** | **描述** | |-------------------|-------------------|-------------|----------------| | **公开访问阻止已禁用** | **-20** | CRITICAL | 缺失公开访问阻止设置 | | **公开的 Bucket 策略** | **-20** | CRITICAL | Bucket 策略允许公开访问 | | **公开的 ACL 访问** | **-20** | CRITICAL | ACL 授予了公开权限 | | **无 SSL/TLS 强制执行** | **-15** | HIGH | 缺失 SSL/TLS 强制执行 | | **无加密** | **-20** | HIGH | 未启用默认加密 | | **发现公开对象** | **-15** | HIGH | 检测到带有公开 ACL 的对象 | | **无版本控制** | **-10** | MEDIUM | 版本控制已禁用 | | **发现敏感对象** | **-10** | MEDIUM | 检测到可能敏感的文件 | | **无 SSE-C 拒绝防护** | **-10** | MEDIUM | Bucket 策略未拒绝 SSE-C 上传 (Codefinger TTP) | | **接入点授权** | **-10** | M | Bucket 策略授权给任何账户接入点且无进一步约束(需验证的 `s3:DataAccessPointAccount` 绕过行为) | | **无 MFA 删除** | **-5** | LOW | 未启用 MFA 删除 | | **无日志记录** | **-5** | LOW | 服务端访问日志已禁用 | | **危险的 CORS** | **-5** | LOW | 过于宽松的 CORS 配置 | | **无对象锁定** | **-3** | INFO | 未配置对象锁定 | | **无生命周期规则** | **-2** | INFO | 未配置生命周期管理 | **计算公式**:`单个评分 = max(0, 100 - 总扣分)` ### 平均安全评分计算 报告中显示的 **“平均安全评分”** 计算方式如下: ``` # 步骤 1:过滤掉扫描失败的 buckets valid_results = [bucket for bucket in results if not bucket.get("scan_error", False)] # 步骤 2:计算所有有效 bucket 分数的平均值 if valid_results: avg_security_score = sum(bucket.get("security_score", 0) for bucket in valid_results) / len(valid_results) else: avg_security_score = 0 # 步骤 3:四舍五入到适当的精度 average_security_score = round(avg_security_score, 2) # Stored with 2 decimals display_score = "%.1f" % avg_security_score # Displayed with 1 decimal ``` ### 示例计算 对于一个拥有 **3 个 bucket** 的账户: - **Bucket A**:85/100(安全性良好,存在轻微的日志问题) - **Bucket B**:45/100(存在多个公开访问漏洞) - **Bucket C**:92/100(极佳的安全态势) **平均安全评分 = (85 + 45 + 92) ÷ 3 = 74.0** ### 评分解读 | **分数范围** | **安全等级** | **建议** | |-----------------|-------------------|-------------------| | **90-100** | **优秀** | 保持当前的安全态势 | | **70-89** | **良好** | 解决轻微的安全漏洞 | | **50-69** | **需要改进** | 修复中危漏洞 | | **0-49** | **差** | 需立即采取行动 - 存在严重问题 | ### 核心特性 - **容错性**:扫描失败的 bucket 不参与计算 - **公平加权**:每个有效的 bucket 无论大小,贡献均等 - **基于优先级**:严重的安全问题(公开访问)比便利功能受到更重的惩罚 - **可操作性**:评分与安全风险水平直接相关 ## 合规框架 ### CIS AWS Foundations Benchmark v3.0.0 | 控制措施 | 描述 | 检查内容 | |---------|-------------|-------| | **S3.1** | S3 bucket 应启用阻止公开访问设置 | 公开访问阻止配置 | | **S3.5** | S3 bucket 应要求请求使用 SSL | Bucket 策略中的 SSL 强制执行 | | **S3.8** | S3 bucket 应阻止公开访问 | 整体公开访问评估 | | **S3.9** | S3 bucket 应启用服务端访问日志 | 访问日志配置 | | **S3.17** | S3 bucket 应进行静态加密 | 默认加密设置 | | **S3.20** | S3 bucket 应启用 MFA 删除 | MFA 删除配置 | | **S3.22** | S3 bucket 应记录对象级别的写入事件 | CloudTrail 数据事件 | | **S3.23** | S3 bucket 应记录对象级别的读取事件 | CloudTrail 数据事件 | ### PCI DSS v4.0 (AWS Config 规则) | 控制措施 ID | AWS Config 规则 | 重点领域 | |------------|-----------------|------------| | **S3.1** | s3-bucket-public-access-prohibited | 防止公开访问 | | **S3.5** | s3-bucket-ssl-requests-only | SSL/TLS 强制执行 | | **S3.8** | s3-bucket-public-read-prohibited | 防止公开读取访问 | | **S3.9** | s3-bucket-logging-enabled | 访问日志 | | **S3.15** | s3-bucket-default-lock-enabled | 审计追踪保护 | | **S3.17** | s3-bucket-server-side-encryption-enabled | 静态加密 | | **S3.19** | s3-bucket-public-write-prohibited | 防止公开写入访问 | | **S3.22** | s3-bucket-level-public-access-prohibited | 阻止 Bucket 级别的公开访问 | | **S3.23** | s3-bucket-versioning-enabled | 数据完整性和恢复 | | **S3.24** | s3-bucket-replication-enabled | 备份和灾难恢复 | ### HIPAA Security Rule (AWS Config 规则) | AWS Config 规则 | HIPAA 章节 | 描述 | |-----------------|---------------|-------------| | **s3-bucket-server-side-encryption-enabled** | §164.312(a)(2)(iv) | PHI 的服务端加密 | | **s3-bucket-ssl-requests-only** | §164.312(e)(1) | SSL/TLS 传输安全 | | **s3-bucket-logging-enabled** | §164.312(b) | 访问日志和审计控制 | | **s3-bucket-public-read-prohibited** | §164.312(a)(1) | 禁止公开读取访问 | | **s3-bucket-public-write-prohibited** | §164.312(a)(1) | 禁止公开写入访问 | | **s3-bucket-versioning-enabled** | §164.308(a)(7)(ii)(A) | 数据备份和恢复 | | **s3-bucket-default-lock-enabled** | §164.308(a)(1)(ii)(D) | 用于分配安全责任的对象锁定 | ### SOC 2 Type II - 支持信任服务标准的 AWS S3 控制措施 | 控制措施 | 描述 | 信任服务标准 | |---------|-------------|------------------------| | **SOC2-CC-ENCRYPTION-REST** | 启用服务端加密 | 通用标准 - 安全 (CC6.6) | | **SOC2-CC-ENCRYPTION-TRANSIT** | 对传输中的数据强制执行 SSL/TLS | 通用标准 - 安全 (CC6.6) | | **SOC2-CC-ACCESS-CONTROL** | 适当的访问控制和阻止公开访问 | 通用标准 - 安全 (CC6.1) | | **SOC2-CC-MFA-REQUIREMENTS** | 敏感操作的 MFA 要求 | 通用标准 - 安全 (CC6.2) | | **SOC2-CC-AUDIT-LOGGING** | 用于安全监控的访问日志 | 通用标准 - 安全 (CC7.2) | | **SOC2-CC-KEY-MANAGEMENT** | 加密密钥管理实践 | 通用标准 - 安全 (CC6.8) | | **SOC2-A-BACKUP-RECOVERY** | 用于数据恢复的版本控制 | 可用性 (A1.2) | | **SOC2-A-REPLICATION** | 用于灾难恢复的跨区域复制 | 可用性 (A1.2) | | **SOC2-A-MONITORING** | CloudWatch 监控配置 | 可用性 (A1.3) | | **SOC2-C-DATA-PROTECTION** | 机密数据访问保护 | 机密性 (CC6.7) | | **SOC2-PI-DATA-INTEGRITY** | 用于保护数据完整性的对象锁定 | 处理完整性 (CC8.1) | | **SOC2-P-DATA-GOVERNANCE** | 用于数据治理的 Storage Lens | 隐私 (P2.1) | **注意:** SOC 2 是一个灵活的框架,组织可以选择要实施的信任服务标准。安全 (CC) 是必选项,而可用性 (A)、机密性 (C)、处理完整性 (PI) 和隐私 (P) 是可选的,视业务需求而定。 ## 输出示例 ### 控制台摘要 ``` S3 Security Scan Summary - us-east-1 ┌─────────────────────────────┬─────────────────┐ │ Metric │ Value │ ├─────────────────────────────┼─────────────────┤ │ Account ID │ 123456789012 │ │ Total Buckets │ 25 │ │ Average Security Score │ 78.5/100 │ │ Public Buckets │ 3 │ │ High Severity Issues │ 3 │ │ Medium Severity Issues │ 8 │ │ Public Objects Found │ 12 │ │ Sensitive Objects Found │ 5 │ └─────────────────────────────┴─────────────────┘ ``` ### 合规性摘要 ``` Compliance Framework Summary ┌───────────┬──────────────────┬──────────────┬──────────────┬─────────────────┐ │ Framework │ Compliant Buckets│ Total Buckets│ Compliance % │ Status │ ├───────────┼──────────────────┼──────────────┼──────────────┼─────────────────┤ │ CIS │ 18 │ 25 │ 72.0% │ Good │ │ PCI-DSS │ 15 │ 25 │ 60.0% │ Needs Work │ │ HIPAA │ 25 │ 25 │ 100.0% │ Excellent │ │ SOC 2 │ 22 │ 25 │ 88.0% │ Excellent │ │ ISO 27001 │ 17 │ 25 │ 68.0% │ Good │ │ ISO 27017 │ 19 │ 25 │ 76.0% │ Good │ │ ISO 27018 │ 12 │ 25 │ 48.0% │ Needs Work │ └───────────┴──────────────────┴──────────────┴──────────────┴─────────────────┘ ``` ## 高级用法 ### 高性能扫描 ``` # 增加 worker threads 以加快扫描速度 s3-security-scanner security -w 20 # 不进行 object-level analysis 的快速扫描 s3-security-scanner security --no-object-scan # 仅合规性模式(最快) s3-security-scanner security --compliance-only --no-object-scan ``` ### 与其他工具集成 ``` # 导出结果以便使用 jq 进行进一步分析 s3-security-scanner security -q -f json && \ cat output/s3_scan_*.json | jq '.results[] | select(.is_public == true)' # 查找所有 public buckets 并修复它们 s3-security-scanner security -q -f json && \ cat output/s3_scan_*.json | jq -r '.results[] | select(.is_public == true) | .bucket_name' | \ xargs -I {} aws s3api put-public-access-block --bucket {} \ --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true" ``` ## 输出文件 扫描器会在指定的输出目录中生成多种报告格式: ### JSON 报告 (`s3_scan_region_timestamp.json`) ``` { "summary": { "scan_time": "2025-01-15T10:30:45.123456", "region": "us-east-1", "account_id": "123456789012", "total_buckets": 25, "public_buckets": 3, "high_severity_buckets": 3, "average_security_score": 78.5 }, "results": [...] } ``` ### CSV 报告 (`s3_scan_region_timestamp.csv`) 适合电子表格的格式,包含所有关键指标和合规状态。 ### HTML 报告 (`s3_scan_region_timestamp.html`) 美观且具有交互性的仪表板,包含: - **执行摘要**:关键指标和风险指标 - **交互式图表**:安全评分分布、合规状态、按严重程度划分的问题 - **详细表格**:可排序和可筛选的 bucket 分析 - **合规性矩阵**:特定于框架的合规状态 - **响应式设计**:适用于桌面和移动设备 ### 合规性报告 (`s3_compliance_region_timestamp.json`) 详细的合规性分析,包含特定于框架的结果和修复指南。 ### 日志文件 (`s3_scan_timestamp.log`) 包含调试信息和错误详情的全面执行日志。 ## 开发 ### 设置开发环境 ``` # Clone 仓库 git clone https://github.com/TocConsulting/s3-security-scanner.git cd s3-security-scanner # 创建虚拟环境 python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate # 以开发模式安装 pip install -e ".[dev]" # 安装 pre-commit hooks pre-commit install ``` ## 安全修复指南 有关 S3 Security Scanner 检测到的所有安全漏洞的全面逐步修复说明,请参阅我们详细的**[修复指南](remediation-guide.md)**。 修复指南提供: - 包含逐步操作流程的 **AWS Console 指南** - 用于自动化和编写脚本的 **AWS CLI 命令** - 用于程序化修复的 **Python boto3 代码** - 用于强化多个 bucket 的**批量修复脚本** - 针对于 GDPR、SOC 2 及其他框架的**特定合规配置** - 针对安全事件的**应急响应程序** ## 测试 ### 运行测试 该项目包含使用 Python 的 unittest 框架和 moto(用于模拟 AWS 服务)的全面单元测试。 ``` # 安装开发依赖,包括 moto[s3] pip install -e ".[dev]" # 或手动安装测试依赖 pip install pytest pytest-cov "moto[s3]" # 运行所有测试 python -m pytest tests/ -v # 运行特定的测试文件 python -m pytest tests/test_compliance.py -v # 运行以检测覆盖率 python -m pytest tests/ --cov=s3_security_scanner --cov-report=html ``` ### 测试结构 ``` tests/ ├── __init__.py ├── test_cli.py # CLI option tests ├── test_compliance.py # Compliance framework tests ├── test_scanner.py # Scanner functionality tests ├── test_cloudtrail_logging.py # CloudTrail logging tests ├── test_gdpr_compliance.py # GDPR compliance tests └── test_soc2_monitoring.py # SOC 2 monitoring tests ``` 测试专门使用 `moto[s3]` 来模拟 AWS S3 服务,允许进行全面测试,而无需实际的 AWS 资源或产生费用。 ## 支持与贡献 ### 获取帮助 - **文档**:查看此 README 和内联帮助 (`--help`) - **问题**:通过 [GitHub Issues](https://github.com/TocConsulting/s3-security-scanner/issues) 报告 Bug - **讨论**:在 [GitHub Discussions](https://github.com/TocConsulting/s3-security-scanner/discussions) 中加入讨论 ### 贡献 我们欢迎您的贡献!请参阅我们的[贡献指南](CONTRIBUTING.md)了解有关以下内容的详细信息: - 代码风格和标准 - 测试要求 - Pull Request 流程 - 开发环境设置 ### 路线图 - [ ] 与 AWS Security Hub 集成 - [ ] 支持自定义合规框架 - [ ] 自动修复功能 - [ ] REST API 接口 - [ ] Docker 容器化 - [ ] CI/CD 流水线集成 ## 许可证 该项目基于 MIT 许可证授权 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。 ## 鸣谢 - **AWS 安全最佳实践**:基于官方 AWS 安全建议 - **CIS Benchmarks**:实施 CIS AWS Foundations Benchmark 控制措施 - **安全社区**:受开源安全工具生态系统启发 **安全声明**:此工具仅出于防御性安全目的而设计。在扫描 AWS 资源之前,请务必确保您拥有适当的授权。该工具需要只读权限,未经用户明确确认,不会修改任何 AWS 资源。 **性能提示**:对象级扫描是基于抽样的(默认:每个 bucket 100 个对象),以在安全覆盖范围和扫描性能之间取得平衡。如需进行详尽的对象分析,请考虑运行专门的对象级安全工具。 **版本兼容性**:此工具支持 Python 3.8+,并针对最新的 boto3 SDK 版本进行了测试。对于旧版 Python,请使用早期版本或升级您的 Python 环境。
标签:AWS S3, Python, 安全扫描, 无后门, 时序注入, 网络安全审计, 请求拦截, 逆向工具