Архивы: по дате | по разделам | по авторам

Hacker-friendly-авторизация

Архив
автор : Андрей Васильков   09.04.2004

Рано или поздно рядовому пользователю приходится заниматься взломом. Причины различны: от банального склероза (забыл пароль) до желания нормально работать в какой-нибудь локальной сети, не ограничиваясь правами гостя. На большинстве компьютеров сейчас установлена та или иная версия Windows N, что делает задачу довольно легкой.

Рано или поздно рядовому пользователю приходится заниматься взломом. Причины различны — от банального склероза (забыл пароль) до желания нормально работать в какой-нибудь локальной сети, не ограничиваясь правами гостя. На большинстве компьютеров сейчас установлена та или иная версия Windows NT (4.0/5.0/5.1), что делает задачу довольно легко разрешимой. Рассмотрим способы взлома этих операционных систем при условии наличия физического доступа к атакуемому компьютеру.

Мы можем оказаться в одной из двух ситуаций:

- Нужно узнать пароль в системе.
- Нужно получить доступ в систему (желательно с администраторскими привилегиями, чтобы ни в чем себе не отказывать).

Казалось бы, зачем узнавать пароль, если существуют способы авторизоваться и без него? Во-первых, зная пароль, не придется заметать следы взлома. Вы просто входите от имени другого пользователя (или администратора) и работаете из-под его учетной записи. Во-вторых, не имея оригинального пароля (сбросив его, заменив своим или пустым), вы не сможете получить доступ к файлам, которые пользователь зашифровал посредством EFS1. То же самое касается личных ключей из сертификатов2.

Восстановление пароля


Начнем с первой задачи (восстановление пароля).
В семействе операционных систем Windows NT для аутентификации используется не сам вводимый пароль, а его хэш3. Для входа в систему может использоваться любой из двух типов хэшей, обозначаемых LM (от LanMan) и NT. Учетные записи пользователей и их хэши хранятся в файле, расположенном по адресу4 %Системная_директория%\SYSTEM32\CONFIG\sam (SAM расшифровывается как Security Account Manager).
Файл заблокирован, пока загружена Windows NT/2000/XP. Его чтение/запись невозможны даже при наличии прав администратора. Чтобы обойти это препятствие, придется загрузиться в другой ОС (MS-DOS с дискеты, к примеру) и скопировать SAM из-под нее. В случае файловой системы NTFS придется к тому же воспользоваться программой, поддерживающей режим чтения NTFS. Например, ERD Commander, CIA Commander, NTFSDOS и т. д.

Заполучив файл SAM, можно приступать к отысканию паролей доступа. Однако невозможно провести обратную процедуру и вычислить исходный пароль на основании его хэша, поскольку хэширование — однонаправленное преобразование. Для решения этой задачи используется метод подбора пароля различными способами. Суть его в том, что каждый пароль, который может быть использован в системе, хэшируется по алгоритму LM или NT, после чего сравниваются два хэша: проверяемого пароля и хранящегося в файле SAM. Если они совпадают, то считается, что пароль найден. Если нет, перебор продолжается.

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

LM- и NT-хэши имеют фиксированную длину в 16 байт независимо от длины вводимого пароля и его структуры. Windows NT версии 5.0 (2000) и старше разрешают использовать в качестве парольного символа любой из 256 кодов ASCII, а длина пароля ограничивается 127 символами. Перед хэшированием по алгоритму LM все буквенные символы в пароле приводятся к верхнему регистру. Таким образом, 26 символов строчных букв латинского алфавита и 33 русского надо исключить из 256 вариантов ASCII-символов. Отсюда следует, что в локализованной версии Windows NT для создания пароля доступны 256 – (26+33) = 197 символов.

При длине пароля более 14 символов (предел для WinNT 4.0) алгоритм подготовки паролей к LM-хэшированию не может быть выполнен корректно. Происходит ошибка, в результате которой LM-хэш всегда принимает значение, соответствующее нулевому паролю. C NT-хэшем таких проблем нет. Из-за этой ошибки подбор пароля длиной более 14 символов путем сравнения LM-хэшей невозможен в принципе. Придется считать и сравнивать NT-хэши, что займет гораздо больше времени. В то же время, если длина пароля превышает 14 символов, это можно определить сразу — лишь взглянув на LM-хэш.

