На проходившей с 1 по 4 ноября в Лондоне конференции Black Hat Europe австрийские исследователи представили новую атаку, использующую особенности реализации взаимодействия CPU с DRAM. Метод позволяет злоумышленникам с помощью JavaScript красть чувствительную информацию прямо из виртуальных машин. Атака получила название DRAMA.
Как это работает
Исследователи Андерс Фог (Anders Fogh) и Михаэль Шварц (Michael Schwarz) в ходе своего выступления продемонстрировали несколько кросс-процессорных атак. Первая часть их исследования была представлена на мероприятии USENIX Security Symposium в августе этого года.
На Black Hat авторы показали, как злоумышленники с помощью JavaScript могут перехватывать небольшие «порции» чувствительных данных, вроде паролей или приватных ключей, из виртуальных машин, которые даже не подключены к сети.
Существует два сценарии развития атаки:
- В первом случае два процесса — в виртуальной машине и в основной системе — могут общаться друг с другом.
- Во втором — один процесс может следить за адресами памяти, который использует другой.
Рассмотрим первый сценарий. Цель атаки в данном случае заключается в передаче данных из виртуальной машины (ВМ), не имеющей доступ к сети, в основную систему (ОС), откуда злоумышленник уже скачивает ее по сети.
Это возможно благодаря особенности устройства памяти DRAM — в частности тому, что процесс-отправитель (находящийся в ВМ) и процесс-получатель данных (в ОС) используют адреса памяти, находящиеся в одном банке памяти (DRAM bank). Механизм работает таким образом, что в том случае, если процесс недавно работал с памятью из определенного банка, то повторные обращения будут проходить быстро.
Если отправитель работал с памятью между двумя обращениями получателя, то второе обращение займет больше времени — это будет интерпретировано как бит 1. В том случае, если отправитель не работал с памятью в промежуток между двумя обращениями, этот факт будет обозначен как 0.
Главная задача здесь — получить адреса в общем банке памяти (или нескольких банках для ускорения процесса) и верно определить временные точки для взаимодействия двух процессов. Для ее решения авторы использовали особенности работы многих современных систем — например, в них часто используются большие страницы памяти (>2 МБ) и определенная частота опроса адреса (на стороне получателя), которая превышает частоту записи (на стороне отправителя) в несколько раз. Зная это исследователи смогли построить предположения о поведении целевой системы.
Во втором сценарии для атаки используется способ, похожий на атаки с использованием особенностей работы кэш-памяти процессора. Суть метода заключается в том, что зная, какие адреса использовал процесс, можно наблюдать за введёнными в него данными — например, адресом сайта, который пользователь ввёл в адресную строку браузера.
Нет простых способов защиты
Исследователям удалось разработать атаку, для проведения которой не требуется эксплуатация каки-либо уязвимостей или запуск вредоносного софта на хост-системе. Они просто открывают скрытый канал между виртуальной машиной и основной системой.
При этом, Фог и Шварц признают, что атака может не всегда осуществляться корректно — в некоторых случаях используемая для фильтрации данных память может быть занята другими приложениями, что не позволит передать информацию из виртуальной машины, однако вероятность такого исхода не очень велика.
Исследователи фокусировались на тестировании своего метода атаки на платформе Intel x86-64, однако им удалось выяснить, что другие архитектуры — например, ARM-процессоры в смартфонах — также уязвимы
Поскольку разработанная атака использует особенности механизма DRAM, простых способов противодействия ей не существует, уверены исследователи. Тем не менее, они не прогнозируют большого числа подобных атак в реальных системах в ближайшие годы. Но сама вероятность таких атак показывает, что разработчикам нужно повышать защищенность не только софта, но и само «железо».