TLS模糊测试梳理
星期三, 11月 6, 2024 | 3分钟阅读 | 更新于 星期日, 12月 8, 2024
本篇博客对于TLS_Anvil论文进行梳理,对模糊测试中的部分概念以及TLS中的测试点进行记录。
Test Oracle 的定义 Given the input for a system, the challenge of distinguishing the corresponding desired, correct behavior from potentially incorrect behavior is called the “test oracle problem”
TLS 中Test Oracle 的定义 Previous attempts to solve the test oracle problem for the TLS protocol defined the “desired, correct behavior” of a TLS implementation as having exactly the same output as a reference implementation.
历史方法因为产生很高的误报率(false positive)导致失败。在 TLS 中,对特定输入通常有多种有效响应,但每一个偏离参考实现的情况都被视为缺陷。最终,作者只能证明库之间存在行为差异。一个克服误报的简单方法,是由人工为每种输入参数组合指定正确行为,但为了实现彻底覆盖所需的指数级测试数量无法手动生成。
测试 Oracle 可以从系统的正式规范、源代码中的断言、伪 Oracle、回归测试,或者从程序代码中的自动检测到的不变性中得出。这些方法要么需要 TLS 不具备的特殊形式的正式规范,要么只能用于测试功能属性。自动从可读规范生成测试 Oracle 的方法要么面临生成的正式描述的指数增长,要么需要限制自然语言。
T-way 测试的定义 One way to reduce the number of possible parameter combinations is a CT method called t-way testing. In t-way testing, all possible combinations of up to t parameters out of the n parameters are used for testing. If t < n, the number of tests can be further reduced by including two or more t-sets in the same test vector. If t « n, this results in a significant reduction in the number of tests.(减少可能的参数组合数量的一种组合测试方法叫做 t-way 测试。在 t-way 测试中,从 n 个参数中选择最多 t 个参数的所有可能组合用于测试。当 t 小于 n 时,可以通过在同一个测试向量中包含两个或多个 t 集合来进一步减少测试数量。如果 t 远远小于 n,则测试数量会显著减少。)
组合测试是开发精确测试输入的合适选择,具有高度的灵活性,能够触发 TLS 中的边界情况(corner case)。然而,使用这种方法对 TLS 进行评估还面临进一步的挑战,这些挑战在之前的科学研究中尚未解决,主要来源于 TLS 的复杂性和参数之间的语义依赖关系,导致某些参数组合无法轻松使用或测试。
例如,如果测试某个库是否能完成握手,必须选择被系统(SUT, System Under Test)支持的密码套件;而如果测试椭圆曲线计算,就必须进一步将选择限制在椭圆曲线密码套件之中。虽然这些例子中的参数依赖关系相对简单,但在不同测试场景中,参数之间的相互作用可能变得非常复杂。
比如,测试客户端对服务器生成的签名的验证时,所选的密码套件、签名算法和服务器证书之间会产生相互作用,这些参数的组合最终会影响签名的有效性。即使签名的具体字节值是正确的,但由于选择了不兼容的密码套件、签名算法和服务器证书,整个组合也可能是无效的。如果忽略这些依赖关系,测试结果可能只是反映了无效的参数选择,而不是数字签名验证的有效性,从而导致测试 Oracle 不可靠。
因此,测试 TLS 协议时,必须考虑参数之间的依赖关系,确保选择的参数组合在语义上合理,这样才能获得可靠的测试结果。