При хэшировании пароля по алгоритму NT различаются регистры букв — следовательно, любой из 256 кодов ASCII не просто допустим, а обрабатывается уникально и потому имеет реальный вес. Непосредственным перебором пароль длиной более 14 символов в Windows NT 5.0/5.1 пришлось бы искать среди примерно 7,05х10305 вариантов5.

В тоже время число возможных NT-хэшей гораздо меньше — 2128=25616 »3,4х1038 вариантов. Иными словами, смысла делать пароль длиннее 16 символов нет. Все равно хэш получится шестнадцатибайтным с теми же 256 вариантами допустимых значений для каждого байта. При длине пароля от 17 до 127 символов его хэш будет совпадать с одним из хэшей другого пароля, длиной до 16 символов включительно.

Внушительное количество возможных комбинаций (3,4х1038) являлось бы реальной характеристикой стойкости пароля только в том случае, если каждый бит хэша равновероятно может быть как единицей, так и нулём. На самом деле это не так. Хэш формируется на основе пароля, а в качестве символов последнего обычно используют буквы, реже цифры, еще реже — специальные символы. Поэтому вероятность одних паролей (и следовательно хэшей) гораздо выше, чем других. До сих пор избирательная атака по словарю и её комбинированный вариант позволяют вскрыть большую часть паролей сколь угодно криптографических стойких систем. Нет особой разницы между практической надежностью 64- и 1024-битного ключа, если ваш пароль key или 123. Такой пароль вскроют прежде, чем вы дочитаете это предложение до конца.

Атака по словарю представляет собой перебор в качестве паролей слов из предварительно составленного списка. Комбинированный вариант использует не только слова из списка, но и их вариации. Например, пароли, набранные транслитом, без согласных, с замененной раскладкой, дважды подряд, в обратном порядке и т.д.

Пароли до 14 символов включительно вскрываются сравнением LM-хэшей. Тут все несколько проще: длина хэша также всегда равна шестнадцати байтам (либо дополняется до двадцати одного байта при сетевой аутентификации), а каждый символ пароля может принимать одно из 197 значений. Однако для нахождения пароля вовсе не обязательно перебирать весь диапазон вариантов (5,15х1036). Дело в том, что в результате подготовки пароля к хэшированию по алгоритму LM он претерпевает ряд изменений6:

- В зависимости от длины введенный пароль усекается либо дополняется нулями так, чтобы из него получилась строка в 14 байт.
- Все буквы приводятся к верхнему регистру.
(Пропускаем ряд операций, связанных с шифрованием по алгоритму DES.)
- На выходе формируется шестнадцатибайтный хэш.
Затем, если речь идет о сетевой аутентификации (LM challenge/response):
- К хэшу дописываются пять нулей (получается строка в 21 байт), и он делится на три части по 7 байт.
- Каждая часть шифруется независимо по алгоритму DES.

Если пароль был короче восьми символов, то байты от 15-го до 21-го включительно (третья часть 21-байтного хэша) всегда равны 0х04ЕЕ0000000000. Таким образом, можно сразу определить, что пароль короче восьми символов.


1 Encrypting File System — возможность файловой системы NTFS хранить данные в зашифрованном виде.
2 См. www.support.microsoft.com/?kbid=290260.
3 Хэшем (hash) называют числовое значение фиксированной длины, полученное в результате обработки данных (одного символа, одного слова, строки или файла) по какому-либо hash-алгоритму. Например, MD5, SHA-512. Понятие «контрольной суммы» (CRC-16, CRC-32) близко к понятию хэша, но не эквивалентно ему. Хэши обладают рядом уникальных свойств. Так, зная хэш, невозможно судить о структуре и даже размере первоначальных данных. Функция хэширования является однонаправленной. При изменении хотя бы одного бита данных их хэши будут абсолютно разными.
4 Также пароли хранятся в резервной копии файла SAM (каталог %Системная_директория%\repair и диски аварийного восстановления) с именем sam._ (архив CAB).
5 Обозначим буквой W количество допустимых для использования символов, а буквой q — длину пароля. При этом учтем, что длина пароля лежит в диапазоне от 15 до 127 включительно, то есть может принимать любое из 113 значений. Тогда получим, что общее количество возможных паролей F рассчитывается по формуле: F = (Wq)+(Wq–1)+(Wq–2)+(…)+(Wq–113). Подставляем значения: F = (256127)+(256126)+(256125)+(…)+(25614) » 7,05х10305.
6 Крис Касперски, «Техника сетевых атак».

