Разработчики ядра Linux планируют отказаться от использования AF_ALG, чтобы снизить уязвимость системы
Краткое резюме
- AF_ALG, интерфейс ядра для криптографических алгоритмов пользовательского пространства, не поддерживается в Linux Kernel 7.2.
- Разработчики ядра считают, что криптографический интерфейс AF_ALG создает множество уязвимостей, но при этом приносит мало реальной пользы.
- Дело не в том, что AF_ALG не работает. Дело в изменении соотношения затрат и пользы. Библиотеки пользовательского пространства, такие как OpenSSL, уже справляются с этой задачей лучше, поэтому нет смысла сохранять привилегированный интерфейс ядра только для тех немногих программ, которые его используют.
В ядре Linux 7.2 поддержка AF_ALG прекращена
Разработчики ядра Linux переходят на отказ от использования криптографического интерфейса AF_ALG в рамках постоянной работы по сокращению уязвимостей ядра и повышению общей безопасности системы.
AF_ALG позволяет пользовательским приложениям получать доступ к криптографическим алгоритмам, реализованным в ядре Linux. Изначально этот интерфейс предназначался для удобного доступа к криптографическим службам ядра и функциям аппаратного ускорения, но теперь разработчики считают, что он приносит мало практической пользы по сравнению с рисками для безопасности и сложностями в обслуживании.
Несмотря на то, что AF_ALG по-прежнему доступен в текущих версиях Linux, процесс его поддержки прекращен. В последних патчах задокументировано прекращение поддержки и удаление ключевых функций, таких как поддержка копирования без потерь и разгрузка аппаратного ускорителя. Ожидается, что эти изменения появятся в ядре Linux 7.2.
В этой статье мы рассмотрим почему разработчики Linux хотят отказаться от функций AF_ALG и причины, по которым было принято такое решение.
Примечание редактора: по состоянию на июнь 2026 года Linux 7.1 находится на стадии подготовки к выпуску (RC6). Linux 7.2 еще не выпущен, и окно слияния еще не открылось. Устаревание AF_ALG, описанное в этой статье, одобрено и включено в очередь в криптографической подсистеме ядра для слияния с Linux 7.2, которое, как ожидается, произойдет в середине июня 2026 года, а выход стабильной версии Linux 7.2 — в конце августа 2026 года.
Почему разработчики ядра Linux хотят отказаться от поддержки AF_ALG
Разработчики Linux все чаще сталкиваются с серьезной проблемой: уязвимости обнаруживаются быстрее, чем когда-либо. Современные инструменты анализа, в том числе исследования в области безопасности с использованием искусственного интеллекта и больших языковых моделей (БЯМ), помогают выявлять ошибки и потенциальные пути атак гораздо быстрее, чем раньше.
Во время обсуждения устаревания AF_ALG разработчик ядра Linux Эрик Биггерс указал на меняющуюся картину уязвимостей и привел в пример недавние случаи, такие как уязвимость Copy Fail (CVE-2026-31431). Для тех, кто не в курсе, Copy Fail — это логическая ошибка, которая позволяет 732-байтовому скрипту на Python получить root-доступ практически во всех основных дистрибутивах Linux с ядрами, выпущенными после 2017 года.
Эрик утверждает, что современные методы поиска ошибок приводят к тому, что большие уязвимые поверхности ядра становится все труднее обосновать, поскольку они имеют ограниченную практическую ценность.
В связи с этим разработчики Linux уделяют больше внимания снижению уязвимости системы, где это возможно. В качестве примера подсистемы, долгосрочные издержки которой в плане безопасности могут превысить выгоды, был приведен AF_ALG.
Проблема с поддержкой копирования без выделения памяти
Одной из первых функций AF_ALG, которые планируется удалить, является возможность копирования без выделения памяти.
Архитектура с нулевым копированием может повысить производительность, позволяя ядру работать напрямую с памятью, предоставляемой пользовательскими приложениями, без создания промежуточных копий. Однако такой подход создает проблемы с безопасностью.
Для тех, кому интересно: реализация AF_ALG с нулевым копированием позволяет пользовательскому пространству запрашивать криптографические операции непосредственно на страницах страничного кэша и вносить изменения в память во время выполнения криптографических операций. Это создает условия, которые могут привести к уязвимостям от момента проверки до момента использования (TOCTOU).
Проблема особенно серьезна тем, что AF_ALG может работать с отображением памяти на основе файлов. В некоторых случаях это может позволить злоумышленнику получить доступ к конфиденциальным файлам, таким как su двоичный файл, во время выполнения криптографических операций.
Чтобы снизить этот риск, разработчики отключают поддержку нулевого копирования в AF_ALG и заменяют ее более безопасными внутренними копиями данных в ядре.
Аппаратная разгрузка не принесла ожидаемых результатов
Еще одно предлагаемое изменение касается аппаратного ускорения криптографических операций.
Изначально AF_ALG предназначался для обеспечения доступа к специализированному оборудованию для криптографических ускорителей через криптографическую подсистему ядра. Однако на практике разработчики обнаружили, что эти драйверы ускорителей усложняют работу, увеличивают затраты на обслуживание и создают дополнительные риски для безопасности.
Они также отметили, что AF_ALG — не самый эффективный интерфейс для аппаратных ускорителей и что в реальных условиях он используется относительно редко.
В результате, поддержка AF_ALG для разгрузки криптографического ускорителя удаляется в рамках более широких усилий по устареванию.
Почему разработчикам рекомендуется использовать криптографические библиотеки пользовательского пространства
Для большинства приложений криптографические библиотеки пользовательского пространства, такие как OpenSSL и аналогичные проекты, уже предоставляют зрелые, хорошо поддерживаемые реализации распространенных криптографических алгоритмов.
Использование библиотек пользовательского пространства позволяет избежать дополнительных уязвимостей ядра, а также упрощает разработку и обслуживание. Это соответствует давнему принципу разработки Linux: функционал, который не должен выполняться в ядре, по возможности должен оставаться в пользовательском пространстве.
Разработчики отметили, что относительно небольшое количество приложений по-прежнему зависит от AF_ALG. В ходе обсуждения был упомянут один пример — iwd, демон беспроводной связи Intel. Разработчикам рекомендуется по возможности переводить оставшихся пользователей AF_ALG на криптографические библиотеки пользовательского пространства.
Что должны делать пользователи Linux
Для большинства пользователей Linux отказ от поддержки AF_ALG не требует немедленных действий. Этот интерфейс остается доступным в текущих версиях, а полное удаление произойдет в будущих версиях ядра.
Однако уязвимости в кэше страниц, такие как Copy Fail, требуют безотлагательного устранения. Всем пользователям следует как можно скорее установить обновление ядра своего дистрибутива, чтобы защититься от этих уязвимостей.
Помимо установки последних обновлений ядра, разработчикам и системным администраторам следует проверить, зависит ли их программное обеспечение от AF_ALG, и рассмотреть возможность перехода на криптографические библиотеки пользовательского пространства до окончательного удаления этой функции.
Конкретные шаги, которые необходимо предпринять:
- Немедленно устраните уязвимость Copy Fail и подобные ошибки: установите последнее обновление ядра для вашего дистрибутива Linux. Исправление было объединено с основной веткой в апреле 2026 года и теперь доступно во всех основных дистрибутивах.
- Временное решение проблемы Copy Fail: Если немедленное обновление ядра невозможно, отключите конкретный уязвимый модуль, задав
CONFIG_CRYPTO_USER_API_AEAD=nв конфигурации ядра, или внесите модульalgif_aeadв черный список. Это заблокирует уязвимый интерфейс AEAD, не отключая весь AF_ALG. - Полное отключение AF_ALG (необязательно): Если ни одно из ваших приложений вообще не использует AF_ALG, отключение более широкой опции
CONFIG_CRYPTO_USER_APIприведет к удалению всего интерфейса. Это опция, доступная во время сборки для тех, кто поддерживает собственные ядра. - Проверьте зависимости от AF_ALG: Определите, какие приложения используют AF_ALG, и оцените возможности миграции до того, как поддержка будет прекращена в одном из будущих релизов ядра.
Заключительные мысли
Предлагаемое прекращение поддержки AF_ALG отражает общую тенденцию в разработке ядра Linux: упрощение и отказ от функций, которые создают риски для безопасности, не принося существенной пользы в реальных условиях.
Отказавшись от поддержки нулевого копирования, удалив функцию аппаратной разгрузки и поощряя переход на криптографические библиотеки пользовательского пространства, разработчики ядра Linux стремятся уменьшить уязвимость ядра и снизить риски для безопасности в будущем.
AF_ALG пока не удален, но разработчики ядра планируют отказаться от его поддержки. Разработчики считают, что долгосрочные издержки перевешивают преимущества, и процесс отказа от поддержки уже начался.
Ссылки:
- Патч для отказа от поддержки AF_ALG — дерево криптографических модулей ядра (Эрик Биггерс)
- Linux 7.2 прекращает поддержку AF_ALG из-за «огромной уязвимости», отказывается от разгрузки
- Криптографический код Linux AF_ALG без поддержки нулевого копирования
Редактор: AndreyEx