Zhuohua Li, Jincheng Wang, Mingshen Sun and John C.S. Lui
Proceedings of the 14th International Conference on Availability, Reliability and Security, The 3rd International Workshop on Security and Forensics of IoT (in conjunction with ARES 2019), IoT-SECFOR '19, Canterbury, UK, August 2019.

Availability:

Abstract. Device drivers on Linux-powered embedded or IoT systems execute in kernel space thus must be fully trusted. Any fault in drivers may significantly impact the whole system. However, third-party embedded hardware manufacturers usually ship their proprietary device drivers with their embedded devices. These out-of-tree device drivers are generally of poor quality because of a lack of code audit. In this paper, we propose a new approach that helps third-party developers to improve the reliability and safety of device drivers without modifying the kernel: Rewriting device drivers in a memory-safe programming language called Rust. Rust’s rigorous language model assists the device driver developers to detect many security issues at compile time. We designed a framework to help developers to quickly build device drivers in Rust. We also utilized Rust’s security features to provide several useful infrastructures for developers so that they can easily handle kernel memory allocation and concurrency management, at the same time, some common bugs (e.g. use-after-free) can be alleviated. We demonstrate the generality of our framework by implementing a real-world device driver on Raspberry Pi 3, and our evaluation shows that device drivers generated by our framework have acceptable binary size for canonical embedded systems and the runtime overhead is negligible.

BibTeX Record:

@inproceedings{li2019securing,
    author    = "Zhuohua Li and Jincheng Wang and Mingshen Sun and John C. S. Lui",
    title     = "{Securing the Device Drivers of Your Embedded Systems: Framework and Prototype}",
    booktitle = "Proceedings of the 14th International Conference on Availability, Reliability and Security",
    series    = {ARES '19},
    year      = {2019},
}