Истина где-то рядом…

По поводу точного минимально достаточного для перебора количества паролей, с учетом всех вышесказанных особенностей хэширования по LM, единого мнения нет7. Например, Крис Касперски в декабре 2000 года писал, что у него получились следующие результаты для LM challenge/response (расчеты можно найти в его статье): F = 680+681+682+683+684+685+686+687 = 6 823 331 935 125 » 7х1012 комбинаций. Однако его данные верны только в том случае, если в качестве парольных символов могут быть использованы лишь цифры от 0 до 9, 26 заглавных букв латинского алфавита и 32 спецсимвола (итого 68 знаков). Так было в WinNT 4.0, но в WinNT 5.0 появилась возможность брать в качестве парольного любой из 256 ASCII-кодов. Как я уже писал, из-за нечувствительности LM-хэша к регистру используются лишь 197 символов. Таким образом, в WinNT 5.0 (и более старших версиях) количество парольных комбинаций, необходимых для перебора, рассчитывается так: F = 1970+1971+1972+1973+1974+1975+1976+1977 = 11 573 740 428 311 158 » 1,16х1016.

Бесполезный импорт

Для усиления надежности Microsoft добавила в WinNT (начиная с NT 4.0 SP4) утилиту SYSKEY. Ее использование приводит к тому, что генерируется еще один хэш (ключ), который шифрует данные учетных записей пользователей и может храниться отдельно. В Windows NT 5.0 и старше SYSKEY активизирована по умолчанию, поэтому восстановление учетных записей из скопированного файла SAM невозможно. Точнее, почти невозможно.

Способ преодоления этого барьера впервые предложил Тодд Сабин (Todd A. Sabin). Вместо того, чтобы вытаскивать хэши напрямую из реестра, их можно взять сразу из памяти, где они находятся уже в расшифрованном виде. Способ был назван pwdump2, реализован в одноименной программе и в дальнейшем лег в основу других программ (pwdump3, LC+4).

Однако использование этих методов требует прав на отладку программ. Как быть, если их нет? Можно воспользоваться утилитой PWSEX от Elcomsoft. При наличии файлов SAM и SYSTEM (располагается в том же каталоге) она способна восстановить пароли даже при активной SYSKEY.
Вспомним одно из концептуальных отличий операционной системы Windows от Unix-подобных. Если в *nix-системах привилегии распределялись следующим образом: пользователи разных уровней > система > администратор, то в Windows иерархия иная — система обладает наивысшими правами. Этим и воспользуемся. Пусть система сама себя взломает.

По адресу %Системная_директория%\system32\ находится файл logon.scr. Это хранитель экрана, запускаемый при отсутствии авторизации в течение пятнадцати (Windows NT 4.0/2000) или десяти минут (Windows XP)8. Заменим его на выполняемый файл (cmd.exe, как вариант), загрузившись из-под другой ОС. Затем перезагрузимся в Windows NT/2K/XP, бросим лукавый взгляд на экран приветствия и пойдем пить чай. Когда бублики закончатся, у нас будут права системы.

Need For Speed

Сколько же времени понадобится, чтобы найти пароль из файла SAM?
Мой скромный ПК на базе процессора AMD Athlon XP с частотой 2,0 ГГц при помощи программы9 LC+4 подбирает пароли по LM-хэшам методом brute-force с использованием всех 197 символов ASCII со средней скоростью » 1,25х109 паролей в секунду. Следует отметить, что программа плохо оптимизирована. Отечественная утилита аналогичного назначения от компании Elcomsoft под названием Proactive Windows Security Explorer (или PWSEX для краткости) дает на процессорах Intel Pentium 4 примерно в тысячу раз большую скорость при работе с NT-хэшами.

