Принцип минимальных привилегий
Принцип минимальных привилегий (англ. 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() с ненулевым аргументом (см. исходный код).
Реализация
Ядро ОС обычно работает с максимальным набором привилегий, поскольку отвечает за управление оборудованием. Одна из ключевых задач операционной системы — управление аппаратными ресурсами и обработка заявок на доступ к ним от исполняемых процессов. При сбое ядра механизмы отслеживания состояния перестают работать, и даже если процессор теоретически мог бы восстановить выполнение без аппаратной перезагрузки, система уже не способна корректно реагировать на отказ, так как потеряла управление из-за остановки ядра или попадания управляющего указателя в бесконечный цикл.
Если выполнение возобновляется после сбоя с запуском троянского кода, злоумышленник может получить контроль над всеми процессами. Принцип минимальных привилегий ограничивает права кода минимально необходимым уровнем. Это означает, что код, восстановившийся после сбоя (как вредоносный, так и случайно исполняемый из неожиданной точки), не сможет выполнить нежелательные действия. Аппаратная поддержка принципа реализуется, в частности, в архитектуре 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): например, предоставление пользователю права на запись к файлу нарушает принцип минимальных привилегий, если для его задач хватило бы доступа только на чтение.
Примечания
Литература
- Ben Mankin. The Formalisation of Protection Systems. — Ph.D. thesis, University of Bath, 2004.
- P. J. Denning (Декабрь 1976). “Fault tolerant operating systems”. ACM Computing Surveys. 8 (4): 359—389. DOI:10.1145/356678.356680. S2CID 207736773.
- Jerry H. Saltzer, Mike D. Schroeder (Сентябрь 1975). “The protection of information in computer systems”. Proceedings of the IEEE. 63 (9): 1278—1308. CiteSeerX 10.1.1.126.9257. DOI:10.1109/PROC.1975.9939. S2CID 269166.
- Deitel, Harvey M. An introduction to operating systems. — revisited first. — Addison-Wesley, 1990. — P. 673. — ISBN 978-0-201-14502-1. стр. 31.
- Sean Martin (Апрель 2012). “Are security basics getting lost under the cover of cloud and mobile?”. SC Magazine.
- SANS Institute (Май 2013). “20 Critical Security Controls” (PDF). SANS Institute. Архивировано из оригинала (PDF) 2013-11-01. Используется устаревший параметр
|url-status=(справка)
Ссылки
- Оригинальная статья Saltzer и Schroeder
- NSA (разработчик SELinux) о принципе минимальных привилегий
- О реализации принципа минимальных привилегий в Solaris
- "Доказательство того, что LUA повышает безопасность" — Дана Эпп Архивировано 23 мая 2010 года.
- Применение принципа минимальных привилегий к учетным записям пользователей в Windows XP (Microsoft)
- "Коммерческие предприятия ставят под угрозу критическую инфраструктуру" — CSO
- Как успешно внедрить принцип минимальных привилегий