|
|
|
September 14, 2009
OPR, PIEPR, MPR, NPRW, POPR have been updated. |
| |
August 06, 2009
Passcape Internet Explorer Password Recovery has been updated. |
| |
May 28, 2009
Reset Windows Password is out. This is a program for resetting and recovering lost Windows passwords. |
| |
 |
|
|
|
|
You are welcome to send your comments, questions and suggestions regarding our site or products. |
| |
|
|
|
| |
Outlook Passwords
|
Используйте
надежные пароли, представляющие комбинацию прописных и строчных букв,
цифр и символов. Пароли, не содержащие набор таких элементов,
являются ненадежными. Надежный пароль: Y6dh!et5. Ненадежный пароль:
House27.
Из документации к
программе MS Office Outlook |
Введение
Пароли PST файлов
Шифрование PST файлов
Техника хранения паролей учетных записей почты
Заключение
Введение
Изначально, в данной статье планировалось
рассказать о забавной коллизии паролей в PST файлах Outlook. Но затем она была
немного расширена, чтобы показать, наряду с недостатками, достоинства программы
по сравнению со своими ближайшими конкурентами и рассказать о применяемых
методах хранения персональной информации. К тому же, на примере Outlook удобно
проследить хронологию развития криптологической мысли, которую в общих чертах
можно перенести и на развитие всей линейки операционной системы Windows в целом.
Пароли PST файлов
Итак, начнем с того, что .PST файл в Microsoft Office Outlook представляет собой
файловое хранилище данных на локальном компьютере, в котором в упорядоченном
виде хранятся контакты, заметки, почтовые сообщения и другие элементы. Файл .PST
может использоваться в качестве стандартного расположения для доставки почтовых
сообщений. Его также можно использовать для упорядочения и резервного
копирования данных.
Чтобы защитить содержимое .PST файла, а также ограничить доступ к нему
посторонних лиц, можно установить пароль длиной до 15 знаков (см. рисунок 1). В
этом случае принято считать, что без знания оригинального пароля открыть .PST
файл невозможно. Посмотрим, действительно ли это так.

