Принцип минимальных привилегий

Принцип минимальных привилегий (англ. principle of least privilege, PoLP; также принцип минимальной привилегии — PoMP, или принцип минимальной авторитетности — PoLA) — концепция в информационной безопасности, информатике и других смежных областях, согласно которой на каждом уровне абстракции вычислительной среды каждому модулю (будь то процесс, пользователь или программа) должны предоставляться только те права доступа к информации и ресурсам, которые необходимы для выполнения его прямых задач[1].

Подробности

Суть принципа минимальных привилегий заключается в том, чтобы предоставлять учётным записям пользователей или процессам только те права, которые жизненно необходимы для выполнения их задач. Например, учётная запись, предназначенная исключительно для создания резервных копий, не нуждается в установке программ — ей достаточно разрешить запуск приложений для резервного копирования. Любые другие полномочия, такие как установка новых программ, блокируются. Принцип распространяется и на пользователя персонального компьютера: обычно работа ведётся под обычной учётной записью, а учётная запись с повышенными правами используется только при крайней необходимости.

При применении к пользователям используют также термины «наименьший пользовательский доступ» или «учётная запись с минимальными привилегиями» (LUA — англ. least-privileged user account), подразумевающие работу пользователей и запуск приложений с минимально возможным объемом привилегий.

Принцип минимальных привилегий широко признан важным фактором при проектировании систем защиты данных и повышения устойчивости к сбоям (отказоустойчивость) и вредоносным воздействиям.

К преимуществам этого принципа относят:

  • Интеллектуальная безопасность. Когда масштабы изменений, которые может внести код в систему, строго ограничены, проще тестировать действия и взаимодействия такого кода с другими элементами системы защиты. Например, приложения с ограниченными правами не имеют доступа к операциям, способным вызвать сбой системы или негативно повлиять на другие программы на том же компьютере.
  • Улучшенная безопасность системы. Если программе запрещены действия на уровне системы, эксплуатация уязвимости в одном приложении не приведёт к компрометации всего компьютера. Так, компания Microsoft отмечает: «Работа в режиме обычного пользователя обеспечивает более высокую защиту от случайного повреждения системы, а также от атак типа „shatter“ и вредоносного ПО (руткитов, шпионского ПО и скрытых вирусов)»[2].
  • Упрощение развёртывания. Чем меньше прав требует приложение, тем легче его внедрять в сложной инфраструктуре. Например, в Windows решение без драйверов можно запускать без установки, в то время как драйверы требуют отдельной установки с помощью специальных служб Windows для предоставления им прав[3].

На практике существуют различные трактовки минимально возможного уровня привилегий. С ростом сложности программ увеличивается и число потенциальных проблем, что делает невозможным предсказательное управление всеми необходимыми правами. Например, если значения переменных или необходимые ресурсы заранее не определены. Объектно-ориентированные системы полномочий позволяют, например, выдавать однократные права непосредственно перед использованием. Наиболее близкий к идеалу способ — убрать все явно избыточные права, но даже после этого объём разрешённых привилегий зачастую превышает истинно необходимый минимум.

Ещё одно ограничение связано с детализацией контроля системы над привилегиями отдельно взятого процесса[4]. Обычно невозможно столь точно регулировать доступ процесса к памяти, времени выполнения, адресам или режимам работы устройств ввода-вывода, чтобы это полностью соответствовало идеалу принципа минимальных привилегий.

Оригинальная формулировка принципа дана Джеромом Солтцером[5]:

Каждая программа и каждый пользователь с особыми правами должны функционировать, используя минимально необходимое количество привилегий для выполнения своей работы.Communications of the ACM

Питер Дж. Деннинг помещает принцип минимальных привилегий в ряд с четырьмя фундаментальными принципами отказоустойчивости в работе операционных систем.

Концепция «динамического распределения привилегий» была рассмотрена Роджером Нидемом ещё в 1972 году[6][7].

К числу раннейших практических исторических применений принципа относят исходный код программы login.c в Version 6 Unix. Программа начинает выполнение с правами суперпользователь, но как только эти права не требуются — сбрасывает их через вызов setuid() с ненулевым аргументом (см. исходный код).

Реализация

Ядро ОС обычно работает с максимальным набором привилегий, поскольку отвечает за управление оборудованием. Одна из ключевых задач операционной системы — управление аппаратными ресурсами и обработка заявок на доступ к ним от исполняемых процессов. При сбое ядра механизмы отслеживания состояния перестают работать, и даже если процессор теоретически мог бы восстановить выполнение без аппаратной перезагрузки, система уже не способна корректно реагировать на отказ, так как потеряла управление из-за остановки ядра или попадания управляющего указателя в бесконечный цикл.

undefined

Если выполнение возобновляется после сбоя с запуском троянского кода, злоумышленник может получить контроль над всеми процессами. Принцип минимальных привилегий ограничивает права кода минимально необходимым уровнем. Это означает, что код, восстановившийся после сбоя (как вредоносный, так и случайно исполняемый из неожиданной точки), не сможет выполнить нежелательные действия. Аппаратная поддержка принципа реализуется, в частности, в архитектуре Intel x86, где реализованы четыре режима (кольца 0—3) с разной степенью привилегий — аналог допусков в специальных службах.

В ряде операционных систем процессы запускаются с набором потенциальных и активных привилегий, которые наследуются от родительского процесса согласно поведению функции fork(). Исполняемый файл, выполняющий привилегированные функции (часть TCB — trusted computing base), также может иметь специальный набор прав, по аналогии с механизмами setuid и setgid. Набор привилегий, которыми может оперировать процесс, зависит от exec-вызова. Практическое соблюдение принципа минимальных привилегий требует запуска процессов только с необходимыми для задачи правами, однако это сопряжено со значительными сложностями и рисками ошибок.

Смежные принципы

В концепции Trusted Computer System Evaluation Criteria (TCSEC) минимизация доверенной вычислительной базы (TCB) требует ещё более строгого ограничения — при этом минимизация TCB реализуема только в классах наивысшей гарантии (B3 и A1).

Принцип минимальных привилегий часто сочетается с так называемым временным ограничением привилегий (часто называется privilege bracketing): привилегии запрашиваются непосредственно перед их использованием и отбрасываются, как только необходимость отпадает, тем самым уменьшая риск последствий избыточных прав. Кроме того, принцип минимальных привилегий трактуется и в контексте распределения дискреционных прав доступа (DAC): например, предоставление пользователю права на запись к файлу нарушает принцип минимальных привилегий, если для его задач хватило бы доступа только на чтение.

Примечания

Литература