3. 漏洞发现阶段:内部发现、外部发现、自动化扫描、人工渗透测试
漏洞发现,说白了就是「找茬」。但找茬也得讲规矩。我见过不少团队,漏洞发现全靠运气——谁今天心情好扫一把,或者哪个研究员心血来潮报一个。这不行。合规流程下,漏洞发现必须是有序的、可追溯的、覆盖全面的。
我个人习惯把漏洞发现分成四个维度:内部发现、外部发现、自动化扫描、人工渗透测试。它们不是互斥的,而是互补的。你想想看,一个完整的漏洞发现体系,应该像一张网,而不是一根针。
3.1 内部发现:自己人先动手
内部发现,就是组织内部人员主动发现的漏洞。这包括开发人员、测试人员、运维人员,甚至产品经理。嗯,别小看产品经理,他们有时候能发现逻辑漏洞。
我在项目中遇到过一件事:一个开发同学在写代码时,发现了一个 SQL 注入的隐患。他随手改了,但没记录。后来合规审计时,我们拿不出任何证据证明这个漏洞被「发现」过。你说冤不冤?
所以,内部发现必须要有流程支撑:
- 发现即记录:任何人在任何环节发现疑似漏洞,必须第一时间录入漏洞管理系统。
- 分级上报:低危漏洞走常规流程,高危/严重漏洞需要 24 小时内通知安全负责人。
- 奖励机制:内部发现也要有激励。我建议设立「内部挖洞奖」,哪怕是一个小小的 XSS,也值得鼓励。
3.2 外部发现:来自第三方的「惊喜」
外部发现,指的是来自组织外部的漏洞报告。这包括:
- 安全研究员:通过漏洞赏金计划(Bug Bounty)提交的漏洞。
- 客户/用户:用户在使用产品时发现的安全问题。
- 公开渠道:如 GitHub Issues、安全社区、暗网论坛等。
- 监管通报:监管部门或行业组织通报的漏洞。
外部发现有个特点:你控制不了来源。我曾经遇到一个案例,一个研究员在 Twitter 上公开了一个 0day,我们团队是看到推文才知道的。那叫一个被动。
所以,外部发现的核心是「响应速度」和「渠道管理」:
| 渠道类型 | 响应时限 | 处理流程 |
|---|---|---|
| 漏洞赏金平台 | 48 小时内确认 | 平台自动通知 → 安全团队评估 → 修复 → 奖励发放 |
| 客户报告 | 24 小时内回复 | 客服转安全团队 → 确认漏洞 → 修复 → 客户告知 |
| 公开渠道 | 4 小时内响应 | 监控告警 → 紧急评估 → 启动应急响应 |
| 监管通报 | 按监管要求 | 合规部门牵头 → 安全团队配合 → 正式回复 |
3.3 自动化扫描:机器替你干活
自动化扫描,是漏洞发现的主力军。说白了,就是让工具替你跑一遍。常见的扫描类型包括:
- DAST(动态应用安全测试):黑盒扫描,模拟攻击者行为。
- SAST(静态应用安全测试):白盒扫描,分析源代码。
- SCA(软件组成分析):检查第三方组件和依赖库的已知漏洞。
- IAST(交互式应用安全测试):结合运行时数据,精度更高。
自动化扫描的好处是「快」,坏处是「吵」。我见过一个团队,每天跑一次 DAST,结果告警邮件堆了上千条,没人看。这跟没扫有什么区别?
我的建议是:
- 定频扫描:核心系统每天一次,非核心系统每周一次。
- 结果去重:同一个漏洞反复报,只保留一条。
- 误报过滤:建立误报库,自动忽略已知误报。
- 分级推送:高危漏洞直接推送到负责人手机,低危漏洞走邮件周报。
一个实用的扫描策略:
# 扫描频率配置示例
# 核心业务系统
scan_frequency:
core:
daist: daily
saist: on_commit
sca: weekly
non_core:
daist: weekly
saist: on_release
sca: monthly
# 告警规则
alert_rules:
critical: push_notification + email
high: email + slack
medium: weekly_report
low: monthly_report
3.4 人工渗透测试:机器做不到的事
自动化扫描能发现「已知的已知」,但「已知的未知」和「未知的未知」怎么办?这就需要人工渗透测试了。
人工渗透测试的价值在于:
- 逻辑漏洞:比如越权、业务逻辑绕过,机器很难识别。
- 组合攻击:多个低危漏洞组合成高危攻击链。
- 0day 挖掘:自动化扫描依赖已知规则,人工可以探索未知。
我记得有一次,自动化扫描报告说系统「安全」。但人工渗透测试时,我们发现了一个「密码重置链接未失效」的问题——攻击者可以无限次使用同一个链接重置密码。这种漏洞,扫描器根本扫不出来。
人工渗透测试的流程,我建议这样走:
- 范围确认:明确测试目标、测试深度、禁止操作。
- 信息收集:子域名、API 接口、技术栈等。
- 漏洞挖掘:手动测试 + 工具辅助。
- 漏洞验证:确认漏洞可复现,排除误报。
- 报告输出:包含漏洞描述、复现步骤、修复建议。
3.5 四种发现方式的协同
四种方式不是孤立的。我画了一张图,帮你理解它们之间的关系:
你看,内部发现和外部发现负责「来源覆盖」,自动化扫描和人工渗透负责「深度覆盖」。所有漏洞最终汇聚到统一的漏洞库,再进行评估、修复、验证。这样才不会漏掉任何一个。
嗯,这里要注意:汇聚不是简单的合并。我建议在漏洞库里给每个漏洞打上「发现方式」的标签。这样后续分析时,你可以知道哪种方式最有效,从而优化资源配置。
总结一下我的经验:
- 内部发现:靠制度,靠激励,别让好人吃亏。
- 外部发现:靠渠道,靠速度,别让报告者等太久。
- 自动化扫描:靠频率,靠去重,别让告警变噪音。
- 人工渗透:靠经验,靠流程,别让测试变事故。