Описание механизма функционирования парольных кешей в Windows 95/98 (PWL-файлы). Часть 1.
   0. О теме разговора

   Сейчас мы с вами поговорим о парольных кэшах Windows v4.xx. Под парольным кэшем понимается механизм сохранения и повторного использования паролей в системе. От обычной базы логинов данный механизм отличается именно хранением дополнительных парольных ресурсов и возможностью их использования по специальному запросу без участия пользователя. Для чего появился данный механизм? Отчасти для облегчения работы пользователей ;-) Интересно, все для них... А во вторых... Можно расценивать это как дополнительный защитный механизм. Достоинством является затруднение "подглядывания" за клавиатурой, уменьшение количества ошибок при вводе паролей и возможность использользования паролей большей длинны (нет нужды их запоминать или записывать на бумажке). Недостатками - возможность получения существенного объема "секретной" информации злоумышленником при взломе парольного кэша, крайне несерьезная реализация данного механизма в имеющихся версиях операционной системы Windows. Появился данный механизм работы с парольными ресурсами относительно давно. Определенные предпосылки реализации были заложены еще в Windows v3.11. Ничего не могу сказать про эту систему, т.к. сам прыгнул из MS-DOS'a сразу в Windows v4.0. С нее и начнем. А пока позвольте рассказать о том как все выглядит снаружи.

  Способность кэшировать парольные ресурсы появляется в Windows при установке "сетевого окружения" или "множественных параметров рабочего стола" (блин, ну и названия). Политика функционирования подсистемы кэширования определяется редактором системных правил PolicyEditor (его можно взять из пакета Resources Kit от Micro$oft), по умолчанию кэширование включено (это означает, что его можно выключить). Обычно на такие мелочи никто внимания не обращает. Кэширование паролей - общесистемный сервис, это значит, что любое приложение может получить к нему доступ. Очевидно предполагалось, что компьютер физически надежно защищен (ибо персональный ;-), разумеется, в реальной жизни это не так. Как же предполагалось легальным способом использовать данный сервис? Приложение (например Explorer a.k.a. "проводник", гильдии Ивана Сусанина ;-) пытается подключиться к сетевому (и не только) ресурсу, функция WNetAddConnection возвращает код результата ERROR_INVALID_PASSWORD или ERROR_ACCESS_DENIED, в таком случае выводится стандартный диалог запроса пароля (для любителей, можете написать перехватчик данного диалога, в частности, это будет WNetConnectionDialog), затем производится повтор попытки подключения, в случае успеха пароль заносится в кэш паролей и в дальнейшем делается попытка его использования именно оттуда (при возникновении проблем происходит переключение на "ручное управление"). Как использовать данный сервис нестандартно? а вот как:

  IMPORTS WNetEnumCachedPasswords = MPR.WNetEnumCachedPasswords
  and than:

  Push 0
  Push Offset AcceptCache
  Push 0FFh
  Push 0
  Push 0

  Call WNetEnumCachedPasswords

  Где процедура AcceptCache является точкой обратного вызова и принимает два параметра, первый из которых - адрес элемента парольного кэша, про структуру кэша мы поговорим дальше. В вашей программе можно писать так:
  Mov EAx,[ESp+4]
  ...............
  Ret 8h
   На самом деле ничего писать не надо, все уже и так реализовано в моей программе PWLHACK v4.02, которую можно взять по адресу указанному в конце этой статьи. Как вы уже успели понять, на залогиненной машине возможно элементарно получить весь список парольных ресурсов со всей сопутствующей критической (с точки зрения безопасности) информацией. Виват, Micro$oft! Кстати, во всей литературе, которую я читал про защиту информации, слова MS-DOS и Windows не упоминаются вообще (разве что во введении, причем единожды ;-). В принципе, описанный выше механизм работы с парольным кэшем суть существенный просчет (даже на фоне прочей дырявости) в системе безопасности Windows. Раз уж я заговорил о дырках... скажу еще пару слов (все это делает PWLHACK v4.02), ресурсы предоставляемые машиной в сеть для публичного использования хранятся в регистри (причем вместе с паролями). Вот как это происходит: Software\Microsoft\Windows\CurrentVersion\Network\LanMan. Начиная отсюда под ключами располагаются сетевые каталоги плюс вспомогательная информация (флаги, пароли и проч.) Хотите знать механизм шифрования паролей? Вот он: Seed=6Ah; ForEach Password (Ror Seed,1; Character Xor Seed) Все желающие могут чуть-ли не батником добавлять шаровые ресурсы в машину (при условии физического доступа к ней). Управлением локальными ресурсами машины, предоставляемыми в сеть, занимается VSERVER.vxd, а обменом информацией с удаленными серверами VREDIR.vxd Безусловно, в связке работают так же MSNET32.dll, MSNP32.dll и проч. Физически парольный кэш располагается в каталоге %WINDIR% и имеет расширение .PWL, причем список файлов, составляющих парольный кэш, находится в SYSTEM.ini в разделе [Passwords Lists]. Интересен такой момент, имя файла есть имя пользователя обрезанное до 8 букв (8.3 стандарт на имена файлов). Если имена 2-х пользователей совпадают в первых 8-ми буквах, и различны, то работать сможет только второй из них, первый потеряет все настройки, т.к. парольный файл второго затрет аналогичный файл существовавший до него. Никаких проверок не производится, уф! Физически всю работу производит модуль MSPWL32.dll Кстати, еще один факт слабой проработки кодирования защитных модулей, заменой 3-х байтов полностью отключается весь механизм шифрования файлов, составляющих парольный кэш, затем due to технические причины автоматически является легальным любой вводимый пароль, вот иллюстрация:
  -[MSPWL32.crk]--------------------------------------------------------   Windows 95-98 passwords. (C) by *HW* [W95 & OSR/2] All passwords are   legal and *.PWL's are not encrypted.
  MSPWL32.DLL
  00000511: 30 90 <ик>
  00000512: 0C 90
  00000513: 28 90
  [W98 4.10.1691] All passwords are legal and *.PWL's are not encrypted.
  MSPWL32.DLL
  00001241: 30 90
  00001242: 0C 90
  00001243: 28 90
  -[MSPWL32.crk]--------------------------------------------------------