Рисунок 1. Диалог ввода пароля для PST файла
Пароль на доступ к .PST не запоминается и не хранится в явном виде. Вместо этого
вычисляется его хэш значение, которое и сохраняется в самом .PST файле либо,
если установлена опция 'Сохранить пароль в списке паролей' (см. рисунок 1), в
реестре Windows с использованием дополнительного шифрования.
Самое интересное заключается в том, что алгоритм подсчета хэша пароля
представляет собой не алгоритм хэширования, а простой подсчет контрольной суммы
CRC32. CRC32 - алгоритм проверки целостности данных, но уж никак не хэширования.
Microsoft по неизвестной причине решила использовать именно его вместо более
стойких, например, SHA. Доставшись по наследству от старых версий Outlook, MS
долгое время не меняет этот алгоритм, руководствуясь, по всей видимости,
соображениями совместимости. Хотя, с другой стороны, непонятно, почему это не
было сделано с выходом Outlook 2003 (формат .PST Outlook 2003 имеет 64 битную
внутреннюю адресацию, поддержку Unicode и несовместим с предыдущими версиями).
Таким образом, хэш пароля представляет собой 32 бита его контрольной суммы.
Давайте рассмотрим подробнее механизм работы CRC32:
DWORD CPstReader::Crc32(
LPBYTE pPassword ) {
assert( pPassword );
//set initial crc to zero
DWORD crc=0;
//till the end of string
while ( *pPassword )
crc = (crc>>8) ^ pCRCTable[(BYTE)crc ^ (*pPassword++)];
return crc; }
Как можно видеть из отрывка исходного текста, на вход подается пароль (pPassword),
на выходе получаем его контрольную сумму. Уязвимость CRC32 заключается в том,
что длина получаемой свертки пароля в 32 бита явно недостаточна, поэтому
контрольные суммы двух различных паролей могут совпадать! Например, одинаковая
контрольная сумма у паролей 1 и orxgnm или у mozart и 2920347097. И если вы
думаете, что такие коллизии большая редкость, то сильно заблуждаетесь.
Удивительная вещь эти коллизии. Часто наблюдается обратная зависимость: чем
сложнее пароль, тем проще найденная для него коллизия. Возьмем пример из той же
документации Outlook, отрывок которой не случайно был выбран в качестве
предисловия для этой статьи. Нашему "надежному" паролю Y6dh!et5 запросто можно
найти замену - более простую комбинацию всего из 5 символов - JlSfw.
Еще одно любопытное наблюдение. Если контрольная сумма, хранимая в .PST равна
нулю, то считается, что пароль не задан. Но если мы знаем, что встречаются
пароли с одинаковыми контрольными суммами, то можно предположить, что существуют
и такие, контрольная сумма которых тоже равна нулю. Они и вправду есть. Вот
только часть большого списка: 1Rj78C, 5J8j84, ArTniW. Crc32("1Rj78C")=0,
Crc32("5J8j84")=0, Crc32("ArTniW")=0. Задав один из таких паролей, мы в
результате получим незащищенный .PST файл, и при следующем доступе к нему
Outlook пароль не запросит. Не верите? Попробуйте сами.
Экспериментальным путем было выяснено, что при использовании метода прямого
перебора, для подбора пароля к хэшу Outlook понадобится в среднем не более
минуты. Однако криптоанализ CRC32 показал, что данный алгоритм является
полностью обратимым для коротких паролей (до 4 символов) и частично обратимым
для всех остальных. Это означает, что можно практически сразу найти оригинальный
пароль или его аналог, который будет неотличим для Outlook. Было доказано, что
для нахождения коллизии (пароля, контрольная сумма которого будет такая же, как
и у оригинального) потребуется не более 7 печатных символов.
Шифрование PST файлов
Если посмотреть опции PST файлов (см. рисунок 2), то можно заметить, что Outlook
кроме всего прочего позволяет еще шифровать содержимое. В этом случае,
контрольная сумма пароля не лежит в открытом виде в .PST файле, а дополнительно
кодируется с помощью одного из алгоритмов шифрования. Давайте рассмотрим эти
алгоритмы.
При создании нового .PST, Outlook предлагает на выбор 3 типа файла:
-
шифрование отсутствует
-
шифрование со сжатием
-
стойкое шифрование

