BadRAM: атака при помощи вредоносного модуля RAM

Европейские исследователи обнаружили уязвимость в процессорах AMD, реализуемую путем модификации модулей оперативной памяти.

BadRAM: атака при помощи вредоносного модуля RAM

Исследователи из трех европейских университетов недавно продемонстрировали атаку BadRAM. Она стала возможна благодаря уязвимости в процессорах AMD EPYC и угрожает прежде всего поставщикам облачных решений и систем виртуализации. В наихудшем сценарии данная уязвимость может быть использована, чтобы скомпрометировать данные из максимально защищенной виртуальной машины.

Впрочем, реализовать этот сценарий на практике будет достаточно нелегко. Атака предполагает физический доступ к серверу, а затем — максимальный уровень доступа к программному обеспечению. Однако, прежде чем обсуждать атаку BadRAM в деталях, стоит поговорить о концепции Trusted Execution Environment, или TEE.

Особенности TEE

Ошибки в программном обеспечении неизбежны. По разным оценкам, сделанным еще в девяностые годы прошлого века, на каждую тысячу строк кода приходится от 1 до 20 ошибок. Часть этих ошибок приводит к уязвимостям, через которые злоумышленники могут попробовать добраться до конфиденциальной информации. Поэтому в случаях, когда защищенность каких-то данных или цепочки вычислений (например, обработки секретных ключей шифрования) должна быть максимальной, имеет смысл изолировать эти данные (или вычисления) от всего остального кода. Примерно в этом и состоит концепция Trusted Execution Environment.

Существует огромное количество реализаций TEE для решения различных задач. В процессорах AMD она реализована в виде технологии Secure Encrypted Virtualization, обеспечивающей повышенную защиту виртуальных машин. Она подразумевает шифрование данных виртуальной системы в памяти, чтобы системы других виртуальных машин или оператор физического сервера, на котором развернуты виртуальные ОС, не могли получить к ним доступ. Относительно недавно для этой технологии было выпущено расширение Secure Nested Paging, способное определить попытки несанкционированного доступа к данным виртуальной системы.

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

Secure Encrypted Virtualization, равно как и аналогичная технология Intel, известная как Trust Domain Extensions, используют, по сути, отдельный процессор. Да, физически он является частью серверного процессора Intel или AMD, но фактически изолирован от остальных процессорных ядер. Участвуя в процессе шифрования данных, этот изолированный модуль обеспечивает дополнительную безопасность.

Детали атаки BadRAM

Вернемся к атаке BadRAM. Она позволяет обойти системы защиты Secure Encrypted Virtualization и получить доступ к зашифрованным данным виртуальной системы, так что и технология Secure Nested Paging будет не в состоянии обнаружить этот взлом. В видеодемонстрации показано, как «вредоносное» приложение на сервере способно читать данные из защищенной виртуальной машины, выполняемой на том же сервере.

Каким образом? Авторы исследования использовали крайне необычный метод атаки путем модификации «железа». В любом компьютере есть оперативная память. Каждый модуль памяти имеет какое-то количество микросхем для хранения данных и один сервисный чип, известный как SPD. Этот чип анонсирует присутствие модуля в системе и передает процессору ключевые параметры, включая, например, оптимальную частоту работы чипов памяти и их объем. Информацию об объеме авторы работы как раз и изменили.

Это довольно парадоксальное средство атаки. Они взяли модуль памяти на 32 гигабайта, перепрошили чип SPD и прописали туда объем в два раза больший — 64 гигабайта. Процессор верит измененным данным и пытается работать с этим модулем памяти так, будто его объем составляет 64 гигабайта. В нормальных условиях это быстро привело бы к зависанию или другим сбоям: одни куски данных будут просто перезаписываться другими, информация разных приложений будет повреждена. Чтобы этого избежать, исследователи ограничили запись в модифицированный модуль памяти для всех процессов, кроме атакуемой виртуальной системы.

Что это вообще дает? Если объем модуля составляет 32 гигабайта, а процессор думает, что там в два раза больше, получается, что на каждую пару виртуальных адресов существует только одна физическая ячейка памяти. Можно создать ситуацию, когда эта реальная область памяти будет одновременно использоваться защищенной виртуальной ОС и будет доступна другому приложению, вредоносному. Последнее ничего не будет записывать в эти ячейки памяти, но сможет читать то, что пишет туда виртуальная ОС. Именно этот сценарий технология AMD SEV пытается предотвратить и в данном случае оказывается бессильна — обходится как защита доступа к области памяти, так и шифрование.

Мы опускаем много важных деталей исследования, но главное здесь то, что наш «вредоносный» модуль памяти позволяет создать ситуацию, когда казалось бы максимально защищенные данные виртуальной машины оказываются доступны из стороннего приложения. Да, это крайне сложная атака. Потребуется физический доступ к серверу. Программное обеспечение сервера также нужно будет «взломать», чтобы получить максимально возможные права доступа. Но сравните это с предыдущей работой, где похожий результат достигался с помощью крайне дорогостоящего (170 тысяч долларов) аппаратного устройства, перехватывающего передачу данных между процессором и модулем памяти в реальном времени.

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

К счастью, используемые для атаки уязвимости были закрыты путем обновления прошивки для процессоров AMD EPYC третьего и четвертого поколений. В технологию защиты была добавлена проверка, способная определить вредоносный модуль памяти. Кстати, авторы исследования также проверили схожую технологию TDX в процессорах Intel, и там, судя по всему, похожая проверка целостности оперативной памяти уже существовала, делая атаку типа BadRAM невозможной.

Концепция Trusted Execution Environment предполагает работу в максимально враждебном окружении. Мы обсудили сценарий, когда владелец виртуальной ОС не доверяет поставщику услуг хостинга. Даже в таком «параноидальном режиме» трудно избежать ошибок, что и показала работа BadRAM. Ее авторы говорят о том, что разработчики TEE-систем слишком полагаются на сложность извлечения данных из оперативной памяти. И приводят пример, как можно обойти даже самые сложные системы безопасности относительно простым путем.

Советы