Wifibox 0.10 – окружение для использования WiFi-драйверов Linux во FreeBSD

Доступен выпуск проекта Wifibox 0.10, нацеленного на решение проблемы с использованием во FreeBSD беспроводных адаптеров, для которых отсутствуют необходимые драйверы. Работа проблемных для FreeBSD адаптеров обеспечивается через запуск гостевой системы с Linux, в которой загружаются родные для Linux драйверы беспроводных устройств.

Установка гостевой системы с драйверами автоматизирована, а
все необходимые компоненты оформлены в виде готового пакета wifibox, который запускается при загрузке при помощи поставляемого в комплекте rc-сервиса. В том числе корректно обрабатывается переход в спящий режим. Окружение потенциально может применяться для любых WiFi-карт, поддерживаемых в Linux, но протестировано в основном на чипах Intel. Также проверена корректная работа на системах с беспроводными чипами Qualcomm Atheros и AMD RZ608 (MediaTek MT7921K).

Гостевая система запускается при помощи гипервизора Bhyve, в котором организуется проброс доступа к беспроводной карте. Для работы требуется система с поддержкой аппаратной виртуализации (AMD-Vi или Intel VT-d). Начинка гостевой системы основана на дистрибутиве Alpine Linux, построенного на базе системной библиотеки Musl и набора утилит BusyBox. Размер образа занимает на диске примерно 30МБ и потребляет около 90 МБ оперативной памяти.

Для подключения к беспроводной сети используется пакет wpa_supplicant, файлы конфигурации для которого синхронизируются с настройками из основного окружения FreeBSD. Создаваемый wpa_supplicant управляющий сокет пробрасывается в хост-окружение, что позволяет использовать штатные утилиты FreeBSD для подключения и работы с беспроводной сетью, в том числи можно использовать утилиты wpa_cli и wpa_gui (net/wpa_supplicant_gui).

В новом выпуске переработан механизм проброса WPA в основное окружение, что позволило обеспечить работу как с wpa_supplicant, таки и с hostapd. Снижен необходимый для гостевой системы объём памяти. Прекращена поддержка FreeBSD 13.0-RELEASE.

Дополнительно можно отметить работу по улучшению родных для FreeBSD драйверов для беспроводных карт на чипах Intel и Realtek. При поддержке организации FreeBSD Foundation продолжается развитие нового драйвера iwlwifi, включённого в состав FreeBSD 13.1. Драйвер основан на Linux-драйвере и коде из Linux-подсистемы net80211, поддерживает стандарт 802.11ac и может использоваться с новыми беспроводными чипами Intel. Драйвер загружается автоматически во время загрузки при обнаружении необходимой беспроводной карты. Работа компонентов беспроводного стека Linux обеспечивается при помощи прослойки LinuxKPI. Ранее похожим образом для FreeBSD был портирован драйвер iwm.

Параллельно началась разработка драйверов rtw88 и rtw89 для беспроводных чипов Realtek RTW88 и RTW89, которые также развиваются путём переноса соответствующих драйверов из Linux и работают при помощи прослойки LinuxKPI. Драйвер rtw88 уже готово для начального тестирования, а драйвер rtw89 пока не готов для рабочих экспериментов.

Кроме того, можно упомянуть публикацию деталей и готового эксплоита, связанных с уязвимостью (CVE-2022-23088) в беспроводном стеке FreeBSD, устранённой в апрельском обновлении FreeBSD. Уязвимость позволяет выполнить свой код на уровне ядра через отправку специально оформленного кадра в момент нахождения клиента в режиме сканирования сети (на стадии до привязки SSID). Проблема вызвана переполнением буфера в функции ieee80211_parse_beacon() при разборе beacon-кадров, передаваемых точкой доступа, из-за отсутствия проверки соответствия фактического размера данных и размера, указанного в поле заголовка. Проблема проявляется в версиях FreeBSD, сформированных с 2009 года.


Среди не связанных с беспроводным стеком недавних изменений во FreeBSD: проведена оптимизация времени загрузки, которая на тестовой системе была сокращена с 10 до 8 секунд; реализован GEOM-модуль gunion для выноса на другой диск изменений, производимых поверх диска, доступного в режиме только для чтения; для crypto API ядра подготовлены криптографические примитивы XChaCha20-Poly1305 AEAD и curve25519, необходимые для драйвера VPN WireGuard.

Release. Ссылка here.