漏洞扫描器
像攻击者一样思考,像专家一样防御。具备 2025 年威胁态势意识。
🔧 运行时脚本
执行以进行自动化验证:
| 脚本 | 用途 | 用法 |
|---|---|---|
scripts/security_scan.py |
验证安全原则是否已应用 | python scripts/security_scan.py <project_path> |
📋 参考文件
| 文件 | 用途 |
|---|---|
| checklists.md | OWASP Top 10、认证、API、数据保护清单 |
1. 安全专家思维
核心原则
| 原则 | 应用 |
|---|---|
| 假设已失陷 | 假设攻击者已在内部进行设计 |
| 零信任 | 永远不信任,始终验证 |
| 深度防御 | 多层防护,无单点依赖 |
| 最小权限 | 仅授予所需的最小访问权限 |
| 安全失败 | 出错时拒绝访问 |
威胁建模问题
在扫描之前,先问:
- 我们在保护什么?(资产)
- 谁会攻击?(威胁主体)
- 他们会如何攻击?(攻击向量)
- 影响是什么?(业务风险)
2. OWASP Top 10:2025
风险类别
| 排名 | 类别 | 思考要点 |
|---|---|---|
| A01 | 访问控制失效 | 谁可以访问什么?IDOR、SSRF |
| A02 | 安全配置错误 | 默认值、响应头、暴露的服务 |
| A03 | 软件供应链 🆕 | 依赖、CI/CD、构建完整性 |
| A04 | 加密失效 | 弱加密、暴露的密钥 |
| A05 | 注入 | 用户输入 → 系统命令 |
| A06 | 不安全设计 | 有缺陷的架构 |
| A07 | 身份认证失效 | 会话、凭据管理 |
| A08 | 完整性失效 | 未签名的更新、被篡改的数据 |
| A09 | 日志与告警 | 监控盲区、缺乏监控 |
| A10 | 异常条件 🆕 | 错误处理、失败开放状态 |
2025 年关键变化
2021 → 2025 变化:
├── SSRF 合并到 A01(访问控制)
├── A02 升级(云/容器配置)
├── A03 新增:供应链(重点关注)
├── A10 新增:异常条件
└── 关注点转变:根因 > 症状
3. 供应链安全 (A03)
攻击面
| 向量 | 风险 | 应问的问题 |
|---|---|---|
| 依赖项 | 恶意包 | 我们是否审计新增依赖? |
| 锁定文件 | 完整性攻击 | 是否已提交? |
| 构建管道 | CI/CD 入侵 | 谁可以修改? |
| 注册表 | 仿冒域名 | 来源是否经过验证? |
防御原则
- 验证包的完整性(校验和)
- 锁定版本,审计更新
- 对关键依赖使用私有注册表
- 对制品进行签名与验证
4. 攻击面映射
映射内容
| 类别 | 元素 |
|---|---|
| 入口点 | API、表单、文件上传 |
| 数据流 | 输入 → 处理 → 输出 |
| 信任边界 | 进行认证/授权检查的位置 |
| 资产 | 密钥、PII、业务数据 |
优先级矩阵
风险 = 可能性 × 影响
高影响 + 高可能性 → 严重
高影响 + 低可能性 → 高
低影响 + 高可能性 → 中
低影响 + 低可能性 → 低
5. 风险优先级排序
CVSS + 上下文
| 因素 | 权重 | 问题 |
|---|---|---|
| CVSS 评分 | 基础严重度 | 漏洞有多严重? |
| EPSS 评分 | 利用可能性 | 是否正在被利用? |
| 资产价值 | 业务上下文 | 风险敞口是什么? |
| 暴露面 | 攻击面 | 是否面向互联网? |
优先级决策树
是否正在被主动利用(EPSS >0.5)?
├── 是 → 严重:立即处理
└── 否 → 检查 CVSS
├── CVSS ≥9.0 → 高
├── CVSS 7.0-8.9 → 结合资产价值判断
└── CVSS <7.0 → 列入后续计划
6. 异常条件 (A10 - 新增)
失败开放 vs 失败关闭
| 场景 | 失败开放(差) | 失败关闭(好) |
|---|---|---|
| 认证错误 | 允许访问 | 拒绝访问 |
| 解析失败 | 接受输入 | 拒绝输入 |
| 超时 | 无限重试 | 限制 + 中止 |
检查要点
- 异常处理器 catch-all 后静默吞掉
- 安全操作缺少错误处理
- 认证/授权中的竞态条件
- 资源耗尽场景
7. 扫描方法论
分阶段方法
1. 侦察
└── 了解目标
├── 技术栈
├── 入口点
└── 数据流
2. 发现
└── 识别潜在问题
├── 配置审查
├── 依赖分析
└── 代码模式搜索
3. 分析
└── 验证与优先级排序
├── 消除误报
├── 风险评分
└── 攻击链映射
4. 报告
└── 可执行的发现
├── 清晰的复现步骤
├── 业务影响
└── 修复指导
8. 代码模式分析
高风险模式
| 模式 | 风险 | 查找对象 |
|---|---|---|
| 查询中字符串拼接 | 注入 | "SELECT * FROM " + user_input |
| 动态代码执行 | 远程代码执行 | eval()、exec()、Function() |
| 不安全反序列化 | 远程代码执行 | pickle.loads()、unserialize() |
| 路径操作 | 目录遍历 | 文件路径中含用户输入 |
| 禁用安全机制 | 各种 | verify=False、--insecure |
密钥模式
| 类型 | 指示符 |
|---|---|
| API 密钥 | api_key、apikey、高熵值 |
| 令牌 | token、bearer、jwt |
| 凭据 | password、secret、key |
| 云 | AWS_、AZURE_、GCP_ 前缀 |
9. 云安全考量
共同责任
| 层级 | 你负责 | 提供商负责 |
|---|---|---|
| 数据 | ✅ | ❌ |
| 应用 | ✅ | ❌ |
| 操作系统/运行时 | 视情况 | 视情况 |
| 基础设施 | ❌ | ✅ |
云特定检查
- IAM:是否应用了最小权限?
- 存储:存储桶是否公开?
- 网络:安全组是否收紧?
- 密钥:是否在使用密钥管理服务?
10. 反模式
| ❌ 不要 | ✅ 应当 |
|---|---|
| 在不理解的情况下扫描 | 先映射攻击面 |
| 对每个 CVE 都告警 | 按可利用性 + 资产排序 |
| 忽略误报 | 维护经过验证的基线 |
| 只修复症状 | 解决根因 |
| 部署前扫描一次 | 持续扫描 |
| 盲目信任第三方依赖 | 验证完整性,审计代码 |
11. 报告原则
发现的结构
每个发现都应回答:
- 是什么? - 清晰的漏洞描述
- 在哪里? - 精确位置(文件、行、端点)
- 为什么? - 根因解释
- 影响? - 业务后果
- 如何修复? - 具体的修复方法
严重程度分类
| 严重程度 | 标准 |
|---|---|
| 严重 | 远程代码执行、认证绕过、大规模数据泄露 |
| 高 | 数据泄露、权限提升 |
| 中 | 影响范围有限,需要特定条件 |
| 低 | 信息性、最佳实践 |
请记住: 漏洞扫描发现问题。专家思维对重要的内容进行优先级排序。始终自问:"攻击者会如何利用这一点?"
适用场景
本技能适用于执行上述概述中描述的工作流或操作。
局限性
- 仅在任务明确符合上述范围时使用本技能。
- 不要将输出视为针对特定环境的验证、测试或专家审查的替代。
- 如果缺少必需的输入、权限、安全边界或成功标准,请停下来并请求澄清。