Введение

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

Что такое обеспечение безопасности программного обеспечения?

Обеспечение безопасности программного обеспечения (SSA) - это процесс обеспечения того, чтобы программное обеспечение было разработано для работы на уровне безопасности, который соответствует потенциальному вреду, который может возникнуть в результате потери, неточности, изменения, недоступности или неправильного использования данных и ресурсов, которые оно использует, контролирует и защищает. Процесс обеспечения безопасности программного обеспечения начинается с определения и классификации информации, которая должна содержаться в программном обеспечении или использоваться им. Информация должна быть классифицирована в соответствии с ее чувствительностью. Например, в самой низкой категории влияние нарушения безопасности минимально (т.е. влияние на миссию, функции или репутацию владельца программного обеспечения является незначительным). Однако для высшей категории воздействие может представлять угрозу для жизни человека; может оказать непоправимое влияние на миссии, функции, имидж или репутацию владельца программного обеспечения; или может привести к потере значительных активов или ресурсов. После того, как информация классифицирована, могут быть разработаны требования безопасности. Требования безопасности должны касаться контроля доступа, включая доступ к сети и физический доступ; управления данными и доступа к данным; контроля окружающей среды (энергия, кондиционирование воздуха и т. д.). и офлайн-хранилища; безопасность человеческих ресурсов; и аудит следов и учета использования.

Что вызывает проблемы с безопасностью программного обеспечения?

Все уязвимости в программном обеспечении являются результатом ошибок или дефектов в программном обеспечении. В большинстве случаев эти дефекты возникают из-за двух основных причин: (1) несоответствия или невыполнения требований; и (2) ошибки или упущения в требованиях к программному обеспечению.

Несоответствие или невыполнение требований

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

Ошибки или упущения в требованиях к программному обеспечению

Наиболее серьезными проблемами безопасности программных систем являются те, которые возникают, когда требования к программному обеспечению являются неправильными, неуместными или неполными для системной ситуации. К сожалению, ошибки или упущения в требованиях выявлять сложнее. Например, программное обеспечение может выполнять работу точно так, как требуется при нормальном использовании, но требования могут не корректно обрабатывать некоторые состояния системы. Когда система входит в это проблемное состояние, может возникнуть неожиданное и нежелательное поведение. Этот тип проблемы не может быть решен в рамках дисциплины программного обеспечения; он является результатом сбоя системных и программных процессов, которые разработали и распределили системные требования к программному обеспечению.

Безопасное строительство

Улучшение процесса разработки программного обеспечения и создание лучшего программного обеспечения являются способами повышения безопасности программного обеспечения, путем производства программного обеспечения с меньшим количеством дефектов и уязвимостей. Первый подход заключается в определении критических компонентов программного обеспечения, которые контролируют функции, связанные с безопасностью, и уделяют им особое внимание в процессе разработки и тестирования. Такой подход помогает сосредоточить ограниченные ресурсы безопасности на наиболее критических областях.

Инструменты и методы

Существует множество коммерческих пакетов программного обеспечения (COTS), которые доступны для поддержки деятельности по обеспечению безопасности программного обеспечения. Однако, прежде чем использовать эти инструменты, необходимо тщательно оценить их эффективность.

Перечисление общих недостатков

Один из способов улучшить безопасность программного обеспечения - лучше понять наиболее распространенные недостатки, которые могут повлиять на безопасность программного обеспечения. Имея это в виду, существует текущая программа, основанная на сообществе, называемая проектом "Общая перепись недостатков", который спонсируется корпорацией "Митр", чтобы определить и описать такие недостатки. Список, который в настоящее время находится в очень предварительной форме, содержит описания общих слабых мест, ошибок и недостатков программного обеспечения.

Анализ архитектуры/конструкции безопасности

Анализ архитектуры/конструкции безопасности проверяет, правильно ли разработанное программное обеспечение выполняет требования безопасности. В целом, существует четыре основных метода, которые используются для анализа архитектуры/проекта безопасности.

Логический анализ

Логический анализ оценивает уравнения, алгоритмы и логику управления программным обеспечением.

Анализ данных

Анализ данных оценивает описание и предполагаемое использование каждого элемента данных, используемого при проектировании программного компонента. Особое внимание следует уделять использованию прерываний и их влиянию на данные, чтобы гарантировать, что процедуры обработки прерываний не изменяют критические данные, используемые другими процедурами.

Анализ интерфейса

Анализ интерфейсов проверяет правильную конструкцию интерфейсов программного компонента с другими компонентами системы, включая компьютерное оборудование, программное обеспечение и конечных пользователей.

Анализ ограничений

Анализ ограничений оценивает конструкцию программного компонента в отношении ограничений, налагаемых требованиями и ограничениями реального мира. Конструкция должна отвечать всем известным или ожидаемым ограничениям на программный компонент. Эти ограничения могут включать ограничения по времени, размеру и пропускной способности, ограничения входных и выходных данных, ограничения уравнений и алгоритмов и другие ограничения по конструкции.

Обзор, проверка и проверка кода

Анализ кода проверяет, правильно ли написан исходный код программного обеспечения, реализует ли он желаемую конструкцию и не нарушает ли он какие-либо требования безопасности. В целом, методы, используемые при выполнении анализа кода, отражают методы, используемые при анализе дизайна. Во время и в конце этапа разработки проводится проверка безопасного кода, чтобы определить, были ли выполнены установленные требования безопасности, концепции проектирования безопасности и спецификации, связанные с безопасностью. Эти обзоры обычно состоят из представления материала группе по обзору. Обзор безопасного кода наиболее эффективен, когда проводится персоналом, который не был непосредственно вовлечен в разработку проверяемого программного обеспечения.

Неформальные обзоры

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

Официальные проверки

Формальные проверки безопасного кода проводятся в конце этапа разработки для каждого компонента программного обеспечения. Заказчик программного обеспечения назначает официальную группу по рассмотрению, которая может принять или повлиять на решение "поступить/не пойти" для перехода к следующему этапу жизненного цикла разработки программного обеспечения.

Инспекции и обследования

Безопасный контроль кода или прохождение через него - это детальное изучение продукта пошагово или строкой за строкой (источника кода). Цель проведения проверки безопасного кода или прохождения процедуры заключается в поиске ошибок. Как правило, группа, которая проводит инспекцию или прохождение, состоит из коллег из области разработки, инженерии безопасности и обеспечения качества.

Испытания безопасности

Тестирование безопасности программного обеспечения, которое включает в себя тестирование проникновения, подтверждает результаты анализа дизайна и кода, исследует поведение программного обеспечения и проверяет, соответствует ли программное обеспечение требованиям безопасности. Специальное тестирование безопасности, проводимое в соответствии с планом и процедурами тестирования безопасности, устанавливает соответствие программного обеспечения требованиям безопасности. Тестирование безопасности фокусируется на поиске слабых мест программного обеспечения и выявлении экстремальных или неожиданных ситуаций, которые могут привести к сбоям программного обеспечения, что приведет к нарушению требований безопасности. Усилия по тестированию безопасности часто ограничиваются требованиями к программному обеспечению, которые классифицируются как "критические" элементы безопасности.