Мир программирования

 


Найти: на:


Меню
Партнеры
Счетчики
Реклама

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


Следующая страница


Рано или поздно рядовому пользователю приходится заниматься взломом. Причины различны — от банального склероза (забыл пароль) до желания нормально работать в какой-нибудь локальной сети, не ограничиваясь правами гостя. На большинстве компьютеров сейчас установлена та или иная версия 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 Крис Касперски, «Техника сетевых атак».


Следующая страница

Опрос

Конкурсы
Реклама

 

Web дизайн: Бурлаков Михаил    

Web программирование: Бурлаков Михаил

Используются технологии uCoz