Комментарии 13
На сколько я понимаю, от DMA атаки можно защититься через IOMMU (VTd или AMD-Vi). Где-нибудь такое используется?
Тут проблема в том, что IOMMU работает далеко не на всех мамках, даже если чипсет его поддерживает. Я, если честно, пока не копал почему. А еще многие мамки имеют 1-2 IOMMU домена на все устройства, т.е. нельзя для конкретного устройства разрешить запись куда-то, а для другого запретить, что довольно уныло :(
На сколько я понял вы сами делаете мамки, так что для вас эта проблема не очень актуальна.
Во-первых, спасибо, Николай, за счастливое детство и цикл статей по NVRAM
Во-вторых, расскажу про Интелловскую VT-d, вдруг пригодится кому. Там за защиту от DMA отвечает контроллер DMA Remapping unit (возможно, несколько), который перехватывает DMA-запросы и сверяет с управляющими структурами. Структуры следующие: Root-Entry table, Context-Entry table для описания каждой PCI-шины и каждого PCI-устройства (в том числе и функции). Для каждого устройства формируется многоуровневая таблица страниц, по которой DMAR unit проходится, исходя из адреса, который был в запросе. В итоге он получает права доступа, которые предоставлены устройству (чтение\запись\выполнение) и область памяти, на которую необходимо перенаправить запрос. Если возникает какая-то ошибка, вызывается callback, который может считать инфу об ошибке из специальных регистров.
Таким образом получается и изолировать устройства друг от друга, и защитить память, и логирование устроить . Можно также перенаправлять запросы на исходный адрес, просто настроить права доступа и получить просто защиту.
О безопасности UEFI, часть вторая