Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИБ.docx
Скачиваний:
20
Добавлен:
15.09.2019
Размер:
79.31 Кб
Скачать

Понятие хэш-функции пароля

Взлом пароля

LM- и NT-хэши

Количество возможных паролей

Месторасположение SAM-файла

Практические примеры

Сброс пароля Windows

Подбор пароля

Рекомендации по защите паролей

Сначала мы хотели назвать данную статью иначе, например «Взлом паролей Windows» или что-то этом роде, поскольку такое название как нельзя лучше отражает ее суть. Однако слово «взлом» уж больно отдает чем-то криминальным, чем-то, за что в приличном обществе бьют по рукам (и не только по рукам), а в цивилизованных странах могут и в тюрьму посадить. А вот восстановление или обнуление забытого пароля — это уже сродни гуманитарной помощи, что может только приветствоваться. Правда, суть от этого не меняется. Взлом — он и в Африке взлом, как его ни называй. Процедура восстановления или обнуления забытого пароля и самый что ни на есть криминальный взлом системы отличаются разве что нравственными аспектами, но никак не последовательностью выполняемых действий.

Мы не будем вдаваться в подробности, зачем пользователю может понадобиться узнать пароль или обнулить его для получения доступа к системе. Оставляя за рамками повествования нравственную сторону вопроса, расскажем о том, каким образом можно обнулить или восстановить свой локальный пароль доступа к ПК, а также узнать сетевые пароли пользователей домена, если речь идет о локальной сети. Мы не станем изобретать велосипед и, поскольку тема эта отнюдь не нова, опишем лишь некоторые утилиты, с помощью которых можно легко обойти систему безопасности компьютера.

Для того чтобы понять, как взламываются пароли, читателям придется сначала усвоить, каким образом происходит аутентификация пользователей, где и в каком виде хранятся их пароли и как их можно узнать. В дальнейшем мы будем основываться на операционной системе Windows XP, хотя вскрытие паролей таких операционных систем, как Windows 2000/2003, от рассмотренного случая ничем не отличается, а в Windows 95/98/Mе те же действия выполнить еще проще.

Теоретические основы

Понятие хэш-функции пароля

Процесс локальной или сетевой аутентификации пользователя довольно прост: пользователь вводит пароль, соответствующий его учетной записи, и если пароль верен, то пользователь получает доступ в систему. Проверка пароля реализуется средствами операционной системы путем его сравнивания с паролем, хранящимся в компьютере. При этом разница между локальной и сетевой аутентификацией заключается лишь в том, что при локальной аутентифкации база учетных записей пользователей с их паролями хранится на самом компьютере, а при сетевой аутентификации — на специальном сервере, называемом контроллером домена.

Казалось бы, что может быть проще? Ведь нужно только знать, где именно хранится учетная база пользователей с их паролями, и подсмотреть нужную информацию. Но это слишком просто, чтобы оказаться правдой. Конечно же, все пароли сохраняются в зашифрованном виде. Зашифрованный пароль именуется хэшем (hash) или хэш-функцией пароля. Причем в данном случае речь идет о довольно хитром методе шифрования, особенность которого заключается в том, что зашифрованный таким образом пароль… принципиально невозможно расшифровать! Дело в том, что алгоритм шифрования (хэширования) является односторонним. Фактически любой алгоритм хэширования представляет собой подсчет контрольной суммы от исходного текста, при котором используются необратимые логические операции над исходным сообщением, такие как AND, OR и др.

Таким образом, по паролю можно вычислить его хэш-функцию, но, зная хэш-функцию, принципиально невозможно вычислить пароль, которому она соответствует. Сама хэш-функция представляет собой числовую последовательность длиной 16 байт.

Для справки: существует огромное количество различных алгоритмов вычисления хэш-функций, и соответственно хэш-функции могут быть разных типов. В дальнейшем мы будем говорить только о хэш-функциях паролей, создаваемых операционной системой Windows при локальной или сетевой аутентификации пользователей (LM- или NT-хэш).

Естественно, возникает вопрос: если знание хэш-функции не позволяет выяснить пароль пользователя, то как же в таком случае происходит процесс аутентификации? Дело в том, что при аутентификации сравниваются не сами пароли, а их хэш-функции. В процессе аутентификации пользователь вводит пароль в привычном для него виде, а операционная система рассчитывает его хэш-функцию и сравнивает с хэшем, хранящимся в компьютере. В случае их совпадения аутентификация считается успешной.

Взлом пароля

Процесс взлома, или подбора, пароля банален и представляет собой обычный перебор возможных паролей. Для этого нужно знать хэш-функцию пароля, хранимую в компьютере, и уметь вычислять хэш по паролю. Тогда, перебирая различные варианты паролей и сравнивая расчетные хэши с тем, что хранится в компьютере, можно подобрать правильный пароль.

Казалось бы, такой перебор никогда не закончится — вариантов паролей существует бесконечное множество. Однако не стоит торопиться с выводами. Во-первых, количество возможных паролей все-таки конечно, а во-вторых, современные компьютеры позволяют перебирать миллионы паролей в секунду. Кроме того, имеются различные методы атак на пароли (об этом речь пойдет далее), которые в большинстве случаев приводят к положительному результату в считаные минуты. Прежде чем от теории перейти к практике, рассмотрим смысл понятия «хэш» и выясним, сколько вариантов паролей реально существует.

