Linux 6.18 и KVM: теперь с CET, или как виртуальные машины учатся защищаться от гаджетов

Каждый раз, когда выходит новый релиз ядра Linux, я думаю: «Ну что ещё там можно добавить? Уже же всё есть!» — и каждый раз ошибаюсь. На этот раз в центре внимания — поддержка технологии CET (Control-Flow Enforcement Technology) в виртуализации. Звучит как какой-то скучный бюрократический термин из учебника по безопасности, но на деле это очень важная штука для тех, кто гоняет виртуалки на серверах.

Если перевести с инженерного на человеческий: CET — это такой набор страховочных ремней для процессора. Он следит, чтобы программа не вдруг начала исполнять чужой код или прыгать по странным «переулкам» внутри памяти. Потому что хакеры обожают именно это: брать кусочки уже работающего кода (так называемые «гаджеты») и собирать из них свои самопальные «конструкторы», чтобы обойти защиту. Вот CET и пытается этот фокус пресечь.

Linux 6.18 стал умнее: виртуалки теперь защищены как никогда
Linux 6.18 стал умнее: виртуалки теперь защищены как никогда

Зачем это нужно виртуалкам?

Ну вот представьте: у вас сервер, на нём куча виртуальных машин — одна под веб-сайт, другая под базы данных, третья для тестов. И всё это хозяйство крутится в KVM (Kernel-based Virtual Machine). Если одна из таких виртуалок будет взломана хитроумным методом (через тот же ROP или JOP — названия для айтишных страшилок), то мало не покажется. Поэтому появление CET в KVM — это как поставить дополнительный замок на каждую дверь в доме, а не только на входную.

До версии 6.18 ядро Linux уже умело использовать CET, но только для «железа». То есть на «чистой» системе без виртуализации всё это давно работало. А вот теперь — наконец-то — защита добирается и до виртуальных гостей.

Intel против AMD: у кого длиннее список галочек?

Тут интересный момент. Intel, как обычно, впереди планеты всей: у них в CET два больших компонента — Shadow Stacks и Indirect Branch Tracking. Первый защищает от атак по «возвратам» (Return-Oriented Programming), а второй — от атак через «прыжки/вызовы» (JOP/COP). В паре они дают такой себе «двухфакторный» контроль потока исполнения.

AMD же пока поддерживает только Shadow Stacks. IBT у них в разработке, и для полноценной работы в KVM придётся ещё допиливать код. В официальной документации честно написано: «Отключаем IBT для AMD, чтобы не наобещать лишнего». И это правильно — лучше пообещать меньше, чем потом вылавливать баги в продакшене.

Честно говоря, в реальной жизни многие админы даже не замечают таких мелочей. У тебя сервер на AMD EPYC, и ты радуешься, что хотя бы базовый уровень защиты уже есть. А когда добавят IBT — будет вообще праздник. Intelисты же могут поглаживать себя по плечу: мол, у нас «фулл комплект» из коробки.

Как это работает простыми словами?

Представьте, что ваш процессор — это водитель автобуса. У него есть маршрут, и он должен строго следовать по остановкам. Но тут появляются хитрые пассажиры (хакеры), которые начинают уговаривать: «Давай заедем в переулочек, там короткая дорога!» Если водитель согласится — автобус может оказаться в очень тёмном районе. CET в этой аналогии — это строгий навигатор и видеорегистратор, которые фиксируют каждое действие. Любой поворот «не туда» сразу считается подозрительным.

Shadow Stack — это как журнал поездок: каждая остановка (вызов функции) записана, и если кто-то пытается вернуться «не тем путём» — тревога. А Indirect Branch Tracking — это регулировщик, который проверяет, что прыжки через «левые улицы» вообще невозможны.

А на практике?

Вот тут я позволю себе немного скепсиса. В теории всё красиво, но в реальной жизни всегда находятся программы, которые начинают чудить. Я как-то раз пытался включить экспериментальные защиты в браузере Chromium на старом ноуте, и он просто перестал запускаться. Почему? Да потому что новые проверки иногда ломают старые костыли в коде. И тут, подозреваю, тоже будет весело: драйверы, эмуляторы, всякие старые сервисы могут вести себя непредсказуемо.

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

Почему это важно именно сейчас

Не секрет, что атаки становятся всё изощрённее. Старые вирусы выглядели как пьяный вор в подъезде — шумные, заметные, ломились в открытую. Современные же эксплойты действуют как карманники в метро: тихо, аккуратно, незаметно. ROP и JOP — как раз из этой категории. Они не пишут новый код, а просто используют ваш же собственный, но в извращённой последовательности. И заметить это без дополнительных технологий очень сложно.

Поэтому то, что Linux наконец-то позволяет использовать CET и внутри виртуалок, — шаг действительно серьёзный. Особенно для облачных провайдеров, у которых сотни и тысячи клиентов крутятся на одном железе. Тут защита «по умолчанию» — это не роскошь, а необходимость.

Итого

  • Linux 6.18 приносит CET в мир виртуальных машин KVM.
  • Intel получает поддержку Shadow Stacks и IBT, AMD — пока только Shadow Stacks.
  • Это повышает безопасность гостевых систем и усложняет жизнь хакерам.
  • На практике возможны глюки, но без этого никак.

Лично я считаю, что это одна из тех «невидимых» функций, которые обычный пользователь никогда не заметит. Но именно такие вещи и делают Linux сильным в серверном мире. Виртуалка не станет быстрее, интерфейс не станет красивее, но под капотом появится ещё один слой брони. А в наше время броня — важнее всего.

Так что да, обновляться стоит. Даже если вы не до конца понимаете все эти SHSTK и IBT, просто знайте: ваша виртуалка теперь чуть меньше похожа на проходной двор.

Nazario

Я — Nazario, тот самый человек, который больше десяти лет ковыряется в Linux и Windows системах не ради хобби, а потому что это — работа и жизнь. Всё, что вы читаете на Setiwik.ru, — это не пересказ справки из мануала, а результат десятков реальных кейсов, выстраданных конфигов и ночных перезагрузок.

Я не претендую на истину в последней инстанции. Но если мой опыт может кому-то упростить работу — значит, всё это не зря. Здесь нет «магии», только практика: от настроек сервера до неожиданных багов, которые не гуглятся с первого раза.

Setiwik.ru — это место, где IT становится чуть менее хаотичным. Заходите почаще — будем разбираться вместе.

Добавить комментарий