Retbleed — исследовательская атака, которая использует инструкции возврата в процессорах Intel и AMD для утечки данных через спекулятивное выполнение. Она относится к семейству атак по сторонним каналам и показывает, что микроархитектурные оптимизации продолжают создавать новые классы уязвимостей.

Разберём, как работает Retbleed, какие меры уже включены в Linux и что делать пользователю.

Как работает атака

Процессор предсказывает адрес возврата из функции, чтобы не ждать вычисления. Если предсказание неверно, выполнение откатывается, но следы остаются в кэше. Измеряя время доступа к памяти, атакующий может восстановить данные, к которым у него нет прямого доступа.

Retbleed использует цепочки возвратов и особенности предсказателя. Для эксплуатации обычно нужен локальный доступ или возможность запускать код на той же машине. В облаке с общими ядрами риск выше, чем на выделенном компьютере.

Кого затрагивает

Уязвимость касается определённых поколений Intel и AMD. Производители выпустили микрокод, а ядро Linux добавило программные обходы. Конкретный статус зависит от модели CPU и версии прошивки, поэтому проверяйте свою систему, а не полагайтесь на общие списки.

lscpu | grep -E "Model name|Vendor ID|Family|Model"
cat /sys/devices/system/cpu/vulnerabilities/retbleed

Если в файле указано Not affected, защита не требуется. Если Vulnerable — нужны обновления. Промежуточные статусы описывают включённые меры.

Обновление

Обновите микрокод и ядро. В Debian/Ubuntu пакеты называются intel-microcode и amd64-microcode; в Fedora — microcode_ctl. После установки нужна перезагрузка.

sudo apt update
sudo apt install intel-microcode
sudo apt full-upgrade
sudo reboot

Проверьте, что новый микрокод загрузился:

dmesg | grep -i microcode
journalctl -k -b | grep -i retbleed

Не устанавливайте микрокод из случайных источников: подписанный пакет дистрибутива безопаснее архива с форума.

Стоимость защиты

Обходы Retbleed могут снижать производительность, особенно в задачах с большим числом вызовов функций: базы данных, виртуализация, сетевые сервисы. В некоторых сценариях падение заметно, в других — почти нет.

Ядро выбирает режим автоматически. Параметры загрузки позволяют управлять поведением, но менять их стоит только с пониманием риска.

cat /proc/cmdline
# примеры параметров (не применяйте вслепую)
# retbleed=auto / retbleed=off

Отключение защиты повышает производительность, но возвращает уязвимость. Для публичного сервера это плохой компромисс; для изолированной тестовой машины — допустимо, если вы понимаете последствия.

Проверка производительности

Сравнивайте не «на глаз», а на реальной нагрузке. Возьмите бенчмарк, близкий к вашему сценарию: компиляция, база данных, веб-запросы, шифрование.

# пример: время сборки
time make -j$(nproc)
# пример: пропускная способность диска
fio --name=randread --rw=randread --bs=4k --iodepth=32 --runtime=60 --time_based
# пример: HTTP-нагрузка
wrk -t4 -c100 -d30s http://localhost:8080/

Замеряйте до и после обновления на одинаковой конфигурации. Учитывайте прогрев и фоновые задачи, иначе разница будет случайной.

Виртуализация и облако

Если вы размещаете контейнеры разных арендаторов на одном хосте, изоляция ядер важнее скорости. Используйте cpuset, отдельные узлы или планировщик с учётом топологии. Для критичных данных выбирайте выделенные инстансы.

cat /sys/fs/cgroup/cpuset.cpus.effective
docker run --cpuset-cpus="0-3" image

Проверьте, что гипервизор обновлён: уязвимости в виртуализации могут обходить границы гостевой системы.

Что делать домашнему пользователю

Обновите систему и перезагрузитесь. Не отключайте защиты ради нескольких процентов производительности. Если компьютер используется только вами и вы не запускаете недоверенный код, практический риск ниже, но обновления всё равно нужны.

Для браузера включите изоляцию сайтов и не отключайте песочницу. Для серверов ограничьте доступ и следите за обновлениями ядра.

uname -r
cat /sys/devices/system/cpu/vulnerabilities/*

Как проверить, что защиты действительно включены

После обновления важно не просто перезагрузиться, а убедиться, что ядро загрузилось с нужными параметрами и что микрокод применился. Иногда система обновляет пакет, но остаётся на старом ядре, потому что загрузчик по умолчанию выбирает другой пункт.

uname -r
cat /sys/devices/system/cpu/vulnerabilities/retbleed
journalctl -k -b | grep -iE "microcode|retbleed" | head -20
dmesg | grep -i "smpboot" | head -5

Если статус остаётся Vulnerable, проверьте, что установлен именно пакет микрокода для вашего вендора и что он не отключён параметром загрузки. Некоторые старые материнские платы требуют обновления BIOS: без него микрокод может не загружаться корректно.

Для парка машин соберите версии ядра и статусы в один отчёт. Это занимает минуту, но сразу показывает узлы, которые «обновились» формально и остались уязвимыми фактически.

for h in $(cat hosts.txt); do
  ssh "$h" 'printf "%s %s " "$(hostname)" "$(uname -r)"; cat /sys/devices/system/cpu/vulnerabilities/retbleed'
done

Что делать, если обновление ломает нагрузку

Обходы Retbleed влияют на ветвления и возвраты, поэтому сильнее всего страдают базы данных, интерпретаторы и виртуализация. Если после обновления вы видите падение пропускной способности, не отключайте защиту сразу: сначала измерьте, где именно теряется время.

perf stat -a sleep 10
perf top
pidstat -u -w 1 10
vmstat 1 10

Часто оказывается, что узкое место не в CPU, а в диске или сети, и обновление просто совпало с другим изменением. Сравните графики до и после, а не один замер. Если регрессия подтверждена, проверьте, нет ли более новой версии ядра с оптимизированными обходами.

Для изолированных тестовых стендов допустимо временно отключить защиту, но это решение нужно задокументировать и ограничить по времени. На публичном сервере такой компромисс почти всегда неоправдан.

Итог

Retbleed — ещё одно напоминание, что микроархитектурные атаки не исчезли. Обновляйте микрокод и ядро, проверяйте статус уязвимостей, оценивайте производительность на реальной нагрузке и не отключайте защиты без веской причины. Для большинства пользователей регулярные обновления остаются достаточной мерой.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте