Я слышал, как утверждал ( исследователь, работающий над конкурирующей техникой микроядра ), что очень мало известно о том, как оценивать безопасность систем, которые расширяются с помощью управляемого кода.
Проблема заключается в том, что ошибки, которые могут вызвать дыру в безопасности, сильно отличаются от привычных для исследователей безопасности. В традиционном микроядре все драйверы и другие части ядра изолированы друг от друга, выполняя их в разных адресных пространствах. В микроядре, где изоляция реализована с помощью управляемого кода с проверкой типов, вы избегаете огромных накладных расходов при переключении адресных пространств каждый раз, когда вам необходимо использовать вспомогательную услугу, но компромисс заключается в том, что теперь оценка механизма изоляции более сложна.
Любая конкретная часть ядра (скажем, драйвер устройства), написанная на управляемом языке, безопасна тогда и только тогда, когда средство проверки типов говорит, что драйвер безопасен и средство проверки типов не содержит ошибок. Таким образом, средство проверки типов является частью ядра ядра. На практике кажется, что шашки типа значительно больше и сложнее, чем традиционные ядра микроядра. Это означает, что поверхность атаки потенциально больше.
Я не знаю, являются ли традиционные методы изоляции микроядра или методы изоляции на основе управляемого кода более или менее надежными. Здесь есть проблема с самозагрузкой: пока широко не используются методы изоляции управляемого кода, мы не будем знать, насколько часто они небезопасны. Но не зная, насколько они небезопасны, их сложно развернуть в ситуациях, критичных для безопасности.