Инженеры из компании Meta* опубликовали отчёт о переработке компонентов мессенджера WhatsApp с использованием языка Rust. В рамках инициативы по усилению безопасности проекта был подготовлен новый вариант библиотеки wamedia, изначально написанной на языке C++ и применяемой в WhatsApp для отправки и обработки мультимедийных файлов в формате MP4.
Мотивом для переработки послужило выявление в wamedia ошибок, возникавших при обработке некорректно оформленных MP4-файлов. Подобные ошибки были устранены и добавлены проверки корректности файлов, но потенциально библиотека представляла угрозу безопасности из-за вероятного наличия ещё не выявленных похожих ошибок и использования библиотеки при автоматической обработке присылаемых данных. Эксплуатация неисправленной уязвимости в wamedia могла бы привести к выполнению кода через отправку пользователю специально оформленных мультимедийных данных, как это недавно было продемонстрировано в библиотеке Dolby Unified Decoder.
Вместо постепенного переписывания wamedia был создан новый вариант библиотеки на языке Rust, который разрабатывался параллельно с оригинальной версией на C++. В конечном счёте удалось заменить около 160 тысяч строк кода на C++ на 90 тысяч строк кода на Rust.
Ключевыми проблемами при задействовании в WhatsApp кода на Rust стало увеличение размера исполняемого файла из-за интеграции стандартной библиотеки Rust и необходимость адаптации системы сборки с сохранением всех поддерживаемых платформ. При этом версия на Rust не только отличалась заметным сокращением числа строк в коде, но и показала прирост производительности и снижение потребления памяти по сравнению с реализацией на C++.
В настоящее время версия WhatsApp с кодом на Rust доведена до пользователей Android, iOS, macOS, Web, носимых устройств и некоторых других платформ. Утверждается, что опыт внедрения Rust в WhatsApp и распространение новой библиотеки wamedia на миллиарды устройств и браузеров показывает готовность к применению языка Rust в глобальном масштабе.
По данным Meta большинство опасных уязвимостей в развиваемых продуктах вызвано проблемами при работе с памятью в коде на C и C++. Для предотвращения появления подобных уязвимостей компания продвигает три стратегии: использование для нового кода языков, безопасно работающих с памятью; снижение поверхности атаки при проектировании; инвестирование в развитие средств для обеспечения безопасности остающегося кода на C и C++.
Источник: https://www.opennet.ru/opennews/art.shtml?num=64719





