Безопасность памяти

Небезопасность памяти

Ошибки безопасности памяти, ошибки в обращении с памятью в родных языках программирования, являются наиболее распространенной проблемой в кодовых базах Android. На их долю приходится более 60% серьезных уязвимостей безопасности и миллионы видимых пользователями сбоев.

Ошибки безопасности памяти влияют на пользовательский опыт, затраты и безопасность.
Рис. 1. Ошибки безопасности памяти и их негативное влияние на качество, безопасность и стоимость

Ошибки безопасности памяти негативно влияют на качество и стабильность и являются причиной значительной доли сбоев, наблюдаемых на устройствах конечных пользователей. Таким образом, высокая плотность ошибок безопасности памяти напрямую связана с плохим взаимодействием с пользователем.
Нативный код, написанный на небезопасных для памяти языках, таких как C, C++ и ассемблер, составляет более 70 % кода платформы Android и присутствует примерно в 50 % приложений Play Store.
Учитывая постоянно растущую сложность кода, если оставить его без внимания, количество ошибок, связанных с безопасностью памяти, со временем будет увеличиваться. Поэтому предоставление нашей экосистеме инструментов и технологий, которые могут обнаруживать и устранять такие ошибки, имеет решающее значение для нашего долгосрочного успеха.
В течение последних нескольких лет мы тесно сотрудничали с нашими партнерами по аппаратному обеспечению для разработки аппаратных технологий, таких как Arm Memory Tagged, и внедрили Rust в кодовую базу Android.
Эти технологии ускорят наш путь к безопасности памяти и помогут более широкой индустрии программного обеспечения решить ключевую проблемную область.

Ошибки безопасности памяти негативно сказываются на качестве

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

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

Ошибки безопасности памяти негативно влияют на безопасность

Ошибки безопасности памяти всегда были главным источником уязвимостей безопасности Android, начиная с первого выпуска Android.

Ошибки безопасности памяти негативно влияют на безопасность.
Рис. 2. Влияние ошибок безопасности памяти на уязвимости Android

Хотя отрадно знать, что это проблема не только Android (см. статистику Chrome и Microsoft ), нам нужно сделать больше для безопасности наших пользователей.
Команда Project Zero в Google отслеживает эксплойты нулевого дня, которые использовались в реальных атаках на пользователей, как уязвимости нулевого дня. Это не гипотетические ошибки, а эксплойты, активно используемые в атаках на пользователей. Ошибки безопасности памяти (повреждение памяти и использование после освобождения) составляют подавляющее большинство.

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

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

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

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

Безопасность памяти

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

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

Требования в поддержку безопасности памяти

Документ определения совместимости с Android (CDD) настоятельно рекомендует использовать инструменты безопасности памяти во время разработки.
Мы тесно сотрудничаем с нашей экосистемой, чтобы расширить использование инструментов безопасности памяти и интегрировать их в процессы непрерывной интеграции и тестирования.
Со временем мы хотели бы убедиться, что каждое устройство проходит полный набор тестов совместимости ( CTS ) с использованием инструментов безопасности памяти, что демонстрирует отсутствие таких ошибок. Например, платформам Arm v9 потребуется обеспечить запуск CTS с включенной маркировкой памяти, тогда как платформам Arm v8 будет предложено обеспечить запуск CTS с использованием HWASAN и KASAN.

Rust как новый язык программирования для кода платформы

Android 12 представил Rust в качестве языка платформы . Rust обеспечивает безопасность памяти и потоков на уровне производительности, аналогичном C/C++. Мы ожидаем, что Rust будет предпочтительным выбором для большинства новых нативных проектов. Однако переписать весь небезопасный код памяти, который в настоящее время составляет более 70% кода платформы Android, на Rust невозможно. В дальнейшем Rust будет дополнять инструменты безопасности памяти.

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

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

Ошибки безопасности памяти негативно влияют на безопасность.
Рис. 3. Ландшафт инструментов безопасности памяти Android

Наш инструментарий охватывает широкий спектр сценариев и целей развертывания. В следующей документации описывается каждое средство и даются рекомендации по их использованию в ваших продуктах.