Canonical выпустила набор обновлений безопасности ядра Linux для всех поддерживаемых версий Ubuntu. Причина — аппаратные уязвимости «устаревших данных MMIO» (MMIO stale data), обнаруженные в некоторых процессорах Intel. Intel раскрыла информацию 14 июня 2022 года и выпустила обновления прошивки, рекомендовав вендорам обновить продукты.
Разберём, что такое MMIO, в чём проблема и как проверить, защищена ли ваша система.
Что такое MMIO
Memory-Mapped I/O — способ обращения к периферийным устройствам через адресное пространство памяти. Вместо специальных инструкций ввода-вывода процессор читает и пишет по адресам, которые соответствуют регистрам устройства. Так работают сетевые карты, контроллеры хранения, GPU и множество других компонентов.
Доступ к MMIO быстрый и удобный, но у него есть побочные эффекты. Если устройство не очищает буферы при определённых операциях, данные предыдущих обращений могут остаться доступными.
# посмотреть регионы памяти устройств
cat /proc/iomem | head -40
# проверить устройства PCI и их ресурсы
lspci -vv | grep -A5 "Memory at" | head -30
В чём суть уязвимостей
Исследователи обнаружили, что при определённых условиях процессор может прочитать устаревшие данные из буферов MMIO. Речь о четырёх уязвимостях среднего уровня опасности, связанных с общими буферами и регистрами устройств.
Атака требует локального доступа или выполнения кода на машине. Сама по себе она не даёт удалённого проникновения, но может использоваться для утечки информации между процессами, виртуальными машинами или контейнерами.
# проверить статус известных аппаратных уязвимостей
for f in /sys/devices/system/cpu/vulnerabilities/*; do
echo "$(basename $f): $(cat $f)"
done
Обратите внимание: список файлов зависит от ядра и процессора. Отсутствие файла не означает, что уязвимость есть или её нет — это лишь способ диагностики.
Что сделала Canonical
Canonical выпустила обновления ядра для поддерживаемых выпусков Ubuntu. Патчи добавляют механизмы очистки и ограничения доступа, чтобы снизить риск утечки. Одновременно Intel выпустила микрокод, который также рекомендуется установить.
Обновление ядра без микрокода может быть неполным: часть исправлений реализуется на уровне процессора. Поэтому важно обновить и пакеты intel-microcode, если они используются.
# обновить систему
sudo apt update
sudo apt full-upgrade
# проверить пакет микрокода
dpkg -l | grep -i intel-microcode
# посмотреть версию микрокода
grep -m1 microcode /proc/cpuinfo
Как проверить, что патч применён
Проверьте версию ядра и дату сборки. Сравните с информацией в USN-объявлении Canonical. Если вы используете HWE-ядро, обновление может приходить отдельным пакетом.
uname -r
dpkg -l | grep -E "linux-image|linux-generic" | tail -5
apt changelog linux-image-$(uname -r) 2>/dev/null | head -20
# список установленных обновлений безопасности
grep -i "linux" /var/log/apt/history.log | tail -20
После обновления нужна перезагрузка. Без неё новое ядро не загрузится, даже если пакет установлен. Для серверов с livepatch проверьте, поддерживается ли конкретное исправление.
# проверить livepatch
canonical-livepatch status 2>/dev/null | head -20
systemctl status canonical-livepatch --no-pager 2>/dev/null | head
Кого это касается
Уязвимости затрагивают некоторые процессоры Intel. Если у вас AMD или ARM, риск ниже, но обновлять ядро всё равно нужно: в тех же выпусках обычно есть другие исправления.
Виртуализация и контейнеры повышают важность патча: утечка через общие буферы может затронуть соседние виртуальные машины. Если вы предоставляете облачные ресурсы, обновление узлов — приоритет.
# проверить, какие виртуальные машины работают
virsh list --all 2>/dev/null
# проверить контейнеры
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}" 2>/dev/null | head
Влияние на производительность
Любая защита от аппаратных уязвимостей стоит производительности. Очистка буферов и дополнительные барьеры могут замедлить операции ввода-вывода. На практике эффект зависит от нагрузки: базы данных и сетевые сервисы могут заметить больше, чем офисные приложения.
Измеряйте свою нагрузку до и после. Не отключайте защиту на публичном сервере ради нескольких процентов — риск утечки данных выше выигрыша.
# пример измерения пропускной способности диска
fio --name=test --rw=read --size=1G --numjobs=1 --time_based --runtime=30
# сетевой тест
iperf3 -c host -t 30
Порядок действий для администратора
- Проверьте, какие версии Ubuntu и ядра используются.
- Прочитайте USN-объявление и определите затронутые пакеты.
- Обновите ядро и микрокод на тестовом узле.
- Перезагрузите и проверьте работу сервисов.
- Измерьте производительность ключевых нагрузок.
- Разверните обновление на остальные узлы поэтапно.
- Зафиксируйте версии и результаты в журнале изменений.
# зафиксировать состояние узла
uname -r > ~/node-before.txt
dpkg -l | grep -E "linux-image|intel-microcode" >> ~/node-before.txt
lscpu >> ~/node-before.txt
Не обновляйте весь кластер одновременно: если новое ядро сломает драйвер, вы потеряете управление всеми узлами.
Если обновление недоступно
Иногда вендор оборудования задерживает прошивку, или вы используете старое ядро вне поддержки. В этом случае оцените риск: изолируйте чувствительные нагрузки, ограничьте совместное использование ресурсов и ускорьте план обновления.
Временные обходные меры не заменяют патч. Они лишь снижают вероятность эксплуатации.
# проверить, поддерживается ли выпуск
ubuntu-support-status 2>/dev/null | head -20
# посмотреть доступные версии ядра
apt-cache search linux-image | grep generic | tail -10
Контекст: почему аппаратные уязвимости не заканчиваются
Spectre, Meltdown, MDS, Retbleed, MMIO stale data — это не отдельные случайные ошибки, а следствие оптимизаций, которые годами накапливались в процессорах. Каждое поколение добавляет новые механизмы, и каждое исследуется на предмет побочных каналов.
Для индустрии это означает постоянный цикл: обнаружение, микрокод, патчи ядра, обновления дистрибутивов. Для администратора — необходимость следить за объявлениями и иметь процесс установки обновлений.
# регулярно проверять объявления безопасности Ubuntu
# https://ubuntu.com/security/notices
# подписаться на рассылку ubuntu-security-announce
Итог
Canonical закрыла уязвимости MMIO stale data в ядре Ubuntu для поддерживаемых выпусков. Обновите ядро и микрокод Intel, перезагрузитесь и проверьте сервисы. Уязвимости локальные и среднего уровня, но в виртуализации и облаке они важны. Не отключайте защиту ради производительности на публичных системах и обновляйте узлы поэтапно.