|
Описание механизма функционирования парольных кешей в Windows 95/98 (PWL-файлы). Часть 1. |
|
(c) 1998-2000, Владимир Калашников (AKA Hard Wisdom), статья публикуется на сервере PASSWORDS.RU с разрешения автора. |
|
|
| 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 мы поговорим особо в дальнейшем. Итак, подошло время технической информации. |
|