В информационной безопасности , информатике и других областях принцип наименьших привилегий ( PoLP ), также известный как принцип минимальных привилегий ( PoMP ) или принцип наименьших полномочий ( PoLA ), требует, чтобы на определенном уровне абстракции вычислительной среды каждый модуль (такой как процесс, пользователь или программа, в зависимости от субъекта) имел возможность доступа только к той информации и ресурсам, которые необходимы для его законного назначения. [1]
Принцип означает предоставление любым учетным записям пользователей или процессам только тех привилегий, которые по сути жизненно важны для выполнения их предполагаемых функций. Например, учетная запись пользователя, предназначенная исключительно для создания резервных копий, не нуждается в установке программного обеспечения: следовательно, она имеет права только на запуск резервного копирования и приложений, связанных с резервным копированием. Любые другие привилегии, такие как установка нового программного обеспечения, блокируются. Принцип применим также к пользователю персонального компьютера, который обычно работает в обычной учетной записи пользователя и открывает привилегированную, защищенную паролем учетную запись только тогда, когда ситуация этого абсолютно требует.
Применительно к пользователям также используются термины « учетная запись пользователя с наименьшим доступом» или «учетная запись пользователя с наименьшими привилегиями» (LUA), подразумевающие, что все учетные записи пользователей должны работать с минимальными привилегиями , а также запускать приложения с минимальными привилегиями.
Принцип (наименьших привилегий) широко признан важным фактором при проектировании, направленным на улучшение и придание столь необходимого «усиления» защите данных и функциональности от сбоев ( отказоустойчивости ) и вредоносного поведения .
Преимущества этого принципа включают в себя:
На практике существует несколько конкурирующих определений истинной (наименьшая привилегия). Поскольку сложность программы быстро растет, растет и количество потенциальных проблем, что делает предиктивный подход непрактичным. Примерами служат значения переменных, которые она может обрабатывать, адреса, которые ей понадобятся, или точное время, когда такие вещи потребуются. Системы возможностей объектов позволяют, например, отложить предоставление одноразовой привилегии до того времени, когда она будет использована. В настоящее время наиболее близким практическим подходом является исключение привилегий, которые можно вручную оценить как ненужные. Результирующий набор привилегий обычно превышает истинные минимальные требуемые привилегии для процесса.
Другим ограничением является детализация контроля операционной среды над привилегиями отдельного процесса. [4] На практике редко возможно контролировать доступ процесса к памяти, времени обработки, адресам устройств ввода-вывода или режимам с точностью, необходимой для обеспечения только точного набора привилегий, которые потребуются процессу.
Оригинальная формулировка принадлежит Джерому Зальцеру : [5]
Каждая программа и каждый привилегированный пользователь системы должны работать, используя наименьший объем привилегий, необходимый для выполнения работы.
Питер Дж. Деннинг в своей статье «Отказоустойчивые операционные системы» рассматривает ее в более широком контексте среди «четырех основных принципов отказоустойчивости».
«Динамическое назначение привилегий» ранее обсуждалось Роджером Нидхэмом в 1972 году. [6] [7]
Исторически самым старым экземпляром (с наименьшими привилегиями) является, вероятно, исходный код login.c , который начинает выполнение с правами суперпользователя и — как только они больше не нужны — отклоняет их с помощью setuid() с ненулевым аргументом, как показано в исходном коде Unix версии 6 .
Ядро всегда работает с максимальными привилегиями, поскольку оно является ядром операционной системы и имеет доступ к оборудованию. Одной из основных обязанностей операционной системы, особенно многопользовательской операционной системы, является управление доступностью оборудования и запросами на доступ к нему от запущенных процессов . Когда ядро выходит из строя, механизмы, с помощью которых оно поддерживает состояние , также выходят из строя. Поэтому, даже если есть способ восстановления ЦП без жесткого сброса , безопасность продолжает обеспечиваться, но операционная система не может должным образом отреагировать на сбой, поскольку обнаружить сбой не удалось. Это происходит потому, что выполнение ядра либо останавливается, либо счетчик программ возобновляет выполнение откуда-то из бесконечного и, как правило, нефункционального цикла . [ требуется цитата ] Это было бы похоже либо на амнезию (сбой выполнения ядра), либо на попадание в замкнутый лабиринт, который всегда возвращается в исходную точку (замкнутые циклы).
Если выполнение возобновляется после сбоя путем загрузки и запуска троянского кода , автор троянского кода может узурпировать контроль над всеми процессами. Принцип наименьших привилегий заставляет код запускаться с наименьшим возможным уровнем привилегий/разрешений. Это означает, что код, который возобновляет выполнение кода — будь то троян или просто выполнение кода, начавшееся из неожиданного места — не будет иметь возможности выполнять вредоносные или нежелательные процессы. Один из методов, используемых для достижения этого, может быть реализован в аппаратном обеспечении микропроцессора . Например, в архитектуре Intel x86 производитель разработал четыре (кольцо 0 — кольцо 3) работающих «режима» с постепенными степенями доступа — во многом похожих на системы допуска к секретной информации в оборонных и разведывательных агентствах. [ требуется цитата ]
Как реализовано в некоторых операционных системах, процессы выполняются с потенциальным набором привилегий и активным набором привилегий . [ необходима цитата ] Такие наборы привилегий наследуются от родителя, как определено семантикой fork () . Исполняемый файл , который выполняет привилегированную функцию — тем самым технически составляя компонент TCB и одновременно называемый доверенной программой или доверенным процессом — также может быть отмечен набором привилегий. Это логическое расширение понятий set user ID и set group ID . [ необходима цитата ] Наследование привилегий файла процессом определяется семантикой семейства системных вызовов exec () . Точный способ взаимодействия потенциальных привилегий процесса, фактических привилегий процесса и привилегий файла может стать сложным. На практике минимальные привилегии практикуются путем принудительного запуска процесса только с теми привилегиями, которые требуются для задачи. Соблюдение этой модели довольно сложно, а также подвержено ошибкам.
Концепция минимизации базы доверенных вычислений (TCB) критериев оценки доверенных компьютерных систем (TCSEC) является гораздо более строгим требованием, которое применимо только к функционально самым сильным классам гарантий (ссылка на раздел критериев оценки доверенных компьютерных систем Подразделения и классы), а именно к классам B3 и A1 (которые функционально идентичны, но различаются с точки зрения требуемых доказательств и документации).
Наименьшие привилегии часто ассоциируются с ограничением привилегий : то есть, принятием необходимых привилегий в последний возможный момент и отклонением их, как только они перестают быть строго необходимыми, таким образом, якобы уменьшая последствия ошибочного кода, который непреднамеренно использует больше привилегий, чем заслуживает. Наименьшие привилегии также интерпретировались в контексте распределения разрешений дискреционного управления доступом (DAC), например, утверждая, что предоставление пользователю U доступа на чтение/запись к файлу F нарушает наименьшие привилегии, если U может выполнять свои авторизованные задачи, имея только разрешение на чтение.