В программной инженерии концепция «безопасности по умолчанию» означает, что программные продукты и возможности были разработаны с учетом их принципиальной безопасности .
Альтернативные стратегии, тактики и шаблоны безопасности рассматриваются в начале проектирования программного обеспечения, и лучшие из них выбираются и применяются архитектурой, и они используются в качестве руководящих принципов для разработчиков . [1] Также рекомендуется использовать стратегические шаблоны проектирования, которые оказывают благоприятное влияние на безопасность , даже если эти шаблоны проектирования изначально не были разработаны с учетом безопасности. [2]
Secure by Design все чаще становится основным подходом к разработке для обеспечения безопасности и конфиденциальности программных систем. В этом подходе безопасность рассматривается и встраивается в систему на каждом уровне и начинается с надежного проектирования архитектуры. Решения по проектированию архитектуры безопасности основаны на известных стратегиях, тактиках и шаблонах безопасности, определенных как повторно используемые методы для достижения определенных проблем качества. Тактики/шаблоны безопасности предоставляют решения для обеспечения необходимых требований аутентификации , авторизации, конфиденциальности, целостности данных , конфиденциальности, подотчетности, доступности, безопасности и неотказуемости, даже когда система подвергается атаке. [3] Для обеспечения безопасности программной системы важно не только разработать надежную предполагаемую архитектуру безопасности, но также необходимо сопоставить обновленные стратегии, тактики и шаблоны безопасности с разработкой программного обеспечения для поддержания постоянства безопасности.
Следует предполагать, что вредоносные атаки на программное обеспечение происходят, и следует принять меры для минимизации воздействия. Уязвимости безопасности ожидаются, как и недействительный пользовательский ввод. [4] Тесно связана практика использования «хорошего» дизайна программного обеспечения, такого как дизайн на основе домена или облачный нативный , как способ повышения безопасности за счет снижения риска ошибок, приводящих к открытию уязвимостей, — даже если используемые принципы дизайна изначально не были задуманы для целей безопасности.
Как правило, хорошо работающие проекты не полагаются на секретность . Часто секретность уменьшает количество злоумышленников, демотивируя подмножество популяции угроз. Логика заключается в том, что если для злоумышленника увеличивается сложность, возросшие усилия злоумышленника по компрометации цели будут его отпугивать. Хотя этот метод подразумевает снижение неотъемлемых рисков, практически бесконечный набор субъектов угроз и методов, применяемых с течением времени, приведет к тому, что большинство методов секретности потерпят неудачу. Хотя это и не обязательно, надлежащая безопасность обычно означает, что всем разрешено знать и понимать дизайн, потому что он безопасен . Это имеет то преимущество, что многие люди просматривают исходный код , что повышает вероятность того, что любые недостатки будут обнаружены раньше (см. закон Линуса ). Недостатком является то, что злоумышленники также могут получить код, что упрощает для них поиск уязвимостей для эксплуатации. Однако обычно считается, что преимущество открытого исходного кода перевешивает недостаток.
Кроме того, важно, чтобы все работало с наименьшими возможными привилегиями (см. принцип наименьших привилегий ). Например, веб-сервер , работающий как администратор («root» или «admin»), может иметь привилегию удалять файлы и пользователей. Следовательно, уязвимость в такой программе может подвергнуть риску всю систему, тогда как веб-сервер, работающий в изолированной среде и имеющий только привилегии для требуемых сетевых и файловых функций, не может поставить под угрозу систему, на которой он работает, если только безопасность вокруг него сама по себе также не будет уязвимой.
Secure Design следует рассматривать на всех этапах жизненного цикла разработки (какая бы методология разработки ни была выбрана). Существуют некоторые готовые методологии разработки Secure By Design (например, Microsoft Security Development Lifecycle ).
Стандарты и законодательство призваны содействовать проектированию безопасных систем, контролируя определение понятия «безопасность» и предлагая конкретные шаги по тестированию и интеграции безопасных систем.
Некоторые примеры стандартов, которые охватывают или затрагивают принципы «Безопасность по проектированию»:
В архитектурах сервер/клиент программа на другой стороне может не быть авторизованным клиентом, а сервер клиента может не быть авторизованным сервером. Даже если они являются авторизованными, атака типа «человек посередине» может поставить под угрозу связь.
Часто самый простой способ взломать систему клиент/сервер — не идти напрямую к механизмам безопасности, а обойти их. Атака «человек посередине» — простой пример этого, потому что вы можете использовать ее для сбора данных, чтобы выдать себя за пользователя. Вот почему важно учитывать шифрование , хеширование и другие механизмы безопасности в вашем проекте, чтобы гарантировать, что информация, полученная от потенциального злоумышленника, не позволит получить к нему доступ.
Еще одной ключевой особенностью проектирования безопасности клиент-сервер является хорошая практика кодирования . Например, следование известной структуре проектирования программного обеспечения, такой как клиент и брокер, может помочь в проектировании хорошо построенной структуры с прочной основой. Кроме того, если программное обеспечение должно быть изменено в будущем, еще более важно, чтобы оно следовало логической основе разделения между клиентом и сервером. Это связано с тем, что если программист приходит и не может четко понять динамику программы, он может в конечном итоге добавить или изменить что-то, что может добавить уязвимость безопасности. Даже при лучшем дизайне это всегда возможно, но чем лучше стандартизация дизайна, тем меньше вероятность того, что это произойдет.