Рисунок 2. Создание нового PST файла.
Если шифрование PST файла отсутствует, то все данные пользователя: контакты,
письма, пароли и т.д., будут лежать в открытом, доступном другим пользователям
виде. И их можно будет просмотреть, например, из текстового редактора.
Алгоритм шифрования со сжатием создан таким образом, что каждому кодируемому
символу соответствует другой, взятый из специальной таблицы. Вот этот алгоритм:
BOOL
CPstReader::Decrypt1( LPBYTE buf,
int iSize ) {
assert( buf );
BYTE y=0;
int x=0;
//Check input buffer if ( buf==NULL ) return
FALSE;
//Check encryption type
if ( m_pst.encryption!=PST_ ENCRYPT_COMPESSIBLE ) return
FALSE;
//actual decryption
while ( iSize-- ) { y=buf[x]; buf[x++]=m_pTable[y]; }
return TRUE; }
Подстановочная таблица (m_pTable) специально создана так, чтобы обеспечить
дальнейшее оптимальное сжатие зашифрованного таким образом текста. Однако данный
алгоритм сам по себе не сжимает содержимое, а только создает благоприятные для
этого условия.
Стойкое шифрование тоже является разновидностью первого алгоритма замены. Но в
отличие от предыдущего, обеспечивает более сильное шифрование. Другое отличие
состоит в том, что зашифрованный этим алгоритмом PST файл впоследствии не
удастся сделать таким компактным, как в первом случае.
BOOL
CPstReader::Decrypt2( LPBYTE buf,
int iSize, DWORD id ) {
assert( buf );
int x=0;
BYTE y=0;
WORD wSalt;
//Check input buffer if ( buf==NULL ) return
FALSE;
//Check encryption type if ( m_pst.encryption!=PST_ENCRYPT_STRONG ) return
FALSE;
//prepare encryption key from block ID wSalt=HIWORD(id) ^ LOWORD(id);
//actual decryption
while ( iSize-- ) { y=buf[x];
y+=LOBYTE(wSalt); y=m_pTable2[y];
y+=HIBYTE(wSalt); y=m_pTable2[y+0x100];
y-=HIBYTE(wSalt); y=m_pTable2[y+0x200];
buf[x++]= y - LOBYTE(wSalt++); }
return TRUE; }
Для восстановления блока данных необходимо знать идентификатор блока, без
которого процесс расшифровки будет выглядеть несколько затруднительно. Хотя,
если внимательно присмотреться к исходному тексту алгоритма, легко заметить, что
при шифровании используется только 16 бит идентификатора блока, что позволяет
значительно сократить количество возможных вариантов при подборе ключа
шифрования, используя метод прямого перебора.
Техника хранения паролей учетных записей почты
После прочтения данной статьи, у вас может сложиться немного ложное мнение о том,
что MS Outlook использует очень слабые и ненадежные алгоритмы шифрования паролей.
Однако это не совсем так. Истина, как говорится, познается в сравнении. К тому
же, мы проанализировали только шифрование в PST. Давайте теперь рассмотрим и
сравним механизмы шифрования паролей учетных записей почты Outlook и других
популярных программ.
Большинство популярных почтовых клиентов попросту не заботятся о безопасности
хранимых паролей пользователей. Например, Eudora, TheBat! или старые версии
Netscape, используют для шифрования архаичный алгоритм BASE64 или его
производные. IncrediMail просто накладывает XOR гамму на исходный пароль (язык
не поворачивается назвать это шифрованием), старые версии браузера Opera вообще
не шифровали почтовые пароли, а хранили их открытым текстом.
Получше обстоит дело с новыми версиями популярных почтовиков, таких как
Thunderbird, Opera M2, Outlook Express. Все они используют надежные, проверенные
временем алгоритмы с использованием мастеринг ключей. В основном это связка из
MD5 + RC4, или SHA + 3DES, либо их возможные варианты. Thunderbird, Opera M2,
Outlook Express хранят мастер ключи и ключи шифрования вместе с зашифрованными
паролями, что позволяет без труда (ну или почти без труда) выполнить их обратное
преобразование.
Что касается Outlook (кстати, не путайте с
Outlook Express), то тут наблюдается
очень прелюбопытнейшая картина. Всю хронологию развития техники хранения паролей
к почтовым ящикам в программе Outlook можно условно разделить на четыре периода:
- доисторический период
- каменный век
- средние века
- период научно технического прогресса
Теперь подробнее.
Доисторический период - период первого становления на ноги. Говорят, первые
версии программы умели шифровать хранимые в реестре пароли по алгоритму BASE64.
Что уже само по себе являлось достижением для того времени. Для расшифровки
таких паролей достаточно было одного калькулятора или пары-тройки извилин.
Каменный век - Outlook 9x - время первых экспериментов. Появляется новый
алгоритм, который, при шифровании паролей, использовал ключ шифрования и
уникальный идентификатор записи. Ноу-хау того времени. Данные, зашифрованные по
этому алгоритму, невозможно было расшифровать без знания ключа и идентификатора
записи. Многие современные почтовые клиенты не могут похвастаться наличием таких
алгоритмов в своем арсенале и по сей день. Однако общая идея нового типа
шифрования омрачалась одним существенным недостатком - ключ шифрования и
идентификатор записи хранились в реестре вместе с зашифрованными данными.
Средние века - Outlook 2000 - первые стандарты. Пароли к почтовым аккаунтам
теперь хранятся в защищенном хранилище (Protected Storage) Windows. Более
подробно о Protected Storage можно будет узнать в одной из последующих статей.
Вот вкратце алгоритм расшифровки паролей в защищенном хранилище:
Создается key1 для расшифровки мастер ключа, используя SHA(Salt) + SHA(SID) +
SHA(Salt). Salt - глобальная константа. SID - идентификатор пользователя.
- Создается key2 для расшифровки мастер ключа, используя SHA(MKSalt) + SHA(key1).
MKSalt - двоичные данные, уникальные для каждого мастер ключа, хранимые вместе с
ним. key1 - 20 байт данных, полученных на предыдущем шаге.
- С помощью алгоритма DES и key2 расшифровывается мастер ключ.
- Полученный мастер ключ принимает участие в расшифровке ключа шифрования записи.
Ключ шифрования записи хранится вместе с самой записью и различен для каждой
записи. Он состоит из 16 байт, половина из которых используются непосредственно
для расшифровки, а вторая половина для проверки валидности.
- И уже этим расшифрованным ключом записи можно расшифровывать непосредственно
саму запись (пароли и др. сенситивную информацию).
Очень неплохо и стильно придумано! Основные достоинства данного алгоритма:
Предложенная схема шифрования, которая, кстати говоря, уже была задействована с
выходом Internet Explorer 4, представляла собой большой прорыв в области
шифрования данных. Все современные браузеры (Opera, Mozilla, Firefox и
Internet
Exlorer вплоть до 6 версии) используют похожие схемы шифрования своих паролей.
Заметьте также, что свободный полет творческой фантазии самых сильных
конкурентов Outlook в лучшем случае остановился в этом, среднем веке.
Период научно технического прогресса - Outlook 2003 - впереди планеты всей.
Новая версия популярного почтового клиента использует новый алгоритм шифрования,
который является продолжением и логическим развитием предыдущего. Этот алгоритм
основан на одной важной детали - привязки к паролю пользователя. Не будем в
данной статье подробно описывать механизм его работы, ибо это займет не одну
страницу. Скажем лишь, что для расшифровки паролей, зашифрованных этим
алгоритмом, необходимо знать как минимум три вещи (см. рисунок 3):
- Мастер ключ пользователя
- SID пользователя
- Пароль пользователя