От многопроцессорных конфигураций можно ожидать ускорения процедуры в разы, а от распределенных вычислительных сетей — на порядок-другой. Удобства ради примем скорость перебора равной 1010 паролей в секунду. Тогда на перебор всех паролей множества F нам потребуется 1,16х106 секунд, или тринадцать с половиной суток. Поскольку пароль может быть равновероятно найден как в первой, так и во второй части множества F, то, введя математическое ожидание 50%, логично предположить, что пароль длиной менее 14 символов может быть найден в результате аудита LM-хэша за срок вдвое меньший — примерно за неделю.

Но стоит помнить, что ограничить множество паролей (за счет отсекания паролей длиннее восьми символов) мы можем только в том случае, когда речь идет о сетевой аутентификации с 32-байтным хэшем. Если же для сетевой аутентификации используются протоколы NTLM, NTLMv2 или Kerberos, то определить, что пароль короче восьми символов, уже невозможно. Для локальной аутентификации это тоже неактуально.

Идем напролом

Если вам просто надо войти в систему с правами администратора (не заботясь о сохранности данных на EFS и личных ключах), то пароль знать вовсе не обязательно.

Способ первый, ласковый. Обычно администратор (или кто-то из пользователей) создает штатными средствами операционной системы дискету сброса пароля. Отыскиваете таковую, вставляете в дисковод и пытаетесь авторизоваться. После сообщения о неправильном пароле появится диалоговое окно «Забыли пароль?», в котором вам предложат его сбросить. Соглашайтесь!

Способ второй, грубый. Пошутили и хватит. Предыдущий абзац имеет мало общего с жизненными реалиями. Вряд ли дискета сброса паролей будет открыто лежать на столе… хотя всякое бывает. Чтобы не надеяться на случай, лучше подстраховаться и запастись утилитами заранее. Например, такой, как бесплатная Offline NT Password & Registry Editor10. Она запускается с загрузочной дискеты с ОС Linux, позволяет менять пароль любому пользователю и записывать измененный файл SAM обратно на винчестер. Есть и другие подобные программы, но большая часть из них стоит немалых денег.

Еще один вариант основан на замене динамической библиотеки MSV1_0.DLL (с помощью которой осуществляется процедура проверки пароля) ее модифицированным (пропатченным) вариантом. Для разных версий WinNT давно созданы готовые патчи, которые вы без труда найдете в Сети, равно как и «готовые к употреблению» библиотеки. Здесь я их не публикую, дабы не утомлять читателя строками HEX-кодов и ассемблерным языком. После замены (все тем же способом) оригинальной MSV1_0.DLL на пропатченную вход в систему будет возможен под любым пользователем (вплоть до администратора) и паролем. SYSKEY здесь уже не играет никакой роли.

Если ОС Windows 9х/Me позиционировались как «user-friendly» (дружественные к пользователю), то серия NT именовалась «administrator-friendly» (дружественной к администратору). На самом деле, и те и другие получились «hacker-friendly».

Для тех, кто поспешит обвинить меня в пропаганде хакерства, я приготовил очередную отговорку: все упомянутые способы и утилиты могут быть использованы для законных целей. Например, к LC+4 и PWSEX прибегают администраторы локальных сетей для аудита паролей пользователей. Таким образом выявляются уязвимые (короткие или словарные) пароли, которые вовремя заменяются более стойкими. Кроме того, описание различных методов атак позволяет знать на детальном уровне о существующих угрозах и принимать соответствующие меры по их предотвращению.

Редакция и автор выражают благодарность исполнительному директору компании Elcomsoft (www.elcomsoft.ru ) Владимиру Каталову за помощь в подготовке этой статьи.


7 Если я сам нигде не ошибся в рассуждениях, то, думаю, разногласия существуют потому, что Крис Касперски считал количество вариантов для WinNT 4.0 с ее ограничениями на допустимые в пароле символы; другие же просто копировали его текст при объяснении расчетов для WinNT более поздних версий (5.0 и 5.1 или 2000 и XP соответственно), в которых количество допустимых символов стало неограниченным в пределах 256-значной матрицы ASCII.
8 Время ожидания задается в секундах в ключе реестра: HKEY_USERS\.DEFAULT\Control Panel\Desktop\ScreenSaveTimeOut.
9 LC+4 — бесплатный отечественный клон LC4 от @stake.
10 www.home.eunet.no/~pnordahl/ntpasswd/bootdisk.html.

© ООО "Компьютерра-Онлайн", 1997-2022
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.