LM- и NT-хэши

В операционных системах Windows NT/2000/2003/XP существует два типа хэш-функций паролей: LM-хэш (LanMan-хэш) и NT-хэш. Хэш LM достался нам в наследство от сетей Lan Manager и используется в операционных системах Windows 9x. Поэтому, несмотря на то, что все современные операционные системы поддерживают новый тип хэширования (NT-хэш), чтобы обеспечить совместимость с клиентами Windows 9x, операционная система вынуждена хранить вместе с новым NT-хэшем и старый LM-хэш.

При применении LM-хэширования длина пароля ограничена 14 символами. Самым большим недостатком алгоритма получения LM-хэша является разделение пароля на две части, каждая из которых состоит из семи символов. Если вводимый пользователем пароль менее 14 символов, то при преобразовании к нему добавляются нулевые символы, то есть символы с кодом 0, чтобы получить строку, состоящую из 14 символов. Если же пароль пользователя превышает 14 символов, то LM-хэш соответствует пустому паролю. Каждая из 7-символьных половин пароля шифруется независимо от другой по алгоритму DES (бывший федеральный стандарт США), причем поскольку процесс шифрования каждой из 7-символьных половин пароля независим, то и подбор этих половин можно производить независимо, что значительно упрощает и ускоряет процесс вскрытия пароля. Другой серьезный недостаток LM-хэша связан с тем, что в процессе шифрования все буквенные символы пароля переводятся в верхний регистр. А поскольку LM-хэш содержит информацию о пароле без учета регистра, то LM-хэши для паролей ALLADIN, alladin, Alladin и aLLadin будут совершенно одинаковыми. Это существенно ограничивает количество возможных комбинаций пароля и, как следствие, ускоряет процесс вскрытия.

NT-хэш лишен недостатков, присущих LM-хэшу. Во-первых, при NT-хэшировании используется алгоритм шифрования MD4, при котором пароль не разбивается на две 7-символьные части. Во-вторых, при NT-хэшировании нет ограничения по длине пароля в 14 символов. В-третьих, NT-хэш является регистрозависимым, то есть NT-хэши для паролей ALLADIN и alladin будут совершенно разными.

Как мы уже отмечали, размер хэш-функций (и LM, и NT) независимо от длины вводимого пароля составляет 16 байт. Если длина пароля менее 14 символов, то для каждого пароля имеются и LM-, и NT-хэши. Если же длина пароля превышает 14-символов, то существует только NT-хэш.

Подобрать правильный пароль к известному NT-хэшу значительно сложнее, чем к LM-хэшу. Если известны и LM-, и NT-хэши, то сначала осуществляется подбор пароля по LM-хэшу, а после нахождения LM-пароля (все буквы верхнего регистра) используется NT-хэш для определения NT-пароля с учетом регистра. Правда, в данном случае есть одна тонкость: для пароля не всегда существует LM-хэш, для которого нужно, чтобы длина пароля была меньше или равной 14 символам. Но даже в случае, если длина пароля меньше 14 символов, LM-хэш можно удалить из базы. О том, как это сделать, мы еще расскажем, а пока приведем практические примеры LM- и NT-хэшей различных паролей.

Рассмотрим для начала 7-символьный пароль alladin, которому соответствует 16-байтный LM-хэш a01fad819c6d001aaad3b435b51404ee, записанный в шестнадцатеричной системе счисления. Далее рассмотрим 14-символьный пароль alladinalladin, для которого LM-хэш будет таким: a01fad819c6d001aa01fad819c6d001a. Обратите внимание, что первая половина (8 байт: a01fad819c6d001a) этого хэша полностью совпадает со второй. Кроме того, первая половина данного хэша совпадает с первой половиной LM-хэша пароля alladin. Такое совпадение отнюдь не случайно, если вспомнить, что каждые семь символов пароля кодируются независимо и определяют 8 байт итогового LM-хэша.

Интересно также отметить, что вторая половина LM-хэша пароля (aad3b435b51404ee) должна соответствовать символам с кодом 0, поскольку в том случае, если пароль меньше 14 символов, к нему добавляются пустые символы. То есть ad3b435b51404ee — это шифрование семи пустых символов. Поэтому можно предположить, что для любого другого 7-символьного пароля вторая половина LM-хэша окажется точно такой же. Действительно, для пароля tornado хэш LM равен 1e1e25e2f871d8dfaad3b435b51404ee, и, как нетрудно заметить, вторая половина этого хэша точно такая же, как и для пароля alladin. Для пароля ALLADIN значение LM-хэша точно такое же, как и для пароля alladin. Учитывая, что при LM-кодировании все буквы переводятся в верхний регистр, слово ALLADIN называют LM-паролем.

Если же рассмотреть NT-хэши для различных вариантов паролей (alladin, alladinalladin, tornado), то никакой закономерности не обнаружится (табл. 1). Кроме того, как уже отмечалось, NT-хэш является регистрозависимым, а сам NT-пароль соответствует истинному паролю.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]