<?xml version="1.0" encoding="cp1251"?>
<?xml-stylesheet type="text/css" href="http://www.pgpru.com/styles/atom.css" media="screen"?>
<rss version="2.0">
<channel>
<title>openPGP в России/Новости/2008/КритическаяУязвимостьВTrueCrypt51</title>
<link>http://www.pgpru.com/%CD%EE%E2%EE%F1%F2%E8/2008/%CA%F0%E8%F2%E8%F7%E5%F1%EA%E0%FF%D3%FF%E7%E2%E8%EC%EE%F1%F2%FC%C2TrueCrypt51</link>
<description>История изменений документа Новости/2008/КритическаяУязвимостьВTrueCrypt51</description>
<copyright>http://www.pgpru.com/%CF%F0%EE%E5%EA%F2/%CF%F0%E0%E2%E8%EB%E0</copyright>
<language>ru</language>
<image>
<title>openPGP в России</title>
<link>http://www.pgpru.com/</link>
<url>http://www.pgpru.com/images/pgpru_banner.gif</url>
<width>88</width>
<height>31</height>
</image>
<item>
<title>Редакция от 11/03/2008 10:10</title>
<link>http://www.pgpru.com/%25cd%25ee%25e2%25ee%25f1%25f2%25e8/2008/%25ca%25f0%25e8%25f2%25e8%25f7%25e5%25f1%25ea%25e0%25ff%25d3%25ff%25e7%25e2%25e8%25ec%25ee%25f1%25f2%25fc%25c2truecrypt51/show?time=2008-03-11+10%3A10%3A44</link>
<guid isPermaLink="true">http://www.pgpru.com/%25cd%25ee%25e2%25ee%25f1%25f2%25e8/2008/%25ca%25f0%25e8%25f2%25e8%25f7%25e5%25f1%25ea%25e0%25ff%25d3%25ff%25e7%25e2%25e8%25ec%25ee%25f1%25f2%25fc%25c2truecrypt51</guid>
<description><![CDATA[<div class="pageBefore"></div><div class="page">
<h3>Сравнение редакций документа <a href="http://www.pgpru.com/novosti/2008/kriticheskajaujazvimostjvtruecrypt51">Новости / 2008 / Критическая Уязвимость В True Crypt 51</a> от <a href="http://www.pgpru.com/novosti/2008/kriticheskajaujazvimostjvtruecrypt51?time=2008-03-11+10%3A10%3A44">11/03/2008 10:10</a> и <a href="http://www.pgpru.com/novosti/2008/kriticheskajaujazvimostjvtruecrypt51">11/03/2008 11:01</a></h3>
<br />
<h2>Добавлено:</h2><br />
<div class="additions">Еще одна уязвимость находится в этом участке кода:<br />
<!--notypo--><textarea class="code" cols="80" rows="9" wrap="off" readonly="readonly">if (hiberDriverContext-&gt;AtapiWriteRoutine)
	OriginalHiberDriverAtapiWriteRoutine = hiberDriverContext-&gt;AtapiWriteRoutine;
	hiberDriverContext-&gt;AtapiWriteRoutine = HiberDriverAtapiWriteRoutineFilter;
}
if (hiberDriverContext-&gt;ScsiWriteRoutine)
	OriginalHiberDriverScsiWriteRoutine = hiberDriverContext-&gt;ScsiWriteRoutine;
	hiberDriverContext-&gt;ScsiWriteRoutine = HiberDriverScsiWriteRoutineFilter;
}</textarea><!--/notypo--><br />
Структура HiberDriverContext в TrueCrypt описана не полностью. Она имеет слудеющий вид:<br />
<!--notypo--><textarea class="code" cols="80" rows="16" wrap="off" readonly="readonly">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;</textarea><!--/notypo--><br />
Оригинальная структура взятая из открытых источников (отладочных символов на ядро) должна иметь такой вид:<br />
<!--notypo--><textarea class="code" cols="80" rows="20" wrap="off" readonly="readonly">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;</textarea><!--/notypo--><br />
Как вы видите, имеются два обработчика записи данных на диск. Это WriteRoutine и WritePendingRoutine. TrueCrypt обрабатывает только WritePendingRoutine, и если драйвер дамп порта не поддерживает WritePendingRoutine, то данные будут писаться через WriteRoutine, что опять же вызовет утечку ключей шифрования. В частности Windows 2000 всегда использует WriteRoutine, поэтому в этой ОС узявимость проявлялась бы всегда, если бы TrueCrypt мог работать на ней.</div></div>
]]></description>
<pubDate>Tue, 11 Mar 2008 10:10:44 +0300</pubDate>
</item>
</channel>
</rss>