Заменяемые байты есть команда наложения гаммы на файл (XOR кого-то с кем-то), об этом мы поговорим подробнее чуть ниже. При обработке файлов используются алгоритмы RC4 (RFC-.... ну нет у меня интернета) и MD5 (RFC-1321). На настоящий момент уже появился алгоритм RC5 (можно ожидать его применения в дальнейшем). Алгоритм RC4 является алгоритмом потокового шифрования и считается вполне устойчивым, MD5 - алгоритм создания дайджестов (сверток) сообщений, достаточно быстр в реализации, разработчик R.Rivest. Про MD5 мы поговорим особо в дальнейшем. Итак, подошло время технической информации.

 

Часто задаваемые вопросы и ответы по парольной защите документов Microsoft Office (FAQ), часть 1.
   ВВЕДЕНИЕ
   Не секрет, что программный пакет Microsoft Office является самым популярным и наиболее используемым для подготовки документов. При работе с приложениями MS Office возникает проблема обеспечения конфиденциальности информации, хранящейся в документах. К сожалению не все способы защиты, реализованные в этом пакете, позволяют надежно защитить информацию. Цель данной статьи, написанной в стиле "вопросов и ответов", довести до пользователя информацию о криптостойкости защиты от Microsoft, которая не публикуется в открытых источниках.
  
   1. Защита документов Microsoft Word
  
Q: Насколько надежно использование пароля защиты документа от записи ?
A: Этот способ защиты является самым слабым. Пароль защиты записи хранится в документе в чистом виде. Можно даже поискать его любым hex-редактором. Хранится он в unicode. Пароль даже не удосужились захешировать. Снять эту "защиту" можно изменением одного бита в документе.
 
Q: А что можно сказать о пароле "защиты документа от изменений" ?
A: Его криптостойкость не намного отличается от предыдущего пароля. Отличие только в том, что этот пароль хешируется. Длина хеша - 32 бита. Можно либо заменить хеш на заранее известный, либо вычислить первый подходящий пароль. Понятно что для такой длины хеша подходящих паролей может быть несколько.
 
Q: Насколько стойким является пароль на документ ?
A: Из всех существующих способов защиты документов Word этот является самым стойким. При установке этого пароля документ шифруется по симметричному алгоритму RC4. В документе хранится зашифрованный хеш пароля, используемый при проверке. Единственный способ нахождения пароля - перебор. Однако экспортные ограничения на криптоалгоритмы значительно снижают криптостойкость этой защиты. Ключ, используемый при шифровании RC4, имеет длину 40 бит. Если перебирать не пароли, а ключи, искомый ключ можно найти за 30 дней на P-II 350. В документах Office 95 используется более простой способ шифрования, который позволяет найти пароль любой длины почти мгновенно.

 

Часто задаваемые вопросы и ответы по парольной защите документов Microsoft Office (FAQ), часть 2.
   2. Защита документов MS Excel
   В MS Excel используются те же технологии защиты, что и в MS Word. Отличие составляют только пароли на книги/листы.  
  
Q: Я поставил пароль на лист. Насколько надежна эта защита ?
A: Хеши паролей хранятся в документе. Самое парадоксальное, что длина хеша всего 16 бит. Следовательно для каждого хеша существует множество подходящих паролей. Например попробуйте защитить лист паролем "test" и попытаться его открыть при помощи пароля "zzyw". Вы будете приятно удивлены :)
  
Q: А что можно сказать про пароль защиты книги ?
A: Примерно то же самое, что про пароль защиты листа. Используется хеш той же длины. Отличие состоит в том, что документ шифруется.
  
Q: Что еще интересного есть в парольной защите MS Excel ?
A: Ради интереса попробуйте защитить документ паролем "VelvetSweatshop". А потом открыть. Вашему удивлению не будет предела :)
  
   3. Несколько слов о VBA-макросах
  
Q: Я написал макрос и защитил его паролем. Насколько это надежно ?
A: Если это документ Word/Excel 97, пароль можно просто расшифровать. Алгоритмы хеширования "от Microsoft" очень простые и нестойкие. В документах Word/Excel 2000 решили отказаться от самодеятельности и используют для хеширования алгоритм SHA. Но шифрования макросов не производится, и пароль снимается простой заменой хеша.
 
Q: При открытии XLA-файла я получаю сообщение "Project is unviewable". Как посмотреть проект ?
A: Надо снять флаг "Add-in". Подробнее - в описании формата MS Excel. Начиная с версии 1.2, это позволяет сделать Advanced VBA Password Recovery.
 
   4. Пароли MS Access
 
Q: Я поставил пароль на базу. Могу я быть уверен, что теперь ей никто не воспользуется ?
A: Вряд-ли. Пароли хранятся в заголовке файла. Заголовок зашифрован по RC4, но ключ шифрования имеет длину 32 бита и хранится в одной из системных DLL. Зная этот ключ, можно найти любой пароль на базу MS Access.
 
Q: При попытке открыть базу Access я получаю предложение ввести логин и пароль. Что это за защита и насколько она стойкая ?
A: Это защита документа на уровне пользователей/групп. Информация о пользователях хранится в файле system.mdw. Пароли зашифрованы по алгоритму DES, но ключ шифрования хранится в системной DLL. Таким образом возможно нахождения пароля любого пользователя, в том числе и администратора.
  

 

Часто задаваемые вопросы и ответы по парольной защите документов Microsoft Office (FAQ), часть 3.
  
   5. Пароли MS Outlook
  
Q: Насколько надежна защита личной папки Outlook ?
A: Хеш пароля хранится в документе. Документ не шифруется. Длина хеша 32 бита. Вычислить первый подходящий пароль очень легко.
  
   6. Программное обеспечение
  
Q: Я полный чайник в программировании. Слова "хеш" и "криптография" для меня пустой звук. Как мне найти потерянный пароль к моему документу ?
A: Естественно для этих целей выпущено программное обеспечение. Вот небольшой список программ из серии "Password Recovery Software":
  
Advanced Office 97 Password Recovery - http://www.passwords.ru/ao97pr.html
Позволяет находить все пароли Word 97/2000, Excel 97/2000, Access 97/2000 (кроме паролей пользователей/групп).
  
Advanced Office 95 Password Recovery - http://www.elcomsoft.com/ao95pr.html
Пароли документов Office 95 (Word, Excel и Access). Также позволяет находить пароли к старым версиям Word и Excel.
 
Advanced VBA Password Recovery - http://www.passwords.ru/avpr.html
Пароли на VBA-макросы Word/Excel 97. Для макросов Office 2000 и снятия защиты с XLA-файлов есть коммерческая версия программы.
 
Advanced Outlook Password Recovery - http://www.elcomsoft.com/aolpr.html
Пароли MS Outlook.