Code Diversification Mechanisms for Securing the Internet of Things ∗

Internet of Things (IoT) is the networking of physical objects (or things) having embedded various forms of electronics, software, and sensors, and equipped with connectivity to enable the exchange of information. IoT is gaining popularity due to the great benefits it can offer in domestic and industrial settings as well as public infrastructures. However, securing IoT has proven a complex task, which is largely disregarded by industry for which the business driving force asks for functionality instead of safety or security. Securing IoT is also made difficult by of the resource constraints on the majority of these devices, which also need to be cheap. IoT devices are often deployed in large numbers. The fact that such a large amount of devices are programmed in the same way allows an attacker to exploit one vulnerability in millions of devices at once, thus with much more gains at the same cost. To address this challenge we propose to consider inclusion of diversification and randomisation mechanisms, at program design, implementation, and execution levels of IoT systems, to diversify observable program behaviour and thus increase resilience. By resilience we mean the ability to resist against attacks and the ability to recover quickly and with limited damages in case of infringements. Although diversity cannot protect against all kinds of attacks, it has proven a strong defence mechanism. Software diversity is a research topic with several recent comprehensive surveys [1, 2]. Diversity techniques can be simply summarized as introducing uncertainty in the targeted program. Detailed knowledge of the target software (i.e., the exact binary rather than the high level code) is essential for a wide range of attacks, like memory corruption attacks, including control injection [3, 4, 5]. Diversity techniques strive to include in software implementations high entropy so the attacker has a hard time figuring out the exact internal functioning of the system. The range of techniques for diversification through program transformation is large, and include approaches that vary with respect to threat models, security, performance, and practicality [1]. Software diversification has been applied at all levels of software, reaching the microprocessors level, the compiler or the network. Automated techniques from programming languages like information flow static analysis [6] have been extended to the dynamic setting to protect against code injection. Dynamic taint analysis [7] automatically detects injection attacks without need for source code or special compilation for the monitored program, and hence works on commodity software. TaintCheck [7] was an example tool that performs binary rewriting at run time. Such techniques are still very popular and have been e.g., adopted for mobile operating systems [8] to protect the privacy of mobile apps [9]. It is interesting to see how such modern dynamic analysis techniques can be coupled with diversification techniques. Automated software diversification can also be used to counter bugs in software at runtime, thus making the system more robust, and applications to embedded systems have been proposed [10]. However, the diversification techniques are usually developed for standard operating systems or processor architectures running on powerful computing devices like PCs or phones. There is very little research on which diversification mechanisms can be applied to IoT and how. Moreover, we are interested in automated diversification techniques, in particular, techniques that can be employed at design and compile time, because these could be deployed e.g., on