Кодирование для возобновляемых средств безопасности
Поддержка возобновляемой безопасности является одним из семи свойств устройств с высоким уровнем безопасности. В Azure Sphere это означает, что все программное обеспечение на устройстве, включая ваши собственные приложения, можно обновить по мере необходимости для устранения вновь обнаруженных уязвимостей. Безопасность — это причина существования Azure Sphere, и нельзя слишком часто подчеркнуть, что обеспечение безопасности устройства всегда имеет первостепенное значение. Невозможно написать полностью безопасный код, но с помощью рекомендаций по написанию кода, чрезвычайной осмотрительности в реагировании на недавно обнаруженные уязвимости и приверженности к возобновляемым возможностям безопасности вы можете обеспечить максимально безопасную работу кода приложения высокого уровня. Модель изоляции приложений Azure Sphere предоставляет ряд функций, которые обеспечивают следующее:
- Все приложения должны быть подписаны соответствующим образом, прежде чем их можно будет установить или запустить.
- Приложение может получить доступ только к тем аппаратным возможностям и интернет-адресам, которые были указаны в файле манифеста приложения .
- API- интерфейсы, предоставляемые пакетом SDK для Azure Sphere, включают в себя значительно сокращенное подмножество стандартной библиотеки C, в которых не учитываются потенциальные дыры безопасности, такие как учетные записи пользователей и доступ к оболочке.
- Ос Azure Sphere и клиентские приложения можно безопасно обновлять с помощью службы безопасности Azure Sphere по мере выявления и решения проблем безопасности.
Однако свести к минимуму область атак и подписывать код можно только до сих пор. Следуя набору рекомендаций по безопасной разработке программного обеспечения, вы можете гарантировать, что подписываемые вами приложения являются максимально безопасными и безопасными. В этой статье описываются некоторые средства, которые команда Azure Sphere использует в своих собственных методах разработки.
Планирование регулярных развертываний
Ос Azure Sphere и пакет SDK для Azure Sphere обновляются по крайней мере ежеквартально. Вы должны стремиться к аналогичному графику развертывания собственных приложений.
Убедитесь, что цепочка инструментов остается актуальной
Ос Azure Sphere и пакет SDK составляют большую часть цепочки инструментов Azure Sphere, но у вас могут быть другие компоненты, которыми вы управляете отдельно. Не забудьте регулярно проверка обновления для этих компонентов.
Распространенные уязвимости и уязвимости (CVEs) — это общедоступные отчеты, которые используются для описания уязвимости системы безопасности, в том числе в Azure Sphere. Обновления ОС Azure Sphere регулярно обращаются к cves и помогают обеспечить безопасность устройств. По возможности включите в конвейеры сборки проверки cvE. Закладки сайтов, таких как домашняя страница CISA , которые отслеживают обновления для системы безопасности. Перестраивайте и повторно развертывайте приложения при обновлении цепочки инструментов.
Распространение и соблюдение стандартов программирования
Код, который соответствует известному стандарту, проще поддерживать, просматривать и тестировать. Существуют общедоступные стандарты программирования для C. MISRA хорошо зарекомендовалась , а CERT также имеет стандарт кодирования для C. В дополнение к этим базовым стандартам мы рекомендуем использовать жизненный цикл разработки безопасности везде, где это возможно.
Убедитесь, что выполняется компиляция с основными флагами безопасности
Все приложения Azure Sphere создаются с помощью компиляторов языка C из коллекции компиляторов Gnu (GCC). Компилятор C gcc предоставляет сотни флагов компилятора и компоновщика. В Azure Sphere по умолчанию используются следующие флаги:
-
-fstack-protector-strong
: создает код для защиты от атак со стеком. -
pie
: создает не зависящие от позиции исполняемые файлы. -
fPIC
: создает код, не зависящий от позиции.
Флаг -fstack-protector-all
обеспечивает большую защиту, чем -fstack-protector-strong
, но увеличивает использование стека памяти. Из-за ограниченного объема памяти на текущем оборудовании -fstack-protector-all
Azure Sphere не используется по умолчанию.
Azure Sphere также использует ряд флагов предупреждений, которые можно использовать для выявления проблем с кодом во время компиляции, которые можно устранить перед развертыванием.
-Wall -Wswitch -Wempty-body -Wconversion -Wreturn-type -Wparentheses -Wno-format -Wuninitialized -Wunreachable-code -Wunused-function -Wunused-value -Wunused-variable -Wstrict-prototypes -Wno-pointer-sign -Werror=implicit-function-declaration
Для повышения безопасности -Wl,-z,now
или -Wl,-z,relro
могут быть добавлены, но опять же они не используются по умолчанию, так как они приводят к дополнительному использованию памяти.
Проверка всего кода
Проверки кода — это простой, но эффективный инструмент для обеспечения высококачественного кода. Рекомендуется не регистрировать код без проверки кода от квалифицированного рецензента. 1-на-один обзоры кода, в которых разработчик просматривает новый код вместе с другим разработчиком, часто помогают исходному разработчику прояснить мысль, которая была связана с производством кода. Это может выявить недостатки проекта или пропущенные точки ветвления даже при отсутствии входных данных от проверяющего разработчика.
Использование автоматизированных тестов
Автоматизированные платформы тестирования, такие как gtest, позволяют запускать наборы тестовых функций каждый раз при сборке проекта. Рекомендуется обеспечить, чтобы весь возвращенный код сопровождался по крайней мере одной тестовой функцией; больше обычно лучше. Ниже перечислены важные типы тестирования.
- Базовое модульное тестирование выполняет каждый фрагмент кода, чтобы убедиться, что он работает должным образом. Тестовые случаи должны быть разработаны таким образом, чтобы тестировать код по краям; Угловые и пограничные варианты обычно являются плодотворным источником ошибок.
- Нечеткое тестирование выполняет код, предоставляя непредвиденные входные данные различных типов, чтобы убедиться, что функция реагирует соответствующим образом.
- Тестирование на проникновение полезно для выявления уязвимостей, которые позволяют злоумышленникам проникать в приложение.
Использование статических анализаторов кода
Статические анализаторы кода помогают найти ряд распространенных проблем с кодом. Основное внимание уделяется конкретным типам ошибок. Следующие бесплатные средства с открытым кодом входят в число тех, которые используются командой разработчиков Azure Sphere и некоторыми пользователями Azure Sphere:
- clang-tidy
- AddressSanitizer (ASan)
- MemorySanitizer (MSan)
- UndefinedBehaviorSanitizer (UBSan)
- Вальгринд
Запуск некоторых из этих средств может потребовать повторной компиляции приложения (или его частей) для другой целевой операционной системы.
Удаление ненужных кодов
Пакет SDK для Azure Sphere предоставляет урезаную версию стандартных библиотек разработки C. Везде, где это возможно, следует искать возможности для ограничения собственного кода до основных компонентов. Чем меньше строк кода, тем меньше область атак доступна для потенциальных угроз. Предупреждения о недоступном или неиспользуемом коде можно использовать для идентификации ненужных кодов.