Рисунок 3. Восстановление паролей учетных записей Outlook 2003.
Вкратце основные достоинства нового алгоритма:
Сам процесс расшифровки паролей для текущего залогиненного пользователя
абсолютно прозрачен. Пароль запрашивается лишь единожды, при входе в систему,
всю остальную работу система берет на себя. Если даже потенциальный хакер будет
иметь физический доступ к зашифрованным данным, то расшифровка их без знания
пароля пользователя будет невозможна.
Заключение
Как видим, с выходом каждой новой версии этой популярной почтовой программы
Microsoft привносит что-то новое и неизведанное доселе, доказывая на деле свою
заботу о безопасности конечного пользователя. Особенно хорош новый механизм
шифрования в Outlook 2003.
Любопытно, что нам приготовит выход следующей версии
Outlook 2007? Осмелимся
предположить, что PST пароли, которые хранятся в реестре Windows с
использованием дополнительного шифрования на базе Outlook 9x (данный метод был
описан, когда шел разговор о каменном веке), теперь будут шифроваться по типу Outlook 2003. По крайней мере, это было бы логично. С паролями к почтовым
учетным записям трудно что-либо предсказать. Скорее всего, мы увидим дальнейшее
развитие нового алгоритма шифрования на базе Outlook 2003, либо новую связку
Protected Storage + пароль пользователя. В любом случае, будем с нетерпением
ждать выхода новой версии этой популярной программы, о механизмах шифрования
которой будет обязательно рассказано в одной из следующих статей данного цикла.
Документ доступен для свободного распространения и
перепечатки с обязательной ссылкой на первоисточник.
(с) 2006 Passcape Software. All rights reserved.
http://www.passcape.com
|