id:
Гость
вход
регистрация
текущее время 04:59 22/05/2012
главная
проект
новости
форум
faq
библиотека
черновики
разработки
сервисы
софт
поиск
Владелец:
ntldr
(создано 11/03/2008 10:10), редакция от 11/03/2008 11:01 (автор:
ntldr
)
Печать
Категории:
софт
,
truecrypt
http://www.pgpru.com
/
Новости
/
2008
/КритическаяУязвимостьВTrueCrypt51
>>>
Последние изменения
Последние комментарии
Удаленные документы
Требуется доработка
Досье пользователей
Опросы
Keyserver
Документация Wiki
Правила сайта
Регистрация
===={{a name="1103"}}""11.03 // Критическая уязвимость в TrueCrypt 5.1""==== 10.03.2008 вышел релиз TrueCrypt 5.1 одной из добавленых фич которого является поддержка hibernation. Посмотрев исходный код TrueCrypt, я обнаружил критическую уязвимость приводящую на некоторых конфигурациях железа к полному раскрытию всех ключей шифрования находившихся в памяти в момент использования hibernate. Это дает возможность дешифрования загрузочного раздела, и весьма вероятно всех подключенных контейнеров. Уязвимость находится в файле DriveFilter.c, и заключается в некорректной реализации перехвата исполнения точки входа dump port драйвера. TrueCrypt определяет нужный драйвер путем сравнения его имени со следующим списком: %% static wchar_t *hiberDriverNames[] = { L"hiber_ataport.sys", L"hiber_storport.sys", L"hiber_scsiport.sys", NULL }; static wchar_t *hiberDriverNamesBeforeVista[] = { L"hiber_atapi.sys", L"hiber_scsi.sys", L"hiber_atapiport.sys", L"hiber_scsiport.sys", L"hiber_storport.sys", NULL }; %% Если вы используете нестандартный storage контроллер, то он может иметь свой драйвер реализующий функциональность dump port, и в этом случае содержимое памяти будет записано на диск в открытом виде, что позволяет извлечь ключи шифрования просто просканировав данные на диске. Еще одна уязвимость находится в этом участке кода: %% if (hiberDriverContext->AtapiWriteRoutine) { OriginalHiberDriverAtapiWriteRoutine = hiberDriverContext->AtapiWriteRoutine; hiberDriverContext->AtapiWriteRoutine = HiberDriverAtapiWriteRoutineFilter; } if (hiberDriverContext->ScsiWriteRoutine) { OriginalHiberDriverScsiWriteRoutine = hiberDriverContext->ScsiWriteRoutine; hiberDriverContext->ScsiWriteRoutine = HiberDriverScsiWriteRoutineFilter; } %% Структура HiberDriverContext в TrueCrypt описана не полностью. Она имеет слудеющий вид: %% typedef struct { // Until MS releases an API for filtering hibernation drivers, we have to resort to this. #ifdef _WIN64 byte FieldPad1[64]; HiberDriverScsiWriteRoutine ScsiWriteRoutine; byte FieldPad2[56]; #else byte FieldPad1[48]; HiberDriverScsiWriteRoutine ScsiWriteRoutine; byte FieldPad2[32]; #endif HiberDriverAtapiWriteRoutine AtapiWriteRoutine; byte FieldPad3[24]; LARGE_INTEGER PartitionStartOffset; } HiberDriverContext; %% Оригинальная структура взятая из открытых источников (отладочных символов на ядро) должна иметь такой вид: %% typedef struct _DUMP_INITIALIZATION_CONTEXT { ULONG Length; ULONG Reserved; PVOID MemoryBlock; PVOID CommonBuffer[2]; PHYSICAL_ADDRESS PhysicalAddress[2]; PSTALL_ROUTINE StallRoutine; PDUMP_DRIVER_OPEN OpenRoutine; PDUMP_DRIVER_WRITE WriteRoutine; PDUMP_DRIVER_FINISH FinishRoutine; struct _ADAPTER_OBJECT *AdapterObject; PVOID MappedRegisterBase; PVOID PortConfiguration; BOOLEAN CrashDump; ULONG MaximumTransferSize; ULONG CommonBufferSize; PVOID TargetAddress; PDUMP_DRIVER_WRITE_PENDING WritePendingRoutine; ULONG PartitionStyle; union { struct { ULONG Signature; ULONG CheckSum; } Mbr; struct { GUID DiskId; } Gpt; } DiskInfo; } DUMP_INITIALIZATION_CONTEXT, *PDUMP_INITIALIZATION_CONTEXT; typedef struct _DUMP_STACK_CONTEXT { DUMP_INITIALIZATION_CONTEXT Init; LARGE_INTEGER PartitionOffset; PVOID DumpPointers; ULONG PointersLength; PWCHAR ModulePrefix; LIST_ENTRY DriverList; ANSI_STRING InitMsg; ANSI_STRING ProgMsg; ANSI_STRING DoneMsg; PVOID FileObject; enum _DEVICE_USAGE_NOTIFICATION_TYPE UsageType; } DUMP_STACK_CONTEXT, *PDUMP_STACK_CONTEXT; %% Как вы видите, имеются два обработчика записи данных на диск. Это WriteRoutine и WritePendingRoutine. TrueCrypt обрабатывает только WritePendingRoutine, и если драйвер дамп порта не поддерживает WritePendingRoutine, то данные будут писаться через WriteRoutine, что опять же вызовет утечку ключей шифрования. В частности Windows 2000 всегда использует WriteRoutine, поэтому в этой ОС узявимость проявлялась бы всегда, если бы TrueCrypt мог работать на ней. Уязвимости подвержены пользователи держащие систему на аппатарных RAID, а частности на популярном чипе Intel Matrix Storage. Способы решения уязвимости: отключить hibernate в настройках электропитания. В случае если вы уже использовали hibernate вы должны проверить удалился ли файл hiberfil.sys и затереть все свободное место на диске программой безопасного уничтожения информации.
Ваше имя:
Запомнить псевдоним (сохранить в cookie)
OpenPGP-подписанный текст в кодировке
CP1251 (Windows)
UTF-8
KOI8-R
CP866 (DOS)
KOI8-U
Помощь
Сохранить параметры OpenPGP в cookie
Пожалуйста, напишите, кого/что вы видите
на изображенной слева картинке. Если
там несколько персонажей/предметов,
перечислите их в именительном падеже
через пробел (одинаковых приводите во
множественном числе).
(осталось попыток на решение теста: 3)
Поддержка
BBCode
включена
Нормы пользования
. Некоторые права на материалы сайта защищены по условиям лицензии CreativeCommons. Движок
openSpace 0.8.25a
и дизайн сайта © 2006-2007
Vlad "SATtva" Miller
.