Введение
Фреймворк, позволяющий ядру Linux поддерживать различные модели компьютерной безопасности. Модули безопасности Linux (LSM) – это фреймворк, обеспечивающий поддержку ядром Linux разнообразных моделей компьютерной безопасности без какой-либо предвзятости. LSM лицензируется на условиях GNU General Public License и является стандартной частью ядра Linux начиная с версии 2.6. AppArmor, SELinux, Smack и TOMOYO Linux в настоящее время являются утвержденными модулями безопасности, включенными в официальное ядро.
Linux Security Modules (LSM) is a framework allowing the Linux kernel to support without bias a variety of computer security models. LSM is licensed under the terms of the GNU General Public License and is a standard part of the Linux kernel since Linux 2.6. AppArmor, SELinux, Smack, and TOMOYO Linux are the currently approved security modules in the official kernel.
Дизайн
LSM был разработан для удовлетворения всех требований к успешной реализации модуля обязательного контроля доступа, при этом внося минимально возможное количество изменений в ядро Linux. LSM избегает подхода интерпозиции системных вызовов, используемого Systrace, поскольку он не масштабируется для многопроцессорных ядер и уязвим к атакам TOCTTOU (гонка данных). Вместо этого LSM вставляет "хуки" (вызовы к модулю) во все точки ядра, где системный вызов пользовательского уровня собирается привести к доступу к важному внутреннему объекту ядра, такому как иноды и блоки управления задачами. LSM имеет узкую направленность на решение проблемы контроля доступа, не навязывая при этом масштабное и сложное изменение основному ядру. Он не предназначен для использования в качестве общего механизма "подключения" или "вызова", а также не поддерживает виртуализацию на уровне операционной системы. Цель контроля доступа LSM тесно связана с задачей системного аудита, но имеет тонкие различия. Аудит требует регистрации каждой попытки доступа. LSM не может этого обеспечить, поскольку для этого потребовалось бы значительно больше хуков для обнаружения случаев, когда ядро "обходит" неудачные системные вызовы и возвращает код ошибки до обращения к значимым объектам. Дизайн LSM описан в статье «Linux Security Modules: General Security Support for the Linux Kernel», представленной на USENIX Security 2002. На той же конференции была представлена статья «Using CQUAL for Static Analysis of Authorization Hook Placement», в которой изучался автоматический статический анализ кода ядра для проверки того, что все необходимые хуки были фактически вставлены в ядро Linux.
История
На саммите Linux Kernel Summit 2001 года NSA предложило включить SELinux в Linux 2.5. Линус Торвальдс отклонил SELinux в то время, поскольку заметил, что существует множество различных проектов в области безопасности, и, поскольку они все различаются, сообщество безопасности ещё не выработало единого мнения относительно окончательной модели безопасности. Вместо этого Линус поручил сообществу безопасности "сделать из него модуль". В ответ Криспин Коуэн предложил LSM: интерфейс для ядра Linux, предоставляющий достаточное количество "перехватчиков" (вызовов) из ядра Linux в загружаемый модуль, чтобы модуль мог обеспечивать принудительный контроль доступа. Разработка LSM в течение следующих двух лет велась сообществом LSM, включая значительный вклад от Immunix Corporation, NSA, McAfee, IBM, Silicon Graphics и многих независимых разработчиков. В конечном итоге LSM был принят в основную ветку ядра Linux и включён в качестве стандартной части Linux 2.6 в декабре 2003 года. В 2006 году некоторые разработчики ядра заметили, что SELinux является единственным широко используемым модулем LSM, включённым в основное дерево исходного кода ядра Linux. Если будет только один широко используемый модуль LSM, рассуждали они, то посредничество LSM становится ненужным, и LSM следует удалить, заменив его самим SELinux. Однако существуют и другие модули LSM, поддерживаемые вне основной ветки ядра (AppArmor, Linux Intrusion Detection System, FireFlier, CIPSO, Multi ADM и т. д.), поэтому этот аргумент привёл к двум результатам: 1. разработчики этих модулей начали прилагать усилия для включения своих модулей в основную ветку, и 2. на Kernel Summit 2006 года Линус вновь заявил, что LSM останется, поскольку он не хочет решать, какая модель безопасности лучше. Вероятно, LSM останется, так как дополнительные модули безопасности Smack (версия 2.6.25), TOMOYO Linux (версия 2.6.30, июнь 2009) и AppArmor (версия 2.6.36) были приняты в основное ядро.