Надежный дизайн
Categories:
Архитектура безопасности и принципы проектирования
Три элемента безопасности и принципы безопасного проектирования
- Целостность Integrity
- Доступность Availability
- Конфиденциальность Confidentiality
Принцип открытого проектирования
Open Design
- Дизайн не должен быть секретом, открытый дизайн более безопасен.
- Безопасность не зависит от секретности.
Принцип безопасного отказа по умолчанию
Fail-safe defaults
- Решения о доступе основаны на “разрешении”, а не на “запрете”.
- По умолчанию доступ не разрешается, механизмы защиты используются только для идентификации случаев разрешенного доступа.
- Безопасный отказ: любая сложная система должна иметь аварийные механизмы безопасности при отказе функций, кроме того, следует быть осторожным с сообщениями об ошибках и журналами, чтобы предотвратить утечку информации.
- Безопасность по умолчанию: система в начальном состоянии по умолчанию настроена безопасно, предоставляя максимальную безопасность с использованием минимального количества систем и сервисов.
Принцип разделения привилегий
Separation of Privilege
- Механизм защиты требует использования двух ключей для разблокировки, что более надежно и гибко, чем использование одного ключа.
- Цели разделения привилегий
- Предотвращение конфликта интересов, злоупотребление индивидуальной властью
- Разделение важных полномочий на несколько, чтобы объекты, требующие защиты, было труднее незаконно получить, что делает систему более безопасной.
- Разделение ответственности и полномочий между различными процессами
Система может по умолчанию настроить 3 роли, права системных учетных записей между ролями независимы, разделение ответственности и полномочий:
- Системный администратор: отвечает за повседневное управление пользователями системы, управление конфигурацией.
- Администратор безопасности: отвечает за активацию и деактивацию состояния пользователей, безопасной конфигурации.
- Аудитор безопасности: отвечает за аудит операций первых двух, обладает правом экспорта журналов, обеспечивает прослеживаемость всех операций пользователей системы.
Принцип наименьших привилегий
Least Privilege
- Каждый пользователь, каждая программа в системе должны использовать минимальный и необходимый набор привилегий для выполнения своей работы.
- Обеспечить, чтобы приложения запускались с наименьшими правами.
- При настройке различных программ, таких как базы данных, веб-серверы и т.д., необходимо использовать учетные записи с наименьшими правами, а не учетные записи с максимальными системными правами.
- При создании новой учетной записи по умолчанию присваивать роль с наименьшими правами.
Принцип экономичности механизмов
Economy of Mechanism
- Сохраняйте проектирование системы и код максимально простыми, компактными.
- Чем сложнее программное обеспечение, тем выше вероятность появления ошибок в коде; если проектирование максимально изящное, то вероятность возникновения проблем с безопасностью ниже.
- Удаляйте ненужный избыточный код и функциональные модули, оставление такого кода только увеличивает поверхность атаки системы.
- Проектирование многоразовых компонентов для уменьшения избыточного кода.
- Экономичность и практичность: простота, изящество, компонентность.
- Не перепроектируйте
Принцип минимизации общих механизмов
Least Common Mechanism
- Старайтесь избегать сценариев, в которых несколько объектов делят один и тот же ресурс, количество и использование общих ресурсов должно быть максимально минимизировано.
- Общие объекты создают потенциальные опасные каналы для потока информации и непреднамеренного взаимодействия, постарайтесь избегать сценариев, в которых несколько объектов делят один и тот же ресурс.
- Если один или несколько объектов не удовлетворены обслуживанием, предоставляемым общим механизмом, они могут отказаться от использования общего механизма, чтобы избежать косвенной атаки со стороны ошибок других объектов.
- Минимизация общего использования памяти
- Минимизация привязки портов
- Сокращение соединений, защита от атак DoS
Принцип полного посредничества
Complete Mediation
- Принцип полного посредничества требует, чтобы каждый доступ к каждому объекту проходил через проверку безопасности.
- Когда субъект пытается получить доступ к объекту, система каждый раз проверяет, имеет ли субъект соответствующие права.
- По возможности решения о контроле доступа должны приниматься владельцем ресурса, например, если это URL, то проверка должна проводиться сервером, а не на стороне клиента.
- Особое внимание следует уделять использованию и проверке кэша, нельзя гарантировать, что информация в кэше не была изменена хакерами. Например, подмена DNS-кэша.
Принцип психологической приемлемости
Psychological Acceptability
- Механизмы безопасности могут создавать дополнительную нагрузку для пользователей, но эта нагрузка должна быть минимальной и разумной.
- Механизмы безопасности должны быть максимально дружелюбными для пользователей системы, облегчая их использование и понимание системы.
- Если метод конфигурации слишком сложен и громоздок, системный администратор может случайно настроить неправильный параметр, что сделает систему менее безопасной.
- Этот принцип обычно связан с человеко-машинным взаимодействием, UCD (User Centered Design) интерфейсом.
Принцип глубокой обороны
Defense in Depth Глубокая оборона - это комплексное требование с высоким уровнем защиты, обычно требует от архитекторов систем комплексного применения различных принципов безопасного проектирования, использования многоточечных, многократных механизмов проверки безопасности, высокого уровня архитектурного проектирования для комплексной защиты безопасности всей системы, а не полагаться только на единый механизм безопасности.