WebKit JavaScript字节码中的信息流控制
1. 宽松升级检查与改进
在信息流控制中,标准的NSU(Non-Secure Update)检查存在一定的局限性。当尝试在高安全级别(高pc)的环境下为变量分配低安全级别(低标签)的值时,程序执行会被立即终止。例如,在代码 l = 0; if (h) {l = 1;} 中,假设 h 存储的是高安全级别(H标签)的值,那么在执行 l = 1 时,程序就会停止。
Austin和Flanagan(以下简称AF)指出,这种做法可能过于严格。如果 l 实际上不会产生可观察到的影响,比如在 if (h) {l = 1;} 之后 l 马上会被一个常量覆盖,那么这种终止就没有必要。因此,他们提出了一种宽松升级检查的方法,即在 l = 1 这一指令处,将一种特殊的污点标记 ⋆ 传播到 l 中。只有当程序试图以可观察的方式使用带有 ⋆ 标记的值时,才会终止程序执行,AF将这种特殊污点标记称为 “部分泄露”(P)。这种方法比标准NSU允许更多的程序继续执行,所以我们采用了它。对于我们来说,这种额外的宽松性是至关重要的,因为WebKit编译器经常在分支中生成无意义的赋值,如果使用标准NSU,程序执行会无意义地终止。
不过,我们和AF在对带有 ⋆ 标记的值的使用定义上有所不同。AF将 ⋆ 出现在分
超级会员免费看
订阅专栏 解锁全文
16

被折叠的 条评论
为什么被折叠?



