11.03 // Критическая уязвимость в TrueCrypt 5.1


10.03.2008 вышел релиз TrueCrypt 5.1 одной из добавленых фич которого является поддержка hibernation. Посмотрев исходный код TrueCrypt, я обнаружил критическую уязвимость приводящую на некоторых конфигурациях железа к полному раскрытию всех ключей шифрования находившихся в памяти в момент использования hibernate. Это дает возможность дешифрования загрузочного раздела, и весьма вероятно всех подключенных контейнеров.

Уязвимость находится в файле DriveFilter.c, и заключается в некорректной реализации перехвата исполнения точки входа dump port драйвера. TrueCrypt определяет нужный драйвер путем сравнения его имени со следующим списком:



Если вы используете нестандартный storage контроллер, то он может иметь свой драйвер реализующий функциональность dump port, и в этом случае содержимое памяти будет записано на диск в открытом виде, что позволяет извлечь ключи шифрования просто просканировав данные на диске.

Еще одна уязвимость находится в этом участке кода:


Структура HiberDriverContext в TrueCrypt описана не полностью. Она имеет слудеющий вид:

Оригинальная структура взятая из открытых источников (отладочных символов на ядро) должна иметь такой вид:

Как вы видите, имеются два обработчика записи данных на диск. Это WriteRoutine и WritePendingRoutine. TrueCrypt обрабатывает только WritePendingRoutine, и если драйвер дамп порта не поддерживает WritePendingRoutine, то данные будут писаться через WriteRoutine, что опять же вызовет утечку ключей шифрования. В частности Windows 2000 всегда использует WriteRoutine, поэтому в этой ОС узявимость проявлялась бы всегда, если бы TrueCrypt мог работать на ней.

Уязвимости подвержены пользователи держащие систему на аппатарных RAID, а частности на популярном чипе Intel Matrix Storage.
Способы решения уязвимости: отключить hibernate в настройках электропитания. В случае если вы уже использовали hibernate вы должны проверить удалился ли файл hiberfil.sys и затереть все свободное место на диске программой безопасного уничтожения информации.