漏洞扫描器
像攻击者一样思考,像专家一样防御。了解 2025 年的威胁态势。
🔧 运行时脚本
可选启发式扫描(非安全验证):
| 脚本 | 用途 | 用法 |
|---|
scripts/security_scan.py | 验证安全原则是否已应用 | python scripts/security_scan.py <project_path> |
📋 参考文件
1. 安全专家思维
核心原则
| 原则 | 应用 |
|---|
| 假设已遭入侵 | 按攻击者已在内部的情况进行设计 |
| 零信任 | 永不信任,始终验证 |
| 深度防御 | 多层防护,不设单点 |
| 最小权限 | 仅授予所需的最低权限 |
| 故障时保持安全 | 出错时拒绝访问 |
威胁建模问题
扫描前,请先问:
- 我们要保护什么?(资产)
- 谁会发动攻击?(威胁参与者)
- 他们会如何攻击?(攻击向量)
- 会造成什么影响?(业务风险)
2. OWASP Top 10:2025
风险类别
| 排名 | 类别 | 思考要点 |
|---|
| A01 | 访问控制失效 | 谁能访问什么?IDOR、SSRF |
| A02 | 安全配置错误 | 默认设置、标头、暴露的服务 |
| A03 | 软件供应链 🆕 | 依赖项、CI/CD、构建完整性 |
| A04 | 加密失效 | 弱加密、暴露的机密 |
| A05 | 注入 | 用户输入 → 系统命令 |
| A06 | 不安全的设计 | 有缺陷的架构 |
| A07 | 身份验证失效 | 会话、凭据管理 |
| A08 | 完整性失效 | 未签名的更新、被篡改的数据 |
| A09 | 日志记录与告警 | 盲点、缺少监控 |
| A10 | 异常情况 🆕 | 错误处理、故障时默认放行 |
2025 年关键变化
2021 → 2025 Shifts:
├── SSRF merged into A01 (Access Control)
├── A02 elevated (Cloud/Container configs)
├── A03 NEW: Supply Chain (major focus)
├── A10 NEW: Exceptional Conditions
└── Focus shift: Root causes > Symptoms
3. 供应链安全(A03)
攻击面
| 向量 | 风险 | 要问的问题 |
|---|
| 依赖项 | 恶意软件包 | 我们会审核新依赖吗? |
| 锁定文件 | 完整性攻击 | 这些文件已提交吗? |
| 构建流水线 | CI/CD 遭入侵 | 谁可以修改? |
| 注册表 | 仿冒包名 | 来源经过验证吗? |
防御原则
- 验证软件包完整性(校验和)
- 固定版本,审核更新
- 对关键依赖使用私有注册表
- 对构件进行签名和验证
4. 攻击面映射
映射内容
| 类别 | 要素 |
|---|
| 入口点 | API、表单、文件上传 |
| 数据流 | 输入 → 处理 → 输出 |
| 信任边界 | 检查身份验证/授权的位置 |
| 资产 | 机密、PII、业务数据 |
优先级矩阵
Risk = Likelihood × Impact
High Impact + High Likelihood → CRITICAL
High Impact + Low Likelihood → HIGH
Low Impact + High Likelihood → MEDIUM
Low Impact + Low Likelihood → LOW
5. 风险优先级排序
CVSS + 上下文
| 因素 | 权重 | 问题 |
|---|
| CVSS 分数 | 基本严重性 | 漏洞有多严重? |
| EPSS 分数 | 预测的漏洞利用概率 | 未来 30 天内遭到利用的概率;这并不能证明漏洞正在被主动利用 |
| 资产价值 | 业务背景 | 有什么风险? |
| 暴露程度 | 攻击面 | 是否面向互联网? |
优先级决策树
Is there credible active-exploitation evidence (for example a relevant KEV entry or incident evidence)?
├── YES → CRITICAL: Immediate action
└── NO → Check CVSS
├── CVSS ≥9.0 → HIGH
├── CVSS 7.0-8.9 → Consider asset value
└── CVSS <7.0 → Schedule for later
6. 异常情况(A10 - 新增)
故障时默认放行与故障时默认拒绝
| 场景 | 故障时默认放行(不佳) | 故障时默认拒绝(良好) |
|---|
| 身份验证错误 | 允许访问 | 拒绝访问 |
| 解析失败 | 接受输入 | 拒绝输入 |
| 超时 | 无限重试 | 限制重试并中止 |
检查内容
- 捕获所有异常后忽略异常的处理程序
- 安全操作缺少错误处理
- 身份验证/授权中的竞态条件
- 资源耗尽情况
7. 扫描方法
分阶段方法
1. RECONNAISSANCE
└── Understand the target
├── Technology stack
├── Entry points
└── Data flows
2. DISCOVERY
└── Identify potential issues
├── Configuration review
├── Dependency analysis
└── Code pattern search
3. ANALYSIS
└── Validate and prioritize
├── False positive elimination
├── Risk scoring
└── Attack chain mapping
4. REPORTING
└── Actionable findings
├── Clear reproduction steps
├── Business impact
└── Remediation guidance
8. 代码模式分析
高风险模式
| 模式 | 风险 | 查找内容 |
|---|
| 查询中进行字符串拼接 | 注入 | "SELECT * FROM " + user_input |
| 动态代码执行 | RCE | eval()、exec()、Function() |
| 不安全的反序列化 | RCE | pickle.loads()、unserialize() |
| 路径操作 | 路径遍历 | 文件路径中的用户输入 |
| 禁用安全功能 | 各种风险 | verify=False、--insecure |
秘密信息模式
| 类型 | 指标 |
|---|
| API 密钥 | api_key、apikey、高熵值 |
| 令牌 | token、bearer、jwt |
| 凭据 | password、secret、key |
| 云服务 | AWS_、AZURE_、GCP_ 前缀 |
9. 云安全注意事项
共同责任
| 层级 | 由你负责 | 由提供商负责 |
|---|
| 数据 | ✅ | ❌ |
| 应用程序 | ✅ | ❌ |
| OS/运行时 | 视情况而定 | 视情况而定 |
| 基础设施 | ❌ | ✅ |
云服务专项检查
- IAM:是否遵循最小权限原则?
- 存储:是否存在公开存储桶?
- 网络:是否收紧了安全组设置?
- 秘密信息:是否使用了秘密管理器?
10. 反模式
| ❌ 不要 | ✅ 应该 |
|---|
| 未了解情况就扫描 | 先绘制攻击面 |
| 对每个 CVE 都发出警报 | 根据可利用性和资产优先级排序 |
| 忽略误报 | 维护经过验证的基线 |
| 只修复表面问题 | 解决根本原因 |
| 只在部署前扫描一次 | 持续扫描 |
| 盲目信任第三方依赖 | 验证完整性并审计代码 |
11. 报告原则
发现项结构
每项发现都应回答:
- 是什么? - 清晰描述漏洞
- 在哪里? - 准确位置(文件、行、端点)
- 为什么? - 解释根本原因
- 影响是什么? - 对业务的影响
- 如何修复? - 具体的修复措施
严重性分类
| 严重性 | 标准 |
|---|
| 严重 | RCE、绕过身份验证、大规模数据泄露 |
| 高 | 数据泄露、权限提升 |
| 中 | 范围有限,且需要满足特定条件 |
| 低 | 仅供参考,属于最佳实践 |
请记住: 漏洞扫描可以发现问题。专家思维能确定哪些问题最重要。始终要问:“攻击者会如何利用这个问题?”
适用场景
当任务符合概述中描述的工作流或操作时,可使用此技能。
限制
- 随附的扫描器使用正则表达式启发式方法,而非数据流或可达性分析;匹配结果需要人工验证,未匹配到内容也不能作为安全结论。它不会检查 Git 历史、二进制文件和已跳过的目录。网络依赖项审计需通过
--allow-network 选择启用,并会将依赖项元数据发送到配置的注册表。读取或工具错误意味着覆盖不完整;不要将其视为通过检查。
- 仅当任务明确符合上述范围时,才使用此技能。
- 不要将输出视为针对特定环境的验证、测试或专家审查的替代品。
- 如果缺少必要的输入、权限、安全边界或成功标准,请停止并请求澄清。