26 марта 2024 года, команда разработчиков Android, в лице Евгения Родионова и Ивана Лозано, представила новый подход к повышению безопасности прошивок - Kernel Address Sanitizer (KASan). Этот инструмент, изначально разработанный для ядра Linux, теперь адаптирован для работы с прошивками микроконтроллеров и другим низкоуровневым ПО.
KASan, использующийся на этапе тестирования и фаззинга, позволяет выявлять уязвимости, связанные с нарушением целостности памяти, еще до того, как они окажутся в конечном продукте. Использование KASan уже позволило обнаружить и устранить более 40 критических ошибок в прошивках.
Сопровождая этот анонс, команда выпустила проект, демонстрирующий применение KASan в среде QEMU для bare-metal систем, что дает разработчикам ценные направления для интеграции и адаптации инструмента под собственные нужды.
ASan - это инструмент на основе компилятора, позволяющий выявлять некорректные обращения к памяти в реальном времени. Он может обнаруживать такие ошибки, как обращение за пределы массива, использование после освобождения памяти, двойное освобождение и использование после возврата из функции. ASan работает путем встраивания специального кода проверки адресов памяти, используемых при загрузке/сохранении данных.
Для интеграции KASan в прошивку необходимо обеспечить наличие «теневой памяти» - специального участка памяти для отслеживания состояния каждого участка основной памяти. KASan перенаправляет каждый адрес из основной памяти в теневую память, позволяя контролировать доступность и состояние каждого блока памяти.
Разработчикам предстоит реализовать рутинные функции KASan, отвечающие за проверку доступности участков памяти и обработку обнаруженных нарушений, а также управление теневой памятью. Это включает в себя функции для проверки каждого обращения к памяти и функции для «отравления» или «очищения» блоков теневой памяти в зависимости от их использования.
Нажимая на кнопку, я даю Согласие на обработку персональных данных в соответствии с Политикой обработки.