seL4的形式化验证步骤是啥是否对已知的所有攻击形式免疫

本来是想偷懒看大牛总结的,不过看来都太忙。自问自答,抛砖引玉吧。
seL4的形式验证步骤,看http://ssrg.nicta.com.au/publications/papers/Klein_EHACDEEKNSTW_09.pdf 里写的是:
写出IPC、syscall、调度等所有微内核对象的抽象规范Abstract Specification(in Isabelle)。写出如上对象的可执行规范Executable Specification(in Haskell),并证明其正确实现了第一步的抽象规范。手写C实现。通过一个SML写的C-Isabelle转换器,和Haskabelle联合形式证明C代码和第二步的Haskell定义语义一致。 证明方法可概述为:构建一个机器模型,模型中包含寄存器、内存、IRQ、cache等所有可被代码影响的硬件。然后证明对抽象规范每一步状态转换,可执行规范都产生唯一对应的状态转换(换言之,两个状态机等价)。 该转换器据称精确(对验证而言)实现了绝大部分C99规范但不是全部。为此(及形式验证的需要)对seL4里使用C进行了如下限制:1,栈变量不得取引用,必要时以全局变量代替;2,因为C99不定义函数调用时参数求值的顺序,限制所有函数参数必须事先显式求值;3,禁止函数指针。此外,该转换器不支持union,因为kernel编程对精确的要求,他们另外写了一个工具实现所有bitfield的需求,生成数组并直接内联进对应架构编译后的汇编代码。
【seL4的形式化验证步骤是啥是否对已知的所有攻击形式免疫】 对已知攻击的防御,从http://ertos.nicta.com.au/research/l4.verified/proof.pml 来看有:
缓冲区溢出解引用空指针指针类型错误内存泄漏(含野指针)算术溢出及其导致的异常(超过32位边界等等)seL4开发者很骄傲的表示这些都是does not occur in seL4的,当然我还没看懂不敢背书。是否还有其他类型的攻击没防御到就等黑客界大牛过来点评了。


    推荐阅读