Хакер Кристофер Домас обнаружил уязвимость в процессорах AMD, выпускавшихся с 2011 по 2015 год. Она открывает доступ к областям оперативной памяти и программным компонентам, обычно закрытым для операционной системы, однако для эксплуатации требуется доступ к ОС на уровне ядра.
Проблема затрагивает чипы семейств 15h и 16h. В первое входят настольные процессоры серии FX и часть Opteron, во второе — Jaguar и Puma, применявшиеся в Sony PlayStation 4 и Microsoft Xbox One, а также некоторые Athlon, Sempron и Opteron-X.
Эксплойт получил название Skitter Creek Bath Salts (Skitter). Для атаки злоумышленнику нужен доступ уровня ядра — возможность запускать собственные драйверы, что открывает полный доступ к оперативной памяти, включая скрытые от ОС фрагменты.
AMD заявила, что поддержка старых процессоров прекращена, а требуемый для атаки уровень доступа и так означает, что злоумышленник уже полностью контролирует машину.
Как это работает: операционные системы не имеют полного доступа ко всей оперативной памяти — часть резервируется под системные данные. Без этого механизма ОС не могла бы считаться безопасной, поскольку вредоносный драйвер мог бы свободно вмешиваться в работу процессора на низком уровне.
Для повышения производительности контроллеры памяти современных процессоров используют чередование физических банков, хотя на уровне ОС память выглядит как ровная последовательность адресов. За это отвечает параметр BankSwizzleMode (Swizzle), который в уязвимых моделях доступен операционной системе.
Параметр включается и выключается инструкцией xor dword [0xf80c2094], 0x00400000, и именно это можно использовать во вредоносных целях.
Злоумышленник запускает цикл: в память помещается заданное значение, Swizzle отключается для определения физического адреса, затем снова включается. Повторяя это многократно, можно составить карту соответствия системных и физических адресов.
При отключении Swizzle во время составления карты возможен сбой системы, поэтому перед каждым переключением процессор нужно подготовить — в частности, отключить прерывания.
Имея готовую карту, атакующий может принудительно отключить Swizzle и читать или записывать данные в физических областях памяти, обычно недоступных ОС — вплоть до кода подписи fTPM и других низкоуровневых операций.
