Кодовые войны: ржавчина против C в битве за безопасность на миллиард

Недавний эксперимент голландского консалтингового консалтинга Rust, Tweede Golf, демонстрирует, почему Rust быстро получает внедрение в критических приложениях безопасности.

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

«Rust предлагает три основных преимущества: врожденная безопасность памяти (с четкими маркерами при использовании небезопасного кода), строгие проверки времени компиляции, которые ловят ошибки в раннем и первоклассном тестовой эргономике, которая способствует высокому покрытию кода»,-заявил Дэвид Миттон, генеральный директор Arcjet, провайдер платформы безопасности, первого разработчика.

Проблема с устройством на 3 миллиарда

В 2021 году исследователи безопасности обнаружили критическую уязвимость в операционной системе ядра Siemens в реальном времени: программное обеспечение, работающее на более чем 3 миллиардах устройств по всему миру. Уязвимость, часть коллекции, получившей название «Название: крушение», позволила злоумышленникам создать вредоносные ответы DNS, которые могут привести к сбоям устройства или даже к завершению поглощений.

«Но можно изготовить« ответы DNS », содержащие преднамеренные« ошибки ». Злоученные хакеры могут использовать это, чтобы обмануть ядро ​​в написании в места памяти, которые это действительно не должно», — пишет Марк Шулдерман, системный инженер программного обеспечения в Tweede Golf, в блоге.

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

Эксперимент: C против ржавчины в реальной безопасности

Чтобы проверить, могла ли ржавчина предотвратить эту уязвимость, Tweede Golf разработал эксперимент. Они дали четырем инженерам (двум сотрудникам и двум стажерам) краткое описание протокола кодирования сообщения DNS (RFC1035) и попросили их реализовать решение в Rust в течение всего трех -четырех часов.

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

Результаты: безопаснее по дизайну

Результаты были поразительными. В то время как исходный код C не удался по нескольким тестовым случаям (с 7 из 12 тестов, приводящих к использованию условий), ни одна из реализаций Rust не содержала произвольных уязвимостей выполнения кода.

«Никто не чувствовал необходимости использовать небезопасную ржавчину», — пишет Schoolderman, ссылаясь на люк Rust’s Escape, который позволяет программистам обходить проверку безопасности при необходимости.

Все решения ржавчины были «безопасными паниками», что означает, что они приведут к восстановлению ошибок, а не к сбоям системы при питании злонамеренного ввода. И, несмотря на временные ограничения, все инженеры написали тщательные тестовые наборы, включая тестирование нефти, которые автоматически генерируют проблемные входы.

Разработчики весят

«Я думаю, что этот эксперимент является отличным примером значения, которую приносят языки программирования, безопасные для памяти»,-сказал новый стек Алекс Гейнор, борьба с открытым исходным кодом, работающий над проектами Python и Rust. «Декодирование сообщений DNS-это не те вещи, которые должны иметь возможность иметь критические уязвимости безопасности, которые подвергают риск системы, но, к сожалению, на языки с памятью, это статус-кво».

Более того, «это простое исследование показывает еще один пример, в котором воспоминания о языках по умолчанию безопасны по умолчанию, имеет большое значение для создания общих более безопасных систем», — добавил он.

Джош Аас, соучредитель и исполнительный директор Исследовательской группы по безопасности интернет-безопасности (ISRG), сказал, что, по его мнению, здорово, что Tweede Golf нашел время, чтобы копаться и проверить претензию интересным образом. «Людям не нужно претендовать на безопасность Руста за чистую монету, и это еще одно убедительное доказательство», — сказал он новому стеку.

Например, «Проект Prossimo в ISRG инвестировал в DNS, безопасные для памяти, чтобы избежать точно описанной проблемы. Hickory DNS-это высокопроизводительный рекурсивный резалвер DNS, написанный в Rust, и мы надеемся развернуть его в нашем авторитете Let’s Encrypt Acterpate на следующий год»,-сказал Аас.

В то время как эксперимент по гольфу Tweede — это меньшее усилие, чем выводы Google, на который они ссылаются, он предоставляет еще одно доказательство того, что Rust оказывает влияние на безопасность, на которую, как Larsen, сообщил новому стеку, будет надеяться, что Larsen, генеральный директор Immunant, системный программный обеспечение.

«Ребята из Tweede Golf делают отличную работу по перемещению программного обеспечения от C к ржавчине», — сказал он. «У нас отличные рабочие отношения с ними, и мы имеем положительное впечатление от нашего взаимодействия с ними. Они регулярно вносят свой вклад в наши инструменты миграции C2RUST, так что это огромный плюс в моей книге».

Между тем, «Я думаю, что это блестящий пост, он подкрепляет точку безопасности, которую ржавее имеет над C/C ++ даже с реальными сценариями»,-сказал Новый Стек, старший разработчик Rust, старший разработчик Rust, работающий подрядчиком в Лагосе, Нигерия.

Преимущество скорости развития

Возможно, самым удивительным результатом было преимущество времени разработки. Согласно Tweede Golf, внедрение действительно безопасной версии C той же функциональности «потребовалось как минимум в три раза больше времени» по сравнению с реализациями Rust, даже когда вооружен предвидение уязвимостей.

«В Tweede Golf мы не просто используем ржавчину, потому что это мешает нам делать ошибки — мы также используем его, потому что это позволяет нам писать более безопасное программное обеспечение и быстро быть быстро», — объяснил Шолдерман.

Почему ржавчина преуспевает, где C борется

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

  • Неконтролируемые смещения памяти, которые позволили злоумышленникам читать или написать произвольные местоположения памяти
  • Неявное доверие входных данных без проверки
  • Потенциальные бесконечные петли, вызванные круглыми ссылками
  • Нет проверки, чтобы гарантировать, что буферы выходных не переполнены

Напротив, философия дизайна Rust предотвращает эти проблемы по умолчанию:

  • Гарантии безопасности памяти: Система собственности Rust производит переполнение буфера и уязвимости без использования почти невозможными без явного выбора для обхода проверки безопасности.
  • Система выразительного типа: Система надежного типа Rust способствует четкой проверке данных и явной обработке ошибок.
  • Тестирование культуры: Экосистема ржавчины сильно подчеркивает тестирование, в том числе тестирование на основе имущества и нефтяное тестирование, которое обнаруживает, что случаи, которые могут пропустить люди.
  • Помимо академических примеров

    Это не просто академическое упражнение. Аналогичные уязвимости, связанные с DNS, были обнаружены в четырех других сетевых библиотеках, которые вместе называют имя: Wreck. Эксперимент добавляет эмпирический вес к тому, что говорили Google, Microsoft и другие технологические гиганты: проблемы безопасности памяти объясняют большой процент уязвимостей безопасности, а такие языки, как RUST, значительно снижают эти риски.

    Будущее системного программирования

    В качестве встроенных систем устройства Интернета вещей (IoT) и критическая инфраструктура становятся все более связанными, затраты на уязвимости безопасности растут в геометрической прогрессии. Эксперимент Tweede Golf предоставляет убедительные доказательства того, что современные языки, безопасные для памяти, такие как Rust, предлагают путь вперед-не только путем предотвращения определенных классов ошибок, но и путем более быстрого разработки более надежных, безопасных систем.

    Сообщение ясно: когда речь идет о программном обеспечении, эксплуатирующих критические системы, которые затрагивают миллионы или миллиарды людей, выбор языка программирования больше не является просто предпочтением разработчика — речь идет о фундаментальной безопасности и безопасности.

    «Для системного сетевого кода, Rust, вероятно, является лучшим инструментом, доступным сегодня-его преимущества по сравнению с C являются ошеломляющими, и я не вижу причин выбора C для этих проблем сегодня»,-сказал Миттон.

    Придирание?

    «Хотя я уверен, что можно выбрать ниты с методологией исследования (например, небольшой размер выборки, программисты более прилежны в тестах, чем в реальной жизни), я думаю, что то, что мы видим здесь, действительно воспроизводит то, что мы видим в крупномасштабных промышленных условиях, таких как такие [Google’s]и это должно дать нам уверенность в том, что эти результаты действительно отражают то, что организации, которые могут получить от написания кода на языках, безопасных для памяти »,-сказал Гейнор.

    Более того, заявление о том, что универсальная «время и деньги» нуждается в отборочном режиме, сказал Миттон.

    «Да, это, вероятно, верно по сравнению с C и при решении проблем на уровне системы»,-сказал он. «Но против других безопасных языков, таких как Python или Go? Анализ затрат и выгод гораздо сложнее. Трудно найти опытных разработчиков ржавчины с производственным опытом, и по мере того, как вы поднимаетесь в стек, Python или Go намного быстрее обращаются».

    Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Дэррил К. Тафт охватывает DevOps, инструменты разработки программного обеспечения и проблемы, связанные с разработчиком из своего офиса в районе Балтимора. Он имеет более чем 25 -летний опыт работы в бизнесе и всегда ищет следующий совок. Он работал … читайте больше от Дэррила К. Тафта

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *