Не так давно мы говорили о первом CVE в ядре Linux, который вызывал сбои системы. В тот же день было выпущено еще 159 CVE для кода на C. Хотя это свидетельствует о прогрессе в Rust, оно также подчеркивает более серьезную проблему: в ядре есть ошибки, которые остаются незамеченными в течение многих лет, пока их кто-нибудь не обнаружит.
В исследовательском блоге, опубликованном на Pebblebed, показано, как ошибки часто остаются незамеченными в течение многих лет, пока их не обнаружат и не исправят.
Ядро Linux не идеально
Дженни Гуанни Ку, исследователь из Pebblebed, проанализировала 125 183 ошибки за 20 лет истории разработки ядра Linux на Gi. Результаты показывают, что в среднем на обнаружение ошибки уходит 2,1 года. Самая долговечная ошибка, переполнение буфера в сетевом коде, оставалась незамеченной в течение почти 20 лет!
Исследование было проведено с использованием тега Fixes:, который используется в разработке ядра. В основном, когда коммит исправляет ошибку, он включает тег, указывающий на коммит, который ввел эту ошибку.
Дженни написала инструмент, который извлекал эти теги из истории git ядра, начиная с 2005 года. Инструмент находит все исправляющие коммиты, извлекает хэш ссылки на коммит, извлекает даты из обоих коммитов и рассчитывает временной интервал.
Что касается набора данных, он включает более 125 тысяч записей из Linux 6.19-rc3, охватывающих ошибки с апреля 2005 года по январь 2026 года. Из них 119 449 были уникальными коммитами исправлений от 9159 разных авторов, и только 158 ошибкам были присвоены CVE-идентификаторы.
Кроме того, она обнаружила, что разные части ядра демонстрируют значительные различия в том, как долго ошибки остаются скрытыми. Драйверы шины CAN имеют самый длинный средний срок — 4,2 года, за ними следуют сетевые драйверы SCTP — 4,0 года. Ошибки GPU обнаруживаются быстрее всего — за 1,4 года, а ошибки BPF — за 1,1 года.
Исследование также показало, что неполные исправления являются обычным явлением. Кто-то замечает неопределенное поведение и отправляет исправление, но оно не полностью решает проблему. В одном случае исправление 2024 года для проверки полей набора netfilter было неполным, и через год исследователь в области безопасности обнаружил способ его обойти.
Исследование Дженни гораздо глубже, чем то, что я описал здесь. Она также разработала модель искусственного интеллекта под названием VulnBERT, которая предсказывает, приведет ли коммит к появлению уязвимости. В подробном блоге, ссылка на который приведена выше, содержатся подробные технические объяснения по этому вопросу; его обязательно стоит прочитать!




Комментарии (0)