Разделяйте
Бывалые путешественники держат лишь небольшую сумму денег в бумажнике, а остальное – в мешочке, скрытом под одеждой. Таким образом, если их обворуют, они не потеряют все деньги. Структура шпионских или террористических организаций предполагает разделение на маленькие группы, члены которых знают только друг друга и никого более. Таким образом, если кто-нибудь оказался схвачен или сдался сам, он может выдать только тех людей, которые входят в его ближайшее окружение. Разделение – эффективный способ защиты, так как оно ограничивает последствия действий противника, приводящих к успеху. Это – пример здравого смысла, которым часто пользуются. Пользователи имеют индивидуальные учетные записи; двери помещений офиса запираются разными ключами; права доступа предоставляются соответственно степени доверия конкретному лицу, а также реальной необходимости предоставления ему определенных сведений; личные файлы шифруют уникальными ключами. Система безопасности не строится по принципу «все или ничего», но она должна предотвращать возможность причинения значительного ущерба.
Схожий принцип – минимум привилегий. В основном это означает, что нужно давать кому-нибудь (пользователю или некоторым процессам) только те привилегии, которые необходимы для выполнения задачи. Мы постоянно сталкиваемся с этим в повседневной жизни. Ваш ключ, скорее всего, подходит только к вашему, а не любому помещению в здании. Доступ к банкоматам и хранящимся в них деньгам имеет только обслуживающий их персонал. Даже если вы пользуетесь особым доверием на службе, вы сможете выболтать только те секреты, которые вам позволено знать.
Еще больше примеров можно найти в компьютерном мире. Пользователи имеют доступ только к тем серверам, которые нужны им для работы. Только системный администратор имеет доступ к системе в целом, пользователи имеют доступ лишь к своим файлам. Иногда отдельные файлы бывают защищены групповым паролем, известным только тем, кому необходим доступ к этим файлам. Конечно, легче предоставить каждому полный доступ, но безопаснее давать людям только те привилегии, в которых они действительно нуждаются. Системы предоставления прав доступа в UNIX и NT основаны на этом принципе.
Многие нападающие пользовались нарушением принципа минимума привилегий. Как только нападающий получает доступ к учетной записи пользователя, вскрывая пароль или как-нибудь иначе, он предпринимает несколько попыток получить высшую привилегию. Например, многие нападающие пытаются вскрыть «песочницу» Java (sandbox), получить таким образом минимальные привилегии, а затем перейти в режим, позволяющий получить привилегированный статус. Взлом защиты цифровых дисков, проездных карточек и систем платного телевидения и других, имеющих одно общее свойство – все секреты хранятся в устройстве, находящемся в распоряжении пользователя, – также можно назвать получением высших привилегий.
Разделение также важно, потому что чем больше людей пользуются системой, тем меньше ее надежность. Чем крупнее компьютер, чем шире круг задач, решаемых с его помощью, тем он менее безопасен.
Это одна из причин, почему Интернет, наиболее широко используемая сеть, таит столько опасностей. Сравните веб-сервер и компьютер, работающий в режиме пониженного потребления мощности, находящийся в запертом бомбоубежище и окруженный охраной. Использование разделения делает систему более похожей на второй вариант.