Всего одна инструкция на процессорах AMD 2015 года открывает доступ к «Platform Security Processor», «microcode» и «System Management Interface»

Amd уязвимость процессор Ftpm Skitter Creek безопасность tomshardware.com

Одна инструкция на процессорах AMD открывает доступ к процессору безопасности платформы, микрокоду и System Management Interface — эксплойт для чипов семейств 15h и 16h взламывает секретные области памяти. Узнайте, как работает уязвимость Skitter Creek Bath Salts и какие риски она несёт.

Многие эксплойты в сфере кибербезопасности называли «Единым кольцом, чтобы править всеми», но этот титул редко бывает так же точен, как буквальный бит, отключающий отображение памяти на некоторых процессорах AMD и открывающий доступ к обычно недоступным областям. Всего одной инструкцией можно получить доступ к закрытому программному обеспечению, такому как процессор безопасности платформы (PSP), где работает fTPM, режим управления системой (SMM), ОЗУ микрокода и прочие разные вещи — иными словами, полный контроль на уровне оборудования.
Эксплойт называется Skitter Creek Bath Salts (Skitter) и был разработан плодовитым хакером Кристофером Домасом, известным обнаружением уязвимостей процессоров, таких как Sandsifter и God Mode Unlocked. Затрагиваются только чипы AMD семейств 15h и 16h, приблизительно выпуска 2011–2015 годов. Семейство 15 — это настольные чипы серии FX и некоторые Opteron, а 16h включает маломощные SoC на базе Jaguar и Puma, такие как в PlayStation 4 и Xbox One, плюс несколько чипов Athlon, Sempron и Opteron-X, среди прочих.
Для выполнения этого эксплойта потребуется доступ на уровне ядра, то есть возможность запускать собственные драйверы. Но как только он получен, вся DRAM оказывается в вашем распоряжении. AMD опубликовала бюллетень безопасности по этому вопросу, заявив, что эти чипы больше не поддерживаются в плане безопасности, к тому же, как уже упоминалось, необходимый уровень доступа означает, что атакующий и так уже контролирует машину.
Если вам непонятно, как одна инструкция открывает доступ к системе, вот наша попытка упростить объяснение. Скажем, у вас 16 ГБ ОЗУ. Вы думаете, что Windows получает все 16 ГБ для работы, от адреса 0 до конца памяти — но, как вы могли замечать раньше, на самом деле это немного меньше. Остальное зарезервировано для системных данных.
Некоторые части видны операционной системе, чтобы она могла взаимодействовать с устройствами, но другие включают очень важные вещи, такие как PSP, SMM, патчи микрокода, — все в разделах, которые предположительно должны быть абсолютно неприкосновенны. Если бы они были доступны, система в целом уже не была бы безопасной по определению — представьте только, что вредоносный драйвер может свободно вмешиваться в то, как ваш процессор обрабатывает данные.
По соображениям производительности контроллеры ОЗУ современных процессоров не используют память линейно, так сказать, — они применяют чередование банков, то есть фактические байты в DRAM перемешаны, в то время как ОС видит ровную, аккуратную плоскую поверхность. Как оказалось, настройка процессора, управляющая этой функцией, доступна ОС в упомянутых семействах чипов, и она называется BankSwizzleMode (Swizzle). Её можно переключать инструкцией «xor dword [0xf80c2094], 0x00400000» — простым переключением бита. И, как выясняется, это можно использовать.
Сначала запускается цикл, чтобы выяснить, как обычно работает отображение. Вы помещаете контрольное значение в память (скажем, 0xDEADBEEF, по традиции), отключаете Swizzle, проходите по памяти, чтобы увидеть, куда оно попало, и снова включаете Swizzle. Проделав это достаточное количество раз, вы точно узнаете, как видимая память отображается в физическую DRAM, и наоборот.
Теперь, когда у вас есть карта, вы можете отключить Swizzle и принудительно выполнить чтение или запись в обычно недоступные области DRAM, поскольку теперь вы знаете, куда они попадут. С помощью этого вы получаете доступ ко всему ранее скрытому коду и данным, получая доступ на уровне оборудования, чтобы делать всё, что захотите, включая чтение кода подписи fTPM и любых других низкоуровневых манипуляций, которые вы можете придумать.
Внимательные читатели могут задаться вопросом, почему система не вылетает во время этого процесса, ведь вы фактически временно превращаете ОЗУ в спагетти-мешанину. Ответ в том, что каждый раз, когда вы включаете и отключаете Swizzle, вы подготавливаете процессор, отключая прерывания, а также применяя ряд других мер. Тем не менее, машина может вылететь на этапе сбора карты, но это нужно сделать только один раз. После получения карты вероятность сбоя довольно низкая, поскольку вы будете нацеливаться на конкретные места.
Другой вопрос может заключаться в том, почему отправка бита в ячейку памяти каким-то образом влияет на процессор. Ответ в том, что часть доступной ОС памяти на самом деле отображается на оборудование в соответствии со стандартом конфигурационного пространства с отображением в память (MMCONFIG), то есть чтение или запись в эту область направляются к настройкам конфигурации оборудования, а не к реальной ОЗУ.

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

В тренде:


Похожие новости: