# Internal Interface Diversification as a Security Measure in Sensor Networks +
## 4 Diversifiable Interfaces in IoT Operating Systems
#### Diversifiable Interfaces in IoT Operating Systems  
We studied the previously discussed interfaces in 20 IoT operating systems. Our findings are listed in Table 1. We included many notable IoT-friendly operating systems in the study, some commercial and many open-source. Our list of IoT operating systems certainly is not exhaustive and new ones are in the making as new use cases for the IoT are found. Still, we believe our survey gives a good picture of the current interfaces available in IoT operating systems. Table 1 shows the availability of the MMU support (not strictly necessary for memory layout diversification), system call interface and shell for each studied operating system. The availability \begin{table}
\begin{tabular}{c c c c c} \hline \hline
**OS** & **Source Code** & **MMU Support** & **System Calls** & **Shell** \\ \hline Android Things & Available & Yes & Yes [33] & Yes \\ ChibiOS & Available & No & Minimal [34] & Yes \\ Contiki & Available & No & No [35] & Yes [36] \\ Amazon FreeRTOS & Available & No & No [37] & Yes \\ GNU/Linux & Available & Required & Yes & Yes \\ Integrity & Closed & Yes & Yes [38] & No \\ MANTS & Available & No & No [39] & Yes \\ mbed & Available & No/uVisor & Partial [40] & Yes \\ Mynewt & Available & No [41] & No [42] & Yes \\ Nano-RK & Available & No & No [43] & No \\ Neutrino & Closed & Yes [44] & Yes [45] & Yes \\ NuttX & Available & Partial & Yes [46] & Yes \\ Particle & Available & No & No [47] & Yes \\ RIOT & Available & No & No [48] & Yes \\ TinyOS & Available & No & No [49] & Yes \\ UIUC LiteOS & Available & No & Yes [50] & No \\ VxWorks & Closed & Yes & Yes [51] & Yes \\ Windows IoT & Closed & Yes & Yes [52] & Yes \\ \hline Yocto Project & Available & \multicolumn{3}{c}{Based on GNU/Linux} \\ \hline Zephyr & Available & Yes [53] & Yes [54] & Yes \\ \hline \hline \end{tabular}
\end{table} 
Table 1: The diversifiable interfaces in various IoT operating systems. of source code is also listed as open-source systems are generally better suited for diversification, although diversification techniques can and often are also used on the binary level [55]. In some cases, for example, the cases of RIOT and TinyOS, the number of interfaces to which we can apply diversification appears to be limited without concrete use cases. However, many operating systems, like Linux and Android Things, contain several essential interfaces that would benefit from diversification and are relevant to protect. In addition, all the proprietary systems we studied seem to contain many diversifiable interfaces. However, actually using diversification on them may require close collaboration with the commercial entity due to inflexible default licenses. The lack of access to the whole source code of the system is also a challenge, as the diversification secret needs to be propagated throughout the whole system. _Android Things_ (formerly called Brillo), an operating system geared toward the IoT by Google, is still in developer preview, but from a security and diversification perspective, the architecture looks promising. This is achieved by requiring hardware that is richer in features [56] compared to most other devices used in the IoT domain. As MMUs have been scarce in the IoT environment, many other IoT operating systems lack the extra protection afforded by potentially compatible devices that would support an MMU. In contrast to Android Things, the open-source operating system _Contiki_ requires little memory but also has no support for a memory management unit or system call interface. Diversifiable interfaces are challenging to study on an operating system as small as Contiki as there is not a lot more within the system than the kernel itself. Contiki does include a shell where the language of the shell could be diversified, but the shell is not required by any part of a normal system and therefore, is optional. Another potentially diversifiable feature in Contiki is the networking protocol doWPAN [57], where the protocol could be regarded as an interface.