CodeRabbit Secure 的运行时验证是怎么工作的
测试一个疑似漏洞,光发个请求、看看响应还不够。应用得先跑起来,请求还得真正走到被查的那段代码。举个例子:有个接口看起来能让一个用户拿到另一个用户的文档。要测它,你得准备两个已登录用户、其中一人名下的一份文档,以及一个正在运行的应用。如果请求在到达接口之前就失败了,那基本说明不了应用是否正确限制了这份文档的访问。
我们在 CodeRabbit Secure 里实现了运行时验证(Runtime Verification),帮开发者实测 Deep Scan 发现的问题,并看清到底发生了什么。
我们想做成什么样
我们希望开发者在运行测试之前,先看懂这个测试是怎么回事。他们需要知道:
- 需要做哪些环境准备
- 要按哪些步骤操作
- 哪些观察结果能支持或推翻这个发现
围绕「复现指南」(Reproducer Guide),我们把整个流程串了起来,把这些信息集中到一处。开发者可以在自己的测试环境里照着做,也可以用运行时分析(Runtime Analysis),在 CodeRabbit 准备好的编程环境里直接跑。
运行时分析的结果会附带佐证,并给出几个关键信号:应用是否就绪、目标代码路径是否真的被执行到。
把发现变成复现指南
Deep Scan 的发现会带上疑似问题的上下文和位置。由于从报告发现到现在,代码可能已经改过,CodeRabbit 会在生成指南前先复查问题是否仍然存在。如果问题已经消失,或者复查没有结论,生成过程就到此为止。
对于仍然存在的问题,指南会把疑似行为与前置条件、操作步骤、预期观察结果对应起来。
用运行时分析运行指南时,它使用的是发布指南时锁定的那个版本。点「运行」不会重新检查发现,也不会自动测试最新的源码。
观看源码复查动画。
回到文档接口的例子,指南需要明确两件事:文档属于哪个用户,另一个用户会怎么尝试把它取走。
让实验跑起来
预期结果必须能区分两种情况:一种是访问了其他用户的文档,另一种是请求在到达接口之前就已失败。指南需要把假设写明确,方便开发者对照自己的环境逐项检查。如果某个必需的值或配置细节无法确定,指南应指出缺了什么,以及开发者测试前需要自行补充什么。
除非团队开启了自动验证,否则生成指南并不会直接启动测试。开发者可以先查看指南,再决定在哪里、以什么方式运行。
要用运行时分析跑指南,仓库需要先准备好一个 CodeRabbit 编程环境,里面有运行应用所需的依赖、配置和启动说明。团队也可以开启自动验证:每次深度扫描后,针对新发现的、达到指定严重级别的问题生成指南,并在仓库准备好的默认环境中自动运行。
但光把应用进程拉起来,不代表它已经可以接受测试了。服务可能正在监听,但某个必需的依赖还没就绪;也可能因为认证问题,请求根本到不了目标接口。运行时分析在判断结果时,必须把这些情况考虑进去。
观看运行时验证流程动画。
结果除了给出评估结论和支持证据之外,还会带上“应用已就绪”(Application ready)和“目标已触发”(Target exercised)两个指示项。它们用来说明 CodeRabbit 是否确认了应用已就绪,以及相关代码路径是否真的被执行到。
请使用专用测试环境,避免使用生产环境凭据。智能体(agent)可以读取为所选环境配置的变量,包括密钥。所以不要在测试脚本或命令里把这些值打印出来,因为输出可能会被保留作为证据。
看懂运行结果
运行时分析会给出三种验证状态之一:
- 已复现(Reproduced):在测试条件下,本次运行产生了支持该问题的证据。
- 未复现(Not reproduced):在这些条件下没有复现该问题,换成其他输入或配置可能会有不同结果。
暂时无法得出结论:这次运行没能得出有依据的结论。结果会说明原因和局限。每个结果只适用于所测试的代码版本和环境。复现成功,并不能说明所有已部署版本的实际表现。在文档访问的例子里,只有请求确实走到了归属校验那一步,403 才有意义;如果是因为缺少会话而被拒绝,那并没有真正测到那层保护。同样,“未能复现”并不等于“安全”。如果环境准备有问题、导致测试没测到点子上,结果就应该保持“无法得出结论”,而不是暗示漏洞不存在。观看两个 403 响应的动画。
工作流背后的决策
这个工作流把测试计划、执行和评估分开,让开发者能看清结果是怎样一步步得出的。开发者自己生成指南时,把指南单独发布出来,就有机会在执行前检查这套测试方案:核对它的假设,并在自己的环境里跑一遍。这样做也让“预期结果”和“实际观察到的行为”区分得更清楚。观看上下文证据的动画。
运行时证据带来的改变
只有当团队能确认“到底测了什么”,运行时测试才有价值。正因如此,指南、执行细节和佐证材料会和结论放在一起,随时可查。你可以配置运行时验证,在自己的环境里测试某个深度扫描发现的问题,或者使用运行时分析。在自己的代码上跑一次深度扫描,可以先从免费样本扫描开始。
验证一个疑似漏洞,光发一个请求、看看响应是不够的。CodeRabbit Secure 的运行时验证会把深度扫描(Deep Scan)的发现整理成一份复现指南(Reproducer Guide),在准备好的环境里用运行时分析(Runtime Analysis)执行它,然后告诉你:应用是否已就绪,以及目标代码路径是否真的被执行到。