Раскрытие информации Nvidia / Уязвимость памяти в Linux и общая защита памяти ОС

Я думал, что это ожидаемое поведение?

Из: http://classic.chem.msu.su/cgi-bin/ceilidh.exe/gran/gamess/forum/?C35e9ea936bHW-7675-1380-00.htm

Перефразированное резюме: «Работая над портом Linux, мы обнаружили, что вызовы API cudaHostAlloc/cuMemHostAlloc CUDA возвращают неинициализированную закрепленную память. Эта дыра потенциально может позволить исследовать области памяти, ранее используемые другими программами и ядром Linux. Мы рекомендуем всем остановиться запуск драйверов CUDA в любой многопользовательской системе».

Насколько я понимаю, "Нормальный" malloc возвращает неинициализированную память, поэтому я не вижу, в чем здесь разница...

То, как я понимаю, как работает распределение памяти, позволит сделать следующее:

-userA запускает в системе программу, которая обрабатывает кучу конфиденциальной информации. Когда вычисления завершены, результаты записываются на диск, процессы завершаются, а пользователь А выходит из системы.

-userB входит в следующий. userB запускает программу, которая запрашивает всю доступную память в системе и записывает на диск содержимое своей неинициализированной памяти, которая содержит некоторую конфиденциальную информацию пользователя A, оставшуюся в оперативной памяти.

Я должен что-то упустить здесь. Что это? Память где-то обнулена? Является ли ядро/закрепленная память особым образом?


person user583317    schedule 20.01.2011    source источник


Ответы (2)


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

Ядро/закрепленная память отличается только тем, что она, по-видимому, дала драйверу режима ядра возможность нарушить гарантии защиты процесса ОС.

Так что нет, это не ожидаемое поведение; да, это был баг. Спасибо NVIDIA за столь быстрые действия!

person ArchaeaSoftware    schedule 04.05.2011

Единственная часть, которая требует привилегий root для установки CUDA, — это драйвер NVIDIA. В результате все операции, выполняемые с помощью компилятора и ссылки NVIDIA, могут выполняться с использованием обычных системных вызовов и стандартной компиляции (при условии, что у вас есть надлежащая информация - лол-). Если там есть какие-либо дыры в безопасности, они остаются, независимо от того, были ли изменены cudaHostAlloc/cuMemHostAlloc.

Я сомневаюсь в первом ответе, увиденном в этом посте. На справочной странице для malloc указано, что память не очищается. Бесплатная справочная страница не упоминает об очистке памяти. Очистка памяти, похоже, входит в обязанности кодера чувствительного раздела -lol-, что оставляет проблему неожиданного (редкого) выхода. Кроме VMS (хорошая, но не очень широко используемая ОС), я не думаю, что какая-либо ОС согласится с затратами производительности на систематическую очистку. Мне не ясно, как система может отслеживать в куче вновь выделенной памяти, что было ранее в области процесса, а что нет.

Мой вывод: если вам нужен строгий уровень конфиденциальности, не используйте многопользовательскую систему (или не используйте VMS).

person borsen    schedule 08.06.2011