Поскольку федеральные агентства и подрядчики сталкиваются с потенциальным крайним сроком 2026 года, чтобы уйти от кода C и C ++ из -за проблем безопасности памяти, многие организации сталкиваются со значительной проблемой: что делать с миллионами линий существующего устаревшего кода.
Для организаций с массовыми кодовыми базами, которые уже были сертифицированы для критических приложений, полные переписывания невозможны, но уязвимости безопасности, связанные с проблемами безопасности памяти, остаются неотложной проблемой.
Тони Айелло, руководитель отдела продуктов и инноваций в Adacore, и Хосе Руис, менеджер продуктов компании для встроенных целей, рассказали новым стеком о практических подходах к решению безопасности памяти в устаревших программных системах. Adacore, поставщик инструментов разработки систем с высокой интеграцией, предлагает интересный взгляд на эту отрасль.
Унаследованная дилемма программного обеспечения
«Наследие программное обеспечение сложно», откровенно говоря, Айелло сказал новой стеке. «Это была сложная проблема в течение долгого времени».
Трудность очевидна в постоянных усилиях Агентства по передовым исследовательским проектам (DARPA) по борьбе с правильностью программного обеспечения и безопасности памяти. В то время как многие предложенные решения хорошо работают для новой разработки, они часто колеблются при применении к существующим системам. Недавняя инициатива DARPA по «трактору», которая направлена на разработку автоматизированных инструментов для переписывания кода C в Rust, подчеркивает, насколько сложна проблема устаревшего кода.
Чери: решение времени выполнения для устаревшего кода
Для организаций, не в состоянии переписать свои кодовые базы Legacy C/C ++, Adacore работает с новым решением на основе аппаратного обеспечения под названием CHERI (инструкции по улучшению RISC возможностей).
«Мы работаем над разработкой цепочки инструментов поверх нового вида аппаратного обеспечения, которое называется Cheri, что в основном позволяет вам обнаружить и добавлять информацию в это оборудование, чтобы он мог автоматически обнаружить некоторые потенциалы или некоторые фактические проблемы безопасности памяти», — объяснил Руис.
Что делает Чери особенно ценным для устаревших систем, так это то, что он не требует переписывания кода — только перекомпиляция его. По его словам, эта технология предоставляет специализированные аппаратные инструкции, которые проверяют безопасность памяти во время выполнения, останавливая программу, если нарушения произойдут.
Хотя оборудование Cheri по-прежнему является «квазиэкспериментальным», согласно Ruiz, Adacore предоставляет эмулятор, который позволяет разработчикам перекомпилировать свое устаревшее программное обеспечение и обнаруживать уязвимости памяти, не требуя фактического оборудования Cheri. Этот подход особенно полезен в сценариях тестирования, таких как кампании по нефузиации для обнаружения вопросов безопасности памяти.
«Чери будет эффективно обеспечить вам безопасность, остановив программу, если она подойдет неправильно», — сказал Айелло. «Это защищает вас в том смысле, что он обеспечивает конфиденциальность и целостность за счет доступности, потому что оно убьет программное обеспечение, если программное обеспечение сделает что -то не так».
Стратегические переписывания с искра и ржавчиной
Для критических компонентов, где прекращение программы не является приемлемым результатом, Adacore рекомендует целевые переписывания наиболее важных разделов кода, используя безопасные для памяти языки, такие как Spark (диалект языка программирования ADA) или ржавчины.
Aiello указал на Nvidia в качестве примера: «Nvidia первоначально была очень обеспокоена некоторыми свойствами безопасности их прошивки и решила переписать части прошивки, которые ранее были написаны в C в Spark, и доказывают правильность безопасности безопасности, пока они это перезаписывали».
Чтобы поддержать этот подход, Adacore предоставляет инструменты для C/C ++, Rust и Spark, которые хорошо работают вместе, позволяя организациям постепенно повысить безопасность в своих наиболее важных компонентах при сохранении их существующей кодовой базы, сказал Айелло.
Spark: формальная проверка для критических систем
При обсуждении альтернатив C/C ++ Aiello выделил Spark, диалект ADA, который обеспечивает формальную проверку-мощную возможность для критических применений безопасности.
«Spark позволяет вам выполнять функциональную проверку, используя формальное доказательство», — пояснил Айелло. «Для данной функции в вашем программном обеспечении вы указываете предварительные условия, ограничения на входы на функцию, а затем вы указываете ожидаемый выход функции. Spark автоматически докажет, что реализация делает истинность пост-кондиционирования, когда предварительная кондиционер».
Эта возможность особенно ценна для безопасности, потому что Spark автоматически доказывает, что код не имеет ошибок времени выполнения, включая проблемы безопасности памяти. В то время как ADA обеспечивает проверку времени выполнения значений диапазона и доступа к памяти, Spark может быть статически доказать во время дизайна, что ни одна из этих проверок не пройдет, что позволяет разработчикам отключить их для производительности без жертва безопасности.
Апелляция ржавчины: почему организации выходят за рамки C/C ++
В то время как у Adacore есть глубокие корни в ADA и Spark, они также охватывают Rust как часть своего портфеля решений. Aiello определил три ключевых фактора, которые приводят к популярности Руста:
«Волнение, стоящее за ржавкой, означает, что есть много людей, все больше людей, которые знают ржавчину и действительно хотят использовать его в своей профессиональной карьере», — отметил Айелло. «Есть много низовых, о которых я слышал в каждой компании, которую вы можете подумать о том, где инженеры волнуются за использование ржавчины».
Будущее: формальные методы AI +
Заглядывая в будущее, Айелло сказал, что видит потенциал в сочетании генеративного ИИ с формальными методами, такими как Spark, чтобы ускорить разработку безопасного программного обеспечения. Признавая, что код, сгенерированный AI, может содержать ошибки, он предполагает, что формальная проверка может обеспечить мощную сеть безопасности.
«Вы можете предоставить требования к своему программному обеспечению, возможно, написать некоторые предварительные условия и пост-кондиционирования, некоторые контракты, которые формально утверждают, что вы хотите, чтобы ваше программное обеспечение делало, а затем нажимают кнопку, а затем внедряют его для вас, а затем запускают Spark и докажите, что реализация соответствует контрактам»,-сказал Айелло.
Этот подход будет поддерживать человеческое творчество для архитектуры и дизайна при делегировании деталей реализации в системы искусственного интеллекта, с формальной проверкой, обеспечивая правильность, отметил он.
Многочисленный ответ
Поскольку организации сталкиваются с растущим давлением для решения безопасности памяти, подход Adacore предлагает реалистичный путь вперед. Вместо того, чтобы требовать полного переписывания устаревших систем, они предлагают комбинацию стратегий:
- Использование оборудования/эмуляции Cheri для обнаружения проблем безопасности памяти в существующем коде.
- Стратегически переписывание критических компонентов на благоприятных для памяти языков, таких как искра или ржавчина.
- Использование формальной проверки для математически доказывать отсутствие проблем безопасности памяти.
Этот прагматичный, многослойный подход признает как бизнес -реальность устаревшего кода, так и критическую важность повышения безопасности — предлагая план для организаций, ориентирующихся на сложный переход от C/C ++.
Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Дэррил К. Тафт охватывает DevOps, инструменты разработки программного обеспечения и проблемы, связанные с разработчиком из своего офиса в районе Балтимора. Он имеет более чем 25 -летний опыт работы в бизнесе и всегда ищет следующий совок. Он работал … читайте больше от Дэррила К. Тафта