The kernel is the most safety- and security-critical component of many computer systems, as the most severe bugs lead to complete system crash or exploit. It is thus desirable to guarantee that a kernel is free from these bugs using formal methods, but the high cost and expertise required to do so are deterrent to wide applicability. We propose a method that can verify both absence of runtime errors (i.e. crashes) and absence of privilege escalation (i.e. exploits) in embedded kernels from their binary executables. The method can verify the kernel runtime independently from the application, at the expense of only a few lines of simple annotations. When given a specific application, the method can verify simple kernels without any human intervention. We demonstrate our method on two different use cases: we use our tool to help the development of a new embedded real-time kernel, and we verify an existing industrial real-time kernel executable with no modification. Results show that the method is fast, simple to use, and can prevent real errors and security vulnerabilities.
翻译:内核是许多计算机系统最安全和最关键的部分,因为最严重的错误导致系统全面崩溃或开发,因此最好保证内核使用正式方法,但这样做所需的高成本和高专业知识能够阻止广泛应用。我们建议一种方法,既可以核查嵌入的内核没有运行时的错误(即崩溃),也可以核查没有从二进制执行文件中插入的特权升级(即剥削)。这种方法可以独立核查内核运行的时间,而不必使用几个简单的说明线。在具体应用时,这种方法可以核查简单的内核,而无需任何人类干预。我们在两个不同的用途案例中展示了我们的方法:我们使用我们的工具来帮助开发一个新的嵌入实时内核,我们核查现有的工业实时内核,可以不作任何修改。结果显示,这种方法使用得很快,简单易用,可以防止实际错误和安全弱点。