KasperskyOS: ОС, где безопасность заложена в чертёж 🛡
Свою операционную систему в «Лаборатории Касперского» пишут с нуля уже больше десяти лет. Собрали три свежие статьи с Хабра про то, как она устроена: корень доверия, архитектура микроядра и драйверы на плюсах.
Коротко про систему KasperskyOS это микроядерная ОС собственной разработки. Ядро маленькое: планировщик, память, процессы, IPC. Драйверы, файловые системы и сетевой стек живут в пользовательском пространстве как обычные приложения, изолированы друг от друга, а каждое взаимодействие проходит через монитор безопасности с политиками. На этом строятся кибериммунные решения, сама ОС сертифицирована по требованиям ФСТЭК.
1. Зачем ОС нужен Root-of-Trust и как KasperskyOS работает с разными реализациями Антон Рыбаков, руководитель разработки функций безопасности KasperskyOS, объясняет, откуда в системе берётся исходная точка доверия. Корень доверия бывает разным: секрет в eFUSE на кристалле, отдельное security-ядро внутри SoC, внешний чип вроде Secure Element или TPM, открытые проекты типа OpenTitan, доверенная среда исполнения на TrustZone. В статье разбор всех этих вариантов с ограничениями, история про то, что делать, если секрет скомпрометирован и его нельзя заменить, и рассказ про KRoT HAL: слой абстракции, благодаря которому сервисы ОС видят единый интерфейс вместо особенностей конкретного чипа.
2. Безопасность микроядра: где заканчивается трюизм и начинается инженерия Анна Мелехова, старший архитектор ПО, берёт привычный тезис «микроядро безопаснее, потому что кода меньше» и проверяет его на прочность. Да, в Linux больше 40 миллионов строк и сотни системных вызовов, в микроядре десятки тысяч строк и около десятка вызовов. Но интереснее инженерные следствия. Почему в KasperskyOS можно запретить исполняемые аллокации почти всем процессам. Почему фаззинг через syzkaller находит до смешного мало ошибок. Почему KASLR в микроядре работает сильнее, а коллизии в kCFI встречаются реже.
3. Гетерогенный lookup: как одна фича C++ сделала драйвер проще, чище и быстрее, чем на C Женя Ерохин, старший разработчик с пятнадцатилетним опытом написания драйверов, рассказывает практическую историю. Драйвер VirtIO Vsock он начал писать на C и быстро упёрся в двусвязные списки, ручной подсчёт ссылок и макросы, где легко ошибиться в имени поля. Тогда драйвер переехал на C++. Дальше подробный разбор: unordered_set с shared_ptr вместо ручного подсчёта ссылок, своя хеш-функция с перегрузками, ошибка компиляции про is_transparent и объяснение, как включается гетерогенный lookup.
Читайте и делитесь мыслями в комментариях ⬇️⬇️⬇️