Linux Security Modules ( LSM ) — это фреймворк, позволяющий ядру Linux поддерживать, без предвзятости, различные модели компьютерной безопасности . LSM лицензируется в соответствии с условиями GNU General Public License и является стандартной частью ядра Linux, начиная с Linux 2.6. AppArmor , SELinux , Smack и TOMOYO Linux — это в настоящее время одобренные модули безопасности в официальном ядре.
LSM был разработан для того, чтобы отвечать всем требованиям для успешной реализации модуля обязательного контроля доступа , при этом внося как можно меньше изменений в ядро Linux. LSM избегает подхода интерпозиции системных вызовов, используемого Systrace, поскольку он не масштабируется для многопроцессорных ядер и подвержен атакам TOCTTOU (гонки). Вместо этого LSM вставляет " хуки " (upcalls к модулю) в каждой точке ядра, где системный вызов на уровне пользователя должен привести к доступу к важному внутреннему объекту ядра, такому как inodes и блоки управления задачами.
LSM узконаправлен на решение проблемы контроля доступа , не навязывая при этом большого и сложного изменения-патча основному ядру. Он не предназначен для того, чтобы быть общим " крючком " или " upcall " механизмом, и не поддерживает виртуализацию на уровне операционной системы .
Цель контроля доступа LSM очень тесно связана с проблемой аудита системы, но имеет тонкое отличие. Аудит требует, чтобы каждая попытка доступа была записана. LSM не может этого обеспечить, поскольку это потребовало бы гораздо больше перехватов, чтобы обнаружить случаи, когда ядро " замыкает" неудачные системные вызовы и возвращает код ошибки, прежде чем приблизиться к значимым объектам.
Конструкция LSM описана в статье « Модули безопасности Linux: общая поддержка безопасности для ядра Linux» [1], представленной на конференции USENIX Security 2002. [2] На той же конференции была представлена статья «Использование CQUAL для статического анализа размещения перехватчиков авторизации» [3] , в которой изучался автоматический статический анализ кода ядра для проверки того, что все необходимые перехватчики действительно вставлены в ядро Linux.
На Linux Kernel Summit 2001 года АНБ предложило включить SELinux в Linux 2.5. [5] Линус Торвальдс тогда отверг SELinux, потому что заметил, что в разработке находится много разных проектов безопасности, и поскольку все они различаются, сообщество безопасности еще не сформировало консенсус относительно окончательной модели безопасности. Вместо этого Линус поручил сообществу безопасности «сделать его модулем».
В ответ Криспин Коуэн предложил [6] LSM: интерфейс для ядра Linux, который обеспечивает достаточное количество «крючков» (upcalls) из ядра 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).