Multiserver operating systems have great potential to improve dependability, but, paradoxically, are paired with inherently more complex interprocess communication (IPC). Several projects have attempted to run drivers and extensions in isolated protection domains, but a systematic way to deal with IPC threats posed by untrusted parties is not yet available in the literature. IPC is fundamental to the dependability of multiserver systems.In this paper, we present a classification of IPC threats in multiserver systems with unreliable and hostile senders and receivers, such as resource exhaustion, spoofing, and unauthorized access. We also introduce an extended asymmetric trust model, describing two new IPC vulnerabilities relating to caller blockage. Based on our classification of IPC threats we present the IPC defense mechanisms and architecture of MINIX 3.Keywords: Classification of IPC Threats, Dependable IPC Architecture, Multiserver Operating Systems
IPC MUST BE DEPENDABLEMultiserver systems have great potential to improve operating system dependability. By running untrusted code in separate protection domains, bugs are better contained than in monolithic systems. In addition, the modular designs provide better abstractions and debugging and development support. Regardless of the reasons for using a modular multiserver design, one important caveat is that services can no longer make direct function calls. Instead, the kernel provides IPC services that allow sequential processes to synchronize and communicate [8]. However, since software cannot be trusted to be correct [1,5,12,26,28], this poses new challenges with respect to IPC threats caused by, for example, programming bugs, design and run-time faults, or misconfigured extensions, or malicious intent.To get an impression of what multiserver IPC entails, it is important to realize that seemingly simple system calls can cause intricate IPC patterns, whereas, applications can perform thousands of system calls per second. In MINIX 3, for example, a read or write call may lead to over 25 IPC messages between the application, virtual file system, file server, disk driver, and kernel. Measurements on Mac OS X and OpenDarwin, which use the Mach IPC mechanism, reported 102,885 and 29,895 messages from system boot until the shell is available, respectively [27]. We conducted the same measurement on MINIX 3 and obtained a similar number of 61,331 messages. Another experiment with ls -alR in /usr/src yielded 68,973 messages, whereas wget minix3.org initiated 4,862 messages. Background activity, such as the random driver gathering entropy, caused 476 messages/sec-with one IPC call taking in the order of a microsecond, this costs less than 0.05% of the CPU.The above examples constitute legitimate IPC, but without precautions, buggy senders and receivers (as shown in Fig.